Для работы с источником 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С в «Форсайт. Мобильная платформа» учитывайте следующие особенности:
используйте данные в виде плоской структуры, состоящей из одной таблицы или массива таблиц;
Примечание. Для использования иерархической структуры зависимых таблиц настройте веб-сервис таким образом, чтобы он возвращал необходимые таблицы в виде массива в рамках одного ресурса.
используйте стандартные типы данных XML-schema и укажите каждый тип данных в процедуре в соответствии с типом данных 1С;
снимите флажки, расположенные напротив параметров в столбце «Null», и задайте значения при добавлении входных параметров ресурса. Сервер мобильной платформы проверяет соответствие структуры параметров ресурса с полученными данными из 1С для дальнейшей обработки данных и расчета дельты. Если структуры ресурса не соответствуют, то будет выдана ошибка.
Процедура, принимающая на вход параметры (два параметра скалярного типа и два - табличного), возвращающая две таблицы.
Табличные параметры на вход:
"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Элемент);
КонецЕсли;
Возврат ВозвращаемоеЗначение;
КонецФункции
См. также:
Настройка интеграции с табличными источниками данных | Базовая процедура Oracle