Как передать параметры периода из базы-приемника в базу-источник через веб-сервис 1С?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При работе с веб-сервисами в 1С часто возникает задача передачи дополнительных условий фильтрации, таких как период отчета или документа. Многие разработчики пытаются усложнить процесс, используя сериализацию пустых структур или создание избыточных «обратных» подключений. Давайте разберем, как реализовать это максимально просто, правильно и эффективно, придерживаясь стандартов платформы.

Понимание архитектуры взаимодействия

Веб-сервис в 1С (технология SOAP) представляет собой контракт. Когда вы публикуете сервис, база-источник «говорит» миру: «У меня есть функция SubmitQuery, которая принимает определенный набор аргументов». Если вы хотите передать дату начала и конца периода, эти аргументы должны быть описаны в составе операции веб-сервиса в конфигураторе.

Шаг 1: Настройка веб-сервиса в базе-источнике

Первым делом нам необходимо расширить возможности нашего сервиса. Откройте дерево конфигурации в базе-источнике, найдите ваш ВебСервис и перейдите к объекту Операции. Нам нужно изменить сигнатуру функции SubmitQuery.

  1. Откройте окно свойств операции SubmitQuery.
  2. Перейдите на вкладку Параметры.
  3. Добавьте два новых параметра: НачалоПериода и КонецПериода.
  4. Установите для них тип данных xs:dateTime (или xs:date).
  5. Сохраните изменения и переопубликуйте веб-сервис на сервере (IIS или Apache).

Шаг 2: Модификация кода функции в базе-источнике

Теперь, когда параметры определены на уровне интерфейса сервиса, нам нужно научить функцию SubmitQuery их использовать. Мы больше не полагаемся на сложную десериализацию для получения дат — платформа сама передаст их в функцию.

Изменим код функции следующим образом:


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

Шаг 3: Обновление вызова в базе-приемнике

После того как вы изменили веб-сервис в источнике, его необходимо «увидеть» из базы-приемника. Для этого выполните обновление WS-ссылки:

  1. В базе-приемнике откройте объект WS-ссылки, который связывает вас с источником.
  2. Нажмите правой кнопкой мыши и выберите пункт Обновить. Платформа перечитает WSDL-описание и обновит параметры метода.
  3. Теперь при вызове метода через WS-прокси вы сможете передавать значения дат напрямую.

Пример вызова метода в обработчике:


// Предположим, на форме есть реквизиты ПериодНачало и ПериодКонец
Ответ = Соединение.SubmitQuery(Объект.ПериодНачало, Объект.ПериодКонец);
РезультатДанных = Десериализовать(Ответ);

Почему это лучший способ?

Рассмотрим преимущества такого подхода:

Старайтесь избегать избыточных действий, таких как передача пустых таблиц значений или использование ХранилищеЗначения внутри SOAP-вызовов — это лишь создает дополнительную нагрузку на сериализатор и усложняет отладку. Работа с параметрами через стандартные аргументы функции — самый надежный путь в разработке интеграционных решений на платформе 1С.

← На главную