При регулярном обновлении типовых или доработанных конфигураций (например, 1С:ЗУП, 1С:УТ, 1С:ERP) на новые релизы неизбежно меняется состав метаданных: добавляются новые реквизиты, удаляются устаревшие, меняются типы данных и состав табличных частей. В результате существующие правила конвертации данных (КД 2.1) могут перестать корректно выгружать или загружать данные. Разберем по шагам правильный алгоритм обновления метаданных в базе КД 2.1, выясним причины появления красной подсветки правил и устраним типовые системные ошибки при сравнении правил и загрузке конвертаций.
Частая ошибка разработчиков — попытка создать в базе 1С:Конвертация данных новые объекты конфигураций с последующим ручным переносом всех алгоритмов и правил. В КД 2.1 предусмотрен штатный механизм обновления существующей структуры метаданных без потери созданных правил конвертации объектов (ПКО), свойств (ПКС) и значений (ПКЗ).
Рассмотрим правильную последовательность действий:
MD83Exp.epf (для платформы 1С:Предприятие 8.3). Обработка должна быть взята из комплекта поставки используемого релиза конфигурации «Конвертация данных». Выгружаем описание структуры метаданных в XML-файл.Загрузка структуры конфигурации (пункт меню Структура конфигурации -> Загрузка структуры конфигурации).Многие разработчики пугаются, когда после обновления метаданных список ПКО и ПКС окрашивается в красный цвет. Проанализируем причину такого поведения конфигурации.
Красная подсветка в КД 2.1 — это штатный диагностический механизм, предназначенный для привлечения внимания разработчика к несоответствиям. Красным цветом выделяются:
Для исправления подсветки переходим по проблемным ПКО и выполняем корректировку: удаляем устаревшие ПКС, перевыбираем изменившиеся реквизиты либо используем кнопку «Синхронизировать свойства» на вкладке «Правила конвертации свойств» для автоматического сопоставления новых полей.
Если правил конвертации много, ручной просмотр каждого объекта занимает много времени. Для ускорения процесса воспользуемся встроенными инструментами:
При попытке выполнить сравнение и объединение двух конвертаций через обработку СравнениеИОбъединениеПравилОбмена разработчики часто сталкиваются с критической ошибкой:
{Обработка.СравнениеИОбъединениеПравилОбмена.Форма.Форма.Форма(2754)}: Операции сравнения на больше-меньше допустимы только для значений совпадающих примитивных типов (Булево, Число, Строка, Дата) Если ИндексКартинки >= 0 Тогда
Выясним причину ошибки: при формировании дерева объектов в процедуре УстановитьИндексКартинки обработка заполняет соответствие индексов и картинок для типов метаданных. Однако для объектов типа БизнесПроцесс, ТочкаМаршрутаБизнесПроцесса и Задача соответствия не определены. В результате функция возвращает значение Неопределено вместо числового индекса, и операция сравнения ИндексКартинки >= 0 завершается аварийно.
Для устранения ошибки откроем конфигуратор базы КД 2.1, перейдем в форму обработки СравнениеИОбъединениеПравилОбмена и найдем процедуру УстановитьИндексКартинки. В блоке инициализации соответствия добавим недостающие типы объектов:
СоответствияИндексов = Новый Соответствие;
СоответствияИндексов.Вставить(Неопределено, -1);
СоответствияИндексов.Вставить(Перечисления.ТипыОбъектов.Справочник, 35);
СоответствияИндексов.Вставить(Перечисления.ТипыОбъектов.Документ, 36);
// Добавляем обработку бизнес-процессов и задач
СоответствияИндексов.Вставить(Перечисления.ТипыОбъектов.БизнесПроцесс, 35);
СоответствияИндексов.Вставить(Перечисления.ТипыОбъектов.ТочкаМаршрутаБизнесПроцесса, 35);
СоответствияИндексов.Вставить(Перечисления.ТипыОбъектов.Задача, 35);
После внесения изменений обработка сравнения и объединения правил обмена отработает корректно и без аварийных завершений.
Еще одна распространенная проблема при загрузке конвертации из файла XML через обработку ЗагрузкаКонвертации — ошибка:
{Обработка.ЗагрузкаКонвертации.МодульОбъекта(3024)}: Ошибка при установке значения атрибута контекста (ВыгружатьГруппуЧерезФайл): Реквизит недоступен для элемента
Причина заключается в том, что реквизит ВыгружатьГруппуЧерезФайл в справочнике ПравилаКонвертацииСвойств предназначен только для групп (папок) свойств, а обработка загрузки в цикле пытается присвоить значение обычному элементу.
Для решения проблемы в модуле объекта обработки ЗагрузкаКонвертации перед строкой присвоения необходимо добавить проверку признака группы:
Если НоваяГруппаПКС.ЭтоГруппа Тогда
НоваяГруппаПКС.ВыгружатьГруппуЧерезФайл = Строка.ВыгружатьГруппуЧерезФайл;
КонецЕсли;
Либо можно использовать безопасное заполнение через функцию платформы:
ЗаполнитьЗначенияСвойств(НоваяГруппаПКС, Строка, "ВыгружатьГруппуЧерезФайл");
Применение описанных исправлений позволит успешно загружать конвертации из внешних XML-файлов и полноценно работать со структурой метаданных любых конфигураций 1С.