При интеграции между двумя базами 1С через веб-сервисы часто возникает задача передачи специфических параметров, таких как даты или сложные структуры данных. Разберем по шагам, как правильно настроить взаимодействие, чтобы значения из формы вашей обработки корректно попадали в вызываемую функцию веб-сервиса.
Для начала проанализируем, как происходит подключение. Когда вы создаете WSПрокси, платформа 1С автоматически считывает WSDL-описание вашего сервиса. Основная ошибка при начале работы заключается в попытках получить доступ к операции через промежуточные методы интерфейса. На самом деле, после создания объекта прокси, все опубликованные операции становятся методами этого объекта.
Рассмотрим, как правильно инициировать вызов. Вместо того чтобы вручную извлекать операцию, обращайтесь к ней напрямую:
// Создаем прокси-объект
Соединение = WSСсылки.ПолучитьДанныеДокументов.СоздатьWSПрокси("ИмяПространства", "ИмяСервисаSoap");
Соединение.Пользователь = "Логин";
Соединение.Пользователь = "Пароль";
// Прямой вызов метода с передачей параметров
// BeginningDate и EndDate — это переменные типа Дата, полученные из формы
Результат = Соединение.SubmitQuery(ТипОбмена, BeginningDate, EndDate);
Если параметры веб-сервиса строго типизированы в его настройках (например, как xs:date или xs:dateTime), платформе 1С требуется соответствие типов. Если при простой передаче даты возникают ошибки, используйте ФабрикуXDTO для явного приведения типов. Это обеспечит корректность формирования SOAP-пакета.
Разберем пример создания параметра через фабрику:
// Получаем параметры из описания операции
Операция = Соединение.ТочкаПодключения.Интерфейс.Операции.Получить("SubmitQuery");
// Создаем значение нужного типа через ФабрикуXDTO
ПериодВыгрузки = Соединение.ФабрикаXDTO.Создать(
Операция.Параметры.Получить("НачалоПериода").Тип,
НачалоПериода
);
Часто возникает потребность передать не просто даты, а целые наборы данных. Хотя в старых примерах часто встречается использование ЗначениеВСтрокуВнутр(), мы настоятельно рекомендуем отказаться от этого подхода. Этот метод не является универсальным и может вызвать ошибки при обновлении платформы.
Лучшими практиками для передачи структур или таблиц являются:
СериализаторXDTO для формирования валидного XML, который веб-сервис сможет корректно десериализовать обратно в объект 1С.Давайте посмотрим на пример безопасной передачи данных через преобразование в строку:
// В базе-приемнике:
ТекстДанных = СериализаторXDTO.ЗаписатьJSON(МояТаблицаЗначений);
Рез = Соединение.SubmitQuery(ТипОбмена, НачалоПериода, КонецПериода, ТекстДанных);
// В базе-источнике (в функции SubmitQuery):
Данные = СериализаторXDTO.ПрочитатьJSON(СтрокаИзПараметра);
dateTime сервер может автоматически добавлять смещение часового пояса. Если вы работаете только с датами, старайтесь передавать их как xs:date или в виде строк формата ГГГГММДД, чтобы избежать случайного перехода на предыдущий или следующий день.WS-ссылку в конфигуратор. Платформа построит дерево метаданных, и при написании кода вы будете видеть список методов и типы аргументов, что исключает опечатки в именах функций.string, а вы передаете date, платформа попытается сделать приведение, но лучше контролировать этот процесс самостоятельно через Формат() или Строка().Применяя эти методы, вы сможете настроить стабильное взаимодействие между базами, исключив ошибки типизации и проблемы с передачей сложных структур данных.