Содержание
Часто бывают ситуации, когда модуль, сформированный через Конвертацию Данных 3, нуждается в доработке. Или нужно внести изменения в уже существующие правила. Именно для таких случаев может пригодиться эта статья.
Используемые в статье сокращения:
- ED - Enterprise Data,
- Менеджер обмена – модуль «МенеджерОбменаЧерезУниверсальныйФормат»,
- КД3 – Конвертация данных 3.1,
- ПОД – Правило обработки данных,
- ПКО – Правило конвертации объекта,
- ПКС – Правило конвертации свойств.
Расширение формата ED в модулях
Если вы используете расширенный формат ED, тогда нужно в модуле «ОбменДаннымиПереопределяемый» изменить процедуру «ПриПолученииДоступныхРасширенийФормата». В этой процедуре указываем для «РасширенияФормата» ключ — URI пространства имен расширяющего пакета и номер расширяемой версии формата.
Пример: РасширенияФормата.Вставить("http://tut.name/EnterpriseData/1.5.6.1", "1.5");
Не стоит забывать, в ПКО расширяемых объектов формата нужно указать, что это объект из расширения. Заполняем «ПространствоИмен» ПКО и вызываем процедуру «ОбменДаннымиXDTOСервер.ИнициализироватьРасширение
ПравилаКонвертацииОбъекта».
Когда новый ПОД добавлен в менеджер обмена, нужно дополнить текст процедуры «ЗаполнитьПравилаОбработкиДанных» вызовами ПОД для расширенного формата.
Аналогично при добавлении ПКО дополняем процедуру «ЗаполнитьПравилаКонвертацииОбъектов», а при добавлении ПКПД «ЗаполнитьПравилаКонвертацииПредопределенныхДанных».
Если в правилах были определены обработчики ВыборкаДанных, ПриОбработке, ПриОтправкеДанных, ПриКонвертацииДанныхXDTO и т. д., то условия их вызова добавятся в процедуры «ВыполнитьПроцедуруМодуляМенеджера» и «ВыполнитьФункциюМодуляМенеджера».
Добавление ПОД в менеджер обмена
Информация из справки КД3: ПОД предназначены для определения состава данных, подлежащих выгрузке и загрузке. Правило может использоваться либо для отправки, либо для получения. Правила обработки, предназначенные для выгрузки данных, могут выбирать данные двумя способами: стандартная выборка, либо произвольный алгоритм.
Сначала нужно добавить правило обработки и задать ему Имя, ОбъектВыборкиМетаданные (для отправки данных), ОбъектВыборкиФормат (для получения), Обработчики событий и параметр очистки данных.
ОчисткаДанных обычно используется если для ПОД есть несколько ПКО. Как правило, этот флаг включается, если один и тот же объект конфигурации может оказаться в разных объектах конфигурации в базе-получателе.
Также нужно определить используемые ПКО для этого объекта.
Теперь, когда ПОД добавлен в менеджер обмена, нужно дополнить текст процедуры «ЗаполнитьПравилаОбработкиДанных» вызовами инициализации ПОД для расширенного формата.
Добавление ПКО в менеджер обмена
Информация из справки КД3: ПКО содержит правила преобразования объектов конфигурации в объекты формата (правило для отправки) и объектов формата в объекты конфигурации (правило для получения). В простых случаях одно и то же правило конвертации может использоваться и для отправки, и для получения. Для преобразования групп справочников используются отдельные правила с установленным признаком «Правило для группы справочника».
Первым делом нужно инициализировать ПравилоКонвертации и задать для него: имя, объект данных, объект формата, обработчики и вариант идентификации объектов. Если используется расширение формата, также нужно добавить пространство имен и инициализировать расширение.
Далее нужно добавить ПКС для нашего ПКО. Это соответствие свойств конфигурации и свойств формата. А также определить свойства, которые заполняются с помощью алгоритмов. Если ваше свойство добавлено в расширении формата, необходимо задать и пространство имен.
Конвертация табличных частей
Для конвертации табличных частей создаются группы: правила конвертации групп свойств. В простых случаях, если есть прямое соответствие между реквизитами, можно настроить прямую конвертацию между табличными частями. В более сложных случаях рекомендуется заполнять табличные части с помощью алгоритмов.
Обработчики событий ПКО:
- При отправке. Выполняется при отправке данных.
- При конвертации данных XDTO. Выполняется в ходе получения данных, при конвертации объекта XDTO в объект информационной базы.
- Перед записью полученных данных. Выполняется в ходе получения данных, перед записью полученного объекта информационной базы.
- После загрузки всех данных. Выполняется для каждого объекта, загруженного по правилу конвертации, на этапе после получения всех данных.
Вариант идентификации заполняется для правил получения данных. Определяет идентификацию объекта при загрузке. Возможные варианты: по полям поиска, по уникальному идентификатору, сначала по уникальному идентификатору, а потом по полям поиска.
Идентификация по полям поиска. Можно определить несколько комбинаций полей поиска, которые будут использованы последовательно при идентификации.
И наконец, дополняем процедуру «ЗаполнитьПравилаКонвертацииОбъектов» и «ВыполнитьПроцедуруМодуляМенеджера»
Процедуры, не зависящие от объектов обмена
Есть несколько обработчиков событий, которые не привязаны к объектам обмена.
Обработчик «ПередКонвертацией». Предназначен для алгоритмов, которые выполняются перед конвертацией данных. Это событие отрабатывает и при выгрузке, и при загрузке данных. Его параметром будут «КомпонентыОбмена», структура, содержащая параметры и правила обмена, для текущего сеанса обмена.
Обработчик «ПередОтложеннымЗаполнением». Событие отрабатывает после загрузки всех данных, но до того, как будет исполнено отложенное заполнение объектов. Его параметром тоже являются «КомпонентыОбмена».
Обработчик «ПослеКонвертации», это событие выполняется после конвертации. Как и обработчик «ПередКонвертацией», он отрабатывает как при выгрузке, так и при загрузке данных. Но надо учитывать, что если выполняется загрузка данных, то этот обработчик запустится после выполнения отложенного заполнения. После срабатывания этого обработчика, будут выполнены отложенная запись и отложенное проведение. Параметром для «После конвертации» также являются «КомпонентыОбмена».
Использование поля «AdditionalInfo»
Не всегда модифицирование XDTO-пакета является лучшим решением. Например, если нам нужно передать только одно дополнительное значение для объекта и до этого никто не изменял данный обмен, в таком случае можно воспользоваться полем «AdditionalInfo», для передачи таких дополнительных данных. Они будут передаваться с каждым объектом в составе пакета обмена.
Для начала в модуле менеджера базы источника создадим процедуру, которая будет вставлять наши данные в поле «AdditionalInfo».
Потом в модуле менеджера базы источника найдем процедуру с именем по шаблону ПКО_{имя объекта}_ПриОтправкеДанных. Лучше всего добавить эту процедуру в расширение перед ее изменением.
После этого вставляем следующий код:
Аналогичным образом, используя поиск, находим нужную процедуру с именем по шаблону ПКО_{имя объекта}_ПриКонвертацииДанныхXDTO. Заимствуем его также в новое расширение.
Добавляем код, но уже не в конце, а в начале процедуры:
Если с полученными данными необходимо произвести дополнительные действия при записи, тогда нужно внести изменения в процедуру с именем по шаблону ПКО_{имяобъекта}_ПередЗаписьюПолученныхДанных.
Перенос признаков ПометкаУдаления и Проведен
На сегодняшний день в обменах, основанных на ED, нет переноса признаков ПометкаУдаления и Проведен. Но есть как минимум 3 способа как реализовать их передачу:
- добавить необходимый признак в расширении XDTO-пакета и описать правила для него;
- использовать поле «AdditionalInfo»;
- использовать признак «Выгружать очистку данных по неиспользуемым ПКО».
Как добавить правила или как использовать поле «AdditionalInfo», мы уже разобрали. Остановимся подробнее на третьем пункте.
Первое, что надо помнить, в правилах регистрации не должно быть таких отборов:
- ПометкаУдаления = Ложь;
- Проведен = Истина.
В модуле менеджера изменяем ПОД нашего объекта так, чтобы параметр «ОчисткаДанных» был равен «Истина».
Чтобы в КД3 появилась возможность установить признак «Выгружать очистку данных», переключатель «Количество правил конвертации» должен отображать статус «Несколько».
Если мы используем только одно ПКО для данного ПОД, в обработчике «При обработке» добавляем такое условие:
Добавлять «ФиктивноеПКО» нужно только для имитации множественного числа ПКО. Результатом этих действий будет добавление в файл обмена команды на удаление объекта по ссылке.
Остались вопросы?
Проконсультируйтесь с нашими специалистами