Как в 1С:Конвертация данных 2.1 выгрузить договор с видом «С поставщиком» вместо «С покупателем»?

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

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

Разберем, почему при стандартных попытках прописать Значение = "СПоставщиком" договор всё равно загружается с исходным видом или возникает ошибка «Не найдено соответствие для значения Источника», и проанализируем правильные алгоритмы решения этой задачи.

Выясним причины неправильного поведения правила конвертации

Проанализируем работу механизмов КД 2.1 при обработке элементов справочников и перечислений. Существует три основных подводных камня, из-за которых вид договора не подменяется:

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

Шаг 1. Настройка ПКО для договора без поиска по УИД

Чтобы система сформировала новый договор с видом С поставщиком или 찾아ла существующий договор именно с этим видом, создадим специальное ПКО для договора (например, ДоговорыКонтрагентов_СПоставщиком) и выполним следующие действия:

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

Рассмотрим, как это работает: при снятом поиске по УИД загрузка проверяет наличие договора по комбинации ключевых полей. Так как значение поля ВидДоговора будет отличаться от договора покупателя, система не найдет совпадения и автоматически создаст новый договор с видом С поставщиком.

Шаг 2. Корректное подставление вида договора в ПКС

Рассмотрим три способа корректного задания вида договора в ПКС реквизита ВидДоговора.

Способ А. Отключение ПКО перечисления и передача строки

Самый простой способ — убрать правило конвертации перечисления из ПКС реквизита ВидДоговора и передать имя значения текстом:

  1. В ПКС ВидДоговора очистим поле «Правило» (ПКО).
  2. В обработчике ПриВыгрузке данного ПКС напишем код:

Значение = "СПоставщиком";

При загрузке платформа 1С автоматически сопоставит полученную строку с именем элемента перечисления ВидыДоговоровКонтрагентов.СПоставщиком в приемнике.

Способ Б. Использование поля «Выражение»

Можно передать явное выражение кода 1С, которое выполнится непосредственно в базе-приемнике при загрузке объекта:

  1. В ПКС реквизита ВидДоговора очистим поле ПКО.
  2. В поле «Выражение» укажем код встроенного языка приемника:

Выражение = "Перечисления.ВидыДоговоровКонтрагентов.СПоставщиком"; Способ В. Настройка правила сопоставления значений перечисления (ПКЗ)

Если для свойства оставлено ПКО перечисления, необходимо передавать значение типа ссылка перечисления источника или настроить таблицу Правил конвертации значений (ПКЗ):


// В обработчике ПередВыгрузкой или ПриВыгрузке ПКС
Значение = Перечисления.ВидыДоговоровКонтрагентов.СПоставщиком;

Шаг 3. Перенаправление документа в правильное ПКО

Посмотрим, как правильно настроить логику перенаправления выгрузки в ПВД или ПКО документа. Если выгрузка документа зависит от условий реквизита источника (например, ПередачаВПереработку = Истина), проанализируем обработчик в ПВД.

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


Если Объект.ПередачаВПереработку = Истина Тогда
    // Перенаправляем выгрузку по правилу "ПередачаТоваров"
    ВыгрузитьПоПравилу(Объект, , , , "ПередачаТоваров");
    Отказ = Истина;
КонецЕсли;

А в ПКС реквизита ДоговорКонтрагента документа ПередачаТоваров укажем созданное ранее ПКО ДоговорыКонтрагентов_СПоставщиком.

Рекомендации по избежанию дублей

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

← На главную