Есть задача: В УПП формируется печ. форма (напр, для док-та РТУ). Надо передать эту печ форму в виде .mxl в документооборот. Задачу реализовала через сом-объект. Все замечательно передается. Теперь надо то же самое сделать через веб-сервис. Для этого создала веб-сервис в упп, который формирует пакет XDTO в виде ИНН(string), договор (string), Имя формы (String) и Данные (base64Binary). В СЭД тоже создан веб-сервис (передаю веб-ссылку в УПП), который должен принять эти двоичные данные. Как? Вообще правильно ли я реализовываю схему? что-то я засомневалась...
Организация онлайн-обмена данными в формате "Конвертации данных" через web-сервисы
Реализация. Серверная сторона.
Сервер – это для нас информационная база, которая принимает и отдает данные. Всё делаем на платформе 1С:Предприятие 8.2 (прикладное решение не важно).
Web-сервис
Добавляем web-сервис. Назовем «ОбменДаннымиXML». Свойства следующие:
Ключевым свойством для нас является Пакеты XDTO. Выбранный пакет «http://v8.1c.ru/8.1/data/core» представляет встроенные типы 1С:Предприятия, общие для любых конфигураций, такие как ХранилищеЗначения, Структура, Массив и т.п. Пускай вас не смущает число 8.1 в имени пакета. Имеется в виду, что эти типы есть в платформах 8.1 и выше, и их XML-представление не менялось с платформы 8.1.
URI пространства имен в данном случае совершенно не важен, можно указать любую строку. Их принято строить на базе URL, которые использует ваша организация, чтобы гарантировать глобальную уникальность имен типов, описанных в ваших пакетах, на всякий случай. Но мы описывать свои типы (это делается при помощи пакетов XDTOв соответствующей ветке дерева конфигурации) не будем, так как нам достаточно встроенных типов 1C:Предприятия.
Имя файла публикации может быть любым, но с соблюдением требований к URL. Кириллицу лучше не использовать. Расширение «1cws» тоже лучше не менять (не пробовал, если честно).
Операции
Добавляем операции web-сервиса. Наш web-сервис должен уметь как принимать данные, записывая в свою ИБ, так и отдавать их (выгружать в XML). Поэтому добавляем две операции, "ПринятьДанные" и "ОтдатьДанные".
Операция ПринятьДанные
"ПринятьДанные" записывает в ИБ xml-данные, переданные в первом параметре "Данные". Тип параметра - Хранилище значения. ХранилищеЗначения выбираем, чтобы сжимать данные при передаче, т.к. файлы XML могут быть очень увесистыми и при этом хорошо "жмутся". Но можно было бы использовать и просто Строку, string(http://www.w3.org/2001/XMLSchema). Операция возвращает целое число – количество успешно записанных объектов.Второй параметр - ТекстОшибки, строка, входной-выходной, для возврата текста ошибки.
Понятно, что ValueStorage– это ХранилищеЗначения
Код метода:
Операция ОтдатьДанные
"ОтдатьДанные" возвращает xml-данные, выгруженные по переданным правилам обмена. Также в виде ХранилищаЗначения.Это тоже обертка над Универсальным обменом, только уже более функциональная. Обратите внимание , что Массив и Структура – это уже не простые типы, они попадают в метод в виде XDTO-объектов, и их нужно явно преобразовывать в/из типы 1С:Предприятия. Преобразовывать в/из XDTO нужно и на клиентской стороне.
ПравилаВыгрузки - это массив имен правил выгрузки, по которым следует произвести выборку данных.
ЗначенияПараметров – это структура со значениями параметров конвертации.
Код:
Обработка УниверсальныйОбменДаннымиXML
Если в вашем прикладном решении такая обработка отсутствует, то её нужно добавить из комплекта поставки конфигурации «Конвертация данных» (файлV8Exchan82.epf).
Доступ к web-сервису. Роли и пользователи.
Для обращения к веб-сервисам необходимо подготовить роль и пользователя. Самый простой путь – это добавить отдельную роль, назовем ВебСервисы, этой роли не даем никаких прав, кроме прав на операции веб-сервиса, а сами методы выполняем в привилегированном режиме.
Добавляем пользователя
Назначаем ему только нашу роль ВебСервисы и больше никаких других. Этого достаточно.
На серверной стороне настройка закончена.
Клиент (обращение к web-сервису)
Тут просто приведу примеры обращения к веб-сервисам. Откуда берутся правила обмена , правила выгрузки, значения параметров и т.п. – это уже вопрос вашей прикладной задачи и её реализации.
Передача данных в базу-приемник
Пример передачи xml-данных в базу-приемник, на стороне которой работает вышеописанный web-сервис:
Данные перед этим получены из этой базы-источника функцией: