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

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

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

Разберем основные причины такого поведения и пошагово рассмотрим способы устранения проблемы.

Причина 1. Флаги перезаписи и замещения свойств в ПКО и ПКС

Наиболее частая причина, из-за которой новые документы заполняются корректно, а старые не обновляют реквизит договора, заключается в настройках загрузки объекта и свойств в правилах обмена.

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

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

Причина 2. Особенности сопоставления и поиска подчиненного справочника

Справочник ДоговорыКонтрагентов является подчиненным справочнику Контрагенты. При поиске договора ссылка на контрагента (владельца) должна быть однозначно определена в контексте поиска приемника.

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

Разберем, как правильно передать контекст поиска через входящие и исходящие данные:

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

Причина 3. Очистка реквизита типовой логикой конфигурации-приемника

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

Для гарантированной установки договора можно воспользоваться обработчиком «ПослеЗагрузки» в ПКО документа:


Если Не ЗначениеЗаполнено(Объект.ДоговорКонтрагента) И ЗначениеЗаполнено(Объект.Контрагент) Тогда
    Объект.ДоговорКонтрагента = Объект.Контрагент.ОсновнойДоговорКонтрагента;
КонецЕсли;

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

← На главную