Как найти объект метаданных по его уникальному идентификатору (UID) в 1С:Предприятие

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

В процессе разработки или администрирования систем на базе 1С:Предприятие 8.3 можно столкнуться с критической ошибкой платформы: «Не найден тип...», за которой следует длинная строка цифр и букв — UUID (например, 48fa9d68-ae46-4d76-988a-88927f7a0ca6). Ситуация осложняется тем, что ошибка может возникать только у одного пользователя или на конкретном рабочем месте, при этом стандартная чистка локального кэша не всегда приносит результат. Разберем подробно, как идентифицировать «сломанный» тип метаданных и какие шаги предпринять для исправления ситуации.

Природа возникновения ошибки и роль UUID

Каждый объект в дереве метаданных (справочник, документ, определяемый тип, общий реквизит) имеет свой внутренний уникальный идентификатор. Платформа использует эти идентификаторы для связи между объектами базы данных и программным кодом. Ошибка «Не найден тип» означает, что система обращается к объекту по его UID, но в текущем дереве метаданных, загруженном в память сеанса, этот идентификатор отсутствует.

Проанализируем основные причины возникновения такой ситуации:

Метод 1. Поиск через выгрузку конфигурации в файлы XML

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

Выполним следующие шаги:

  1. Откроем информационную базу в режиме Конфигуратор.
  2. Перейдем в меню Конфигурация — Выгрузить конфигурацию в файлы....
  3. Выберем пустую папку для выгрузки. Дождемся завершения процесса (это может занять время в зависимости от размера конфигурации).
  4. После выгрузки перейдем в указанную папку и найдем файл с названием ConfigDumpInfo.xml.
  5. Откроем этот файл любым текстовым редактором (рекомендуется Notepad++ или VS Code) и воспользуемся поиском по строке нашего UID.

В файле ConfigDumpInfo.xml мы увидим запись, похожую на эту:


<v8:MetaDataObjectInfo id="48fa9d68-ae46-4d76-988a-88927f7a0ca6">
    <v8:MetadataFullName>DefinedType.ДенежноеПолеЛюбойЗнак</v8:MetadataFullName>
</v8:MetaDataObjectInfo>

Проанализировав поле MetadataFullName, мы точно узнаем, какой объект вызывает проблему. В данном примере это Определяемый тип (DefinedType). Зная имя объекта, мы можем найти его в дереве метаданных и проверить его целостность или использование в системе.

Метод 2. Устранение проблемы на стороне сервера

Если поиск показал, что тип в конфигурации существует и исправен, но ошибка у пользователя сохраняется, значит, проблема кроется в серверных механизмах кэширования. Рассмотрим шаги по «жесткой» очистке системы:

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

2. Очистка серверного кэша. На сервере, где установлен сервер приложений, необходимо найти папку srvinfo (путь по умолчанию: C:\Program Files\1cv8\srvinfo). Внутри нее находятся папки с именами кластеров и баз (например, reg_1541). Нам нужно очистить содержимое папки snccntxt (в ней хранятся сеансовые данные) и временные файлы конфигурации.

3. Перезагрузка сервера (Hard Reset). Как показывает практика, в некоторых случаях (особенно при интенсивном динамическом обновлении) помогает только полная перезагрузка физического или виртуального сервера. Это принудительно очищает оперативную память от всех остаточных процессов rphost и сбрасывает сетевые сессии.

Метод 3. Очистка пользовательских настроек

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

Разберем, как программно очистить настройки для конкретного пользователя, чтобы не сбрасывать их всем остальным:


Процедура ОчиститьНастройкиПользователя(ВыбранныйПользователь)
    // Очистка настроек данных форм
    ХранилищеОбщихНастроек.Удалить(Неопределено, Неопределено, ВыбранныйПользователь);
    // Очистка настроек отчетов
    ХранилищеВариантовОтчетов.Удалить(Неопределено, Неопределено, ВыбранныйПользователь);
    // Очистка системных настроек
    ХранилищеСистемныхНастроек.Удалить(Неопределено, Неопределено, ВыбранныйПользователь);
КонецПроцедуры

После выполнения этого кода при следующем входе пользователя система пересоздаст настройки на основе актуального дерева метаданных.

Метод 4. Особенности «Определяемых типов»

Как выяснилось в ходе обсуждения, часто виновником ошибки становятся именно Определяемые типы (Defined Types). Эти объекты представляют собой объединение нескольких типов данных. Если в состав определяемого типа входит ссылка на объект, который был изменен в расширении или удален, платформа может выдать ошибку UID именно этого составного типа.

Проанализируем ситуацию: если ошибка возникает при попытке ввода данных в поле документа, проверьте свойства этого реквизита. Если тип реквизита — DefinedType, попробуйте временно заменить его на прямой тип (например, Число) и проверить, пропадет ли ошибка. Это поможет локализовать проблему в конкретном объекте метаданных.

Дополнительные инструменты поиска

Если база данных работает в клиент-серверном варианте под управлением MS SQL Server, можно попытаться найти упоминание UID в таблицах конфигурации напрямую через SQL Management Studio, выполнив поиск по таблице Config. Однако этот метод требует высокой квалификации и осторожности, так как данные там хранятся в бинарном сжатом виде.

Для файловых баз можно использовать утилиту Tool1CD. Она позволяет просматривать структуру таблиц и дерево объектов без запуска самого Конфигуратора, что бывает полезно, когда база вообще отказывается открываться из-за ошибок метаданных.

Подведем итог: при возникновении ошибки «Не найден тип по UID» первым делом выполняем выгрузку конфигурации в XML для идентификации объекта. Если тип легитимен — прибегаем к перезагрузке сервера приложений и очистке сеансовых данных. Это наиболее эффективный алгоритм решения подобных технических сбоев.

← На главную