Веб сервис передача начала и конца периода
Добрый день, коллеги. Есть база с запросом, опубликованная на сервер. В другой базе есть обработчик, который получает данные из первой базы. Подскажите, пожалуйста, как установить параметры начало периода и конец периода в первой базе, чтобы при выборе даты в обработчике им присваивались значения из обработчика.
Код из первой базы :
Код из обработчика:
Код из первой базы :
Функция 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.Закрыть();
КонецФункции
ПоказатьПо теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) Добавить в веб-сервис еще два параметра с типом дата и при обращении к нему их указывать. У меня тоже возникли вопросы: зачем ему передавать пустую ТЗ засунутую в структуру еще и сжатую, причем на стороне веб-сервера ее вообще не использовать. И делать Структуру с именем ТаблицаЗначений выше моего понимания. Это что бы злоумышленники ни смогли его использовать?
Их нужно передать в качестве параметров в Вашу функцию SubmitQuery, либо считать из переменных/реквизитов формы/откуда-то ещё в самой функции и установить их значение в качестве параметров запроса в самой функции, перед выполнением запроса:
Запрос.УстановитьПараметр("НачалоПериода", НачалоПериода);
Запрос.УстановитьПараметр("КонецПериода", КонецПериода);
(4) Тут задача сформулирована не до конца понятно. Моё решение - про выборку из запроса, потому что нигде не устанавливаются параметры запроса. Соответственно, я и предлагаю их установить безотносительно того, откуда брать их значения. Тем более, что речь идёт о первой базе, т.е. об источнике. Если бы задача стояла передать их в приёмник, то согласен, именно так, добавлением параметров к функции веб-сервиса. А если речь об источнике, то туда передаётся структура, в которую и можно добавить недостающие параметры, получить выборку с учётом их значений и вернуть результат в обработчик.
(5) Спасибо! Извиняюсь за непонятное описание задачи, но суть ее такова. В базе приемнике необходимо получить данные с помощью обработчика, в обработчике есть выбор периода (начало и конец), и мне надо реализовать, чтоб дата, которую я выбирал в обработчике базы приемника , отправлялась в базу источника , и уже по этим параметрам происходила выборка данных из запроса. То есть, грубо говоря, в базе приемнике надо получить номенклатуру из документа базы источника за определенный период.
(2)
(4)
Спасибо за советы, ребят. Только вот как реализовать передачу этих параметров со стороны базы с обработчиком, я так и не понял. Пока что в голову приходит только идея создания веб сервиса и на второй базе, чтобы во время нажатия на кнопку получения данных шел запрос в первую базу, из первой базы шло обратное подключение ко второй, забирались нужные параметры и присваивались к запросу, далее отработка запроса и возврат данных ( и то,это только в теории, на практике возможно не сработает). Но может существует какой нибудь более простой способ отправки параметров.
(4)
Спасибо за советы, ребят. Только вот как реализовать передачу этих параметров со стороны базы с обработчиком, я так и не понял. Пока что в голову приходит только идея создания веб сервиса и на второй базе, чтобы во время нажатия на кнопку получения данных шел запрос в первую базу, из первой базы шло обратное подключение ко второй, забирались нужные параметры и присваивались к запросу, далее отработка запроса и возврат данных ( и то,это только в теории, на практике возможно не сработает). Но может существует какой нибудь более простой способ отправки параметров.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот