Как найти все места использования ПКО в правилах конвертации данных и устранить ошибки загрузки

Программист 1С v8.3 (Обычные формы) IT и автоматизация бизнеса
← На главную

При работе с конфигурацией «Конвертация данных 2.1» (КД) программисты часто сталкиваются с ситуацией, когда необходимо удалить или изменить конкретное Правило конвертации объекта (ПКО). Однако простое удаление или модификация ПКО может привести к ошибкам при загрузке данных в базу-приемник, таким как Тип не определен. Это происходит из-за того, что ПКО может использоваться неявно или вызываться программно в самых неожиданных местах. Разберем подробно, как провести полный аудит использования ПКО в ваших правилах и сопутствующих обработках.

Поиск через стандартный механизм ссылок

Прежде чем приступать к глубокому анализу кода, воспользуемся встроенными возможностями конфигурации Конвертация данных. Проанализируем использование ПКО через поиск ссылок. Для этого в дереве правил выберем интересующее нас ПКО, вызовем контекстное меню или воспользуемся кнопкой «Поиск ссылок» на панели инструментов.

Этот метод позволяет быстро найти все ПКС (Правила конвертации свойств), в которых данное ПКО выбрано явно в колонке «Правило конвертации». Если система выдает список ссылок, мы должны пройти по каждой из них и убедиться, что выгрузка этого свойства всё еще необходима, либо заменить правило на другое.

Анализ программных вызовов в обработчиках

Зачастую ПКО вызывается не через настройки интерфейса, а программно из кода обработчиков событий. Рассмотрим основные места, где это может происходить. Нам необходимо проверить события Перед выгрузкой, При выгрузке, а также глобальные Алгоритмы и Запросы.

Основная функция, которую мы ищем — ВыгрузитьПоПравилу. Синтаксис этой функции выглядит следующим образом:


ВыгрузитьПоПравилу(Источник, Приемник, ВходящиеДанные, ИсходящиеДанные, "ИмяВашегоПКО", УзелСсылки, ТолькоСсылка);

Проанализируем ситуацию: если поиск по тексту правил (через выгрузку в XML) выдает только само определение ПКО, это может означать, что имя правила формируется динамически или передается через переменную. Попробуем искать не полное имя ПКО, а его фрагменты или связанные с ним типы данных объектов-источников.

Проблема неявного использования и автоподбора

Выясним причину, по которой ПКО может вызываться, даже если на него нет прямых ссылок. В КД 2.1 существует механизм автоматического подбора ПКО по типу источника. Если в настройках ПКС поле «Правило конвертации» оставлено пустым, система при выгрузке пытается найти подходящее правило самостоятельно.

Рассмотрим алгоритм работы этого механизма:

  1. Система определяет тип объекта, который нужно выгрузить в свойство.
  2. Ищется ПКО, у которого Объект-источник совпадает с типом данного объекта.
  3. Если найдено несколько подходящих ПКО, система выберет то, у которого установлен флаг «Использовать по умолчанию».
  4. Если флаг не установлен ни у одного правила, может быть выбрано последнее созданное ПКО для этого типа.

Чтобы исключить такое поведение, проанализируем все ПКС, где тип источника соответствует типу объекта, вызывающего ошибку, и убедимся, что там либо указано верное правило, либо свойство вообще не должно выгружаться.

Глобальный поиск в файле правил (XML)

Иногда внутренние инструменты поиска 1С не срабатывают из-за особенностей кэширования или индексации данных. В таких случаях наиболее надежным методом является выгрузка правил в файл XML и его анализ в стороннем текстовом редакторе (например, Notepad++ или VS Code).

Откроем файл правил и выполним поиск по имени ПКО. Нас особенно интересуют теги <Свойство>, где атрибут ПравилоКонвертации содержит имя искомого объекта. Также стоит обратить внимание на секции <Алгоритмы>, так как там часто прячутся программные вызовы, которые сложно отследить в интерфейсе конфигурации.

Анализ файла выгруженных данных

Если ошибка Тип не определен возникает уже на этапе загрузки в приемник, нам стоит изучить сам файл с данными (тот, который был сформирован обработкой выгрузки). Посмотрим на структуру XML файла данных:

  1. Найдем узел, соответствующий проблемному объекту (например, записи регистра).
  2. Посмотрим значение атрибута ИмяПКО в этом узле. Это даст нам 100% точный ответ, какое правило было использовано при выгрузке.
  3. Проанализируем «родительские» узлы. Если наш объект находится внутри другого объекта (вложен в тег свойства), значит, его «потянула» выгрузка родителя через ПКС.

Этот метод помогает «отмотать» цепочку вызовов назад и понять, какой объект инициировал выгрузку данных по «удаленному» или некорректному правилу.

Дублирование кода во внешних обработках

Разберем специфический случай, с которым часто сталкиваются опытные разработчики. Часто логика обмена переносится из самой конфигурации Конвертация данных непосредственно в модуль обработки выгрузки (УниверсальныйОбменДаннымиXML) для повышения производительности или реализации сложных проверок.

Если вы удалили правило в КД, обновили файл правил, но ошибка сохраняется — проверьте модуль обработки выгрузки. Проанализируем наличие жестко прописанных строк (хардкода), где могут упоминаться типы метаданных или имена ПКО. Если код был продублирован в обработке, никакие изменения в самой КД не помогут, пока вы не внесете правки в модуль обработки .epf.

Режим отладки загрузки для поиска причины

Чтобы окончательно выяснить, где происходит «падение» системы в базе-приемнике, воспользуемся режимом отладки. В обработке УниверсальныйОбменДаннымиXML на вкладке «Дополнительно» включим флаг «Режим отладки обработчиков загрузки».

Это позволит нам:

Важный момент: После внесения любых изменений в правила внутри конфигурации Конвертация данных, всегда нажимайте кнопку «Сохранить правила». Только после этого изменения попадают в итоговый XML-файл, который вы используете для обмена. Не забывайте также обновлять кэш правил в самой обработке выгрузки, если она запущена в интерактивном режиме.

← На главную