Как установить реквизит «Организация» в приемнике, если его нет в источнике, при обмене через Конвертацию данных 2.0?

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

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

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

Причина возникновения ошибки при выгрузке

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

Ниже описаны практические варианты решения этой проблемы в зависимости от архитектурных предпочтений и структуры данных.

Способ 1. Поиск организации по ИНН через специализированное ПКО

Разберем по шагам наиболее универсальный подход, когда организация в приемнике ищется по конкретному ИНН:

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

Если ИНН организации одинаков для всех переносимых объектов, удобнее завести параметр правила конвертации, например Параметры.ИННОсновнойОрганизации, и подставлять его значение.

Способ 2. Поиск организации по коду или вычисление через выражение в ПКС

Выясним, как подставить организацию без создания отдельного ПКО для поиска. Если требуется быстро жестко привязать организацию по коду справочника в приемнике, используем событие Перед выгрузкой самого ПКС Организация.

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

Выражение = "Справочники.Организации.НайтиПоКоду(""00-000001"")";

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

Способ 3. Программная установка организации в обработчике «После загрузки объекта»

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

  1. В ПКО документа или объекта отключим или удалим ПКС Организация.
  2. Перейдем в событие ПКО После загрузки объекта (выполняется на стороне приемника) и напишем алгоритм поиска организации:
    
    // Поиск организации по коду
    Объект.Организация = Справочники.Организации.НайтиПоКоду("000000001");
    
    // Или поиск по реквизиту ИНН
    // Объект.Организация = Справочники.Организации.НайтиПоРеквизиту("ИНН", "7701123456");
    

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

Заполнение организации в движениях регистров сведений

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

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


// В обработчике Перед выгрузкой ПКС измерения Организация в ПКО регистра
Выражение = "Справочники.Организации.НайтиПоКоду(""0001"")";

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

← На главную