Как исправить ошибку "Значение не является значением объектного типа (ФизическоеЛицо)" при формировании расчетного листка в 1С?

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

При работе в программах 1С:Зарплата и управление персоналом или 1С:ERP пользователи часто сталкиваются с неприятной ситуацией: при попытке сформировать отчет "Расчетный листок (первая половина месяца)" система выдает сообщение о критических изменениях в настройках и завершает работу с ошибкой: Значение не является значением объектного типа (ФизическоеЛицо). Эта проблема может возникнуть внезапно, даже если настройки отчета не менялись.

В данной статье мы подробно разберем причины возникновения этой ошибки, проанализируем методы ее диагностики и рассмотрим пошаговые инструкции по ее устранению. Мы пройдем путь от проверки расширений конфигурации до поиска "битых" данных в регистрах сведений.

Причина 1: Некорректные доработки в расширениях конфигурации

Рассмотрим наиболее вероятную причину, которая часто встречается в кастомизированных базах. Если в вашей системе установлены расширения, они могут перехватывать выполнение типовых процедур. Ошибка возникает, когда код расширения пытается обратиться к свойству ФизическоеЛицо у объекта, который по какой-то причине оказался пустым или имеет тип NULL.

Проанализируем ситуацию на примере общего модуля ЗарплатаКадрыОтчеты. В нем существует процедура ВывестиСотрудникаРасчетныйЛисток, которая отвечает за компоновку данных. Если расширение модифицирует логику получения данных о сотруднике, может возникнуть конфликт. Разберем фрагмент кода, который может приводить к ошибке:


// Пример проблемного участка в расширении
Если Не ЗначениеЗаполнено(СтрокаШапки.ОрганизацияГоловногоСотрудникаНаКонецПериода) Тогда
    // Ошибка возникает здесь, если СтрокаШапки.ГоловнойСотрудник пуст или не имеет ссылки
    ДанныеКорректировки = ПолучитьДанныеКорректировки(СтрокаШапки.ГоловнойСотрудник.ФизическоеЛицо);
    СтрокаШапки.ОрганизацияГоловногоСотрудникаНаКонецПериода = ДанныеКорректировки.Организация;
КонецЕсли;

Чтобы выяснить, является ли расширение источником проблемы, выполним следующие шаги:

  1. Перейдем в меню Администрирование — Обслуживание — Расширения.
  2. Временно отключим расширения, которые влияют на расчет заработной платы или кадровый учет.
  3. Попробуем сформировать отчет заново.

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

Причина 2: Проблемные данные конкретного сотрудника

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

Применим метод дихотомии (деления пополам). Это наиболее эффективный способ поиска при большом штате сотрудников:

  1. Откроем настройки отчета и установим отбор по списку сотрудников.
  2. Выберем первую половину сотрудников из справочника. Если ошибка повторяется — проблема в этой части списка.
  3. Снова поделим проблемный список пополам и повторим процедуру.
  4. Продолжаем до тех пор, пока не останется один конкретный человек, на котором "падает" отчет.

Как только проблемный сотрудник найден, проверим его карточку. Особое внимание уделим полю Физическое лицо. Бывают ситуации, когда ссылка в справочнике Сотрудники визуально заполнена, но при попытке перехода в объект возникает ошибка "Объект не найден".

Причина 3: Ошибки в системных регистрах сведений

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

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


ВЫБРАТЬ
    ДанныеДляПодбораСотрудников.Сотрудник КАК Сотрудник,
    ДанныеДляПодбораСотрудников.ФизическоеЛицо КАК ФизическоеЛицо
ИЗ
    РегистрСведений.ДанныеДляПодбораСотрудников КАК ДанныеДляПодбораСотрудников
ГДЕ
    ДанныеДляПодбораСотрудников.ФизическоеЛицо ЕСТЬ NULL
    ИЛИ ДанныеДляПодбораСотрудников.ФизическоеЛицо = ЗНАЧЕНИЕ(Справочник.ФизическиеЛица.ПустаяСсылка)

Если запрос вернул строки, значит, данные регистра нуждаются в обновлении. В типовых конфигурациях для этого можно использовать стандартную обработку "Обновление данных для подбора сотрудников", которая обычно запускается автоматически, но может быть вызвана принудительно через функции для технического специалиста.

Причина 4: Использование Универсального отчета для диагностики

Рассмотрим, как найти ошибку без использования программирования. Воспользуемся инструментом Универсальный отчет (находится в разделе Администрирование или Отчеты):

  1. Выберем тип объекта Справочник и имя объекта Сотрудники.
  2. В настройках на закладке "Поля и сортировки" оставим только поля Ссылка (Сотрудник) и Физическое лицо.
  3. На закладке "Отборы" добавим условие: Физическое лицо Равно [Пустая ссылка].
  4. Сформируем отчет.

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

Причина 5: Битые ссылки и итоги тестирования

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

  1. Обязательно создадим резервную копию базы.
  2. Зайдем в меню Администрирование — Тестирование и исправление.
  3. Установим флажки:
    • Реиндексация таблиц информационной базы.
    • Проверка логической целостности.
    • Проверка ссылочной целостности.
  4. В настройках при наличии пустых ссылок выберем "Очищать объекты" или "Создавать объекты" (в зависимости от вашей политики восстановления данных).
  5. Запустим процесс.

После завершения тестирования отчет часто начинает работать, так как система удаляет "фантомные" записи из таблиц начислений, на которые ссылался расчетный листок.

Дополнительные рекомендации: Влияние RLS и Кэша

Проанализируем еще два неочевидных фактора:

1. Ограничение прав доступа (RLS): Если у пользователя настроен доступ по подразделениям или организациям, то при формировании отчета по всем сотрудникам система может столкнуться с записью, к которой у пользователя нет прав. В этом случае поле ФизическоеЛицо может вернуться как пустая ссылка. Попробуйте сформировать отчет под пользователем с Полными правами. Если ошибка исчезнет — проблема в настройках прав доступа.

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

Подводя итог, можно сказать, что ошибка ФизическоеЛицо — это всегда следствие обращения к пустому объекту. Последовательно проверяя расширения, целостность справочников и корректность регистров, вы обязательно найдете и устраните причину сбоя.

← На главную