Почему реквизит табличной части не выгружается в Конвертации данных 2.1?

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

При работе с механизмом Конвертация данных 2.1 нередко возникают ситуации, когда данные в КоллекцииОбъектов присутствуют, однако после выполнения обмена реквизит в целевой системе остается незаполненным. В этой статье мы разберем по шагам, почему это происходит и как выявить причину, основываясь на техническом анализе системы.

Проверка настроек Правил конвертации свойств (ПКС)

Первым делом необходимо проверить настройки в самих правилах. Даже если визуально все кажется верным, стоит выполнить следующие действия:

  1. Проверка флага «Не выгружать»: Убедитесь, что галочка «Не выгружать» точно снята. Рекомендуется принудительно установить её, сохранить правило, а затем снять снова и пересохранить. Это помогает сбросить внутренние флаги метаданных в конфигурации КД.
  2. Соответствие имен полей: Если источником является Запрос, проанализируйте псевдонимы полей. Имя реквизита в ПКС должно строго соответствовать псевдониму поля в запросе, который формирует КоллекциюОбъектов. Любое расхождение в одну букву или регистр приведет к тому, что система проигнорирует поле.
  3. Использование входящих данных: Если поле рассчитывается программно в обработчике ПередВыгрузкой, убедитесь, что вы явно присваиваете значение переменной Значение. Если этого не сделать, конвертация не будет знать, что именно записывать в XML.

Анализ типов данных и ПКО

Конвертация данных крайне чувствительна к типам объектов. Рассмотрим частые ошибки:

  1. Несовпадение типов: Если в источнике поле имеет тип Строка, а в приемнике — Число, конвертация может отсечь данные. Попробуйте принудительно привести тип перед выгрузкой с помощью функций Число(), Дата() или Строка().
  2. Отсутствие ПКО для ссылочных типов: Если выгружаемый реквизит является ссылкой (например, СправочникСсылка), для него должно быть определено соответствующее Правило конвертации объектов (ПКО). Если правило не найдено, а в настройках ПКС стоит запрет на выгрузку без правила, данные просто не попадут в файл.

Диагностика через отладчик

Если визуальный осмотр настроек не помог, единственный надежный способ — использование Отладчика 1С. Разберем, что именно нужно предпринять:

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

Пример программного присвоения значения

В случае, если вам необходимо гибко управлять выгрузкой, используйте обработчик ПередВыгрузкой для конкретного ПКС. Это позволяет избежать проблем с прямым маппингом:


// В обработчике ПередВыгрузкой для реквизита ТЧ
// Проверяем, есть ли данные в коллекции
Если Источник.Свойство("ИмяРеквизита") Тогда
    Значение = Источник.ИмяРеквизита;
Иначе
    // Устанавливаем значение по умолчанию или оставляем пустым
    Значение = Неопределено;
КонецЕсли;

Проверка структуры выгрузки

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

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

Следуя этим рекомендациям, вы сможете локализовать причину, по которой реквизит не попадает в выгрузку, и устранить её путем приведения типов, корректировки правил или исправления ошибок в запросе данных.

← На главную