При работе с обменом данными через «Конвертацию данных 2.0» часто возникает задача: сохранить текущие данные документа в базе-приемнике до того, как они будут перезаписаны новыми данными из файла обмена. Это необходимо для последующего сравнения или сложной модификации табличных частей. Давайте разберем, как реализовать этот процесс правильно и избежать ошибок доступа к данным.
Чаще всего при попытке обратиться к табличной части через Объект.ИмяТабличнойЧасти в обработчике ПриЗагрузкеОбъекта мы получаем ошибку Поле объекта не обнаружено. Это происходит по двум причинам:
ПриЗагрузкеОбъекта еще не инициализирована данными из базы, так как объект только что был найден, но не «прочитан» в контексте текущей сессии.Если объект уже существует в информационной базе, мы не можем просто обратиться к его свойствам напрямую, так как они еще не заполнены значениями из БД. Нам нужно получить актуальные данные из базы по ссылке объекта. Самый надежный и профессиональный способ сделать это — использовать запрос.
Рассмотрим, как правильно извлечь данные в обработчике ПриЗагрузкеОбъекта:
Если ОбъектНайден Тогда
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ТЧ.Номенклатура,
| ТЧ.Количество,
| ТЧ.Цена
|ИЗ
| Документ.РеализацияТоваровУслуг.Товары КАК ТЧ
|ГДЕ
| ТЧ.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка", Объект.Ссылка);
СтараяТЧ = Запрос.Выполнить().Выгрузить();
Объект.ДополнительныеСвойства.Вставить("СтараяТЧ", СтараяТЧ);
КонецЕсли;
Использование ДополнительныеСвойства — это идеальный способ «пробросить» сохраненные данные через контекст конвертации до этапа завершения загрузки.
После того как мы сохранили исходные данные в ДополнительныеСвойства, нам нужно выполнить логику сравнения или объединения. Лучшим местом для этого является обработчик ПослеЗагрузки. В этом событии объект уже полностью заполнен данными из XML-файла, и мы можем безопасно сопоставить «старые» и «новые» строки.
Разберем пример реализации логики:
Если Объект.ДополнительныеСвойства.Свойство("СтараяТЧ") Тогда
СтараяТЧ = Объект.ДополнительныеСвойства.СтараяТЧ;
// Теперь мы можем сравнивать СтараяТЧ с текущим состоянием Объект.Товары
Для Каждого СтрокаТЧ Из Объект.Товары Цикл
// Добавляем вашу бизнес-логику модификации
КонецЦикла;
КонецЕсли;
Отладка правил конвертации в современных конфигурациях (таких как УТ 11.4 или ERP) может вызывать сложности. Если вы столкнулись с ошибками формата или невозможностью отладки, воспользуйтесь следующими рекомендациями:
USR1CV8) должен иметь права на чтение файла обмена. Поместите файл в общедоступный каталог.--debug. Без этого точки останова в обработчиках конвертации не сработают.Объект.Товары или Объект.Состав в соответствии с метаданными конкретной конфигурации, а не обобщенное Объект.ТабличнаяЧасть.Следование этому подходу позволит вам гибко управлять данными при обмене, сохраняя целостность информации в вашей учетной системе.