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

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

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

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

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

Рассмотрим первый способ, при котором поиск и установка договора выполняются непосредственно в момент загрузки документа в базу-приемник. Важно понимать: обработчик ПослеЗагрузки правила конвертации объектов (ПКО) выполняется на стороне базы-приемника, а переменная Объект содержит уже инициализированный объект конфигурации-приемника (документ или справочник), готовый к записи.

Разберем пошаговый алгоритм настройки:

  1. Открываем ПКО нужного документа (например, РеализацияТоваровУслуг или АктВыполненныхРабот).
  2. Переходим на вкладку Обработчики событий и выбираем событие ПослеЗагрузки.
  3. Справочник ДоговорыКонтрагентов в типовых конфигурациях является подчиненным справочнику Контрагенты. Поэтому поиск договора по наименованию обязательно должен выполняться с указанием владельца — контрагента из загружаемого документа.

Посмотрим на пример программного кода для обработчика ПослеЗагрузки:


// Ищем договор с указанным наименованием для конкретного контрагента документа
ИмяДоговора = "Абонентская плата";
НайденныйДоговор = Справочники.ДоговорыКонтрагентов.НайтиПоНаименованию(ИмяДоговора, Истина, , Объект.Контрагент);

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

Проанализируем важный нюанс: метод НайтиПоНаименованию без указания владельца вернет первый попавшийся договор из базы с совпадающим именем, принадлежащий произвольному контрагенту. Это приведет к ошибкам ведения взаиморасчетов и невозможности проведения документа по счетам 60/62.

Вариант 2. Передача структуры поиска через ПКС «ПередВыгрузкой»

Рассмотрим более гибкий и архитектурно правильный способ, использующий стандартные механизмы сопоставления Конвертации данных. Этот вариант позволяет не писать жесткий код поиска в приемнике, а передать данные для поиска через правило конвертации свойств (ПКС).

Разберем последовательность настройки:

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

// Формируем структуру свойств для передачи в ПКО договоров
СтруктураДоговора = Новый Структура;
СтруктураДоговора.Вставить("Наименование", "Абонентская плата");
СтруктураДоговора.Вставить("Владелец", Источник.Контрагент);

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

Вариант 3. Использование предопределенного элемента справочника

Если нужный договор является предопределенным элементом в конфигурации-приемнике, сопоставление выполняется максимально просто. В ПКС договора достаточно передать имя предопределенного элемента строкой:

Значение = "ИмяПредопределенногоЭлементаВПриемнике";

В этом случае платформа 1С:Предприятие автоматически найдет предопределенный элемент по имени без необходимости выполнения поисковых запросов.

Важные рекомендации при переносе договоров

При настройке заполнения договоров обратите внимание на следующие моменты:

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