Справочник «Идентификаторы объектов метаданных» требует обновления: что делать

· 9 мин

Содержание

Справочник идентификаторов метаданных в 1С 8.3 обновляется сам — при первом запуске базы после изменения конфигурации, когда отрабатывает обновление информационной базы. Если автоматика не сработала, обновление запускают принудительно: стартуют базу в режиме 1С:Предприятие с параметром /C ЗапуститьОбновлениеИнформационнойБазы или вызывают из серверного кода Справочники.ИдентификаторыОбъектовМетаданных.ОбновитьДанныеСправочника().

Справочник есть во всех типовых конфигурациях на Библиотеке стандартных подсистем (БСП): Бухгалтерии 3.0, ЗУП 3.1, УТ 11, КА, ERP, УНФ. Поэтому порядок действий один и тот же — от конфигурации он не зависит. Сбой обычно всплывает после объединения баз, ручного переноса данных или подключения чужой внешней обработки: программа ругается на дубли, неверные GUID или не открывает отчёт.

Как устроен справочник и почему идентификаторы расходятся

«Идентификаторы объектов метаданных» — служебный справочник БСП. В нём на каждый объект конфигурации (документ, справочник, регистр, отчёт, обработку) заведён свой элемент. Элемент хранит полное имя объекта, например Документ.РеализацияТоваровУслуг, и ключ объекта метаданных.

Зачем он нужен: в реквизитах нельзя хранить ссылку на сам объект метаданных. Поэтому подсистемы хранят ссылку на элемент этого справочника. Через него работают:

  • 🔐 права доступа и ограничения на уровне записей;
  • 📎 дополнительные отчёты и обработки (поле «Размещение» и назначение команд);
  • 🧾 дополнительные реквизиты и сведения;
  • 📅 даты запрета изменения данных;
  • 🔄 правила обмена, версионирование объектов, варианты отчётов.

Каждый элемент — обычная ссылка со своим GUID. Этот GUID уникален для конкретной базы. В двух базах на одной и той же конфигурации элемент Документ.РеализацияТоваровУслуг будет иметь разные GUID. Отсюда и большинство проблем.

Откуда берётся рассинхронизация

  • 🔀 Перенос данных между базами. Выгрузили объекты через универсальную выгрузку в XML вместе со ссылками на идентификаторы. В приёмнике появились вторые элементы с тем же полным именем, но другим GUID.
  • 🧩 Объединение двух баз в одну. Тот же эффект в крупном масштабе: дублей десятки и сотни.
  • ✏️ Переименование и удаление объектов в доработанной конфигурации. Старый элемент остаётся, новый создаётся, ссылки на старый «висят».
  • 🌐 Распределённая база (РИБ). Подчинённый узел не обновляет справочник сам — ждёт данные из главного. Если конфигурацию обновили в узле раньше, чем пришёл обмен, база стартует с ошибкой.
  • 💾 Прерванное обновление. Базу закрыли или отключили посреди обработчиков, и справочник остался в промежуточном состоянии.
  • 📦 Внешняя обработка из другой базы. Её регистрационные данные ссылаются на идентификаторы, которых в вашей базе нет.

Диагностика: как понять, что сбой именно в идентификаторах

Признак один: в тексте ошибки или в окне при запуске фигурирует название справочника «Идентификаторы объектов метаданных». Иногда — «Идентификаторы объектов расширений». Типичные формулировки сводятся к трём сюжетам:

  • найдены несколько элементов с одинаковым полным именем (дубли);
  • справочник требует обновления, а его нельзя обновить в подчинённом узле;
  • ссылка на идентификатор не найдена — «битая ссылка» в настройках доступа, дополнительных обработках или вариантах отчётов.
Диагностика: выберите симптом

Как открыть справочник и посмотреть содержимое

  1. Включите показ служебных команд: в главном меню Сервис → Параметры поставьте флажок «Отображать команду “Все функции”».
  2. Откройте Главное меню → Все функции → Справочники → Идентификаторы объектов метаданных.
  3. Отсортируйте список по колонке с полным именем объекта. Дубли сразу видны: две строки подряд с одинаковым именем.
  4. Отдельно проверьте элементы, помеченные на удаление. Это объекты, которых уже нет в конфигурации.

На платформе с номером не ниже 8.3.14 эта команда в главном меню называется «Функции для технического специалиста» — путь к справочнику тот же.

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

Чем обновлять справочник идентификаторов метаданных

Способов немного, и они различаются по риску.

СпособКогда применятьРиски
Обычный запуск после обновления конфигурацииПлановое обновлениеНет, это штатный путь
Параметр /C ЗапуститьОбновлениеИнформационнойБазыОбновление прервалось, справочник «застрял»Повторно выполняются обработчики обновления — время и нагрузка
Вызов ОбновитьДанныеСправочника() из кодаНужно пересчитать только справочникНужны права администратора и привилегированный режим
Ручная замена ссылок и удаление дублейПосле переноса данных и объединения базОшибка в выборе «правильного» элемента ломает права и настройки
Восстановление из резервной копииВсё испорчено, свежая копия естьТеряются данные после копии

Запрос для поиска дублей

ВЫБРАТЬ
    Ид.ПолноеИмя КАК ПолноеИмя,
    КОЛИЧЕСТВО(Ид.Ссылка) КАК Количество
ИЗ
    Справочник.ИдентификаторыОбъектовМетаданных КАК Ид
ГДЕ
    НЕ Ид.ПометкаУдаления
СГРУППИРОВАТЬ ПО
    Ид.ПолноеИмя
ИМЕЮЩИЕ
    КОЛИЧЕСТВО(Ид.Ссылка) > 1

Запрос выполняют в любой консоли запросов, запущенной в режиме 1С:Предприятие. Пустой результат значит, что дублей среди действующих элементов нет.

Пошаговая инструкция: обновить справочник идентификаторов в 1С 8.3

Перед любыми действиями сделайте резервную копию базы: выгрузку в .dt через Конфигуратор или копию средствами СУБД. Справочник связан с правами доступа и настройками — ошибку проще откатить, чем чинить.

Шаг 1. Выгоните пользователей

Повторное обновление и правка справочника идут в фоне у всех подсистем сразу. Предупредите сотрудников и завершите их сеансы — у них оборвётся работа, несохранённые документы пропадут. Делайте это вне рабочего времени.

В типовых конфигурациях для этого есть команда «Блокировка работы пользователей» в разделе Администрирование, в группе команд обслуживания.

Шаг 2. Запустите повторное обновление базы

  1. В окне запуска 1С выберите базу и нажмите «Изменить».
  2. На последней странице мастера, в поле «Дополнительные параметры запуска», впишите:
/C ЗапуститьОбновлениеИнформационнойБазы
  1. Запустите базу в режиме 1С:Предприятие под пользователем с полными правами.
  2. Дождитесь окна «Обновление версии программы» и завершения всех обработчиков.
  3. Уберите параметр из настроек базы, иначе обновление будет запускаться при каждом входе.

Тот же эффект из командной строки:

"C:\Program Files\1cv8\8.3.24.1548\bin\1cv8.exe" ENTERPRISE /F"D:\Bases\Buh" /N"Администратор" /P"пароль" /C ЗапуститьОбновлениеИнформационнойБазы

Путь к 1cv8.exe и номер платформы подставьте свои. Для серверной базы вместо /F используют /S"сервер\имябазы".

Шаг 3. Если нужно обновить только справочник — вызовите метод

Когда база стартует, но справочник явно неактуален, хватит одного вызова в серверном контексте. Удобнее всего — через внешнюю обработку или консоль кода под администратором:

УстановитьПривилегированныйРежим(Истина);
ЕстьИзменения = Ложь;
ЕстьУдаленные = Ложь;
Справочники.ИдентификаторыОбъектовМетаданных.ОбновитьДанныеСправочника(ЕстьИзменения, ЕстьУдаленные);
Сообщить("Изменения: " + ЕстьИзменения + ", удалённые: " + ЕстьУдаленные);

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

Шаг 4. Уберите дубли после переноса данных

Повторное обновление дубли не лечит: оба элемента ссылаются на один объект, и программа не знает, какой оставить. Порядок такой:

  1. Запросом из раздела выше найдите повторяющиеся полные имена.
  2. Для каждой пары решите, какой элемент «родной». Обычно это тот, что был в базе до переноса: на него ссылаются профили групп доступа и настройки.
  3. Замените ссылки с лишнего элемента на правильный. В БСП есть обработка поиска и удаления дублей: Администрирование → Обслуживание → Корректировка данных. Если справочник идентификаторов в ней не выбирается, замену делают кодом через НайтиПоСсылкам() на копии базы.
  4. Пометьте лишний элемент на удаление и выполните удаление помеченных объектов.
  5. Ещё раз запустите базу — ошибка при старте должна уйти.

Не удаляйте элементы справочника напрямую, без замены ссылок. Слетят ограничения доступа, привязки дополнительных обработок и даты запрета — пользователи увидят чужие данные или потеряют свои команды.

Шаг 5. Распределённая база: обновляйте сверху вниз

В РИБ справочник ведёт только главный узел. Правильная последовательность:

  1. Обновите конфигурацию в главном узле и запустите его — справочник обновится там.
  2. Выполните синхронизацию с подчинёнными узлами.
  3. Подчинённый узел примет изменения конфигурации и данные справочника, после чего запустится без ошибки.

Если узел уже ругается, ничего в нём не правьте. Проведите обмен с главным узлом — программа сама предложит загрузить сообщение и обновиться.

Расширения и внешние обработки: отдельный справочник и свои ловушки

Идентификаторы объектов расширений

Объекты, добавленные расширениями, хранятся в соседнем справочнике — «Идентификаторы объектов расширений». Он заполняется при подключении расширения и обновляется при старте сеанса.

Когда расширение заменили новой версией, а сеансы остались старые, возможна ошибка о несоответствии идентификаторов. Что помогает:

  • 🔁 перезапустить все сеансы после загрузки нового .cfe;
  • 🔌 отключить расширение (снять флажок «Активно» в Администрирование → Печатные формы, отчёты и обработки → Расширения), перезапустить базу и включить снова;
  • 🧹 проверить, нет ли двух расширений с объектами под одинаковыми именами.

Внешние отчёты и обработки

Дополнительная обработка хранит, к каким объектам она подключена — через ссылки на идентификаторы. Если вы перенесли элемент справочника «Дополнительные отчёты и обработки» из другой базы, эти ссылки указывают в пустоту. Команда не появляется на форме документа, а обработка может не открываться.

Решение надёжное и простое:

  1. Сохраните файл .epf или .erf из карточки на диск.
  2. Удалите или пометьте на удаление перенесённую карточку.
  3. Добавьте обработку заново кнопкой «Добавить из файла» и заново настройте размещение.

При регистрации программа сама сопоставит объекты с идентификаторами вашей базы.

Как избежать сбоев справочника в будущем

Перед обновлением или переносом данных
Выполнено: 0 / 6

Пояснения к пунктам:

  • Не переносите идентификаторы как данные. В правилах выгрузки исключите справочник «Идентификаторы объектов метаданных». Ссылки на него в приёмнике лучше сопоставлять по полному имени, а не по GUID.
  • Не прерывайте обновление. Большая база на ERP может обновляться часами. Окно с прогрессом не закрывайте, сервер не перезагружайте.
  • Не переименовывайте объекты в типовой без нужды. Переименование создаёт новый элемент справочника и требует перенастройки прав.
  • Тестируйте на копии. Объединение баз и крупный перенос сначала прогоните на копии и проверьте запрос на дубли.

Если стандартные шаги не помогли

Бывает, что после замены ссылок и повторного обновления база всё равно не стартует. Варианты по возрастанию радикальности:

  1. Запуск без логики начала работы. Параметр /C ОтключитьЛогикуНачалаРаботыСистемы пропускает проверки БСП при входе. База откроется, и можно исправить данные. Работать в таком режиме постоянно нельзя — это только для ремонта.
  2. Проверка конфигурации. В Конфигураторе выполните Конфигурация → Проверка конфигурации. Ошибки в доработках (объект удалили, а ссылка на него в коде осталась) мешают обновлению.
  3. Тестирование и исправление. Администрирование → Тестирование и исправление в Конфигураторе. Нужен монопольный доступ к базе. Сам справочник идентификаторов оно не чинит, но устраняет битые ссылки и повреждения таблиц, из-за которых может падать обновление.
  4. Откат к резервной копии и повторный перенос данных — уже с исключённым справочником идентификаторов.

Частые вопросы

Можно ли полностью очистить справочник идентификаторов и заполнить заново?
Нет. Новые элементы получат новые GUID, и все ссылки в правах доступа, обработках и настройках станут битыми. Лечат точечно: замена ссылок и удаление дублей.
Почему в справочнике есть элементы с пометкой удаления?
Это объекты, удалённые из конфигурации. Программа помечает их, а не удаляет, чтобы сохранить ссылки в истории. Трогать их не нужно.
Нужен ли монопольный доступ для обновления справочника?
Для самого справочника — нет. Но если вы обновляете конфигурацию базы данных или запускаете тестирование и исправление, монопольный режим потребуется.
Справочник есть в базах без БСП?
Нет. Это объект Библиотеки стандартных подсистем. В самописных конфигурациях без БСП его нет, и ошибка такого вида там не возникает.
Как часто справочник обновляется сам?
При каждом первом запуске после изменения конфигурации и при подключении или замене расширений. Ручное обновление нужно только после сбоя.