При настройке правил обмена между конфигурациями 1С:Управление торговлей 11 и 1С:Бухгалтерия предприятия 3.0 разработчики часто сталкиваются с ситуацией, когда при загрузке документа (например, Поступление (акт, накладная)) автоматически заполняются сведения, которые не были сопоставлены в правилах — в частности, данные о счетах-фактурах или связанных договорах. Разберем механику этого процесса, выясним, почему так происходит, и рассмотрим правильные способы управления загрузкой объектов в конфигурации-приемнике.
Проанализируем техническую сторону загрузки данных через Конвертацию данных 2.1. При выполнении универсального обмена в формате XML важно помнить следующие ключевые особенности платформы 1С:
ПриИзменении, ПриОткрытии или процедуры модулей форм, никогда не вызываются при фоновом или программном обмене данными. Загрузка происходит исключительно на сервере на уровне объектной модели ДокументОбъект или СправочникОбъект.ОбменДанными.Загрузка = Истина. Однако события модуля объекта (ПередЗаписью, ПриЗаписи) и подписки на события продолжают выполняться. Если в типовой конфигурации в коде подписки отсутствует проверка режима обмена, может сработать внутренняя логика автозаполнения.НомерВходящегоДокумента, ДатаВходящегоДокумента) или связанного документа Счет-фактура полученный.Если необходимо полностью отменить запись или перезапись подчиненного справочника (например, ДоговорыКонтрагентов), чтобы исключить инициализацию связанных алгоритмов, можно использовать обработчик правила конвертации объектов.
Перейдем в конфигурацию Конвертация данных, откроем нужное ПКО и пропишем в обработчике ПриЗагрузке следующий код:
СтандартнаяОбработка = Ложь;
Важно понимать последствия: установка флага СтандартнаяОбработка = Ложь в обработчике ПриЗагрузке отменяет типовой алгоритм десериализации объекта из XML. Объект не будет перезаписан стандартным механизмом, что исключит вызов его событий записи.
Если конфигурация-приемник дорабатывается или создается расширение, проанализируем обработчики событий записи. Любой код, выполняющий инициализацию подчиненных документов или пересчет реквизитов, должен содержать обязательную проверку:
Если Источник.ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
В модуле самого объекта аналогичная проверка выглядит так:
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
Если типовую конфигурацию БП 3.0 нельзя снимать с поддержки, подобную проверку можно внедрить через механизм Расширений конфигурации, переопределив нужную процедуру с помощью аннотации &Вместо или &Перед.
Если в БП 3.0 информация о счете-фактуре подтягивается из входящего номера и даты накладной, а передавать их не требуется, очистим соответствующие поля перед непосредственной записью документа в базу данных.
В ПКО документа ПоступлениеТоваровУслуг в обработчике ПослеЗагрузки укажем:
Объект.НомерВходящегоДокумента = "";
Объект.ДатаВходящегоДокумента = '00010101';
После очистки этих полей типовые механизмы формы и подписок не найдут оснований для отображения или генерации входящего счета-фактуры.
Если передача определенного свойства не требуется вовсе, самым надежным решением на уровне правил КД 2.1 является отказ от его выгрузки или загрузки.
Откроем соответствующее ПКС в составе правила документа и в обработчике ПередВыгрузкой (или ПередЗагрузкой) установим:
Отказ = Истина;
Это предотвратит попадание лишних значений в файл выгрузки и исключит их влияние на логику проведения и отображения документов в базе-приемнике.