Обмен данными через EnterpriseData - механизм сравнительно новый, появился около 4 лет назад. Тем не менее уже практически все обмены между типовыми конфигурациями используют именно его. Статьи на эту тему уже естественно есть, например вот очень хорошая статья Максима Сухова. Однако, на мой взгляд, требуется более расширенное описание как теоретической, так и практической части новой технологии и самого процесса. По этому, я хочу предложить Вашему вниманию цикл статей.
Остальные статьи из цикла:
EnterpriseData – часть 2. Процесс выгрузки данных
Часть 3. Процесс загрузки данных, Идентификация объектов
Сокращения, которые будут присутствовать в статье:
- ED – универсальный формат обмена (EnterpriseData)
- КД 2.0 – конвертация данных 2.x
- КД 3.0 – конвертация данных 3.0
Содержание
- Что такое универсальный формат?
- Преимущества обмена через универсальный формат
- Недостатки обмена через универсальный формат
- Обход выборки и подбор правил конвертации
- Конвертация объекта и всех его свойств
- XDTO сериализация данных и выгрузка в XML
Первая статья будет вводной, в основном теоретической. Ее задача - донести в общем, в чем заключается новая технология, фундамент, так сказать, без которого дальнейшее постижение будет затруднительно.
Сразу замечу, не все специалисты принимают обмен через ED «на ура». Существует довольно много скептиков, и их возражения весьма оправданы. В общем, ED вызывает много дискуссий между сторонниками и противниками. Я же постараюсь быть объективным, рассказать как есть, плюсы и минусы.
Одно можно сказать точно, нравиться нам это или нет, всем придется рано или поздно разбираться с новой технологией обмена, так как компания 1С явно дает понять, что будущее именно за ED.
Сейчас кто-то наверно набросится на меня, и скажет: «Да нет же, обмен с использованием правил КД 2.0 будет существовать и дальше!»
И… Будет прав.
Да, обмен по правилам КД 2.0 будет сосуществовать параллельно, для решения различных специфических задач, для поддержки обменов с конфигурациями предыдущих версий, и там, где применение обмена через ED не является рациональным по тем или иным причинам.
Ну что же, давайте перейдем, к сути вопроса. В чем же основные отличия обмена через ED от старого, проверенного годами, универсального обмена данными в формате XML, по правилам КД 2.0?
Фундаментальных отличия, на мой взгляд два:
- Обмен происходит не между двумя конфигурациями, как мы все привыкли, а между конфигурациями и универсальным форматом.
- Для реализации обмена данными применяется технология XDTO.
Что такое универсальный формат?
Говоря понятным языком, универсальный формат – это четко заданная структура данных, которые могут быть выгружены в файл обмена. Другими словами, это описание типов бизнес - объектов, которыми нам требуется обмениваться с другими системами. Описание формата разработано компанией 1С для реализации обменов между своими типовыми решениями, и выполнено оно в текстовом виде, а точнее, в виде XML схемы. В дереве конфигурации описание формата содержится в ветке «XDTO пакеты». XDTO пакеты, по своей сути и являются схемами XML, правда с некоторыми оговорками.
По скольку, бизнес не стоит на месте, описание универсального формата постоянно изменяется и дополняется компанией 1С. Соответственно, формат имеет версию, которая состоит из трех цифр. Первые две цифры являются значимыми и меняются при значительной реструктуризации описания формата. При их изменении, совместимости с предыдущими версиями не предусмотрено. Последняя цифра версии формата меняется в случае не значительных доработок: исправления ошибок или добавления свойств, использование которых не является обязательным. Такие изменения не приводят к потере совместимости с предыдущими версиями.
Пример наименования формата: EnterpriseData_1_6_2
1 и 6 – это значимые цифры версии формата.
Компания 1С в своих типовых продуктах гарантирует срок поддержки версии формата не менее 1 года с момента ее выхода. По факту этот срок обычно больше, но, все равно, эту особенность необходимо учитывать при реализации собственного механизма обмена данными. Сроки поддержки актуальных версий формата можно посмотреть по этой ссылке.
Вернемся к обмену данными. Как говорилось выше, обмен происходит между базами данных и ED:
Если быть точнее:
- При выгрузке происходит преобразование объектов базы-источника к типам, описанным в формате.
- При загрузке происходит обратная операция – преобразование данных в формате ED к типам объектов базы–приемника.
Сразу же можно выделить основные преимущества и недостатки нового подхода к обмену данными.
Преимущества обмена через универсальный формат
- Нам не требуется знать НИЧЕГО о структуре данных принимающий стороны для формирования файла с данными. В общем случае, это может быть даже не 1С, а любая другая система, поддерживающая структуру универсального формата.
- Корректировку алгоритма выгрузки или загрузки данных необходимо делать только в случае прекращения поддержки используемой версии формата у второго участника обмена.
- Не требуется включать правила конвертации объектов в файл с данными.
- Новый подход ведет к стандартизации бизнес – объектов, используемых для реализации учетной системы.
Недостатки обмена через универсальный формат
- Процесс обмена разбит на два не связанных друг с другом этапа: выгрузка данных и загрузка данных. Для каждого этапа необходимо создавать отдельные правила конвертации.
- Структура универсального формата накладывает ограничение на состав передаваемых данных. Это может вызывать большие трудности при попытке настроить передачу не стандартных данных. Наверно это самый значительный недостаток новой технологии.
- Конфигурация, участвующая в обмене данными должна иметь соответствующий функционал для поддержки механизмов обмена. Данный функционал предоставляется отдельной подсистемой БСП.
- Ограниченный срок поддержки версий формата.
И так, мы рассмотрели, что такое универсальный формат – сердце новой технологии обмена. Дальше, поговорим о средствах его реализации:
Примечание: В некоторых источниках я даже встречал названия обмена данными через универсальный формат – обмен XDTO.
Вообще, что такое XDTO и его реализация в 1С лучше всего описано в серии статей Андрея Овсянкина.
Как было написано выше, XDTO пакеты необходимы для хранения описания формата. Собственно, без их использования нельзя будет называть обмен - обменом через ED.
Не вдаваясь в подробности, «XDTO пакеты» это преобразованные схемы XML, они являются описанием типов бизнес – объектов, используемых при обмене данными. Преобразованные потому, что не все способы представления данных в XML могут быть представлены напрямую в XDTO.
Например, представление данных в виде текста между тегами «<Message>Текст сообщения</ Message>», нельзя представить в виде объектной модели XDTO, и она будет сымитирована. При загрузке в XDTO пакет будет добавлено дополнительное свойство, имитирующее текст сообщения. Подробнее об этом во второй статье Андрея Овсянкина тут.
Информация из пакетов XDTO используются объектами фабрики XDTO для типизации данных и их быстрого преобразования в XML и обратно.
Для XDTO пакета обязательно указывается пространство имен (принято использовать произвольный url адрес), которое является уникальным идентификатором каждого конкретного пакета. Пример описание XDTO пакета:
«Фабрика XDTO» – это объект платформы 1С. Также «Фабрика XDTO» - это глобальная переменная системы с типом «Фабрика XDTO», к которой можно обращаться для создания новых объектов фабрики. Объекты фабрики XDTO, это привычные нам объекты, обладающие свойствами, доступными через точку. Свойства эти описаны в пакете XDTO, на основании которого каждый такой объект создан.
Однако, важно понимать, что объекты фабрики XDTO не имеют абсолютно ни какой связи с объектами ИБ, не смотря на внешнюю схожесть. Фабрика XDTO имеет представление только об XML типах, описанных в пакетах XDTO.
Пример:
ТипОбъектаТовар = ФабрикаXDTO.Тип(“http://my_url_adres/”, “Товар”);
Товар = ФабрикаXDTO.Создать(ТипОбъектаТовар );
«http://my_url_adres/» - это пространство имен XDTO пакета, в котором существует описание для объекта «Товар». Далее, можно заполнять свойства объекта «Товар», как обычного объекта системы.
Удобством использования фабрики XDTO является то, что ее объекты очень легко преобразуются в XML для последующей выгрузки в файл обмена.
Пример:
XMLДокумент = Новый ЗаписьXML;
ФабрикаXDTO.Записать(XMLДокумент , Товар);
Примечание: Механизмы, реализованные в БСП не требуют от разработчика непосредственной работы с объектами фабрики XDTO. Но, для понимания общей картины происходящего, я думаю, будет не лишним иметь об этом представление.
Ну что же, давайте рассмотрим основной функционал БСП, реализующий механизмы обмена данными.
Компоненты, предоставляемые БСП
Под термином «компоненты», я подразумеваю набор объектов, которые необходимы для реализации механизмов обмена данными через ED. Строго говоря, можно выполнять обмен данными и не используя их. Но тогда, все процедуры по преобразованию данных, выполнению обработчиков, работе с фабрикой XDTO, регистрации объектов к выгрузке - придется реализовывать самостоятельно.
Подсистема БСП предлагает следующие объекты для реализации механизмов обмена:
- План обмена – необходим для формирования списка объектов к выгрузке. Принципиальным отличием от обмена по правилам КД 2.0 является то, что при обмене через ED нет необходимости создавать отдельный план обмена для каждого типа конфигураций – корреспондентов. Планов обмена необходимо ровно столько, сколько используется различных версий формата. Также, в модуле менеджера плана обмена указываются некоторые необходимые настройки: версия формата, ограничения для выгрузки данных, значения «по умолчанию».
- Обработка «Конвертация объектов XDTO» - точка входя. Обработка, с помощью которой выполняются настройки обменов, выгружаются и загружаются данные.
- Общий модуль «ОбменДаннымиXDTOСервер» - модуль, в котором реализованы основные процессы выгрузки и загрузки данным.
- Общий модуль «ОбменДаннымиПредопределяемый» - модуль, в котором можно переопределить стандартное поведение системы. Например, добавить дополнительный план обмена или переопределить менеджер обмена данными.
- Общий модуль «ОбменДаннымиСобытия» - модуль, в котором реализованы алгоритмы регистрации объектов к выгрузке.
- Подписки на события – регистрация объектов к выгрузке при их добавлении, изменении, удалении.
- Общие команды – команды для выполнения настройки обменов данными и их непосредственного выполнения.
Так же как и в старой технологии, в новой необходимы правила конвертации. Только, правила теперь находятся в общем модуля каждой конфигурации, которая участвует в процессе обмена. Общий модуль имеет стандартное наименование «МенеджерОбменаЧерезУниверсальныйФормат». Название, в принципе, может быть любым.
Хранение правил внутри конфигурации имеет как преимущества, так и недостатки. Например, достаточно удобно выполнять отладку механизмов выгрузки и загрузки. Также, не значительные доработки можно выполнить непосредственно, корректировкой модуля менеджера обмена, без использования КД 3.0. Пример такой доработки можно посмотреть в отдельной статье.
Недостатком такого подхода можно считать необходимость обновлять конфигурацию базы данных каждый раз, когда требуется выполнить модификацию правил конвертации. Существует, правда, возможность использования правил из модуля внешней обработки, но тогда будут потеряны и преимущества.
Для создания и корректировки правил конвертации применяется отдельная конфигурация – КД 3.0. В данной конфигурации можно настроить соответствия между объектами информационных баз и объектами используемой версии формата. Также, можно написать программный код для обработки ряда событий. Например, можно переопределить или указать дополнительные данные перед их преобразованием в XDTO объекты в процессе выгрузки. Выполнить какие-либо действия с данными перед их записью в объекты ИБ в процессе загрузки. Более подробно все основные события выгрузки и загрузки данных, будут рассмотрены в следующих статьях.
Рассмотрим, каким образом происходит выгрузка данных.
Обход выборки и подбор правил конвертации объектов
В первую очередь анализируется состав объектов плана обмена. Все зарегистрированные к выгрузке объекты помещаются в выборку и поочередно обходятся.
Для каждого найденного объекта подбираются и начинают выполняться правила обработки данных, которые определены в общем модуле «МенеджерОбменаЧерезУниверсальныйФормат». Основное назначение правил обработки данных – это подбор правила конвертации для каждого объекта. В общем случае, правил конвертации может быть несколько для одного типа объектов.
Конвертация объекта и всех его свойств в набор вложенных структур
Выполняются выбранные правила конвертации объекта, которые состоят из правил конвертации отдельных свойств объекта и его предопределенных данных. На этом этапе формируется структура данных. Как было описано выше, есть возможность вмешаться в этот процесс и выполнить дополнительные действия с данными. Итогом процесса конвертации являются подготовленные структуры с описанием передаваемых данных. Это еще не объекты фабрики XDTO, это просто вложенные друг в друга структуры, с конечными данными простых типов (число, строка, дата).
Сериализация данных и выгрузка в XML
На самом деле, существует два вида сериализации: сериализация XDTO и сериализация XML. Первый механизм преобразует объекты информационной базы в объекты XDTO. Второй преобразует объекты XDTO в XML.
В нашем случае, данные уже преобразованы в набор вложенных структур со значениями простых типов. Тем не менее, сериализация XDTO все равно необходима, так как фабрика XDTO имеет представление исключительно только об XML – типах.
На данном этапе происходит создание объектов фабрики XDTO. На основании данных подготовленных структур происходит заполнение этих объектов. Выполняется приведение типов в соответствие с описанием в XDTO пакете формата. Также, выполняется проверка соответствия подготовленных структур и описания формата: проверка типов, наличие всех обязательных свойств и прочее. В случае выявления ошибок, выполнение выгрузки данных прерывается.
Если все данные успешно перенесены в объекты фабрики XDTO, выполняется преобразование данных в XML и выгрузка в файл обмена.
На этом общее описание процесса выгрузки можно завершить. Более детально оно рассмотрено в этой статье.
Процесс загрузки данных, в общем, аналогичен процессу выгрузки, только все происходит в обратном порядке:
- Выполняется чтение данных из файла обмена
- Выполняется создание объектов фабрики XDTO на основании данных XML и типов в описании формата.
- Каждый объект преобразуются в набор вложенных структур, для удобного доступа к свойствам из обработчиков.
- Выполняется поиск правила обработки данных и его выполнение.
- Обходятся все доступные для объекта правила конвертации.
- Происходит конвертация объекта и его свойств из набора вложенных структур в данные ИБ. На данном этапе можно получить какие-либо дополнительные данные из преобразованного объекта XDTO и записать их в дополнительные свойства формируемого объекта ИБ, для последующей обработки.
- Происходит поиск загруженного объекта в ИБ – приёмнике. По умолчанию поиск происходит по внутреннему уникальному идентификатору. Это поведение можно изменить, я расскажу об этом более подробно в следующих статьях.
- Выполняются дополнительные действия с перед записью найденного или нового объекта.
- Выполняются дополнительные действия после загрузки всех данных.
Наверно, на этом я закончу вводную статью, так как, она и так получилась достаточно объемной, неожиданно для меня. Надеюсь, что общее представление о новом формате обмена данными у Вас сформировалось, в следующих статьях я планирую более детальное рассмотрение отдельных аспектов. Обязательно буду приводить примеры.
Ставьте плюсик, если моё начинание кажется Вам полезным J.
В следующих статьях я планирую более подробно рассмотреть следующие темы:
- Процесс выгрузки данных, обработчики выгрузки.
- Процесс загрузки данных, поиск объектов в ИБ, обработчики загрузки.
- Структура XDTO пакета – как его читать, дополнять, загружать и выгружать.
- Импорт подсистем БСП для реализации обмена данными в собственных ИБ
- Работа с КД 3.0
Другие мои статьи из серии «Новый подход к обмену данными»