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

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

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

Понимание структуры вызова WS-прокси

Для начала проанализируем, как происходит подключение. Когда вы создаете WSПрокси, платформа 1С автоматически считывает WSDL-описание вашего сервиса. Основная ошибка при начале работы заключается в попытках получить доступ к операции через промежуточные методы интерфейса. На самом деле, после создания объекта прокси, все опубликованные операции становятся методами этого объекта.

Рассмотрим, как правильно инициировать вызов. Вместо того чтобы вручную извлекать операцию, обращайтесь к ней напрямую:


// Создаем прокси-объект
Соединение = WSСсылки.ПолучитьДанныеДокументов.СоздатьWSПрокси("ИмяПространства", "ИмяСервисаSoap");
Соединение.Пользователь = "Логин";
Соединение.Пользователь = "Пароль";

// Прямой вызов метода с передачей параметров
// BeginningDate и EndDate — это переменные типа Дата, полученные из формы
Результат = Соединение.SubmitQuery(ТипОбмена, BeginningDate, EndDate);

Передача параметров через Фабрику XDTO

Если параметры веб-сервиса строго типизированы в его настройках (например, как xs:date или xs:dateTime), платформе 1С требуется соответствие типов. Если при простой передаче даты возникают ошибки, используйте ФабрикуXDTO для явного приведения типов. Это обеспечит корректность формирования SOAP-пакета.

Разберем пример создания параметра через фабрику:


// Получаем параметры из описания операции
Операция = Соединение.ТочкаПодключения.Интерфейс.Операции.Получить("SubmitQuery");

// Создаем значение нужного типа через ФабрикуXDTO
ПериодВыгрузки = Соединение.ФабрикаXDTO.Создать(
    Операция.Параметры.Получить("НачалоПериода").Тип, 
    НачалоПериода
);

Особенности передачи сложных данных и Таблиц Значений

Часто возникает потребность передать не просто даты, а целые наборы данных. Хотя в старых примерах часто встречается использование ЗначениеВСтрокуВнутр(), мы настоятельно рекомендуем отказаться от этого подхода. Этот метод не является универсальным и может вызвать ошибки при обновлении платформы.

Лучшими практиками для передачи структур или таблиц являются:

  1. JSON-сериализация: Преобразуйте таблицу значений в массив структур или JSON-строку. Это стандартный и легко читаемый формат.
  2. Сериализатор XDTO: Используйте встроенный СериализаторXDTO для формирования валидного XML, который веб-сервис сможет корректно десериализовать обратно в объект 1С.

Давайте посмотрим на пример безопасной передачи данных через преобразование в строку:


// В базе-приемнике:
ТекстДанных = СериализаторXDTO.ЗаписатьJSON(МояТаблицаЗначений);
Рез = Соединение.SubmitQuery(ТипОбмена, НачалоПериода, КонецПериода, ТекстДанных);

// В базе-источнике (в функции SubmitQuery):
Данные = СериализаторXDTO.ПрочитатьJSON(СтрокаИзПараметра);

Важные советы по отладке

Применяя эти методы, вы сможете настроить стабильное взаимодействие между базами, исключив ошибки типизации и проблемы с передачей сложных структур данных.

← На главную