При активном использовании инструментов разработчика или стандартных обработок «Выгрузка и загрузка данных XML» для переноса документов между базами «1С:Управление торговлей 11.5», пользователи часто сталкиваются с критической ошибкой. При попытке открыть журналы документов (например, заказы поставщикам или счета-фактуры) система выдает сообщение: «Объект "Счет-фактура полученный (Документ)" не может быть получен по идентификатору помеченному на удаление». Это блокирует работу пользователей и не исправляется обычным перепроведением документов.
В этой статье мы подробно разберем причины возникновения данной коллизии, проанализируем механизмы работы платформы и библиотеки стандартных подсистем (БСП), а также рассмотрим несколько эффективных способов решения проблемы.
Первым делом проанализируем ситуацию с технической стороны. В современных конфигурациях на базе БСП существует специальный справочник ИдентификаторыОбъектовМетаданных. Он хранит уникальные идентификаторы (GUID) для каждого типа объекта конфигурации: справочников, документов, журналов, отчетов и перечислений. Это необходимо для корректной работы системы прав доступа (RLS), настройки дополнительных реквизитов и других механизмов.
Когда мы выполняем перенос данных через XML и выбираем в обработке «выгружать все объекты», система по умолчанию подхватывает и записи этого справочника. В целевой базе идентификаторы из источника либо создают дубли, либо затирают существующие записи. Поскольку GUID метаданных в разных базах (даже одного релиза) могут отличаться, возникает конфликт: система пытается обратиться к объекту метаданных по старому (перенесенному) идентификатору, который в текущей базе помечен на удаление или не соответствует реальному объекту метаданных в дереве конфигурации.
Это наиболее «мягкий» способ, который позволяет восстановить ссылочную целостность без радикального вмешательства в структуру данных. Разберем по шагам, что нужно сделать:
Идентификаторы объектов метаданных. Его можно найти через меню «Функции для технического специалиста» (или «Все функции»).Платформа 1С имеет встроенные механизмы самовосстановления справочников метаданных. Если ручная замена дублей кажется слишком трудоемкой (когда битых объектов десятки), можно инициировать процедуру обновления программно. Рассмотрим, как это сделать правильно.
Необходимо запустить базу в режиме «1С:Предприятие» с использованием специального параметра командной строки. Для этого в окне запуска 1С выберем нужную базу, нажмем «Изменить», перейдем на последнюю вкладку и в поле «Дополнительные параметры запуска» впишем:
/C ЗапуститьОбновлениеИнформационнойБазы
При таком запуске система автоматически выполнит все регламентные процедуры обновления данных БСП, включая пересчет и актуализацию справочника Идентификаторы объектов метаданных. Важно помнить, что этот параметр пишется с большой буквы C (латинской).
В некоторых случаях, когда справочник идентификаторов сильно «замусорен» после нескольких выгрузок, простые способы не помогают. Тогда мы можем прибегнуть к радикальному методу: удалению ошибочных записей с последующей генерацией новых.
Рассмотрим последовательность действий:
Идентификаторы объектов метаданных, которые помечены на удаление и вызывают ошибки.
// Вызов метода БСП для принудительного обновления идентификаторов
// Первый параметр Истина означает перезапись существующих данных
// Второй параметр Истина запускает фоновое обновление
Справочники.ИдентификаторыОбъектовМетаданных.ОбновитьДанныеСправочника(Истина, Истина);
Этот метод заново сопоставит все объекты метаданных конфигурации с записями в справочнике и создаст недостающие элементы с правильными GUID.
Чтобы не сталкиваться с этой ошибкой при следующих переносах, разберем правила работы с обработкой выгрузки и загрузки XML. Главное правило — никогда не выгружайте технические справочники БСП, если только вы не переносите базу целиком «один в один».
При настройке выгрузки данных обязательно снимите флажки со следующих объектов:
Справочник.ИдентификаторыОбъектовМетаданныхСправочник.ИдентификаторыОбъектовРасширенийРегистрСведений.ПараметрыРаботыПрограммыИсключение этих объектов из обмена заставит целевую базу использовать свои собственные внутренние идентификаторы, что гарантирует стабильную работу журналов и отсутствие конфликтов метаданных.
Если после всех манипуляций ошибка сохраняется, рекомендуем выполнить следующие действия:
%AppData%\1C\1Cv8. Часто старые идентификаторы «застревают» в локальном кэше пользователя.Таким образом, мы выяснили, что проблема не в самих документах, а в служебной информации, которая связывает их с описанием метаданных. Используя один из предложенных методов — от ручного поиска дублей до программного вызова функций БСП — вы сможете быстро вернуть систему в рабочее состояние.