В источнике данных 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, в котором используется процедура, принимающая на вход параметры (два параметра скалярного типа и два - табличного) и возвращающая две таблицы.
Табличные параметры на вход:
"p3": [[string, string, string, Boolean, Boolean, dateTime, dateTime, byte, double, string]];
"p4": [[string, string, Boolean]].
На выход процедура отдаёт две таблицы:
Функция 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-сервис