При настройке обменов между базами 1С через конфигурацию «Конвертация данных 2.0» часто возникает ситуация, когда в объекте базы-источника (документе, справочнике или регистре сведений) отсутствует реквизит Организация, но он является обязательным в базе-приемнике. Если оставить правило конвертации свойств (ПКС) незаполненным или настроить его некорректно, система выгрузки вызовет ошибку вида Поле объекта не обнаружено (Организация).
Рассмотрим подробнее несколько проверенных способов решения этой задачи: от поиска организации по ИНН или коду до программной установки реквизита при загрузке данных в приемник.
Проанализируем ситуацию, когда система выдает ошибку обращения к полю. Если в ПКС для свойства Организация не указан источник и при этом не задан алгоритм формирования значения, обработка обмена по умолчанию попытается прочитать из объекта-источника реквизит с именем свойства приемника. Так как у объекта-источника этого реквизита нет, процесс выгрузки аварийно завершается.
Ниже описаны практические варианты решения этой проблемы в зависимости от архитектурных предпочтений и структуры данных.
Разберем по шагам наиболее универсальный подход, когда организация в приемнике ищется по конкретному ИНН:
ОрганизацияПоИНН. В качестве объекта-источника укажем тип Строка, а в качестве объекта-приемника — СправочникСсылка.Организации.ИНН, установив для него флаг Поиск. В обработчике события Перед выгрузкой этого ПКС напишем:
Значение = Источник;
Организация выберем созданное правило ОрганизацияПоИНН. Поле источника оставляем пустым.Перед выгрузкой этого ПКС укажем конкретный ИНН организации в приемнике:
Значение = "7701123456"; // Указываем ИНН организации приемника
Если ИНН организации одинаков для всех переносимых объектов, удобнее завести параметр правила конвертации, например Параметры.ИННОсновнойОрганизации, и подставлять его значение.
Выясним, как подставить организацию без создания отдельного ПКО для поиска. Если требуется быстро жестко привязать организацию по коду справочника в приемнике, используем событие Перед выгрузкой самого ПКС Организация.
В ПКС реквизита Организация оставляем поле источника пустым и не указываем ПКО. В обработчике Перед выгрузкой прописываем специальное выражение, которое исполняется на стороне приемника:
Выражение = "Справочники.Организации.НайтиПоКоду(""00-000001"")";
При таком подходе обработка обмена передаст строку с выражением в XML-файл, а при загрузке в приемнике будет выполнен поиск по указанному коду без лишних запросов к базе-источнику.
Посмотрим на ситуацию, когда организацию целесообразно устанавливать универсально для всех загружаемых документов уже после их создания в базе-приемнике. Этот вариант не требует настройки отдельного ПКС для каждого документа.
Организация.После загрузки объекта (выполняется на стороне приемника) и напишем алгоритм поиска организации:
// Поиск организации по коду
Объект.Организация = Справочники.Организации.НайтиПоКоду("000000001");
// Или поиск по реквизиту ИНН
// Объект.Организация = Справочники.Организации.НайтиПоРеквизиту("ИНН", "7701123456");
Обратите внимание: данный метод выполняется непосредственно на этапе загрузки в приемнике. Если в объекте-приемнике реквизит Организация входит в состав составных ключей или участвует в проведении документа, его необходимо заполнять до момент записи набора движений или проведения.
Если при переносе документов переносятся и наборы записей регистров сведений, у которых в приемнике добавлено измерение Организация, зафиксировать значение необходимо для каждой записи регистра.
В ПКО регистра сведений в обработчике При выгрузке или в ПКС соответствующего измерения (с пустым источником) в событии Перед выгрузкой настраивается присвоение организации для набора записей:
// В обработчике Перед выгрузкой ПКС измерения Организация в ПКО регистра
Выражение = "Справочники.Организации.НайтиПоКоду(""0001"")";
Если документ в приемнике перепроводится вручную и не формирует движения по регистру, убедитесь, что в загруженном документе заполнены все реквизиты шапки (включая установленную организацию и договор), от которых зависит логика проведения в модуле объекта приемника.