При эксплуатации информационных систем 1С часто возникает ситуация, когда настроенный ранее обмен данными «ломается» после очередного обновления конфигураций. Если обмен построен на основе XML-правил, зашитых внутрь внешней обработки выгрузки/загрузки, то любое изменение структуры метаданных (переименование реквизита, добавление новых полей, изменение типов данных) делает правила неактуальными. В этой статье мы подробно разберем, как извлечь такие правила обмена, обновить под новую структуру метаданных и вернуть обратно в обработку.
Прежде чем приступать к редактированию правил, нам необходимо достать их из внешней обработки. Как правило, разработчики хранят файлы правил обмена прямо внутри обработки в виде макета. Выясним, как их оттуда извлечь:
Файл — Открыть.Макеты. Обычно макет с правилами называется ПравилаОбмена, ПравилаОбменаТекст или аналогично.Ctrl + A, скопируем его (Ctrl + C), создадим на диске пустой текстовый файл, вставим туда скопированное содержимое и сохраним его с расширением .xml. При сохранении обязательно выберем кодировку UTF-8.Сохранить макет в файл... и сохраним его на диск как XML-файл.Чтобы «Конвертация данных» поняла изменения, которые произошли в наших базах после обновления, нам необходимо выгрузить новые описания структуры метаданных обеих конфигураций. Для этого используется специализированная обработка, поставляемая вместе с шаблоном конфигурации «Конвертация данных».
В зависимости от версии платформы нам понадобятся обработки:
MD83Exp.epf — для баз на платформе 1С:Предприятие 8.3.MD82Exp.epf — для баз на платформе 1С:Предприятие 8.2.Рассмотрим последовательность действий для выгрузки структуры:
1С:Предприятие.MD83Exp.epf.source_metadata.xml).Выгрузить.target_metadata.xml).Перейдем к работе непосредственно в базе КД 2.1. Проанализируем критически важный момент: что загружать сначала — правила или структуру метаданных?
Опытные специалисты рекомендуют сначала обновить метаданные конфигураций в КД, а затем импортировать правила обмена. Если сделать наоборот (загрузить старые правила в КД, где еще нет описания новых метаданных), то программа автоматически создаст «пустые» («фантомные») объекты метаданных на основе старых правил. Это может привести к дублированию объектов метаданных и трудноисправимым ошибкам сопоставления.
Разберем правильный алгоритм:
Загрузка структуры конфигурации.source_metadata.xml). Если эта конфигурация уже присутствовала в КД, обязательно выберем режим «Обновить существующую конфигурацию».target_metadata.xml.Загрузка правил обмена. Укажем путь к XML-файлу с правилами, который мы извлекли на Шаге 1, укажем соответствующие конфигурации источника и приемника и нажмем Выполнить загрузку. КД автоматически сопоставит правила с обновленными метаданными.Теперь наши правила находятся в КД 2.1, а структуры конфигураций актуализированы. Выясним, как добавить измененные или новые реквизиты в правила обмена:
Конвертация свойств.Часто обмен «ломается» из-за того, что в обработчиках событий КД используется старый программный код. Нам необходимо вручную проверить вкладки обработчиков событий в ПКО, ПКС и ПВД (Правила выгрузки данных).
Например, в обработчике «Перед выгрузкой» ПКС мог содержаться старый код обращения к реквизиту, который при обновлении конфигурации был удален или переименован. Если код содержит ссылки на несуществующие реквизиты, при обмене возникнет критическая ошибка.
Посмотрим на пример безопасного обращения к реквизитам объекта, которые могут отсутствовать в старых версиях метаданных:
// Безопасное получение значения реквизита, если структура могла измениться
Если Метаданные.Документы.РеализацияТоваровУслуг.Реквизиты.Найти("НовыйРеквизит") <> Неопределено Тогда
Значение = Источник.НовыйРеквизит;
Иначе
Значение = Справочники.ЗначенияСвойствОбъектов.ПустаяСсылка();
КонецЕсли;
Перед тем как внедрять правила обратно в основную обработку, их необходимо протестировать. Для этого используется универсальная обработка обмена:
Сохранить правила обмена.Универсальный обмен данными в формате XML (V8Exchan83.epf).Дополнительные настройки в обработке обмена, выгрузим программный код обработчиков во внешний модуль и пройдем отладчиком по шагам в Конфигураторе для локализации проблемы.После успешного тестирования обмена вернем обновленные правила в нашу первоначальную обработку:
Загрузить из файла... и укажем наш новый XML-файл правил обмена.Теперь наша доработанная внешняя обработка содержит полностью обновленные правила обмена и готова к работе в обновленных базах данных.