При работе с конфигурацией «Конвертация данных 2» (КД 2) разработчики часто сталкиваются с ситуацией, когда правила успешно проходят внутреннюю проверку на ошибки в самой КД, но отказываются загружаться в информационную базу источника или приемника. В процессе загрузки через типовую обработку Универсальный обмен данными в формате XML система аварийно завершает работу, выдавая загадочное сообщение: «Конструктор не обнаружен».
В этой статье мы подробно разберем, почему возникает эта ошибка, проанализируем внутренние механизмы платформы 1С, которые приводят к сбою, и пошагово рассмотрим эффективные методы диагностики и исправления правил обмена.
---
Для того чтобы понять природу сбоя, обратимся к коду типовой обработки загрузки правил обмена. Ошибка локализуется в модуле обработки на следующем участке кода:
Если ПустаяСтрока(Стр) Тогда
Возврат Новый(Тип);
КонецЕсли;
Эта функция предназначена для инициализации значения по умолчанию для определенного типа данных, переданного в переменную Тип. Ошибка «Конструктор не обнаружен» (в некоторых случаях сопровождающаяся системным сообщением «Тип не определен») возникает тогда, когда переменная Тип принимает значение Неопределено или содержит пустую строку вместо валидного типа данных 1С (например, СправочникСсылка.Контрагенты или ПеречислениеСсылка.СтатусыДоговоров).
Попытка выполнить конструктор Новый(Неопределено) является синтаксически некорректной с точки зрения платформы «1С:Предприятие», из-за чего выполнение кода прерывается.
---
Помимо очевидных человеческих ошибок при настройке правил, существует ряд глубоких причин и задокументированных багов платформы КД 2, которые могут приводить к этой коллизии:
Неопределено.---
Давайте разберем по шагам, как локализовать и устранить эту ошибку, если стандартная проверка правил в КД 2 не показывает никаких проблем.
Первым делом откройте Журнал регистрации в базе, где происходит загрузка правил. Найдите транзакцию с ошибкой и изучите подробный стек вызовов. Это позволит точно определить строку кода в обработке Универсальный обмен данными в формате XML, на которой произошло аварийное завершение работы.
Если из стека ошибок неясно, какой конкретно документ, справочник или реквизит вызывает сбой, мы можем применить классический метод отладки. Для этого откроем обработку обмена в конфигураторе и временно обернем проблемный участок кода в блок проверки:
Попытка
Если ПустаяСтрока(Стр) Тогда
Возврат Новый(Тип);
КонецЕсли;
Исключение
Сообщить("Ошибка при попытке инициализировать тип: " + Строка(Тип));
Сообщить("Текущий обрабатываемый объект правила: " + ИмяТекущегоОбъекта);
ВызватьИсключение; // Позволяет прервать выполнение и сохранить стек
КонецПопытки;
Запустите загрузку правил заново. При возникновении ошибки в окно сообщений будет выведена информация о том, на каком именно объекте (например, документ Расходно-кассовый ордер или справочник ДоговорыКонтрагентов) споткнулся загрузчик. Это сузит область поиска до конкретного объекта метаданных.
Выяснив проблемный объект, перейдите в базу КД 2 и детально проанализируйте все его правила конвертации свойств (ПКС):
Ошибки транзакций вида «В данной транзакции уже происходили ошибки!» при попытке повторной загрузки правил в КД часто вызваны наличием битых ссылок. Для очистки базы выполните следующие действия:
Если загрузить измененные правила обратно в КД 2 не удается из-за ошибок СУБД, вы можете проанализировать сам файл правил обмена. Откройте полученный .xml файл в любом продвинутом текстовом редакторе (например, Notepad++ или VS Code) и выполните контекстный поиск:
<Свойство>, у которых атрибуты ТипПриемника или ТипИсточника имеют пустые значения: Тип="" или Правило="".При переносе сложных составных типов данных включенная оптимизация может усложнить поиск ошибок, так как типы данных выгружаются только один раз в заголовке файла. На время поиска и устранения ошибок перейдите на вкладку «Дополнительные настройки» в обработке Универсальный обмен данными в формате XML и снимите флаг «Использовать оптимизированный формат». Это заставит систему прописывать типы данных для каждого узла явно, что значительно упростит отладку.
---
Ошибка «Конструктор не обнаружен» в 90% случаев является следствием рассинхронизации метаданных или неаккуратной настройки правил конвертации свойств для перечислений и составных типов данных. Регулярная гигиена базы «Конвертации данных 2», своевременное удаление помеченных объектов и знание простых приемов отладки через блок Попытка...Исключение позволят вам быстро локализовать проблему и сохранить стабильность интеграционных процессов вашей компании.