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!

Добавить комментарий

Sidebar