Как отключить нежелательное заполнение связанных реквизитов при обмене данными через Конвертацию данных 2.1

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

При настройке правил обмена между конфигурациями 1С:Управление торговлей 11 и 1С:Бухгалтерия предприятия 3.0 разработчики часто сталкиваются с ситуацией, когда при загрузке документа (например, Поступление (акт, накладная)) автоматически заполняются сведения, которые не были сопоставлены в правилах — в частности, данные о счетах-фактурах или связанных договорах. Разберем механику этого процесса, выясним, почему так происходит, и рассмотрим правильные способы управления загрузкой объектов в конфигурации-приемнике.

Почему при загрузке данных срабатывают сторонние алгоритмы

Проанализируем техническую сторону загрузки данных через Конвертацию данных 2.1. При выполнении универсального обмена в формате XML важно помнить следующие ключевые особенности платформы 1С:

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

Способ 1. Отключение стандартной обработки загрузки в ПКО

Если необходимо полностью отменить запись или перезапись подчиненного справочника (например, ДоговорыКонтрагентов), чтобы исключить инициализацию связанных алгоритмов, можно использовать обработчик правила конвертации объектов.

Перейдем в конфигурацию Конвертация данных, откроем нужное ПКО и пропишем в обработчике ПриЗагрузке следующий код:

СтандартнаяОбработка = Ложь;

Важно понимать последствия: установка флага СтандартнаяОбработка = Ложь в обработчике ПриЗагрузке отменяет типовой алгоритм десериализации объекта из XML. Объект не будет перезаписан стандартным механизмом, что исключит вызов его событий записи.

Способ 2. Проверка режима загрузки в модулях и подписках на события

Если конфигурация-приемник дорабатывается или создается расширение, проанализируем обработчики событий записи. Любой код, выполняющий инициализацию подчиненных документов или пересчет реквизитов, должен содержать обязательную проверку:


Если Источник.ОбменДанными.Загрузка Тогда
    Возврат;
КонецЕсли;

В модуле самого объекта аналогичная проверка выглядит так:


Если ОбменДанными.Загрузка Тогда
    Возврат;
КонецЕсли;

Если типовую конфигурацию БП 3.0 нельзя снимать с поддержки, подобную проверку можно внедрить через механизм Расширений конфигурации, переопределив нужную процедуру с помощью аннотации &Вместо или &Перед.

Способ 3. Очистка реквизитов в обработчике ПослеЗагрузки ПКО документа

Если в БП 3.0 информация о счете-фактуре подтягивается из входящего номера и даты накладной, а передавать их не требуется, очистим соответствующие поля перед непосредственной записью документа в базу данных.

В ПКО документа ПоступлениеТоваровУслуг в обработчике ПослеЗагрузки укажем:


Объект.НомерВходящегоДокумента = "";
Объект.ДатаВходящегоДокумента  = '00010101';

После очистки этих полей типовые механизмы формы и подписок не найдут оснований для отображения или генерации входящего счета-фактуры.

Способ 4. Исключение реквизита через ПКС (Правила конвертации свойств)

Если передача определенного свойства не требуется вовсе, самым надежным решением на уровне правил КД 2.1 является отказ от его выгрузки или загрузки.

Откроем соответствующее ПКС в составе правила документа и в обработчике ПередВыгрузкой (или ПередЗагрузкой) установим:

Отказ = Истина;

Это предотвратит попадание лишних значений в файл выгрузки и исключит их влияние на логику проведения и отображения документов в базе-приемнике.

← На главную