Как правильно сохранить табличную часть документа перед загрузкой в Конвертации данных 2.0?

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

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

Почему возникают ошибки обращения к табличной части?

Чаще всего при попытке обратиться к табличной части через Объект.ИмяТабличнойЧасти в обработчике ПриЗагрузкеОбъекта мы получаем ошибку Поле объекта не обнаружено. Это происходит по двум причинам:

  1. Вы обращаетесь к объекту как к новому, хотя он уже существует в базе.
  2. Структура объекта на этапе ПриЗагрузкеОбъекта еще не инициализирована данными из базы, так как объект только что был найден, но не «прочитан» в контексте текущей сессии.

Шаг 1: Правильное извлечение данных

Если объект уже существует в информационной базе, мы не можем просто обратиться к его свойствам напрямую, так как они еще не заполнены значениями из БД. Нам нужно получить актуальные данные из базы по ссылке объекта. Самый надежный и профессиональный способ сделать это — использовать запрос.

Рассмотрим, как правильно извлечь данные в обработчике ПриЗагрузкеОбъекта:


Если ОбъектНайден Тогда
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |    ТЧ.Номенклатура,
        |    ТЧ.Количество,
        |    ТЧ.Цена
        |ИЗ
        |    Документ.РеализацияТоваровУслуг.Товары КАК ТЧ
        |ГДЕ
        |    ТЧ.Ссылка = &Ссылка";
    Запрос.УстановитьПараметр("Ссылка", Объект.Ссылка);
    СтараяТЧ = Запрос.Выполнить().Выгрузить();
    Объект.ДополнительныеСвойства.Вставить("СтараяТЧ", СтараяТЧ);
КонецЕсли;

Использование ДополнительныеСвойства — это идеальный способ «пробросить» сохраненные данные через контекст конвертации до этапа завершения загрузки.

Шаг 2: Модификация данных после загрузки

После того как мы сохранили исходные данные в ДополнительныеСвойства, нам нужно выполнить логику сравнения или объединения. Лучшим местом для этого является обработчик ПослеЗагрузки. В этом событии объект уже полностью заполнен данными из XML-файла, и мы можем безопасно сопоставить «старые» и «новые» строки.

Разберем пример реализации логики:


Если Объект.ДополнительныеСвойства.Свойство("СтараяТЧ") Тогда
    СтараяТЧ = Объект.ДополнительныеСвойства.СтараяТЧ;
    // Теперь мы можем сравнивать СтараяТЧ с текущим состоянием Объект.Товары
    Для Каждого СтрокаТЧ Из Объект.Товары Цикл
        // Добавляем вашу бизнес-логику модификации
    КонецЦикла;
КонецЕсли;

Практические советы по отладке обменов

Отладка правил конвертации в современных конфигурациях (таких как УТ 11.4 или ERP) может вызывать сложности. Если вы столкнулись с ошибками формата или невозможностью отладки, воспользуйтесь следующими рекомендациями:

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

← На главную