При выполнении обмена данными между конфигурациями «Управление торговлей» и «Бухгалтерия предприятия» после обновления одной из баз нередко возникает критический сбой. В журнале регистрации или в окне сообщений появляется ошибка следующего вида: Ошибка при загрузке данных: {Обработка.КонвертацияОбъектовИнформационныхБаз.МодульОбъекта(12639)}: Тип не определен (СправочникСсылка.ВидыАлкогольнойПродукции). Выясним причину этой неполадки и подробно разберем все способы её устранения.
Проанализируем программный код обработки КонвертацияОбъектовИнформационныхБаз, на котором прерывается выполнение. Сбой происходит внутри процедуры ЗагрузитьИнформациюОТипахДанных:
Пока ФайлОбмена.Прочитать() Цикл
ИмяУзла = ФайлОбмена.ЛокальноеИмя;
Если ИмяУзла = "ТипДанных" Тогда
ИмяТипа = одАтрибут(ФайлОбмена, ТипСтрока, "Имя");
СоответствиеТипа = Новый Соответствие;
СоответствиеТиповДанныхДляЗагрузки.Вставить(Тип(ИмяТипа), СоответствиеТипа);
ЗагрузитьСоответствиеТиповДляОдногоТипа(ФайлОбмена, СоответствиеТипа);
ИначеЕсли (ИмяУзла = "ИнформацияОТипахДанных") И (ФайлОбмена.ТипУзла = ТипУзлаXMLКонецЭлемента) Тогда
Прервать;
КонецЕсли;
КонецЦикла;
Рассмотрим детально, как работают механизмы платформы 1С:Предприятие в этой точке:
Тип(): В платформе 1С глобальная функция Тип("ИмяТипа") при передаче имени отсутствующего в метаданных текущей базы объекта не возвращает Неопределено, а генерирует фатальное исключение «Тип не определен».ИнформацияОТипахДанных. В него записываются все типы данных, которые фигурируют в правилах конвертации. При начале загрузки обработка считывает этот заголовок и пытается заранее инициализировать каждый тип через вызов Тип(ИмяТипа) еще до того, как начнется чтение фактических данных.ВидыАлкогольнойПродукции в «Бухгалтерии предприятия» был переименован в УдалитьВидыАлкогольнойПродукции. Если в базе-источнике (например, в «Управление торговлей 10.3») используются правила конвертации, содержащие старое имя типа, база-приемник падает при попытке инициализировать тип, которого физически больше нет в структуре метаданных.Разберем самый быстрый способ исправления, если правила обмена уже выгружены в файл формата XML.
.xml) в текстовом редакторе.ВидыАлкогольнойПродукции.УдалитьВидыАлкогольнойПродукции либо полностью удалим правило конвертации для этого справочника, если учет алкогольной продукции переносить не требуется.ПравилаДляОбменаДанными). Простая загрузка метаданных в саму «Конвертацию данных» без пересохранения ПКО ошибку не устраняет.Если конфигурация-источник типовая или в ней не дорабатывались переносимые объекты, воспользуемся готовыми правилами от разработчиков «1С»:
tmplts\1c\Accounting\<номер_релиза>\Обмены Данными\...).ПравилаОбмена_УТ10_БП30.xml или аналогичный для вашей пары релизов).Если базы сильно модифицированы, обновлять правила регулярно нет возможности, а обмен падает из-за второстепенных типов, защитим алгоритм на программном уровне. Для этого доработаем процедуру ЗагрузитьИнформациюОТипахДанных обработки КонвертацияОбъектовИнформационныхБаз (в самой конфигурации или с помощью расширения):
Пока ФайлОбмена.Прочитать() Цикл
ИмяУзла = ФайлОбмена.ЛокальноеИмя;
Если ИмяУзла = "ТипДанных" Тогда
ИмяТипа = одАтрибут(ФайлОбмена, ТипСтрока, "Имя");
СоответствиеТипа = Новый Соответствие;
Попытка
СоответствиеТиповДанныхДляЗагрузки.Вставить(Тип(ИмяТипа), СоответствиеТипа);
ЗагрузитьСоответствиеТиповДляОдногоТипа(ФайлОбмена, СоответствиеТипа);
Исключение
// Тип не найден в метаданных текущей конфигурации — пропускаем его инициализацию
Продолжить;
КонецПопытки;
ИначеЕсли (ИмяУзла = "ИнформацияОТипахДанных") И (ФайлОбмена.ТипУзла = ТипУзлаXMLКонецЭлемента) Тогда
Прервать;
КонецЕсли;
КонецЦикла;
Такая доработка позволяет базе-приемнику игнорировать отсутствующие типы в заголовке файла обмена и продолжать загрузку остальных документов и справочников.
Рассмотрим вариант обхода инициализации блока типов. В настройках выгрузки правил конвертации данных (в обработке выгрузки или на вкладке параметров в «Конвертации данных») снимем флаг Использовать оптимизированный формат.
В этом случае секция ИнформацияОТипахДанных не будет формироваться при выгрузке пакета. Платформа станет определять типы объектов непосредственно в момент их чтения. Если конкретные элементы удаленного справочника фактически не передаются, ошибка вовсе не возникнет.
Нередко после восстановления правил пользователи сталкиваются с тем, что папки (группы) справочника «Номенклатура» создаются повторно. Разберем, как устранить эту проблему:
Наименование, ЭтоГруппа и Родитель.Соответствия объектов информационных баз. При необходимости удалим некорректные связки идентификаторов.