При работе в программе 1С:Зарплата и управление персоналом, редакция 3.1, пользователи могут столкнуться с неприятной ситуацией: при попытке провести документ «Утверждение штатного расписания» или «Изменение штатного расписания» система выдает критическую ошибку «Значение не является значением объектного типа (ЕжегодныеОтпуска)». Эта проблема блокирует возможность ведения кадрового учета и планирования фонда оплаты труда. В этой статье мы подробно разберем причины возникновения данной ошибки и рассмотрим все возможные способы её решения.
Прежде всего, разберем техническую природу сообщения. Ошибка Значение не является значением объектного типа означает, что программный код пытается обратиться к свойству или табличной части ЕжегодныеОтпуска у объекта, который на данный момент является пустым (равен Неопределено или Null). В контексте штатного расписания это чаще всего связано с тем, что программа перебирает позиции штатного расписания, но одна из них содержит «битую» ссылку (Объект не найден) на подразделение или должность, либо нарушена логическая связь в системных регистрах.
Рассмотрим пошагово методы исправления, начиная от самого эффективного и заканчивая глубокой технической диагностикой.
Как показывает практика, наиболее частой причиной является некорректное заполнение вспомогательного регистра, который отвечает за иерархию структурных единиц. Если иерархия нарушена, алгоритм расчета прав на отпуска не может корректно инициализировать объект позиции штатного расписания.
Разберем по шагам, как это исправить:
Подчиненность подразделений организаций.Если первый способ не помог, проанализируем справочник Позиции штатного расписания. Часто при переносе данных из других конфигураций (например, из 1С:Бухгалтерии 3.0) или при некорректном удалении объектов возникают записи, ссылающиеся на несуществующие элементы.
Для диагностики воспользуемся Универсальным отчетом:
Подразделение, Должность и Наименование.<Объект не найден>.Иногда ошибка скрыта глубоко в табличных частях. Проанализируем ситуацию с помощью консоли запросов. Нам нужно проверить, нет ли в табличной части ЕжегодныеОтпуска записей, потерявших связь с основной позицией штатного расписания.
Рассмотрим пример запроса, который поможет локализовать проблему:
ВЫБРАТЬ
ШтатноеРасписаниеЕжегодныеОтпуска.Ссылка КАК ПроблемнаяСсылка,
ШтатноеРасписаниеЕжегодныеОтпуска.ВидОтпуска
ИЗ
Справочник.ПозицииШтатногоРасписания.ЕжегодныеОтпуска КАК ШтатноеРасписаниеЕжегодныеОтпуска
ГДЕ
ШтатноеРасписаниеЕжегодныеОтпуска.Ссылка.Наименование ЕСТЬ NULL
Если запрос вернет строки, это означает, что в базе данных существуют «осиротевшие» записи об отпусках, которые программа пытается прочитать, но не может найти владельца (позицию штатки). Такие записи требуют очистки на уровне базы данных.
Выясним, не менялись ли настройки программы в процессе заполнения данных. Проанализируем настройки расчета зарплаты:
Отпуска сотрудникам был снят, когда в штатном расписании уже были введены данные, это может привести к ошибке обращения к объекту.Если программные методы не приносят результата, рассмотрим вероятность технического сбоя платформы. Ошибка Значение не является значением объектного типа может быть следствием некорректного кэширования метаданных конфигурации.
Проделаем следующие действия:
Проверка логической целостности и Проверка ссылочной целостности. При обнаружении битых ссылок выберем вариант Очищать объекты или Создавать объекты (в зависимости от стратегии восстановления данных).1C:Enterprise 8.3 Server Agent.Часто в базу устанавливаются расширения для изменения печатных форм или добавления реквизитов. Даже если расширение не касается напрямую штатного расписания, оно может перехватывать процедуры проведения документов. Проанализируем ситуацию: временно отключим все расширения в разделе «Администрирование» — «Обслуживание» — «Расширения» и попробуем провести документ. Если ошибка исчезнет, значит, одно из расширений требует адаптации под текущий релиз ЗУП.
Подводя итог, можно сказать, что ошибка чаще всего лечится именно Способом 1 (регистр подчиненности) или Способом 2 (удаление битых ссылок). Совместное применение этих методов позволяет восстановить работоспособность штатного расписания в кратчайшие сроки.