При работе с типовыми конфигурациями 1С, использующими Библиотеку Стандартных Подсистем (БСП), пользователи и администраторы иногда сталкиваются с критической ошибкой: «Значение не является значением объектного типа (ПолноеИмя)». Эта ошибка чаще всего проявляется при попытке открыть стандартные отчеты, зайти в панель администрирования или во время выполнения регламентных заданий по сбору статистики. В этой статье мы подробно разберем причины возникновения данной проблемы и рассмотрим все доступные методы её решения.
Прежде чем приступать к активным действиям, давайте проанализируем ситуацию и выясним причину сбоя. Исходя из стека вызовов, ошибка локализована в общем модуле ВерсионированиеОбъектов. Рассмотрим проблемную строку кода:
МодульЦентрМониторинга.ЗаписатьСтатистикуОбъектаКонфигурации("КоличествоВерсийОбъекта." + ОбъектМетаданных.ПолноеИмя(), Выборка.Количество);
Здесь система пытается вызвать метод ПолноеИмя() у переменной ОбъектМетаданных. Ошибка возникает в тот момент, когда переменная ОбъектМетаданных принимает значение Неопределено. Это происходит потому, что в регистре сведений ВерсииОбъектов (или связанных с ним таблицах статистики) содержатся записи об объектах, которые физически были удалены из конфигурации или их идентификаторы типов изменились после масштабного обновления базы данных.
Процесс сбора статистики (Центр мониторинга) перебирает данные, находит старую запись, пытается получить метаданные объекта по его внутреннему идентификатору типа функцией Метаданные.НайтиПоТипу(), и, не находя соответствия в текущей конфигурации, возвращает «пустоту». Обращение к свойству «пустого» объекта и вызывает аварийное завершение программы.
Рассмотрим самый распространенный и зачастую наиболее эффективный метод — использование встроенных утилит платформы 1С. Тестирование и исправление (ТиИ) позволяет восстановить логическую целостность ссылок и очистить базу от «мусорных» данных.
Разберем по шагам алгоритм действий в Конфигураторе:
.dt) или создать копию файла 1Cv8.1CD.После завершения ТиИ система должна вычистить битые ссылки в служебных регистрах, что позволит механизму версионирования корректно отрабатывать сбор статистики.
Если стандартное тестирование не помогло, проанализируем содержимое регистров напрямую. Нам необходимо найти записи, ссылающиеся на несуществующие типы объектов.
Рассмотрим подробнее этот процесс:
Версии объектов.<Объект не найден> (...идентификатор...), это и есть причина нашей проблемы.Иногда ошибка кроется в настройках самой подсистемы БСП. Выясним, как это проверить через интерфейс:
Поскольку ошибка происходит непосредственно в момент передачи данных о производительности, мы можем временно или постоянно отключить этот функционал, если он не критичен для работы организации.
Выполним следующие действия:
Это действие предотвратит запуск кода, в котором происходит обращение к методу ПолноеИмя(), и позволит пользователям беспрепятственно открывать отчеты.
Если вы являетесь разработчиком или работаете с доработанной конфигурацией, наиболее надежным способом будет добавление проверки на Неопределено непосредственно в общий модуль. Это гарантирует, что система не «упадет», даже если встретит некорректные данные.
Рассмотрим пример того, как можно модифицировать код в общем модуле ВерсионированиеОбъектов:
// В процедуре сбора статистики найдем строку обращения к методу ПолноеИмя()
// И заменим её на безопасный вариант:
Если ОбъектМетаданных <> Неопределено Тогда
МодульЦентрМониторинга.ЗаписатьСтатистикуОбъектаКонфигурации(
"КоличествоВерсийОбъекта." + ОбъектМетаданных.ПолноеИмя(),
Выборка.Количество);
Иначе
// Если объект не найден, просто пропускаем запись в статистику
ЗаписьЖурналаРегистрации("Версионирование.Ошибка", УровеньЖурналаРегистрации.Предупреждение, , ,
"Обнаружена битая ссылка в статистике версионирования.");
КонецЕсли;
Такой подход делает систему более отказоустойчивой. Обратите внимание, что при обновлении конфигурации на новый релиз БСП данные изменения могут быть затерты, поэтому лучше использовать механизм Расширений конфигурации.
Посмотрим на ситуацию шире. Иногда причина кроется в «залипшем» серверном кэше. Если вы только что провели обновление и сразу столкнулись с этой ошибкой, попробуйте следующее:
srvinfo (временные файлы сеансов и кэша метаданных).Подведем итог: ошибка «Значение не является значением объектного типа (ПолноеИмя)» — это типичное следствие несоответствия данных в регистрах и структуры метаданных. Сочетание Тестирования и исправления с ручной очисткой регистра версий решает проблему в 99% случаев. Мы надеемся, что приведенные пошаговые инструкции помогли вам восстановить работоспособность вашей системы 1С.