Как исправить ошибку «Значение не является значением объектного типа (ОтборВедущих)» в ЗУП 3.1

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

При работе в конфигурации 1С:Зарплата и управление персоналом 3.1, особенно после масштабных обновлений или переноса данных из старых редакций (например, ЗУП 2.5), пользователи часто сталкиваются с системными ошибками при попытке изменить настройки состава начислений. Одна из наиболее специфических проблем — ошибка Значение не является значением объектного типа (ОтборВедущих).

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

Выявление причины ошибки через анализ стека вызовов

Для начала проанализируем, где именно происходит сбой. Как правило, ошибка возникает в общем модуле РасчетЗарплатыРасширенный. Стек вызова выглядит следующим образом:


{ОбщийМодуль.РасчетЗарплатыРасширенный.Модуль(15400)}: ОтборВедущих = СвойстваНачисления.ОтборВедущих;
{ПланВидовРасчета.Начисления.МодульМенеджера(350)}: РасчетЗарплатыРасширенный.ДозаполнитьВидыРасчета(КоллекторНачислений);
{ПланВидовРасчета.Начисления.МодульМенеджера(1146)}: ЗаписатьВидыРасчетаКоллектора(КоллекторНачислений, СвойстваНачислений, КоллекторУдержаний);
{Справочник.ВидыОтпусков.МодульОбъекта(112)}: ПланыВидовРасчета.Начисления.СоздатьНачисленияОтпускаИКомпенсации(Ссылка, Наименование...);

Разберем этот фрагмент кода. Проблема заключается в том, что переменная СвойстваНачисления в какой-то момент итерации цикла перестает быть структурой (объектом) и становится Неопределено или другим типом, не имеющим свойства ОтборВедущих. Это происходит потому, что в плане видов расчета Начисления присутствуют записи с нарушенной логикой заполнения или «битые» ссылки, появившиеся после переноса данных.

Способ 1. Поиск и исправление некорректных данных (Рекомендуемый)

Чаще всего корень проблемы кроется в том, что у одного или нескольких видов расчета не заполнена КатегорияНачисленияИлиНеоплаченногоВремени. Выясним это с помощью запроса. Откроем консоль запросов и выполним следующий текст:


ВЫБРАТЬ
    Начисления.Ссылка КАК Ссылка,
    Начисления.Наименование КАК Наименование,
    Начисления.Код КАК Код,
    Начисления.КатегорияНачисленияИлиНеоплаченногоВремени КАК Категория
ИЗ
    ПланВидовРасчета.Начисления КАК Начисления
УПОРЯДОЧИТЬ ПО
    Категория

Проанализируем результат. Если в списке вы видите строки, где поле Категория не заполнено (пустое), именно они являются виновниками ошибки. Система при обновлении настроек пытается сопоставить свойства для всех начислений, и когда очередь доходит до элемента без категории, алгоритм «теряет» структуру свойств.

Порядок действий для исправления:

  1. Найдите записи с пустой категорией. Если это дубли или неиспользуемые начисления, их следует пометить на удаление.
  2. Если записи являются «невидимыми» (не отображаются в пользовательском списке Начисления), воспользуйтесь обработкой Групповое изменение реквизитов.
  3. В некоторых случаях помогает временное присвоение любой подходящей категории (например, «Прочие начисления») с последующей записью объекта.
  4. Проверьте наличие дублей предопределенных элементов. Если в базе два «Учебных отпуска» с одинаковым наименованием, один из которых был создан при переносе, это вызовет конфликт.

Способ 2. Проверка связей и приоритетов

Ошибка упоминает ОтборВедущих. Это указывает на механизм зависимостей начислений. Посмотрим на ситуацию со стороны «Ведущих начислений» (вкладка Приоритет в виде расчета).

Выясним, нет ли в списке ведущих начислений таких элементов, которые помечены на удаление или имеют пустые ссылки. Рассмотрим алгоритм проверки:

  1. Откройте список Начисления.
  2. Перейдите в любой вид расчета, связанный с отпусками (например, основной ежегодный отпуск).
  3. Проверьте списки Вытесняющие начисления и Ведущие начисления.
  4. Если в списке отображается надпись Объект не найден, удалите эту строку и перевыберите актуальное начисление.

Способ 3. Временная корректировка кода (Экстренный метод)

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

Нам необходимо обернуть процедуру ДозаполнитьВидыРасчета в блоке Попытка...Исключение. Это позволит системе пропустить проблемный элемент и продолжить работу.

Пример реализации в общем модуле РасчетЗарплатыРасширенный:


Процедура ДозаполнитьВидыРасчета(КоллекторНачислений) Экспорт
    Попытка
        // Оригинальный программный код процедуры, 
        // где происходит обращение к СвойстваНачисления.ОтборВедущих
    Исключение
        // Здесь можно зафиксировать ошибку в журнале регистрации для анализа
        ЗаписьЖурналаРегистрации("НастройкаРасчета", УровеньЖурналаРегистрации.Предупреждение, , , 
            "Пропущено начисление при обновлении свойств");
    КонецПопытки;
КонецПроцедуры

Важное замечание: Этот метод является «костыльным». Мы должны понимать, что пропуск заполнения свойств может привести к тому, что зависимости (вытеснение) для некоторых начислений не будут работать корректно. После выполнения срочных задач обязательно вернитесь к Способу 1 для окончательного исправления данных.

Дополнительные рекомендации

Проанализируем еще несколько моментов, которые могут помочь в диагностике:

Подведем итог. Ошибка Значение не является значением объектного типа (ОтборВедущих) — это индикатор «грязных» данных в плане видов расчета Начисления. Решая её, мы в первую очередь должны стремиться к очистке справочников и планов расчетов от элементов с незаполненными ключевыми реквизитами, такими как Категория.

← На главную