При доработке типовых механизмов синхронизации между конфигурациями на базе Библиотеки стандартных подсистем (БСП), такими как ЗУП 3.1 и БУХ 3.0, разработчики часто сталкиваются с ситуацией, когда добавление новых объектов через расширения приводит к трудночитаемым ошибкам. В этой статье мы подробно разберем, почему возникают сообщения об отсутствии правил обмена и как бороться с ошибкой Значение не является значением объектного типа (УникальныйИдентификатор) при загрузке данных.
Рассмотрим ситуацию, когда вы добавили новый справочник (например, Проекты) в расширение обеих баз, настроили регистрацию в планах обмена и создали правила в «Конвертации данных 2.0». Однако при попытке синхронизации система сообщает, что правило для объекта отсутствует.
Разберем по шагам, почему это происходит:
ExchangeRules (правила для текущей базы) и CorrespondentExchangeRules (правила для базы-корреспондента). Проанализируем содержимое: если вы добавили объект в ПКО (Правила конвертации объектов), убедитесь, что вы загрузили обновленный файл именно в тот узел плана обмена, который инициирует выгрузку.Код, Наименование) присваивается неограниченная длина или неверный тип в приемнике. Это приводит к тому, что движок обмена игнорирует правило как некорректное.Эта ошибка — одна из самых коварных при работе с расширениями. Она возникает на этапе записи объекта в приемнике. Проанализируем ситуацию: в XML-файле выгрузки УИД присутствует, но при загрузке система падает.
Основные причины возникновения:
СсылкаНаОбъект.УникальныйИдентификатор(), переменная оказывается пустой или имеет тип Неопределено.V8Exch8.2. Если в ПКО для справочника не установлена настройка «Продолжить поиск по полям поиска, если по идентификатору объект не найден», а сам поиск по ГУИД по какой-то причине возвращает пустую ссылку (например, из-за кэша метаданных), последующая попытка записи нового объекта может завершиться аварией.Для того чтобы избежать вышеуказанных проблем, придерживайтесь следующего алгоритма работы:
Шаг 1: Подготовка метаданных
Добавьте объекты в расширения в обеих базах (ЗУП и БП). В модуле менеджера плана обмена или в специализированных процедурах БСП убедитесь, что новые объекты включены в состав обмена программно. В современных версиях БСП недостаточно просто поставить галочку в плане обмена в конфигураторе — нужно обновить справочник Идентификаторы объектов метаданных.
Шаг 2: Выгрузка описания метаданных
Используйте обработку MD82Exp.epf. Запускайте её в базе, где уже подключено расширение. Это критически важно для корректного сопоставления типов СправочникСсылка.Проекты (из расширения) в правилах конвертации.
Шаг 3: Настройка ПКО и ПКС
В «Конвертации данных 2.0» при настройке правил для справочников из расширений обратите внимание на следующие моменты:
Уникальному идентификатору.Код), убедитесь, что эти поля заполнены в источнике.НачисленнаяЗарплатаВзносыНДФЛПоНачислениям) убедитесь, что тип данных в колонках соответствует типам, описанным в приемнике.Шаг 4: Обновление правил в базах
После изменения правил загрузите их в справочник Настройки синхронизации данных. Помните, что БСП кэширует структуру обмена. Иногда требуется принудительная очистка кэша метаданных. Это можно сделать через удаление и повторное создание настройки синхронизации (в крайнем случае) или через вызов процедуры обновления метаданных обмена в консоли кода:
ПараметрыОбмена = ОбменДаннымиСервер.ПолучитьПараметрыОбмена(УзелИнформационнойБазы);
ПланыОбмена.УстановитьДанныеОбмена(УзелИнформационнойБазы, ПараметрыОбмена);
Если ошибка УникальныйИдентификатор сохраняется, рекомендуем добавить отладочный код в обработчик события ПКО ПриЗагрузке или ПослеЗагрузки. Это поможет выяснить, в какой момент объект теряет свою «объектность»:
// В обработчике "ПослеЗагрузки" ПКО
Если ТипЗнч(Объект) <> Тип("СправочникОбъект.Проекты") Тогда
ЗаписьЖурналаРегистрации("ОбменДанными", УровеньЖурналаРегистрации.Ошибка, , ,
"Тип загруженного объекта не совпадает с ожидаемым: " + Строка(ТипЗнч(Объект)));
КонецЕсли;
Проанализируем ситуацию: если тип значения — Структура, значит, движок конвертации не смог сопоставить XML-описание с объектом метаданных 1С. Это прямой признак того, что расширение не подтянулось в контекст сеанса обмена или идентификаторы метаданных в правилах устарели.
Работа с синхронизацией в расширениях требует особой аккуратности при выгрузке метаданных и контроле прав доступа. Ошибка обращения к УникальныйИдентификатор чаще всего свидетельствует о «невидимости» объекта из расширения для механизмов БСП. Регулярно обновляйте идентификаторы объектов метаданных и проверяйте соответствие ПКО в файлах ExchangeRules.xml.