Здравствуйте, Друзья!
Мне было интересно, в свое время, разобраться с функциональностью загрузки от конвертации 3.0. Я отметил, что данные объекта XDTO конвертируются в структуру и далее, уже полученная структура конвертируется в объекты БД. Ок, подумал я, а что если мы будем формировать собственные структуры и передавать их в процедуру конвертации структур в объекты БД? В процессе реализации начался новый процесс понимания как конвертация 3.0 генерирует модуль менеджера обмена, т.к. для метода СтруктураОбъектаXDTOВДанныеИБ требуется не просто структура, составленная, опять-таки, по строгим правилам, но и целая сложная сущность, называемая КомпонентыОбмена, в которую входят все те сущности создаваемые в модуле менеджера обмена :) - ПравилаОбработкиДанных, ПравилаКонвертацииОбъектов, ПравилаКонвертацииПредопределенныхДанных …, вообщем много чего.
Почему Excel? Просто, в свое время, была задача произвести множественные загрузки из ёкселя - т.е. преобразовать данные ёкселя в объекты БД. Для такого преобразования требуется создать некие правила преобразований. Откуда их взять или что взять за основу, когда на входе структура из ёкселя, которая по определенным правилам должна преобразовываться в объекты БД? Конвертация 2.0 - это идеальный вариант для основы в части архитектуры такого решения. Что и было сделано. В итоге: ёксель данные преобразуем в структуру и конвертируем полученную структуру в объект БД.
В принципе, можно доработать и для входящих данных в виде xml документа, но это в будущем. Да, Вы и сами это сможете сделать :), если захотите. И вот, я захотел и сделал! Об этом чуть ниже.
Проверял на всех ссылочных типах: справочник, документ, ПВХ и ПВР. Также, должно работать и для бизнес-процесса и задачи. Независимый Регистр сведений (периодический и непериодический) - руки пока не дошли :).
И, как бы это смешно не звучало, но есть правилам обмена данными, написанные на конвертации 2.0 для выгрузки и загрузки обработкой "Универсальный обмен данными в формате xml" правил обмена, созданных в подсистеме "Обмен данными Excel".
Как работает подсистема в режиме предприятия.
Шаблон данных предназначен для хранения структуры Excel файла - поля (колонки). По команде "Сохранить бланк для заполнения..." будет создан Excel шаблон с шапкой колонок. Excel шаблон заполняется данными и готов к загрузке.
На основании Шаблона данных (Пакета загрузки) создаются "Правила загрузки Excel, XDTO" (далее по тексту просто Правила загрузки). Правила загрузки содержат параметры загрузки. На основании Правил загрузки создаются "Правила конвертации объектов Excel, XDTO" (ПКО).
Для создания ПКО применяется обработка "Настройка правил обмена Excel".
ПКО содержат объект метаданных - Приемник (Справочник, Документ, ПВХ, ПВР), в который будут конвертированы данные шаблона. У ПКО есть Реквизиты - "Правила конвертации свойств".
Excel.
Для загрузки данных по шаблонам применяются обработки: "Обмен данными загрузка Excel" и "Обмен данными по шаблонам загрузки Excel".
Обработка "Обмен данными по шаблонам загрузки Excel" предназначена для загрузки по нескольким шаблонам данных.
Обработка "Обмен данными загрузка Excel" предназначена для загрузки по одному шаблону данных и множествам правил загрузки.
Для загрузки по нескольким шаблонам данных требуется создать "Шаблон загрузки данных", в котором указать шаблоны данных, правила загрузки и значения параметров загрузки по правилам загрузки.
Для ПКО и ПКС встроена справка.
Табличные части объектов в файле Excel вместе с реквизитами объекта - пока это особенность, т.к. вижу, что можно сделать и более красиво, но по скорости реализован такой вариант, т.к. явился более простым:
Реквизит1 Объекта | Реквизит2 Объекта | Реквизит1 ТЧ1 | Реквизит2 ТЧ1 | Реквизит1 ТЧ2 | Реквизит2 ТЧ2 |
значения... | |||||
XDTO.
Если для Ексель структуры достаточно плоской таблицы, поля которой описаны в ТЧ Шаблона, то для описания метаданных xsd схемы потребуется нечто более существенное, например, отдельный справочник с иерархией по элементам и он должен быть подчинен самой схеме - т.е. другому справочнику, который будет представлять образ самой xsd схемы. Т.о. в системе появились два справочника: "Пакеты загрузки (ЭАОД)" и "Элементы пакетов (ЭАОД)"
Далее, если ПКО проектируются под xsd схему, то у правила конвертации свойства появляется реквизит "Элемент пакета", который ссылается на справочник "Элементы пакетов (ЭАОД)".
Конвертация метаданных xsd схемы производится в элементе справочника "Пакеты загрузки (ЭАОД)". Создаем новый элемент, на странице Схемы заполняем пути к файлам схем и список типов в виде значений пространств имен, например:
Переходим на страницу Структура пакета и по команде Загрузить на странице заполниться дерево метаданных xsd схемы. Отмечаем флажками требуемые типы в дереве и переходим на страницу Элементы пакета. По команде Создать элементы - будут созданы элементы справочника "Элементы пакетов (ЭАОД)" - элементы схемы преобразованы в метаданные.
Немного личного опыта о свойствах XDTO пакета.
//(1) При добавлении первого элемента структуры пакета xdto (это аналог xsd схемы) мы выбираем:
// - Директива импорта;
// - Свойство;
// - Тип значенния;
// - Тип объекта.
//(2) Выбранный Тип значения в дальнейшем раскрывается на (дальнейшие раскрытия - исключительно на себе подобные сущности - цикл замкнулся)
// - Определение типа (как для значения);
// - Образец (это как правило шаблон маски значения);
// - Перечисление.
//(3) Выбранный Тип объекта в дальнейшем раскрывается на
// - Типы объектов
// - Тип объекта
// - Свойство
// - Опредление типа (как для объекта):
// - {Тип объекта} - дальнейшее раскрытие как Тип значения - Образец, Перечисление и Определение типа - (2). Свойство будет иметь Тип = ТипЗначенияXDTO;
// - ObjectType - запись объекта = Тип объекта - цикл замкнулся. Свойство будет иметь Тип = ТипОбъектаXDTO.
// При выборе варианта (2) ограничения наступают сразу же, т.е. цикл замыкается на самих элементах (Образец, Перечисление ...)
// При выборе варианта (3). Каждый раз определяя Свойство мы определяем и Определение типа данного свойства и вот здесь может получиться
// бесконечный цикл "Тип объекта - Свойство - ObjectType - Тип объекта". Как правило раскрытие Свойство по {Тип объекта} не должно проводиться,
// т.к. типы значений (Перечисление, Образец ...) должны описываться в отдельной ветке дерева пакета. В моем примере, платформа не давала сохранять пакет,
// если были Образец или Перечисление у ObjectType.
// Определение типа у (2) и (3) (у (3) различия даже у Свойство) различаются значками и сущностями дальнейших раскрытий, хотя и имеют одинаковое название.
АПИ для загрузки - это ЭАОДЗагрузкаДанныхExcelВызовСервера.ЗагрузитьСообщениеПакетаXDTO. Значения параметров и вызов процедуры - встроенная обработка "Тестирование загрузки XDTO (ЭАОД)".
Т.к. за основу всех преобразований был взят модуль "ОбменДаннымиXDTOСервер", то каноническая модель структуры xsd схемы немного ограничена: первый уровень - СписокXDTO, второй уровень - элемент списка - ОбъектXDTO, третий уровень - реквизиты объекта ОбъектаXDTO, четвертый уровень - ТЧ объекта - СписокXDTO. Как в конвертации 3.0. Также, для определения типа загружаемых данных ОбъектXDTO должен иметь обязательное свойство ТипОбъектаДанных или тип самого ОбъектаXDTO должен быть в следующем формате:
Справочник.ИмяОбъектаМетаданных, Документ.ИмяОбъектаМетаданных ...
При считывании значений ОбъектаXDTO нам требуется путь к значению. Значение пути храниться в реквизите элемента пакета "Путь к значению":
И последнее, что хочу добавить к функционалу загрузки XDTO. Актуальные сведения о правилах загрузки для веб сервиса и его метода храняться в периодическом регистре сведений "Актуальные пакеты загрузки сервисов обмена (ЭАОД)".
Функционал XDTO доступен в прилагаемом cfu обновлении под релизом 1.1.1.1.
Требования: адаптирована под БСП 2.4.5.7 100%. Под БСП более старшие может и потребуется адаптация, а может и нет, не пробовал, но думаю тоже взлетят :).
Платформа не ниже 8.3.10.
Конфигурация выполнена поставкой, поэтому при первом сравнении и объединении можно согласиться с постановкой на поддержку.
Внимание! Данная публикация является опытом автора и признана им поделиться. Если Вы планируете вводить результаты данной публикации в ОПЭ ваших продуктивных баз, то, пожалуйста, убедитесь, что все кейсы успешно отрабатывают на Ваших тестовых базах. По мере своего свободного времени буду исправлять баги, если таковые появятся, но без гарантии, т.к. ещё раз повторюсь - это некий интересный, на мой взгляд, опыт, которым я бы хотел с Вами поделиться, Друзья!
Спасибо и Продуктивного Всем кодинга!
P.S. На просторах интернета столько обработок загрузки из Excel и под каждую задачу приходиться создавать новую обработку или модифицировать существующую … Данная конфигурация полностью заменяет все обработки. Вам больше не требуется создавать новые обработки по загрузке … Включите данную подсистему и просто в режиме предприятия создавайте новые правила :).