При настройке обмена данными между конфигурациями «Зарплата и Управление Персоналом» (ЗУП) и «Управление производственным предприятием» (УПП) часто возникает ситуация, когда ручная загрузка через обработку Универсальный обмен данными XML проходит успешно, а автоматический обмен через встроенные механизмы создает в документах «пустые» ссылки на подразделения или физических лиц. Проанализируем, почему это происходит и как устранить данную проблему.
Выясним основную причину: почему встроенный в УПП механизм ведет себя иначе, чем внешняя обработка? Дело в том, что эти два инструмента могут использовать разные версии программного ядра (движка) обмена. Рассмотрим ситуацию с функцией НайтиОбъектПоНомеру. В процессе развития платформы и типовых решений состав параметров этой функции менялся.
Проанализируем программный код. В обработке Универсальный обмен данными XML функция может ожидать 2 параметра, в то время как во встроенном модуле Обмен данными XML их может быть уже 3. Если в правилах конвертации (созданных в «Конвертации данных 2.0») жестко прописан вызов с двумя параметрами, встроенный механизм автоматического обмена может отработать некорректно. Система не находит объект и, вместо остановки процесса, создает «битую» ссылку или пустой элемент справочника.
Разберем по шагам, почему в базе появляются пустые подразделения и физлица. Это классическое проявление проблемы «объектов-фантомов». Когда XML-файл содержит ссылку на объект, система пытается найти его в базе-приемнике. Если поиск по Уникальному Идентификатору (GUID) или Полям поиска (например, Код + Наименование) завершается неудачей, 1С создает новый элемент.
Рассмотрим причины неудачи поиска:
GUID одних и тех же подразделений будут разными.Искать объект по внутреннему идентификатору, а объект не найден, система переходит к созданию нового.При загрузке могут игнорироваться, если они завязаны на интерактивные действия пользователя.Посмотрим на рекомендации по проверке настроек поиска в конфигурации «Конвертация данных». Это критически важный этап для исправления «пустых» объектов.
Проанализируем алгоритм действий в «Конвертации данных»:
Подразделения, ФизическиеЛица).Продолжить поиск по полям поиска, если по идентификатору объект не найден. Без этой настройки любое расхождение в GUID приведет к созданию пустого объекта.Код, ИНН, Наименование) установлены флаги Поиск.Если мы обнаружили, что проблема заключается в разном количестве параметров функции НайтиОбъектПоНомеру, нам необходимо модифицировать текст правил. Рассмотрим пример того, как можно адаптировать вызов функции, чтобы он был универсальным для разных версий движка обмена.
Нам потребуется внести изменения в обработчики событий правил. Проанализируем пример кода, который может помочь избежать ошибки при несовпадении параметров:
// Пример адаптивного вызова поиска
Попытка
// Пытаемся вызвать функцию с 3-мя параметрами
Объект = НайтиОбъектПоНомеру(НомерОбъекта, ДатаОбъекта, ДопПараметры);
Исключение
// Если произошла ошибка, вызываем старый вариант с 2-мя параметрами
Объект = НайтиОбъектПоНомеру(НомерОбъекта, ДатаОбъекта);
КонецПопытки;
Такой подход позволяет правилам работать корректно как в интерактивной обработке, так и в автоматическом режиме через встроенные модули УПП.
Выясним еще одну важную деталь: почему изменения в правилах могут не вступать в силу? В УПП при настройке автоматического обмена правила часто сохраняются во внутреннем Регистре сведений или привязываются к узлу плана обмена. Даже если вы обновили файл правил на диске, система может продолжать использовать старую версию кода из кэша.
Рассмотрим порядок действий для корректного обновления:
V8Exch82.epf (или её встроенного аналога). Иногда решение проблемы заключается в простом обновлении кода обработки из последнего релиза платформы или конфигурации.Проанализируем ситуацию, когда ошибка не очевидна. В автоматическом режиме обмена ошибки часто «подавляются» и не выводятся на экран. Для диагностики рекомендуется:
Обмен данными. Там можно найти сообщения об ошибках выполнения Runtime Error, которые укажут на конкретную строку кода в правилах.Следуя этим шагам, мы сможем синхронизировать механизмы поиска в ручном и автоматическом режимах, избавившись от появления пустых записей в базе УПП.