1С. Создание web-сервиса с примером его использования
В данной статье я хотел бы поделиться опытом создания своего web-сервиса с дальнейшим его использованием в системе 1С.
- XDTO-пакеты
Для начала работы добавим свой пакет XDTO. Для этого в ветке конфигурации, в разделе общие находим раздел «XDTO-Пакеты» и добавляем новый.
В свойствах пакета укажем URL пространства имен, например «https://programstore.ru». Добавим два типа объектов, СтрокиТаблицыПокупок и ТаблицаПокупок.
Для типа СтрокиТаблицыПокупок добавим свойства:
- GUIDКонтрагента — тип string (http://www.w3.org/2001/XMLSchema)
- GUIDНомеклатуры — тип string (http://www.w3.org/2001/XMLSchema)
- Количество — тип float (http://www.w3.org/2001/XMLSchema)
- Сумма — тип float (http://www.w3.org/2001/XMLSchema)
Для тип ТаблицаПокупок добавим только одно свойство
- Строка — тип СтрокиТаблицыПокупок (http://www.prosto.ru). Дополнительно для свойства укажем максимальное значение -1. Это необходимо для возможности передачи нескольких значений в свойство
- Web-сервис
После создания XDTO-пакета можно приступать к созданию web-сервиса. Для этого в ветке конфигурации, в разделе общие находим раздел «Web-сервисы» и добавляем новый.
Переходим на вкладку «Операции», где добавляем новую операцию и входящие параметры, в нашем случае «ДатаНачала» и «ДатаОкончания» с типом «date (http://www.w3.org/2001/XMLSchema)»
После добавления операции, переходим на вкладку «Прочее». На ней заполняем URL пространства имен, выбираем наш пакет XDTO и имя файла публикации.
На этом создание web-сервиса окончено, осталось описать процедуру работы операции.
- Описание процедуры операции
Для этого возвращаемся на вкладку «Операции», открываем свойства нашей операции и добавляем новую процедуру. Система автоматически создаст функцию операции с ее параметрами.
Теперь опишем работу нашей функции.
Для начала нам необходимо получить созданные нами типы в XDTO-пакете
Получаем тип пакета «ТаблицаПокупок»
Таблица = ФабрикаXDTO.Пакеты.Получить("http://www.prosto.ru").Получить("ТаблицаПокупок");
Получаем тип пакета «СтрокиТаблицыПокупок»
СтрокиТаблицы = ФабрикаXDTO.Пакеты.Получить("http://www.prosto.ru").Получить("СтрокиТаблицыПокупок");
После получения типов пакета можно переходить к их заполнению
Функция ВыгрузитьСписокПокупокЗаПериод(ДатаНачала, ДатаОкончания) Таблица = ФабрикаXDTO.Пакеты.Получить("http://www.prosto.ru").Получить("ТаблицаПокупок"); СтрокиТаблицы = ФабрикаXDTO.Пакеты.Получить("http://www.prosto.ru").Получить("СтрокиТаблицыПокупок"); ДанныеТаблицы = ФабрикаXDTO.Создать(Таблица); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Продажи.GUIDКонтрагента, | Продажи.GUIDНомеклатуры, | Продажи.Количество, | Продажи.Сумма |ИЗ | РегистрНакопления.Продажи.Обороты(&ДатаНачала, &ДатаОкончания, , ) КАК Продажи"; Запрос.УстановитьПараметр("ДатаНачала" , НачалоДня(ДатаНачала)); Запрос.УстановитьПараметр("ДатаОкончания" , КонецДня(ДатаОкончания)); РезультатЗапроса = Запрос.Выполнить(); Если РезультатЗапроса.Пустой() Тогда Возврат Неопределено; Иначе Выборка = РезультатЗапроса.Выбрать(); Пока Выборка.Следующий() Цикл WSПараметр = ФабрикаXDTO.Создать(СтрокиТаблицы); WSПараметр.GUIDКонтрагента.Добавить(Выборка.GUIDКонтрагента); WSПараметр.GUIDНомеклатуры.Добавить(Выборка.GUIDНомеклатуры); WSПараметр.Количество.Добавить(Выборка.Количество); WSПараметр.Сумма.Добавить(Выборка.Сумма); ДанныеТаблицы.TaskList.Добавить(WSПараметр); КонецЦикла; Возврат ДанныеТаблицы; КонецЕсли; КонецФункции
На этом описание web-сервиса окончено. Можно переходить к примеру использования сервиса.
- Использование Web-сервиса
Получить web-сервис из другой базы 1С можно следующим образом:
// Процедура использует web-сервис Процедура ПолучитьСписокПокупокЗаПериод() WSОпределение = Новый WSОпределения("http://prosto.base/its/ws/prosto.1cws?wsdl", "Prosto", "ProstoPass"); WSПрокси = WSПрокси(WSОпределение, "http://prosto.base/its", "Prosto", "ProstoSoap"); WSПрокси.Пользователь = "Prosto"; WSПрокси.Пароль = "ProstoPass"; ВнешняяТаблица = WSПрокси.ВыгрузитьСписокПокупокЗаПериод(Объект.ДатаНачала, Объект.ДатаОкончания); Если ВнешняяТаблица <> Неопределено Тогда Для Каждого Стр Из ВнешняяТаблица.ТаблицаПокупок Цикл НовСтр = Объект.ТаблицаПокупок.Добавить(); НовСтр.Контрагент = Стр.GUIDКонтрагента.Получить(0); НовСтр.Номеклатура = Стр.GUIDНомеклатуры.Получить(0); НовСтр.Количество = Стр.Количество.Получить(0); НовСтр.Сумма = Стр.Сумма.Получить(0); КонецЦикла; КонецЕсли; КонецПроцедуры
Comments
So empty here ... leave a comment!