Имя: Пароль:
1C
1С v8
Сериализация объектов 1С своими руками. XDTO?
0 AleGol
 
17.10.11
08:45
Пишу web приложение, частично основанное на данных 1С. Для взаимодействия использую web сервисы. Сразу оговорю, что все это мне в новинку, поэтому возможно не знаю некоторых базовых принципов.
У меня получилось связать свое java приложение с 1С и получать строку ответа (пока пробовал только строку указать в качестве возвр. значения.
Для начала мне нужно тянуть список подразделений организации со всей иерархией. Хотел уже динамически создавать XML, передавать его и парсить джавой, но понимаю что это не лучший способ (избыточные обработки строк, кодинг в стиле copy-paste).
Подумал про встроенную сериализацию ЗначениеВСтрокуВнутр(), применить его к дереву значений, куда выгружена структура подразделений, и парсить уже сериализованную строку. Но это чересчур сложно + при изменении структуры 1С заново приходится писать парсер.
Прихожу к мнению, что мне нужен СериализаторXDTO, для каждого объекта, будь то справочник или дерево, реализовать схему XDTO и сереализовывать объекты таким способом. Мне кажется, что ход мыслей правильный, хотелось бы пообщаться с теми, кто это уже проделывал.
1 DmitrO
 
17.10.11
08:59
Ход мыслей не правильный.
Надо создать в 1С веб-сервисы с такими схемами и структурами возвращаемых данных, которые необходимы для веб-приложения.
В веб-приложении пользоваться ими. Для получение html результата будет удобно использовать XLT.
2 AleGol
 
17.10.11
09:23
XLT - Excel Template? Я извиняюсь, но это, по-моему, совсем из другой оперы. Если говорить про шаблон html, то я использую jsp страницы.
Ладно, мой случай усложнен иерархией. Допустим я хочу передать из 1С в java одномерный массив, список. Что нужно делать для этого.
3 AleGol
 
17.10.11
10:21
Наверное XSLT, попытаюсь его применять
4 Asmody
 
17.10.11
10:51
(2) для передачи списка необходимо создать в пакете XDTO новый тип объекта, в него добавить свойство с типом объектов, которые будут помещаться в список, и поставить этому свойству "Максимальное количество"=-1.
Этот тип надо указать как тип возвращаемого значения методу веб-сервиса.
заполнять как-то так:
...
   OrderListType = ФабрикаXDTO.Тип(URI, "OrderList");
   
   orderList = ФабрикаXDTO.Создать(OrderListType);
   
   Выборка = Запрос.Выполнить().Выбрать();
   Пока Выборка.Следующий() Цикл
       order = ШапкаЗаявкиXDTO(Выборка); // заполнение шапки документа
       ВыборкаСтрок = Выборка.Оборудование.Выбрать();
       Пока ВыборкаСтрок.Следующий() Цикл
           order.items.Добавить(СтрокаОборудованиеXDTO(ВыборкаСтрок, Выборка)); // заполнение строки таб.части и добавление в список строк XDTO
       КонецЦикла;
       orderList.order.Добавить(order); // добавление документа в список
   КонецЦикла;
   
   Возврат orderList;
5 DmitrO
 
17.10.11
13:02
(3) да, я имел в виду XSLT (XSL преобразование), сори
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс