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

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 121 28.09.21 12:55 Сейчас в теме
Их нужно передать в качестве параметров в Вашу функцию SubmitQuery, либо считать из переменных/реквизитов формы/откуда-то ещё в самой функции и установить их значение в качестве параметров запроса в самой функции, перед выполнением запроса:
Запрос.УстановитьПараметр("НачалоПериода", НачалоПериода);
Запрос.УстановитьПараметр("КонецПериода", КонецПериода);
4. RustamZz 28.09.21 13:05 Сейчас в теме
(2) Просто в параметры нельзя добавлять: нужно их в веб-сервисе описать, а уж он сам добавит их в функцию.
5. user925427 121 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 121 28.09.21 13:27 Сейчас в теме
Теперь понятно. Пробуйте добавить параметры в функцию веб-сервиса. После его публикации их значения можно будет установить при вызове из второй базы, а дальше так, как я предлагал в (2), параметры добавятся к функции веб-сервиса и их значения используйте как параметры запроса.
Оставьте свое сообщение
Вакансии
Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)

Программист 1С
Москва
зарплата от 250 000 руб.
Полный день

Программист 1C
Волгоград
зарплата от 200 000 руб.
Полный день

Аналитик
Санкт-Петербург
зарплата от 200 000 руб. до 250 000 руб.
Полный день