Базовая процедура SOAP/XML

В источнике данных SOAP базовой процедурой является процедура веб-сервиса, где тип входного параметра базовый скалярный или базовый табличный.

Для передачи данных используются типы данных XML-schema и каждый тип данных в процедуре указывается в соответствии с типом данных XML.

Для разработки базовой процедуры приведена таблица с типами данных XML и соответствующими внутренними типами платформы:

Тип данных XML Внутренний тип платформы
double double
integer text
long bigInt
byte bigInt
dateTime text
boolean bigInt
string text
hexBinary bytes
base64 bytes

Пример

Рассмотрим пример для веб-сервисов SOAP/XML на базе платформы 1C, в котором используется процедура, принимающая на вход параметры (два параметра скалярного типа и два - табличного) и возвращающая две таблицы.

Табличные параметры на вход:

На выход процедура отдаёт две таблицы:

Функция SimpleTypesAndStructureNew(p1, p2, p3, p4)
   ВозвращаемоеЗначение = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("http://www.test-ws.org","SimpleTypesAndStructureNew"));
   
//ВозвращаемоеЗначение.p1 = p1;
   //ВозвращаемоеЗначение.p2 = p2;
   
Для каждого ПериодПланирования Из p3.ПериодыПланирования Цикл
       ВозвращаемоеЗначение.p3.Добавить(ПериодПланирования);
   КонецЦикла;
   Для каждого Контрагент Из p4.Контрагент Цикл
       ВозвращаемоеЗначение.p4.Добавить(Контрагент);
   КонецЦикла;
   Возврат ВозвращаемоеЗначение;
КонецФункции

Процедура принимает на вход целое число типа int - параметр Count, и возвращает таблицу с количеством строк, указанных во входном параметре:

Функция GetPlanningPeriodsCount(Count)
   start = ТекущаяУниверсальнаяДатаВМиллисекундах();

   ВозвращаемоеЗначение = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("http://www.test-ws.org","ПериодыПланированияСписок"));
   XDTOТипЭлемента = ФабрикаXDTO.Тип(
"http://www.test-ws.org""ПериодыПланированияЭлемент");

   Запрос = Новый Запрос;
   Запрос.Текст =
   
"ВЫБРАТЬ ПЕРВЫЕ 1
   | ПериодыПланирования.Ссылка,
   | ПериодыПланирования.ПометкаУдаления,
   | ПериодыПланирования.Код,
   | ПериодыПланирования.Наименование,
   | ПериодыПланирования.ЧетныйСеместр,
   | ПериодыПланирования.ДатаНачала,
   | ПериодыПланирования.ДатаОкончания,
   | ПериодыПланирования.НачальнаяНеделя,
   | ПериодыПланирования.ЧислоСЗапятой,
   | ПериодыПланирования.Комментарий
   |ИЗ
   | Справочник.ПериодыПланирования КАК ПериодыПланирования"
;

   РезультатЗапроса = Запрос.Выполнить();
   Если Не РезультатЗапроса.Пустой() Тогда
       Выборка = РезультатЗапроса.Выбрать(); 
       Выборка.Следующий();

       Для Счетчик = 
1 По Count-1 Цикл
           XDTOЭлемент = ФабрикаXDTO.Создать(XDTOТипЭлемента);
           XDTOЭлемент.УИД = Строка(Выборка.Ссылка.УникальныйИдентификатор());
           XDTOЭлемент.Код = Строка(Счетчик);
           XDTOЭлемент.Наименование = Выборка.Наименование;
           XDTOЭлемент.ПометкаУдаления = Выборка.ПометкаУдаления;
           XDTOЭлемент.ЧетныйСеместр = Выборка.ЧетныйСеместр;
           XDTOЭлемент.ДатаНачала = Выборка.ДатаНачала;
           XDTOЭлемент.ДатаОкончания = Выборка.ДатаОкончания;
           XDTOЭлемент.НачальнаяНеделя = Выборка.НачальнаяНеделя;
           XDTOЭлемент.ЧислоСЗапятой = Выборка.ЧислоСЗапятой;
           XDTOЭлемент.Комментарий = Выборка.Комментарий;

           ВозвращаемоеЗначение.ПериодыПланирования.Добавить(XDTOЭлемент);
       КонецЦикла;

       XDTOЭлемент = ФабрикаXDTO.Создать(XDTOТипЭлемента);

       XDTOЭлемент.УИД = Строка(Выборка.Ссылка.УникальныйИдентификатор());
       XDTOЭлемент.Код = Строка(Счетчик);
       XDTOЭлемент.Наименование = Выборка.Наименование;
       XDTOЭлемент.ПометкаУдаления = Выборка.ПометкаУдаления;
       XDTOЭлемент.ЧетныйСеместр = Выборка.ЧетныйСеместр;
       XDTOЭлемент.ДатаНачала = Выборка.ДатаНачала;
       XDTOЭлемент.ДатаОкончания = Выборка.ДатаОкончания;
       XDTOЭлемент.НачальнаяНеделя = Выборка.НачальнаяНеделя;
       XDTOЭлемент.ЧислоСЗапятой = ТекущаяУниверсальнаяДатаВМиллисекундах() - start;
       XDTOЭлемент.Комментарий = Выборка.Комментарий;

       ВозвращаемоеЗначение.ПериодыПланирования.Добавить(XDTOЭлемент);
   КонецЕсли;
   Возврат ВозвращаемоеЗначение;
КонецФункции

См. также:

Настройка интеграции с табличными источниками данных | Табличный JSON-сервис