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!