Базовая процедура 1С

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

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

Базовый скалярный тип 1C Тип данных XML Внутренний тип платформы
Число double double
Число integer text
Число long bigInt
Число byte bigInt
Дата dateTime text
Логическое значение boolean bigInt
Строка string text
Двоичные данные hexBinary bytes
Двоичные данные base64 bytes

Особенности передачи данных

Для корректной передачи данных из 1С в «Форсайт. Мобильная платформа» учитывайте следующие особенности:

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

Пример

Процедура, принимающая на вход параметры (два параметра скалярного типа и два - табличного), возвращающая две таблицы.

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

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

Функция 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Элемент);
   КонецЕсли;
   Возврат ВозвращаемоеЗначение;
КонецФункции

См. также:

Настройка интеграции с табличными источниками данных | Базовая процедура Oracle