На днях столкнулся с необходимостью реализовать Web сервис. Покурив литературу по этой теме столкнулся с необходимостью предварительно определять и реализовывать XDTO пакеты в дереве конфигураций. Их реализация вызвала у меня легкое отвращение: это довольно рутинная работа.
Немного подумав, реализовал WEB сервис без реализации собственных XDTO пакетов. Получается, что для реализации веб сервисов (по крайней мере, тех что будут использоваться другими программами 1С версии 8) реализация собственных XDTO пакетов необязательна.
Основная идея - использование предопределенного XDTO пакета http://v8.1c.ru/8.1/data/core. В качестве типа возвращаемого значения Web сервиса, а так же типов параметров используется хранилище значений, в котрое можно запихнуть правтически всё что угодно (главное чтобы это сериализовалось) , например список значений, таблица значений, табличный документ и т.п.
Таким образом, порядок работы Web сервиса будет следующим. На вызывающей стороне формируем структуру данных (например, список значений), в который "запихиваем" входные параметры. Упаковываем эту структуру в хранилище. Вызываем операцию Web сервиса, в качестве параметра передаем это хранилище. В модуле Web сервиса из этого хранилища получаем переданную структуру, анализируем, выполняем нужный код, результат работы Web сервиса преобразуем в структуру данных - например в таблицу значений. Таблицу значений опять же упаковываем в хранилище и возвращаем вызывающей стороне. На вызывающей стороне получаем таблицу значений из хранилища.
Плюсы такого подхода:
1) Передача параметров и возврат результата в привычных и удобных структурах данных - таблицах значений, списках значений и т.п.
2) Если Web сервис используется в рамках распределенной базы, то можно передавать обмениваться ссылками на объекты, это очень удобно.
3) Возможность сжатия хранилища. Таким образом экономится траффик.
Минусы:
1) Возможна работа только в рамках 1с 8.
Файл для скачивания содержит пример реализации такого Web сервиса для платформы 8.3. Файл представляет собой архив, в котором находятся файлы выгрузки двух баз: "Источник" и "Приемник". В источник нужно зайти под пользователем "test", без пароля. Web сервис называется "NomenklaturapoKodu", находится в базе "Источник". Обработка, которая вызывает Web сервис называется "ТестРаботыWebСервиса", находится в базе "Приемник".
Пример очень прост. В форме обработки есть список значений, в который нужно подобрать номенклатуру. По команде "Получить наименования" обработка формирует массив с кодами элементов номенклатуры, упаковывает его в хранилище значений и вызывает операцию Web сервиса, передавая в качестве параметра это хранилище значений. Web сервис в качестве входного параметра получает хранилище с упакованным в него массивом, содержащим коды номенклатуры. Web сервис достает их хранилища массив, строит запрос к справочнику номенклатуры с отобором по кодам из массива, получает наименования и коды элементов, помещает их в таблицу значений, упаковывает её в хранилище и передает хранилище запрашиваемой стороне (в обработку грубо говоря). Полученная в качестве ответа от Web сервиса таблица значений, упакованная в хранилище - распаковывается из него и обрабатывается (выводится на форму:).
Публикация Web сервиса в данном примере не рассматривается - это отдельный вопрос, по которому ответов уже более чем достаточно.