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

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

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

Причина 1: Флаг «Не выгружать объекты свойств источника по ссылкам»

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

Разберем, к чему это приводит на стороне приемника:

  1. Система считывает GUID организации из файла обмена.
  2. Пытается найти объект в справочнике Организации по этому идентификатору.
  3. Если объект найден — всё в порядке, ссылка записывается в документ.
  4. Если объект не найден (например, организация была создана в источнике недавно и еще не была перенесена в приемник как самостоятельный объект), система не сможет создать «пустышку» или полноценный элемент, так как данных о наименовании в файле нет.

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

Причина 2: Использование обработчиков событий и логирование

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


Если НЕ ЗначениеЗаполнено(Источник.Организация) Тогда
    ЗаписьЖурналаРегистрации("ОбменДанными.ОшибкаВыгрузки", 
        УровеньЖурналаРегистрации.Предупреждение, 
        ,, 
        "Документ " + Источник + " выгружается без организации!");
КонецЕсли;

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


Если НЕ ЗначениеЗаполнено(Объект.Организация) Тогда
    ТекстОшибки = "Загружен документ " + Объект + " с пустой организацией. GUID в файле: " + СвойстваПоиска["Организация"];
    ЗаписьЖурналаРегистрации("ОбменДанными.ОшибкаЗагрузки", 
        УровеньЖурналаРегистрации.Ошибка, 
        Объект.Метаданные(), 
        Объект.Ссылка, 
        ТекстОшибки);
КонецЕсли;

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

Причина 3: Анализ XML-файла обмена

Самый надежный способ диагностики — это изучение содержимого самого файла обмена. Рассмотрим по шагам, как организовать этот процесс при регламентном задании:

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

Причина 4: Кэширование правил и серверные сеансы

В конфигурации УПП при выполнении обменов через регламентные задания часто возникает проблема кэширования. Проанализируем ситуацию: вы изменили правила в КД 2.1, загрузили их в базу, но сервер 1С продолжает использовать старую версию правил, которая хранится в оперативной памяти фонового задания.

Рассмотрим решение: Для очистки кэша правил необходимо либо перезапустить службу сервера 1С:Предприятия (что радикально), либо завершить все активные сеансы фоновых заданий обмена. Также стоит убедиться, что в настройках обмена указан путь к актуальному файлу правил, и он действительно обновился в информационной базе.

Причина 5: Типовые механизмы заполнения в УПП

В конфигурациях на обычных формах (таких как УПП) часто зашита логика автоматического заполнения реквизитов. Разберем, как это может мешать загрузке. При записи объекта в режиме ОбменДанными.Загрузка = Истина большинство проверок игнорируется, однако в коде документа могут быть прописаны вызовы в процедурах ПередЗаписью или ПриЗаписи, которые при определенных условиях могут очищать или перезаполнять Организацию.

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


Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
    Если ОбменДанными.Загрузка Тогда
        Возврат;
    КонецЕсли;
    
    // Остальная логика заполнения
КонецПроцедуры

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

Причина 6: Блокировки и фоновые процессы

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

Посмотрим на настройки поиска в КД: Попробуйте в ПКС для Организации добавить дополнительный поиск по ИНН или Наименованию в случае, если поиск по идентификатору не удался. Это повысит отказоустойчивость обмена при возникновении проблем с GUID или блокировками.

← На главную