Как я и предполагал, тема обмена данными через ED оказалась актуальной. Предлагаю Вашему вниманию следующую статью из цикла. Тем, кто не читал мою первую, вводную статью, и не знаком с механизмом обмена через ED, рекомендую прочесть сначала ее – первая статья.
Как я уже говорил в первой статье, написание правил для выгрузки и загрузки данных это разные, в общем случае, не связанные друг с другом, процессы.
Поговорим более подробно про процесс выгрузки данных.
Содержание
- Обработчик «Перед конвертацией»
- Выборка и обход зарегистрированных к выгрузке объектов
- Обработка данных по правилам обработки
- Обработчик «После конвертации»
- Полезные процедуры общего модуля «ОбменДаннымиXDTOСервер», используемые при выгрузке данных
- Основные элементы структуры «КомпонентыОбмена»
Ниже приведена общая схема выгрузки данных, которую мы будем рассматривать в статье:
Инициализация параметров, обработчик «Перед конвертацией»
В самом начале выполнения обмена данными происходит инициализация и заполнение структуры «КомпонентыОбмена». Основные элементы структуры смотрите здесь.
Далее, выполняется обработчик «Перед конвертацией», в котором можно выполнить любые необходимые действия перед выгрузкой данных. Например, можно заполнить параметры, заданные в настройках конвертации в КД 3.0:
КомпонентыОбмена.ПараметрыКонвертации.ВыгружатьГруппыТоваров = Ложь;
К значениям данных параметров можно обращаться из других обработчиков выгрузки.
Выборка и обход зарегистрированных к выгрузке объектов
На данном этапе выбираются объекты, зарегистрированные для узла плана обмена, в который осуществляется выгрузка. Выполняется обход результата выборки. Проверяется вид данных. В зависимости от вида данных происходит либо выгрузка удаления объекта, либо выгрузка объекта по правилам. В случае выгрузки по правилам, выполняется проверка объекта на соответствие правилам регистрации. Если объект по каким-то причинам не подходит под текущие правила, также выгружаются данные о его удалении. Если объект прошел проверку, выполняется поиск правила обработки данных по типу объекта.
Обработка данных по правилам обработки
Правила обработки данных (ПОД) настраиваются в КД 3.0 для каждого типа объектов. В ПОД можно указать используемые правила конвертации объектов (ПКО). Допустимо указание произвольного количества ПКО. Если один и тот же объект может быть выгружен по разным ПКО, в зависимости от значений его реквизитов, требуется включить флаг «Выгружать очистку данных по неиспользуемым ПКО». Тогда по всем не используемым ПКО будет выгружаться информация об удалении объекта.
В ПОД может быть указан признак произвольной выборки данных - «Способ выборки >> Произвольный алгоритм»:
Данный режим применяется для реализации обмена данными без использования плана обмена. Объекты к выгрузке, в данном случае, определяются в обработчике «Выборка данных». Это может потребоваться, например, для выгрузки начальных остатков.
Основное назначение данного обработчика – разрешение или запрещение доступных правил конвертации для конкретного объекта выборки:
Основные параметры обработчика:
- КомпонентыОбмена – структура с общими параметрами текущего обмена данными. Параметр присутствует во всех обработчиках обмена данными. Основные ключи структуры смотрите в этом разделе.
- ДанныеИБ – доступ к данным выгружаемого объекта: справочника или документа.
- ИспользуемыеПКО – структура, ключами которой являются ПКО, выбранные для данного ПОД. Значения ключей имеют тип «булево». Значение «Истина» разрешает использовать данное ПКО, значение «Ложь» - запрещает. По умолчанию все значения равны «Истина».
Пример:
ИспользованиеПКО.Справочник_Номенклатура_Отправка = НЕ ДанныеИБ.ЭтоГруппа;
Также, данный обработчик можно использовать для принудительной выгрузки дополнительных объектов:
ОбменДаннымиXDTOСервер.ВыгрузкаОбъектаВыборки(КомпонентыОбмена, ДанныеИБ.Владелец);
Используется для реализации произвольной выборки объектов, если для ПОД установлен признак произвольной выборки данных.
Обработчик должен вернуть массив объектов ИБ либо массив структур к выгрузке.
Процесс выгрузки данных с произвольным алгоритмом не автоматизирован в БСП полностью. В общем модуле «ОбменДаннымиXDTOСервер» есть механизмы для его реализации, но значительную его часть необходимо реализовывать самостоятельно.
Для использования ПОД с произвольной выгрузкой, необходимо перед выгрузкой данных определить Сценарий выгрузки. Это элемент структуры «КомпонентыОбмена», с типом – «ТаблицаЗначений». В таблице сценариев должны быть перечислены все ПОД с произвольным алгоритмом выгрузки:
КомпонентыОбмена.СценарийВыгрузки = новый ТаблицаЗначений;
КомпонентыОбмена.СценарийВыгрузки.Колонки.Добавить("ИмяПОД");
НоваяСтрока = КомпонентыОбмена.СценарийВыгрузки.Добавить();
НоваяСтрока.ИмяПОД = "Документ_ОстаткиТоваров_Отправка";
Также, необходимо дополнительно указать, что обмен выполняется без использования плана обмена:
КомпонентыОбмена.ЭтоОбменЧерезПланОбмена = Ложь;
Конвертация данных происходит по правилам, которые состоят из правил конвертации объектов (ПКО), правил конвертации свойств объектов (ПКС) и правил конвертации предопределенных данных (ПКПД). Все они настраиваются в конфигурации КД 3.0.
Процесс конвертации объектов состоит их конвертации всех его свойств. Каждое свойство объекта, конвертируется согласно выбранному для него ПКО либо ПКПД:
Конвертация свойств объектов выполняется в два этапа, между которыми вызывается обработчик «При отправке». В обработчике можно дополнить или переопределить выгружаемые данные.
Следует иметь в виду, что в обмене через ED объекты по ссылке не выгружаются полностью, как это было в обмене по правилам КД 2.0. По ссылке выгружаются только ключевые реквизиты объекта, которые необходимы для поиска в базе-приемнике. В некоторых случаях в базе-приемнике могут создаваться новые объекты по переданным ключевым свойствам, это будет подробно описано в следующее статье.
Конвертация свойств первого этапа
На данном этапе происходит конвертация свойств, для которых не установлен признак «Использовать алгоритм конвертации». Если свойство ссылочное, требуется обязательное указание правила конвертации свойства. Если для ссылочного свойства не указано правило конвертации и не установлен флаг «Использовать алгоритм конвертации» - свойство не будет выгружено:
Обработчик выполняется после первого этапа конвертации свойств. Его нужно использовать для произвольного заполнения свойств, для которых установлен флаг «Использовать алгоритм конвертации».
Основные параметры обработчика:
- КомпонентыОбмена – структура с общими параметрами текущего обмена данными.
- ДанныеИБ – данные выгружаемого объекта: справочника или документа.
- ДанныеXDTO – промежуточная структура, данные которой будут использоваться для создания объектов XDTO.
- СтекВыгрузки – массив, который содержит ссылки на объекты, выгруженные на данном шаге обмена данными. Последний элемент массива - это всегда ссылка на текущий выгружаемый объект. По данным стека выгрузки можно определить, что объект выгружен «По ссылке». Также, можно определить родителя выгружаемого объекта. Используя данные стека выгрузки можно поставить условие на выполнения алгоритмов, которые не должны выполнятся в случае выгрузки объекта по ссылке.
Переопределенные в обработчике свойства необходимо добавлять к структуре «ДанныеXDTO». Если свойство простое, оно переносится в структуру «ДанныеXDTO» без изменений. Если свойство составное и для него не указано правило конвертации в настройках ПКС, добавлять его нужно в виде инструкции. Инструкция – это структура состоящая из двух элементов: правило конвертации свойства и само свойства.
Примеры:
ДанныеXDTO.Вставить("АдресДоставки", АдресДоставкиСтрокой);
Контрагент = новый Структура("ИмяПКО, Значение", "Справочник_Контрагенты_Отправка", Покупатель);
ДанныеXDTO.Вставить("Контрагент ", Контрагент);
Коллекции необходимо добавлять в структуру «ДанныеXDTO» в виде таблиц значений. Свойствами строк таблицы, могут являться данные простых или составных типов. Для составных типов также могут быть использованы инструкции, если для свойств не заданы правила конвертации в настройках ПКС.
Пример:
ТабДопРеквизитов = новый ТаблицаЗначений;
ТабДопРеквизитов.Колонки.Добавить("Свойство");
ТабДопРеквизитов.Колонки.Добавить("ЗначениеСвойства");
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
НоваяСтрока = ТабДопРеквизитов.Добавить();
НоваяСтрока.Свойство = новый Структура("ИмяПКО, Значение", "Справочник_ДополнительныеРеквизиты_Отправка", ВыборкаДетальныеЗаписи.Свойство);
НоваяСтрока.ЗначениеСвойства = ВыборкаДетальныеЗаписи.Значение;
КонецЦикла;
ДанныеXDTO.Вставить("ДополнительныеРеквизиты", ТабДопРеквизитов);
Конвертация свойств второго этапа
Правила конвертации второго этапа выполняются только в том случае, если определен обработчик «При отправке».
На данном этапе происходит конвертация свойств, для которых установлен признак «Использовать алгоритм конвертации». Указание правил конвертации для таких свойств в настройках ПКС не является обязательным. Они могут быть заданы в инструкциях в обработчике «При отправке»:
Обработчик «После конвертации»
В данном обработчике можно выполнить произвольные действия после конвертации и выгрузки в файл обмена всех зарегистрированных объектов.
Полезные процедуры общего модуля «ОбменДаннымиXDTOСервер», используемые при выгрузке данных
Данные процедуры могут быть использованы в обработчиках выгрузки, а также при реализации собственных алгоритмов.
ИнициализироватьКомпонентыОбмена – выполняет инициализацию компонентов обмена данными, создание и первоначальное заполнение структуры «КомпонентыОбмена».
ОткрытьФайлВыгрузки – открывает и подготавливает файл выгрузки данных.
ПроизвестиВыгрузкуДанных – выполняет выгрузку данных согласно правилам и параметрам обмена.
ВыгрузкаОбъектаВыборки – выполняет выгрузку объекта по правилам конвертации. Можно использовать в обработчиках для выгрузки произвольных объектов.
ВыгрузитьСвойство – выполняет преобразование свойства объекта ИБ в элемент структуры «ДанныеXDTO».
ПОДПоОбъектуМетаданных – поиск правил обработки данных по типу объекта метаданных.
ПКОПоИмени – выполняет поиск правила конвертации объекта по имени в таблице «ПравилаКонвертацииОбъектов» структуры «КомпонентыОбмена»
ДанныеXDTOИзДанныхИБ – выполняет преобразование данных ИБ в структуру «ДанныеXDTO».
ОбъектXDTOИзДанныхXDTO – выполняет создание объекта XDTO по данным структуры «ДанныеXDTO».
ЗаписьЖурналаРегистрацииОбменДанными – выполняет запись произвольных данных в журнал регистрации.
Основные элементы структуры «КомпонентыОбмена»
Структура, содержащая всю информацию по текущему обмену данными. Передается в качестве параметра во все обработчики при выгрузке и загрузке данных.
Общие элементы
ВерсияФорматаОбмена – версия используемого пакета XDTO, например – «1.6».
XMLСхема – пространство имен используемого пакета XDTO.
МенеджерОбмена – общий модуль, в котором находятся правила конвертации или модуль внешней обработки.
УзелКорреспондента - ссылка на узел плана обмена корреспондента.
НаправлениеОбмена – одно из двух значений: «Отправка» или «Получение».
ЭтоОбменЧерезПланОбмена – флаг, указывающий, что обмен данными выполняется с использованием плана обмена.
ФлагОшибки – флаг, указывающий, что в процессе обмена данными произошла ошибка.
СтрокаСообщенияОбОшибке – описание ошибки, произошедшей в процессе обмена данными.
ПравилаОбработкиДанных – таблица значений со всеми правилами обработки данных.
ПравилаКонвертацииОбъектов – таблица значений со всеми правилами конвертации объектов.
ПараметрыКонвертации – структура параметров, которые определены в настройках конвертации.
Элементы, используемые при выгрузке данных
ВыгруженныеОбъекты – массив содержащий все объекты, выгруженные в текущей сессии выгрузки данных.
КоличествоОбъектовКВыгрузке – количество объектов, зарегистрированных к выгрузке.
СчетчикВыгруженныхОбъектов – позиция текущего выгружаемого объекта.
СоответствиеРегистрацияПоНеобходимости – список объектов (соответствие), для которых указан признак выгрузки «ВыгружатьПриНеобходимости».
ВыгруженныеПоСсылкеОбъекты – массив объектов, которые выгружены по ссылкам в процессе выгрузки данных. Ссылки на объекты добавляются в массив, если определены правила регистрации (ПРО) для объекта и в правиле указан режим выгрузки «ВыгружатьПриНеобходимости».
СценарийВыгрузки – таблица значений с ПОД, которые используются для произвольной выгрузки. Применяется для выгрузки данных без использования плана обмена.
ТаблицаПравилаРегистрацииОбъектов – таблица значений со всеми правилами регистрации объектов (в случае, если ПРО заданы для обмена данными).
СвойстваУзлаПланаОбмена – структура, содержащая значения реквизитов плана обмена, которые используются для настройки режимов выгрузки объектов в ПРО («ВыгружатьВсегда», «ВыгружатьПоУсловию», «ВыгружатьПриНеобходимости», «ВыгружатьВручную», «НеВыгружать»).
На этом, я завершаю описании процесса выгрузки данных через ED.
Продолжение следует…
Если статья Вам понравилась, ставьте плюсик J
Другие мои статьи из серии «Новый подход к обмену данными»