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