При работе в программах 1С:Зарплата и управление персоналом или 1С:ERP пользователи часто сталкиваются с неприятной ситуацией: при попытке сформировать отчет "Расчетный листок (первая половина месяца)" система выдает сообщение о критических изменениях в настройках и завершает работу с ошибкой: Значение не является значением объектного типа (ФизическоеЛицо). Эта проблема может возникнуть внезапно, даже если настройки отчета не менялись.
В данной статье мы подробно разберем причины возникновения этой ошибки, проанализируем методы ее диагностики и рассмотрим пошаговые инструкции по ее устранению. Мы пройдем путь от проверки расширений конфигурации до поиска "битых" данных в регистрах сведений.
Рассмотрим наиболее вероятную причину, которая часто встречается в кастомизированных базах. Если в вашей системе установлены расширения, они могут перехватывать выполнение типовых процедур. Ошибка возникает, когда код расширения пытается обратиться к свойству ФизическоеЛицо у объекта, который по какой-то причине оказался пустым или имеет тип NULL.
Проанализируем ситуацию на примере общего модуля ЗарплатаКадрыОтчеты. В нем существует процедура ВывестиСотрудникаРасчетныйЛисток, которая отвечает за компоновку данных. Если расширение модифицирует логику получения данных о сотруднике, может возникнуть конфликт. Разберем фрагмент кода, который может приводить к ошибке:
// Пример проблемного участка в расширении
Если Не ЗначениеЗаполнено(СтрокаШапки.ОрганизацияГоловногоСотрудникаНаКонецПериода) Тогда
// Ошибка возникает здесь, если СтрокаШапки.ГоловнойСотрудник пуст или не имеет ссылки
ДанныеКорректировки = ПолучитьДанныеКорректировки(СтрокаШапки.ГоловнойСотрудник.ФизическоеЛицо);
СтрокаШапки.ОрганизацияГоловногоСотрудникаНаКонецПериода = ДанныеКорректировки.Организация;
КонецЕсли;
Чтобы выяснить, является ли расширение источником проблемы, выполним следующие шаги:
Если отчет сформировался без ошибок, значит, необходимо адаптировать код расширения под текущий релиз конфигурации или исправить логику проверки заполнения данных.
Часто ошибка проявляется только при формировании отчета по всем сотрудникам сразу. Если же выбирать сотрудников по одному, отчет может работать корректно для большинства из них. Это верный признак того, что в базе "затесался" сотрудник с некорректными данными. Выясним, как быстро его найти.
Применим метод дихотомии (деления пополам). Это наиболее эффективный способ поиска при большом штате сотрудников:
Как только проблемный сотрудник найден, проверим его карточку. Особое внимание уделим полю Физическое лицо. Бывают ситуации, когда ссылка в справочнике Сотрудники визуально заполнена, но при попытке перехода в объект возникает ошибка "Объект не найден".
Для ускорения работы отчетов 1С использует вспомогательные регистры. Одним из ключевых является регистр ДанныеДляПодбораСотрудников. Если связь между сотрудником и физическим лицом в этом регистре нарушена, отчет не сможет получить необходимые данные через точку.
Проанализируем состояние данных с помощью простого запроса в консоли запросов или через создание вспомогательной обработки:
ВЫБРАТЬ
ДанныеДляПодбораСотрудников.Сотрудник КАК Сотрудник,
ДанныеДляПодбораСотрудников.ФизическоеЛицо КАК ФизическоеЛицо
ИЗ
РегистрСведений.ДанныеДляПодбораСотрудников КАК ДанныеДляПодбораСотрудников
ГДЕ
ДанныеДляПодбораСотрудников.ФизическоеЛицо ЕСТЬ NULL
ИЛИ ДанныеДляПодбораСотрудников.ФизическоеЛицо = ЗНАЧЕНИЕ(Справочник.ФизическиеЛица.ПустаяСсылка)
Если запрос вернул строки, значит, данные регистра нуждаются в обновлении. В типовых конфигурациях для этого можно использовать стандартную обработку "Обновление данных для подбора сотрудников", которая обычно запускается автоматически, но может быть вызвана принудительно через функции для технического специалиста.
Рассмотрим, как найти ошибку без использования программирования. Воспользуемся инструментом Универсальный отчет (находится в разделе Администрирование или Отчеты):
Ссылка (Сотрудник) и Физическое лицо.Физическое лицо Равно [Пустая ссылка].Все найденные записи — это кандидаты на исправление. Вам необходимо зайти в каждого такого сотрудника и перевыбрать физическое лицо, после чего сохранить изменения.
Если вышеуказанные способы не помогли, причина может крыться в нарушении логической целостности базы данных. Разберем порядок действий в Конфигураторе:
После завершения тестирования отчет часто начинает работать, так как система удаляет "фантомные" записи из таблиц начислений, на которые ссылался расчетный листок.
Проанализируем еще два неочевидных фактора:
1. Ограничение прав доступа (RLS): Если у пользователя настроен доступ по подразделениям или организациям, то при формировании отчета по всем сотрудникам система может столкнуться с записью, к которой у пользователя нет прав. В этом случае поле ФизическоеЛицо может вернуться как пустая ссылка. Попробуйте сформировать отчет под пользователем с Полными правами. Если ошибка исчезнет — проблема в настройках прав доступа.
2. Очистка кэша: Иногда после обновления конфигурации локальный кэш метаданных на компьютере пользователя начинает конфликтовать с новой структурой запросов. Попробуйте удалить базу из списка в окне запуска и добавить ее заново. Это принудительно очистит временные файлы и может решить проблему "критичных изменений настроек".
Подводя итог, можно сказать, что ошибка ФизическоеЛицо — это всегда следствие обращения к пустому объекту. Последовательно проверяя расширения, целостность справочников и корректность регистров, вы обязательно найдете и устраните причину сбоя.