Веб сервис передача начала и конца периода

1. user1619761 28.09.21 11:45 Сейчас в теме
Добрый день, коллеги. Есть база с запросом, опубликованная на сервер. В другой базе есть обработчик, который получает данные из первой базы. Подскажите, пожалуйста, как установить параметры начало периода и конец периода в первой базе, чтобы при выборе даты в обработчике им присваивались значения из обработчика.

Код из первой базы :

Функция SubmitQuery(TypeOfExchange)
	
	Структура = Десериализовать(TypeOfExchange);
	ТаблицаЗначений = Новый Структура;
	Запрос = Новый Запрос;
	Запрос.УстановитьПараметр("НачалоПериода", НачалоПериода);
	Запрос.УстановитьПараметр("КонецПериода", КонецПериода);
	Запрос.Текст = 
	   "ВЫБРАТЬ
	   |	РеализацияТоваровУслуг.Номенклатура.Код КАК Код,
	   |	РеализацияТоваровУслуг.Количество КАК Количество,
	   |	РеализацияТоваровУслуг.Цена КАК Цена
	   |ИЗ
	   |	Документ.РеализацияТоваровУслуг.Товары КАК Товары
	   |		ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
	   |		ПО РеализацияТоваровУслугТовары.Ссылка = РеализацияТоваровУслуг.Ссылка
	   |ГДЕ
	   |	РеализацияТоваровУслугТовары.Ссылка.ПометкаУдаления = ЛОЖЬ
	   |	И РеализацияТоваровУслугТовары.Ссылка.Проведен = ИСТИНА
	   |	И РеализацияТоваровУслуг.Дата МЕЖДУ &НачалоПериода И &КонецПериода";
	
	РезультатЗапроса = Запрос.Выполнить().Выгрузить();
	ТаблицаЗначений.Вставить("ТаблицаДанных",РезультатЗапроса);
	
	Возврат Сериализовать(ТаблицаЗначений);

КонецФункции

Функция Десериализовать(XMLСтруктураСериализованногоОбъекта)
	
	ЧтениеXMLДанных = Новый ЧтениеXML;
	ЧтениеXMLДанных.УстановитьСтроку(XMLСтруктураСериализованногоОбъекта);
	ТЗ = СериализаторXDTO.ПрочитатьXML(ЧтениеXMLДанных);
	ЧтениеXMLДанных.Закрыть();
	Возврат ТЗ;
	
КонецФункции

Функция Сериализовать(ОбъектСериализации)
	
	ДеревоВОбъектеXDTO = СериализаторXDTO.ЗаписатьXDTO(ОбъектСериализации);
	МойXML = Новый ЗаписьXML;
	МойXML.УстановитьСтроку();
	ФабрикаXDTO.ЗаписатьXML(МойXML, ДеревоВОбъектеXDTO);
	Возврат МойXML.Закрыть();
	
КонецФункции
Показать



Код из обработчика:

&НаКлиенте
Процедура ПолучитьДанные(Команда)

	
	ПолучитьДанныеНаСервере();

КонецПроцедуры

&НаСервере
Процедура ПолучитьДанныеНаСервере()
	
	ТЗ = Новый ТаблицаЗначений;
	ТЗ.Колонки.Добавить("Номенклатура", Новый ОписаниеТипов("Строка",,,, Новый КвалификаторыСтроки(150)));
	
	Соединение = WSСсылки.ПолучитьДанныеИзДок.СоздатьWSПрокси("http://localhost/web_base/ws/DocCompare", "WebDocCompare", "WebDocCompareSoap");
	Соединение.Пользователь = "Админ";
	Соединение.Пароль = "11111";
	
	Операция = Соединение.ТочкаПодключения.Интерфейс.Операции.Получить("SubmitQuery");
	
	СтруктураДанных = Новый Структура;
	СтруктураДанных.Вставить("ПолучитьДанные", ТЗ);
	
	Хранилище = Новый ХранилищеЗначения(СтруктураДанных, Новый СжатиеДанных(9));
	Ответ = Соединение.SubmitQuery(Сериализовать(Хранилище));
	Действие = Десериализовать(Ответ);
	
	Табчасть.Очистить();
	СтрТаб = ТабЧасть.Добавить();	

	Если Действие.ТаблицаДанных.Количество() > 0 Тогда
		Для Каждого Строка Из Действие.ТаблицаДанных Цикл  
			
		СтрТаб.Номенклатура = Справочники.Номенклатура.НайтиПоКоду(Строка.Код);	
			
		КонецЦикла;
	КонецЕсли;
	
КонецПроцедуры

Функция Десериализовать(XMLСтруктураСериализованногоОбъекта)
	
	ЧтениеXMLДанных = Новый ЧтениеXML;
	ЧтениеXMLДанных.УстановитьСтроку(XMLСтруктураСериализованногоОбъекта);
	ТЗ = СериализаторXDTO.ПрочитатьXML(ЧтениеXMLДанных);
	ЧтениеXMLДанных.Закрыть();
	Возврат ТЗ;
	
КонецФункции

Функция Сериализовать(ОбъектСериализации)
	
	ДеревоВОбъектеXDTO = СериализаторXDTO.ЗаписатьXDTO(ОбъектСериализации);
	МойXML = Новый ЗаписьXML;
	МойXML.УстановитьСтроку();
	ФабрикаXDTO.ЗаписатьXML(МойXML, ДеревоВОбъектеXDTO);
	Возврат МойXML.Закрыть();
	
КонецФункции
Показать
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. RustamZz 28.09.21 13:03 Сейчас в теме
(1) Добавить в веб-сервис еще два параметра с типом дата и при обращении к нему их указывать. У меня тоже возникли вопросы: зачем ему передавать пустую ТЗ засунутую в структуру еще и сжатую, причем на стороне веб-сервера ее вообще не использовать. И делать Структуру с именем ТаблицаЗначений выше моего понимания. Это что бы злоумышленники ни смогли его использовать?
2. user925427 128 28.09.21 12:55 Сейчас в теме
Их нужно передать в качестве параметров в Вашу функцию SubmitQuery, либо считать из переменных/реквизитов формы/откуда-то ещё в самой функции и установить их значение в качестве параметров запроса в самой функции, перед выполнением запроса:
Запрос.УстановитьПараметр("НачалоПериода", НачалоПериода);
Запрос.УстановитьПараметр("КонецПериода", КонецПериода);
4. RustamZz 28.09.21 13:05 Сейчас в теме
(2) Просто в параметры нельзя добавлять: нужно их в веб-сервисе описать, а уж он сам добавит их в функцию.
5. user925427 128 28.09.21 13:19 Сейчас в теме
(4) Тут задача сформулирована не до конца понятно. Моё решение - про выборку из запроса, потому что нигде не устанавливаются параметры запроса. Соответственно, я и предлагаю их установить безотносительно того, откуда брать их значения. Тем более, что речь идёт о первой базе, т.е. об источнике. Если бы задача стояла передать их в приёмник, то согласен, именно так, добавлением параметров к функции веб-сервиса. А если речь об источнике, то туда передаётся структура, в которую и можно добавить недостающие параметры, получить выборку с учётом их значений и вернуть результат в обработчик.
8. user1619761 28.09.21 13:23 Сейчас в теме
(5) Спасибо! Извиняюсь за непонятное описание задачи, но суть ее такова. В базе приемнике необходимо получить данные с помощью обработчика, в обработчике есть выбор периода (начало и конец), и мне надо реализовать, чтоб дата, которую я выбирал в обработчике базы приемника , отправлялась в базу источника , и уже по этим параметрам происходила выборка данных из запроса. То есть, грубо говоря, в базе приемнике надо получить номенклатуру из документа базы источника за определенный период.
6. user1619761 28.09.21 13:20 Сейчас в теме
(2)
(4)
Спасибо за советы, ребят. Только вот как реализовать передачу этих параметров со стороны базы с обработчиком, я так и не понял. Пока что в голову приходит только идея создания веб сервиса и на второй базе, чтобы во время нажатия на кнопку получения данных шел запрос в первую базу, из первой базы шло обратное подключение ко второй, забирались нужные параметры и присваивались к запросу, далее отработка запроса и возврат данных ( и то,это только в теории, на практике возможно не сработает). Но может существует какой нибудь более простой способ отправки параметров.
7. RustamZz 28.09.21 13:22 Сейчас в теме
(6) Мне кажется у вас каша не только в коде но и в голове. Спрашивать у того кто пользуется веб-сервисом. Разместить на форме период и пусть заполняют, как им нужно.
9. user925427 128 28.09.21 13:27 Сейчас в теме
Теперь понятно. Пробуйте добавить параметры в функцию веб-сервиса. После его публикации их значения можно будет установить при вызове из второй базы, а дальше так, как я предлагал в (2), параметры добавятся к функции веб-сервиса и их значения используйте как параметры запроса.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот