Содержание:
Краткое описание
Web-сервисы — это объект метаданных, в модуле которого можно описать методы доступные для использования сторонними программами (после публикации на веб-сервере). Для доступа к web сервису используется протокол SOAP. Для описания структуры передаваемых данных можно использовать XDTO-пакеты. Более подробно про XDTO можно почитать в статье — Работа с XML через механизм XDTO с примерами.
В данной статье рассмотрен пример создания веб-сервиса «Данные сотрудника», который по табельному номеру возвращает ФИО сотрудника и таблицу с данными по рабочему времени состоящую из дата и отработанных часов.
Файлы материала
В коде расширения необходимо изменить логин ,пароль и адрес публикации (http://192.168.21.0/zup31) на подходящие для подключения к вашей базе с web сервисом.
Подготовка
Для работы необходимо установить любой веб-сервер (Apache, IIS) для дальнейшей публикации на нем web-сервиса. Если веб-сервис находится в расширении, то необходимо в публикации установить флаг «Публиковать Web-сервисы расширений по умолчанию».

Для отладки в файл публикации default.vrd необходимо добавить строчку со следующим содержанием
1 |
<debug enable="true" protocol="tcp" url="tcp://localhost"/> |
Перезапустить веб-сервер и включить автоматическое подключение web-сервисов в отладке, после этого будет срабатывать точка остановы.
Пример реализации Web-сервиса в базе 1С ЗУП

Создадим XDTO-пакет с именем «АВ_ДанныеСотрудника», что бы описать структуру передаваемых данных (аналогичный XDTO-пакет был создан в статье Работа с XML через механизм XDTO с примерами).
В данном пакете создадим «тип объекта» ДанныеПоРабочемуВремени со свойствами:
Дата | тип string из пространства имен http://www.w3.org/2001/XMLSchema |
РабочееВремя | тип int из пространства имен http://www.w3.org/2001/XMLSchema |
И «тип объекта» Сотрудник со свойствами:
ФИО | тип string из пространства имен http://www.w3.org/2001/XMLSchema |
ТабельныйНомер | тип string из пространства имен http://www.w3.org/2001/XMLSchema |
ДанныеПо РабочемуВремени | тип ДанныеПоРабочемуВремени из пространства имен https://www.myblog-1c.ru |
- После этого создадим одноименный веб-сервис «АВ_ДанныеПоСотруднику«. Установим пакет XDTO, пространство имен и имя для публикации.

2. В нем создадим единственный метод «Получить» и свяжем с одноименной функцией.

3. Добавим один входной параметр «НомерДокумента«, который не может быть пустым.

4. Опишем функцию, которая будет формировать данные по сотруднику и возвращать их в стороннюю программу.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
Функция Получить(НомерДокумента) СотрудникСсылка = Справочники.Сотрудники.НайтиПоКоду(НомерДокумента); Если НЕ ЗначениеЗаполнено(СотрудникСсылка) Тогда Возврат Неопределено; КонецЕсли; // получить тип объектов XDTO ДанныеПоРабочемуВремениТип = ФабрикаXDTO.Тип("https://www.myblog-1c.ru", "ДанныеПоРабочемуВремени"); СотрудникТип = ФабрикаXDTO.Тип("https://www.myblog-1c.ru", "Сотрудник"); // созадть объект XDTO "сотрудник" и заполнить свойства Сотрудник = ФабрикаXDTO.Создать(СотрудникТип); Сотрудник.ФИО = СотрудникСсылка.Наименование; Сотрудник.ТабельныйНомер = СотрудникСсылка.Код; // созадть объект XDTO "данных по времени 1" и заполнить свойства ДанныеПоРабочемуВремени = ФабрикаXDTO.Создать(ДанныеПоРабочемуВремениТип); ДанныеПоРабочемуВремени.Дата = Дата(2023,3,1); ДанныеПоРабочемуВремени.ВремяПоТабелю = 5; // добавить строку к сотруднику Сотрудник.ДанныеПоРабочемуВремени.Добавить(ДанныеПоРабочемуВремени); // созадть объект XDTO "данных по времени 2" и заполнить свойства ДанныеПоРабочемуВремени = ФабрикаXDTO.Создать(ДанныеПоРабочемуВремениТип); ДанныеПоРабочемуВремени.Дата = Дата(2023,3,2); ДанныеПоРабочемуВремени.ВремяПоТабелю = 8; // добавить строку к сотруднику Сотрудник.ДанныеПоРабочемуВремени.Добавить(ДанныеПоРабочемуВремени); Возврат Сотрудник; КонецФункции |
После публикации веб сервис будет доступен для клиентских приложений.
Пример обращения к Web-сервису на стороне клиента
Перед обращения к веб сервису необходимо создать Прокси подключение, данную операцию можно сделать двумя способами:
1. С использованием статической WS ссылки (Более быстрое подключение к источнику, но необходимо создать объект в дереве метаданных)

В момент создания WS-ссылки будут прочитаны данные по структуре XDTO и протоколу SOAP из Web-сервиса в базе источнике.
2. С использованием динамической WS ссылки (Более медленный, учитывает изменения веб-сервиса и XDTO-пакета в источнике «на лету»)
Пример кода получения данных из другой конфигурации:
Адрес публикации (http://192.168.21.0/zup31) и Логин / Пароль для входа в базу необходимо заменить на свои.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
Процедура ПолучитьДанныеСотрудникаНаСервере(Знач ТабельныйНомер) Логин = "Администратор"; Пароль = ""; //ТабельныйНомер = "0000-00001"; //// Пример создания "Прокси" с использованием статической WS ссылки //Прокси = WSСсылки.АВ_ДанныеСотрудника.СоздатьWSПрокси("https://www.myblog-1c.ru", "АВ_ДанныеСотрудника", "АВ_ДанныеСотрудникаSoap"); //Прокси.Пользователь = Логин; //Прокси.Пароль = Пароль; // Создание "Прокси" с использованием динамической WS ссылки Определение = Новый WSОпределения("http://192.168.21.0/zup31/ws/worker.1cws?wsdl", Логин, Пароль); Прокси = Новый WSПрокси(Определение, "https://www.myblog-1c.ru", "АВ_ДанныеСотрудника", "АВ_ДанныеСотрудникаSoap"); Прокси.Пользователь = Логин; Прокси.Пароль = Пароль; // вызов метода web-сервиса ДанныеПоСотруднику = Прокси.Получить(ТабельныйНомер); // обработка результата Если ДанныеПоСотруднику = Неопределено Тогда Возврат; КонецЕсли; Сообщить("По сотруднику "+ДанныеПоСотруднику.ФИО+" получено рабочее время"); Для Каждого СтрокаВремя Из ДанныеПоСотруднику.ДанныеПоРабочемуВремени Цикл Сообщить(" - "+Формат(СтрокаВремя.Дата, "ДФ=dd.MM.yyyy")+" - "+Строка(СтрокаВремя.ВремяПоТабелю)+" ч."); КонецЦикла; КонецПроцедуры |
Статья помогла, спасибо!
Хорошая статья.