Представляю вам Мастер XML-обмена - комплекс обработок для быстрой и удобной разработки обмена данными между информационными базами 1С.
Не вдаваясь в сравнения с конвертацией данных, перейду к требованиям заложенным и реализованным в разработке:
- "человекочитаемый" хорошо документированный формат XML-файла с данными;
- структура файла данных не меняется из-за настроек "правил конвертации";
- обязательное наличие инструмента просмотра содержимого и структуры файла данных;
- исходными данными для настроек обмена являются и файлы со структурой метаданных конфигураций ИБ-источника и ИБ-приемника, и файлы с данными - на случай выгрузки виртуальных объектов;
- простые интуитивно-понятные визуальные настройки, которых хватает на 95% всех возможных ситуаций обмена;
- абсолютная прозрачность контекста исполнения кода обработчиков событий;
- результатом настроек является автоматически генерируемый код загрузки - понятный, простой в отладке и доработке "ручками";
- никаких xsd и xdto - для чтения и записи используется DOMDocument - это требование проистекает из предыдущего;
Разработка обмена в общем случае сводится к следующим этапам:
- выгрузка структуры метаданных конфигураций ИБ источника и приемника в XML обработкой АнализаторКонфигурации;
- настройка и/или доработка обработки ШаблонВыгрузки, которая выгружает данные в XML;
- анализ состава и структуры данных в обработке ПросмотрщикФайлаДанных (необязательно);
- настройка соответствия объектов, их свойств и значений визуальными средствами в обработке ГенераторКода;
- генерация кода загрузки обработкой ГенераторКода;
- вставка автоматически сгенерированного кода в обработку ШаблонЗагрузки;
Суть подхода в том, что я не пытаюсь оторвать разработчика от конфигуратора и отладчика, но при этом всю рутину разработки обмена перекладываю на визуальные настройки, оставляя возможность доработать полученный код максимально удобно и быстро - в конфигураторе, с прозрачным, понятным и простым контекстом, автодополнением кода и полноценной отладкой))
И озвучу очевидные системные требования в связи с использованием DOMDocument :
- выгрузка метаданных, выгрузка данных и загрузка данных выполняются на стороне сервера, значит сервер приложения 1С должен работать в Windows-системе.
- ПросмотрщикФайлаДанных и ГенераторКода работают с XML на стороне клиента - значит для их использования клиентская часть 1С Предприятия должна запускаться в Windows-системе.
Небольшой экскурс в инструментарий.
Обработка АнализаторКонфигурации - выгружает в XML-файл структуру метаданных конфигурации:
ОФ
УФ
7.7
Обработка ШаблонВыгрузки - выгружает данные в XML-файл.
Шаблон выгрузки умеет выгружать данные, выбранные введенным в форме запросом - со всеми возможными сложными условиями выборки, которые нам позволяет реализовать язык запросов. Предполагается что, если обработка выгрузки предоставляется пользователям, то из нее удаляется эта возможность, а текст запроса жестко вшивается в код.
Понятно, что в случае обмена между очень отличными по структуре базами (ну, например, ИТРП 7.7 - ЕРП 2.0) выгрузка из базы реальной структуры данных может быть не применима - строки документа спецификации визуальными средствами в подчиненные маршрутной карте элементы справочника операции, к сожалению, не превратить. Поэтому в модуле обработки ШаблонВыгрузки есть уже готовые процедуры для выгрузки виртуальных данных - ЗаписатьВиртуальныйРеквизит, ЗаписатьВиртуальныеТабличныеЧасти, ЗаписатьВиртуальныйОбъект.
В общем случае, я думаю, структура виртуальных данных должна быть максимально приближена к структуре данных в ИБ-приемнике - по крайней мере я делаю так.
Это достигается простыми, но, временами, объемными доработками ШаблонаВыгрузки, и под простотой доработок я понимаю именно простоту алгоритмов.
Зато код загрузки полученнный на выходе ГенератораКода доработок не потребует.
ОФ
УФ
7.7 - лог выгрузки пишется в окно сообщений
При этом файл с данными весит на 30-40% меньше, чем те же данные в формате конвертации данных.
Обработка ПросмотрщикФайлаДанных - средство просмотра состава и структуры выгруженных данных:
ОФ
УФ
Обработка ГенераторКода
XML-файлы загружаются в обработку ГенераторКода.
В генераторе кода визуальными средствами настраивается соответствие объектов источника объектам приемника.
Что может ГенераторКода:
- - поддерживается настройка (простым перетаскиванием, в основном) соответствий между любыми объектами и значениями: справочник в перечисление и наоборот, простой тип в справочник или перечисление и наоборот, ну и между объектами одного вида само собой, перенос движений, записей регистров - легко и интуитивно-понятно.
- - поддерживается настройка соответствия значений реквизитов простых типов (например кода в плане счетов - типовая ситуация при переносе остатков по счетам из баз 7.7).
- - поддерживается загрузка реквизитов шапки из ТЧ/Движений/Периодических реквизитов и наоборот, реквизиты ТЧ могут одновременно грузиться в ТЧ и в шапку
- - реквизиты шапки могут одновременно грузиться в шапку и в несколько ТЧ/Движений/Периодических реквизитов.
- - поддерживается слияние нескольких типов источника в один тип в приемнике и наоборот.
И все это(настройка соответствий) - визуальными средствами - без строчки кода. Чего генератор не умеет - так это грузить одну ТЧ в несколько и наоборот - сливать несколько ТЧ в одну... но всегда можно при выгрузке добавить виртуальную ТЧ объекту.
Но... у генератора кода есть только набор обычных форм. Если разработка будет востребована - задумаюсь над управляемыми...
Вот ниже ряд принтскринов генератора кода для интересных и простых случаев:
Начальная страница генератора кода
Настройка соответствий непосредственно выгружаемых объектов
Настройка соответствий объектов выгружаемых по ссылкам (здесь доступно и просто добавление нового соответствия).
Суть процесса заключается в настройке соответствия реквизитов объектов и их типов. И на основании соответствия типов генератор кода создает новые соответствия объектов - строки верхнего уровня в этом дереве - которые вы снова настраиваете покуда все строки в дереве не "позеленеют"
Пример настройки соответствия справочников. Справочники структурно одинаковы - просто хотел показать настройку типов в случае составного типа в источнике и приемнике
Пример настройки соответствия перечисления в источнике справочнику в приемнике
Пример настройки соответствия простого типа в источнике значению перечисления в приемнике (ВНИМАНИЕ: в пределах разработки тип Булево имеет представление 1 и 0, а не Истина и Ложь или Да и Нет - так логичнее с учетом работы и с 7.7 - там то флаги на форме - Число, да и лаконичнее...)
Пример настройки соответствия документов - демонстрация возможности переноса движений - они же ведь есть в форме настройки!)
Пример настройки соответствия значений реквизита простого типа
А вот скрин с автоматически сгенерированным кодом:
И вот этот код вставляется в модуль обработки ШаблонЗагрузки (или в модуль формы - для 7.7).
Обработка Шаблон загрузки:
ОФ
УФ
7.7 - в этом случае лог загрузке выводится в окне сообщений
Время загрузки на нагрузочных тестах на те же 30-40% меньше чем при загрузке по правилам конвертации - делаю вывод, что циклический перебор узлов DOMDocument работает примерно с той же скоростью, что и всякие XDTO, а меньшее время определяется меньшими размерами файла с данными.
Я подготовил несколько видеокейсов - вот вводный:
Теперь пару слов о содержимом архива по ссылке внизу.
В бесплатных материалах вы найдете следующее:
это файлы обработок из состава Мастера XML-обмена (кроме генератора кода), файл описывающий структуры файлов XML, с которыми работает мастер, файл с лицензией, папку с примером из первого видеокейса - там файл с данными, cf-ка базы-приемника и обработка ШаблонЗагрузки в которую вставлен код загрузки.
И согласно п.13 правил размещения коммерческих публикаций - ответы на важные вопросы:
- Обработки для 7.7 тестировались и использовались на платформе 7.70.027. Все обработки кроме ГенераторКода.epf имеют и ОФ и УФ, ГенераторКода.epf имеет только ОФ. УФ и ОФ работают на всех версиях платформ 8.2 и 8.3;
- Коммерческая доработка Мастера XML-обмена по требованиям заказчика не предполагается;
- Код всех обработок открыт. Лицензия предоставляет вам полное право на произвольные доработки всего и вся;
- Обновления Мастера бесплатные, предполагается просто заменять дистрибутив на актуальный с соответствующей записью в этой теме;
- Техподдержка как обязательство отсутствует, а вот частные вопросы в этой теме или в личку, пожелания и предложения по доработке - принимаются. Отвечаю, помогаю, советую - по мере слабых сил и возможностей;
- Лицензия под которой распространяется мастер пока рассчитана только на физлиц и входит в состав бесплатных ознакомительных материалов;
- Установка программы происходит простым разархивированием, регистрация не требуется;
11.09.15 Написал с помощью Мастера Перенос физических лиц ЗУП → ЗУП (УПП) - можно посмотреть как все внутри устроено для вполне рабочего и объемного (но простого) примера.
24.08.21 Перевел разработку в разряд разработок за SM.