В процессе разработки или администрирования систем на базе 1С:Предприятие 8.3 можно столкнуться с критической ошибкой платформы: «Не найден тип...», за которой следует длинная строка цифр и букв — UUID (например, 48fa9d68-ae46-4d76-988a-88927f7a0ca6). Ситуация осложняется тем, что ошибка может возникать только у одного пользователя или на конкретном рабочем месте, при этом стандартная чистка локального кэша не всегда приносит результат. Разберем подробно, как идентифицировать «сломанный» тип метаданных и какие шаги предпринять для исправления ситуации.
Каждый объект в дереве метаданных (справочник, документ, определяемый тип, общий реквизит) имеет свой внутренний уникальный идентификатор. Платформа использует эти идентификаторы для связи между объектами базы данных и программным кодом. Ошибка «Не найден тип» означает, что система обращается к объекту по его UID, но в текущем дереве метаданных, загруженном в память сеанса, этот идентификатор отсутствует.
Проанализируем основные причины возникновения такой ситуации:
UID, которые уже были изменены или удалены.Это самый надежный способ найти соответствие между загадочным идентификатором и понятным именем объекта метаданных. Платформа 1С позволяет выгрузить всю структуру конфигурации в текстовые файлы формата XML, где хранятся все внутренние связи.
Выполним следующие шаги:
ConfigDumpInfo.xml.UID.В файле ConfigDumpInfo.xml мы увидим запись, похожую на эту:
<v8:MetaDataObjectInfo id="48fa9d68-ae46-4d76-988a-88927f7a0ca6">
<v8:MetadataFullName>DefinedType.ДенежноеПолеЛюбойЗнак</v8:MetadataFullName>
</v8:MetaDataObjectInfo>
Проанализировав поле MetadataFullName, мы точно узнаем, какой объект вызывает проблему. В данном примере это Определяемый тип (DefinedType). Зная имя объекта, мы можем найти его в дереве метаданных и проверить его целостность или использование в системе.
Если поиск показал, что тип в конфигурации существует и исправен, но ошибка у пользователя сохраняется, значит, проблема кроется в серверных механизмах кэширования. Рассмотрим шаги по «жесткой» очистке системы:
1. Остановка службы сервера 1С:Предприятие. Это необходимо для того, чтобы освободить заблокированные файлы кэша в системных папках сервера.
2. Очистка серверного кэша. На сервере, где установлен сервер приложений, необходимо найти папку srvinfo (путь по умолчанию: C:\Program Files\1cv8\srvinfo). Внутри нее находятся папки с именами кластеров и баз (например, reg_1541). Нам нужно очистить содержимое папки snccntxt (в ней хранятся сеансовые данные) и временные файлы конфигурации.
3. Перезагрузка сервера (Hard Reset). Как показывает практика, в некоторых случаях (особенно при интенсивном динамическом обновлении) помогает только полная перезагрузка физического или виртуального сервера. Это принудительно очищает оперативную память от всех остаточных процессов rphost и сбрасывает сетевые сессии.
Если ошибка возникает при открытии конкретной формы или отчета, вероятно, проблема в сохраненных настройках. Даже если пользователь — администратор, его персональные настройки могут содержать ссылку на удаленный или измененный тип.
Разберем, как программно очистить настройки для конкретного пользователя, чтобы не сбрасывать их всем остальным:
Процедура ОчиститьНастройкиПользователя(ВыбранныйПользователь)
// Очистка настроек данных форм
ХранилищеОбщихНастроек.Удалить(Неопределено, Неопределено, ВыбранныйПользователь);
// Очистка настроек отчетов
ХранилищеВариантовОтчетов.Удалить(Неопределено, Неопределено, ВыбранныйПользователь);
// Очистка системных настроек
ХранилищеСистемныхНастроек.Удалить(Неопределено, Неопределено, ВыбранныйПользователь);
КонецПроцедуры
После выполнения этого кода при следующем входе пользователя система пересоздаст настройки на основе актуального дерева метаданных.
Как выяснилось в ходе обсуждения, часто виновником ошибки становятся именно Определяемые типы (Defined Types). Эти объекты представляют собой объединение нескольких типов данных. Если в состав определяемого типа входит ссылка на объект, который был изменен в расширении или удален, платформа может выдать ошибку UID именно этого составного типа.
Проанализируем ситуацию: если ошибка возникает при попытке ввода данных в поле документа, проверьте свойства этого реквизита. Если тип реквизита — DefinedType, попробуйте временно заменить его на прямой тип (например, Число) и проверить, пропадет ли ошибка. Это поможет локализовать проблему в конкретном объекте метаданных.
Если база данных работает в клиент-серверном варианте под управлением MS SQL Server, можно попытаться найти упоминание UID в таблицах конфигурации напрямую через SQL Management Studio, выполнив поиск по таблице Config. Однако этот метод требует высокой квалификации и осторожности, так как данные там хранятся в бинарном сжатом виде.
Для файловых баз можно использовать утилиту Tool1CD. Она позволяет просматривать структуру таблиц и дерево объектов без запуска самого Конфигуратора, что бывает полезно, когда база вообще отказывается открываться из-за ошибок метаданных.
Подведем итог: при возникновении ошибки «Не найден тип по UID» первым делом выполняем выгрузку конфигурации в XML для идентификации объекта. Если тип легитимен — прибегаем к перезагрузке сервера приложений и очистке сеансовых данных. Это наиболее эффективный алгоритм решения подобных технических сбоев.