Справочник «Идентификаторы объектов метаданных»: как вернуть его в порядок
Содержание
Идентификаторы объектов метаданных в 1С обновляются автоматически при первом запуске базы в режиме «1С:Предприятие» после изменения конфигурации. Если этого не произошло, обновление запускают вручную: параметром запуска /C ЗапуститьОбновлениеИнформационнойБазы или вызовом Справочники.ИдентификаторыОбъектовМетаданных.ОбновитьДанныеСправочника() из внешней обработки под пользователем с полными правами.
Типичная ситуация: администратор поставил доработку через Конфигуратор, обновил конфигурацию базы данных, а утром бухгалтер видит при входе ошибку проверки справочника «Идентификаторы объектов метаданных». Программа не пускает дальше или ругается при открытии отчётов и настройке прав. Причина почти всегда одна: справочник не успел синхронизироваться с новой структурой конфигурации.
Всё описанное относится к конфигурациям на Библиотеке стандартных подсистем (БСП): Бухгалтерия 3.0, ЗУП 3.1, УТ 11, КА 2, ERP, УНФ. Справочник — часть БСП, сама платформа его не ведёт.
Что хранит справочник идентификаторов и чем он отличается от UUID платформы
В 1С есть два разных уровня идентификаторов, и их часто путают.
🔹 UUID объекта конфигурации. Каждый справочник, документ, регистр, реквизит в конфигурации имеет внутренний уникальный идентификатор. Его видно, если выгрузить конфигурацию в XML-файлы: у каждого объекта есть атрибут uuid. По нему платформа понимает, что «Справочник.Контрагенты» в старой и новой версии — один и тот же объект, даже если его переименовали.
🔹 Элемент справочника «Идентификаторы объектов метаданных». Это обычные данные в базе. На каждый объект конфигурации БСП заводит элемент справочника со ссылкой. Ссылку можно записать в реквизит, регистр, табличную часть — в отличие от самого объекта метаданных, который хранить в данных нельзя.
Через эти ссылки работают многие механизмы:
- 🔐 управление доступом — профили групп доступа и ограничения по таблицам;
- 📊 варианты отчётов и их размещение в разделах;
- 📎 дополнительные отчёты и обработки — к каким объектам они привязаны;
- 🖨 печатные формы, рассылки отчётов, подписки на события;
- 🔄 обработчики обновления и отложенные операции.
Главные реквизиты элемента: полное имя объекта (например, Справочник.Контрагенты), синоним, имя коллекции и ключ объекта метаданных. По ключу БСП узнаёт объект после переименования и не плодит дубль.
| Что сравниваем | UUID в конфигурации | Элемент справочника ИОМ |
|---|---|---|
| Где живёт | В метаданных (файлы .cf, XML-выгрузка) | В таблице информационной базы |
| Кто ведёт | Платформа | Код БСП |
| Меняется при | Удалении и повторном создании объекта | Обновлении справочника |
| Можно сослаться из данных | Нет | Да |
Когда справочник рассинхронизируется
Справочник обновляется, когда меняется версия конфигурации или её состав. Сбой бывает в нескольких сценариях.
- Обновление в обход режима «1С:Предприятие». Конфигурацию изменили, а первым в базу зашёл не администратор, а регламентное задание или пользователь с ограниченными правами. Обработчики обновления не отработали до конца.
- Переименование объекта. Разработчик переименовал реквизит или справочник. Если объект сохранил UUID, БСП найдёт его по ключу. Если объект удалили и создали заново с тем же именем — для БСП это новый объект, старый элемент будет помечен на удаление.
- Загрузка чужой конфигурации поверх базы.
Загрузить конфигурацию из файлас .cf другого происхождения меняет UUID объектов. Данные при реструктуризации могут потеряться, а справочник наполнится помеченными элементами. - Распределённая база (РИБ). В подчинённом узле справочник не обновляется сам — он приходит из главного узла с обменом. Если в подчинённом узле конфигурация новее, чем данные справочника, программа выдаст ошибку.
- Расширения. Для объектов расширений в современных версиях БСП есть отдельный справочник «Идентификаторы объектов расширений». Подключили или отключили расширение — меняется он.
- Копирование базы
через
.dtмежду разными релизами. Выгрузили из одной версии, загрузили в базу с другой конфигурацией — справочник отражает старый состав.
Чем можно обновить идентификаторы объектов метаданных
Инструментов немного, и у каждого своя зона.
| Способ | Когда применять | Риски |
|---|---|---|
| Первый запуск в режиме «1С:Предприятие» под администратором | После любого изменения конфигурации | Минимальные |
Параметр /C ЗапуститьОбновлениеИнформационнойБазы | Версия конфигурации не менялась, а обновление нужно повторить | Запустятся все обработчики, займёт время |
Внешняя обработка с вызовом ОбновитьДанныеСправочника() | Нужно обновить только этот справочник | Нужны полные права, нельзя в подчинённом узле РИБ |
| Синхронизация с главным узлом РИБ | Ошибка в подчинённом узле | Сначала обновляют главный узел |
| XML-выгрузка конфигурации | Разбор, почему объект «стал новым» | Правка uuid вручную ломает данные |
Список элементов справочника можно открыть и посмотреть глазами. Включите команду «Все функции»: Главное меню → Сервис → Параметры, флажок «Отображать команду “Все функции”». Затем Главное меню → Все функции → Справочники → Идентификаторы объектов метаданных. В новых версиях платформы пункт называется «Функции для технического специалиста».
Удалять или править элементы из этого списка руками нельзя. На них ссылаются права доступа и варианты отчётов, и ручная правка оставит в базе битые ссылки.
Пошаговое обновление справочника идентификаторов
Перед любыми действиями сделайте резервную копию базы
. Для файловой — копия каталога или выгрузка .dt, для клиент-серверной — бэкап средствами СУБД или выгрузка .dt в Конфигураторе: Администрирование → Выгрузить информационную базу.
Шаг 1. Убедитесь, что конфигурация базы данных обновлена
Откройте Конфигуратор. Если в заголовке окна конфигурации или в дереве есть признак расхождения с базой данных, выполните Конфигурация → Обновить конфигурацию базы данных (F7). Без этого обработчики БСП работают со старой структурой таблиц.
Для обновления структуры нужен монопольный доступ: попросите пользователей выйти и отключите регламентные задания на время работ.
Шаг 2. Запустите базу под администратором
Войдите в режим «1С:Предприятие» пользователем с ролью «Полные права». БСП сравнит версию конфигурации с сохранённой, выполнит обработчики обновления и при этом перестроит справочник идентификаторов. Дождитесь окна с результатами обновления.
Если ошибка исчезла — на этом всё. Если нет, переходите к шагу 3.
Шаг 3. Принудительно перезапустите обновление
Создайте ярлык или запустите из командной строки:
"C:\Program Files\1cv8\8.3.24.1586\bin\1cv8.exe" ENTERPRISE /F "D:\Bases\Buh" /N "Администратор" /P "пароль" /C ЗапуститьОбновлениеИнформационнойБазы
Путь к 1cv8.exe подставьте свой: номер в каталоге совпадает с версией установленной платформы. Для серверной базы вместо /F используйте /S "сервер\имя_базы".
Параметр заставляет БСП пройти обновление заново, даже если номер версии не менялся. Работа может занять от минуты на маленькой базе до часа на большой.
Шаг 4. Обновите только справочник через внешнюю обработку
Если полный прогон не нужен или не помогает, вызовите процедуру менеджера справочника напрямую. Создайте в Конфигураторе внешнюю обработку
(Файл → Новый → Внешняя обработка), добавьте форму с командой и такой код:
&НаСервере
Процедура ОбновитьИдентификаторыНаСервере()
ЕстьИзменения = Ложь;
ЕстьУдаленные = Ложь;
Справочники.ИдентификаторыОбъектовМетаданных.ОбновитьДанныеСправочника(ЕстьИзменения, ЕстьУдаленные);
Сообщить(СтрШаблон("Справочник обновлён. Были изменения: %1. Есть удалённые объекты: %2.",
ЕстьИзменения, ЕстьУдаленные));
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьИдентификаторы(Команда)
ОбновитьИдентификаторыНаСервере();
КонецПроцедуры
Сохраните обработку и откройте её через Главное меню → Файл → Открыть под пользователем с полными правами. В базах с включённой защитой от опасных действий программа спросит подтверждение — его нужно дать.
В подчинённом узле РИБ этот вызов завершится ошибкой: обновлять справочник там нельзя. Обновите главный узел, выполните синхронизацию, затем запустите подчинённый узел.
Шаг 5. Если ошибка касается расширения
Откройте Администрирование → Печатные формы, отчёты и обработки → Расширения. Отключите подозрительное расширение, перезапустите программу, затем включите снова. При следующем запуске БСП заново заполнит идентификаторы объектов расширений.
Как автоматизировать обновление пакетным скриптом
Если вы обслуживаете много баз или обновляете конфигурацию по ночам, удобнее собрать цепочку в один .bat. Обновление структуры и запуск обработчиков идут последовательно:
@echo off
set V8="C:\Program Files\1cv8\8.3.24.1586\bin\1cv8.exe"
set BASE=/S "srv1c\buh"
set USR=/N "Администратор" /P "пароль"
set LOG=D:\Logs\update_buh.txt
rem 1. Обновление конфигурации базы данных
%V8% DESIGNER %BASE% %USR% /UpdateDBCfg /Out %LOG% /DisableStartupMessages
rem 2. Запуск обработчиков обновления БСП, включая справочник идентификаторов
%V8% ENTERPRISE %BASE% %USR% /C ЗапуститьОбновлениеИнформационнойБазы /Out %LOG% -NoTruncate /DisableStartupMessages
Ключи /UpdateDBCfg, /Out, /DisableStartupMessages — стандартные параметры командной строки платформы. /Out пишет результат в журнал, по которому утром видно, прошло ли обновление.
Запускайте скрипт в окно, когда в базе нет пользователей. Обновление структуры требует монопольного доступа, и все активные сеансы на это время придётся завершить: несохранённые документы пользователи потеряют.
Пароль в открытом виде в .bat — плохая практика. Храните скрипт в каталоге, куда есть доступ только у администратора, или заведите отдельного пользователя для регламентных работ с проверкой подлинности ОС.
Для анализа, какие объекты поменяли UUID, пригодится выгрузка конфигурации в XML:
%V8% DESIGNER %BASE% %USR% /DumpConfigToFiles "D:\Dump\buh_new"
Сравните её с выгрузкой предыдущей версии любой программой сравнения папок. Объекты, у которых изменился атрибут uuid при том же имени, БСП посчитает новыми.
Почему нельзя менять UUID вручную через выгрузку в файлы
Иногда предлагают «починить» расхождение так: выгрузить конфигурацию в XML, вписать нужный uuid и загрузить обратно через /LoadConfigFromFiles. Технически это возможно, практически — опасно.
- 💥 Платформа при обновлении структуры увидит другой объект. Старую таблицу она удалит вместе с данными, новую создаст пустой.
- 💥 Ссылки на элементы удалённого справочника в документах станут битыми.
- 💥 При следующем обновлении от поставщика объединение конфигураций сопоставит объекты неправильно.
Если нужно совместить две конфигурации с разными UUID одних и тех же объектов, это делают при сравнении и объединении: в окне сравнения можно вручную указать, какой объект основной конфигурации соответствует объекту из файла. Тогда UUID сохраняется, данные остаются на месте.
Проверка целостности после обновления
Обновление прошло без ошибок — это ещё не гарантия, что всё чисто. Проверьте три вещи.
1. Дубли в справочнике. Выполните запрос во внешней консоли запросов:
ВЫБРАТЬ
ВЫРАЗИТЬ(Идентификаторы.ПолноеИмя КАК СТРОКА(500)) КАК ПолноеИмя,
КОЛИЧЕСТВО(Идентификаторы.Ссылка) КАК Количество
ИЗ
Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы
ГДЕ
НЕ Идентификаторы.ПометкаУдаления
СГРУППИРОВАТЬ ПО
ВЫРАЗИТЬ(Идентификаторы.ПолноеИмя КАК СТРОКА(500))
ИМЕЮЩИЕ
КОЛИЧЕСТВО(Идентификаторы.Ссылка) > 1
Пустой результат — дублей нет.
2. Помеченные на удаление элементы. Откройте список справочника, отфильтруйте по пометке удаления. Это объекты, которых больше нет в конфигурации. Если среди них есть то, что на самом деле существует под новым именем, значит, объект пересоздавался с новым UUID. На помеченные элементы могут ссылаться профили доступа и варианты отчётов — их придётся перенастроить.
3. Работа механизмов БСП.
- откройте пару отчётов из разных разделов — варианты должны быть на месте;
- зайдите в профили групп доступа и проверьте, что роли и виды доступа не пустые;
- проверьте подключённые дополнительные обработки и печатные формы;
- посмотрите журнал регистрации за время обновления: события с уровнем «Ошибка» покажут, что не дошло до конца.