Как исправить ошибки при доработке типовой синхронизации между ЗУП 3.1 и Бухгалтерией 3.0

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

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

Проблема 1: Правила конвертации объекта «не существуют» в файле обмена

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

Разберем по шагам, почему это происходит:

  1. Несоответствие файлов в архиве: Типовая синхронизация использует ZIP-архив с правилами. Часто разработчики путают файлы ExchangeRules (правила для текущей базы) и CorrespondentExchangeRules (правила для базы-корреспондента). Проанализируем содержимое: если вы добавили объект в ПКО (Правила конвертации объектов), убедитесь, что вы загрузили обновленный файл именно в тот узел плана обмена, который инициирует выгрузку.
  2. Ошибки выгрузки метаданных: Если правила создавались на основе «чистой» конфигурации без учета метаданных расширения, ПКО может быть привязано к объекту, который система «не узнает» в контексте расширения. Выясним причину: при выгрузке описания метаданных для «Конвертации данных» необходимо обязательно подключать расширение, иначе внутренние идентификаторы типов будут отличаться.
  3. Некорректная структура ПКС: Посмотрим на пример ошибки из практики: иногда при ручном создании правил свойствам (Код, Наименование) присваивается неограниченная длина или неверный тип в приемнике. Это приводит к тому, что движок обмена игнорирует правило как некорректное.

Проблема 2: Ошибка «Значение не является значением объектного типа (УникальныйИдентификатор)»

Эта ошибка — одна из самых коварных при работе с расширениями. Она возникает на этапе записи объекта в приемнике. Проанализируем ситуацию: в XML-файле выгрузки УИД присутствует, но при загрузке система падает.

Основные причины возникновения:

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

Как правильно организовать доработку обмена через расширения

Для того чтобы избежать вышеуказанных проблем, придерживайтесь следующего алгоритма работы:

Шаг 1: Подготовка метаданных

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

Шаг 2: Выгрузка описания метаданных

Используйте обработку MD82Exp.epf. Запускайте её в базе, где уже подключено расширение. Это критически важно для корректного сопоставления типов СправочникСсылка.Проекты (из расширения) в правилах конвертации.

Шаг 3: Настройка ПКО и ПКС

В «Конвертации данных 2.0» при настройке правил для справочников из расширений обратите внимание на следующие моменты:

Шаг 4: Обновление правил в базах

После изменения правил загрузите их в справочник Настройки синхронизации данных. Помните, что БСП кэширует структуру обмена. Иногда требуется принудительная очистка кэша метаданных. Это можно сделать через удаление и повторное создание настройки синхронизации (в крайнем случае) или через вызов процедуры обновления метаданных обмена в консоли кода:


ПараметрыОбмена = ОбменДаннымиСервер.ПолучитьПараметрыОбмена(УзелИнформационнойБазы);
ПланыОбмена.УстановитьДанныеОбмена(УзелИнформационнойБазы, ПараметрыОбмена);

Отладка процесса загрузки

Если ошибка УникальныйИдентификатор сохраняется, рекомендуем добавить отладочный код в обработчик события ПКО ПриЗагрузке или ПослеЗагрузки. Это поможет выяснить, в какой момент объект теряет свою «объектность»:


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

Проанализируем ситуацию: если тип значения — Структура, значит, движок конвертации не смог сопоставить XML-описание с объектом метаданных 1С. Это прямой признак того, что расширение не подтянулось в контекст сеанса обмена или идентификаторы метаданных в правилах устарели.

Резюме

Работа с синхронизацией в расширениях требует особой аккуратности при выгрузке метаданных и контроле прав доступа. Ошибка обращения к УникальныйИдентификатор чаще всего свидетельствует о «невидимости» объекта из расширения для механизмов БСП. Регулярно обновляйте идентификаторы объектов метаданных и проверяйте соответствие ПКО в файлах ExchangeRules.xml.

← На главную