При работе в конфигурации 1С:Зарплата и управление персоналом 3.1, особенно после масштабных обновлений или переноса данных из старых редакций (например, ЗУП 2.5), пользователи часто сталкиваются с системными ошибками при попытке изменить настройки состава начислений. Одна из наиболее специфических проблем — ошибка Значение не является значением объектного типа (ОтборВедущих).
Рассмотрим ситуацию: вы пытаетесь включить оплачиваемый учебный отпуск через меню Настройка — Расчет зарплаты — Настройка состава начислений и удержаний или создать новый вид отпуска вручную. В этот момент система выдает отказ, блокируя сохранение настроек. Проанализируем причины этого поведения и разберем способы решения.
Для начала проанализируем, где именно происходит сбой. Как правило, ошибка возникает в общем модуле РасчетЗарплатыРасширенный. Стек вызова выглядит следующим образом:
{ОбщийМодуль.РасчетЗарплатыРасширенный.Модуль(15400)}: ОтборВедущих = СвойстваНачисления.ОтборВедущих;
{ПланВидовРасчета.Начисления.МодульМенеджера(350)}: РасчетЗарплатыРасширенный.ДозаполнитьВидыРасчета(КоллекторНачислений);
{ПланВидовРасчета.Начисления.МодульМенеджера(1146)}: ЗаписатьВидыРасчетаКоллектора(КоллекторНачислений, СвойстваНачислений, КоллекторУдержаний);
{Справочник.ВидыОтпусков.МодульОбъекта(112)}: ПланыВидовРасчета.Начисления.СоздатьНачисленияОтпускаИКомпенсации(Ссылка, Наименование...);
Разберем этот фрагмент кода. Проблема заключается в том, что переменная СвойстваНачисления в какой-то момент итерации цикла перестает быть структурой (объектом) и становится Неопределено или другим типом, не имеющим свойства ОтборВедущих. Это происходит потому, что в плане видов расчета Начисления присутствуют записи с нарушенной логикой заполнения или «битые» ссылки, появившиеся после переноса данных.
Чаще всего корень проблемы кроется в том, что у одного или нескольких видов расчета не заполнена КатегорияНачисленияИлиНеоплаченногоВремени. Выясним это с помощью запроса. Откроем консоль запросов и выполним следующий текст:
ВЫБРАТЬ
Начисления.Ссылка КАК Ссылка,
Начисления.Наименование КАК Наименование,
Начисления.Код КАК Код,
Начисления.КатегорияНачисленияИлиНеоплаченногоВремени КАК Категория
ИЗ
ПланВидовРасчета.Начисления КАК Начисления
УПОРЯДОЧИТЬ ПО
Категория
Проанализируем результат. Если в списке вы видите строки, где поле Категория не заполнено (пустое), именно они являются виновниками ошибки. Система при обновлении настроек пытается сопоставить свойства для всех начислений, и когда очередь доходит до элемента без категории, алгоритм «теряет» структуру свойств.
Порядок действий для исправления:
Начисления), воспользуйтесь обработкой Групповое изменение реквизитов.Ошибка упоминает ОтборВедущих. Это указывает на механизм зависимостей начислений. Посмотрим на ситуацию со стороны «Ведущих начислений» (вкладка Приоритет в виде расчета).
Выясним, нет ли в списке ведущих начислений таких элементов, которые помечены на удаление или имеют пустые ссылки. Рассмотрим алгоритм проверки:
Начисления.Объект не найден, удалите эту строку и перевыберите актуальное начисление.Если проблему нужно решить немедленно, чтобы начислить зарплату или отпускные, а времени на поиск «битых» данных нет, можно прибегнуть к программной «заглушке». Рассмотрим, как это сделать правильно, используя расширение конфигурации (чтобы не снимать основную конфигурацию с поддержки).
Нам необходимо обернуть процедуру ДозаполнитьВидыРасчета в блоке Попытка...Исключение. Это позволит системе пропустить проблемный элемент и продолжить работу.
Пример реализации в общем модуле РасчетЗарплатыРасширенный:
Процедура ДозаполнитьВидыРасчета(КоллекторНачислений) Экспорт
Попытка
// Оригинальный программный код процедуры,
// где происходит обращение к СвойстваНачисления.ОтборВедущих
Исключение
// Здесь можно зафиксировать ошибку в журнале регистрации для анализа
ЗаписьЖурналаРегистрации("НастройкаРасчета", УровеньЖурналаРегистрации.Предупреждение, , ,
"Пропущено начисление при обновлении свойств");
КонецПопытки;
КонецПроцедуры
Важное замечание: Этот метод является «костыльным». Мы должны понимать, что пропуск заполнения свойств может привести к тому, что зависимости (вытеснение) для некоторых начислений не будут работать корректно. После выполнения срочных задач обязательно вернитесь к Способу 1 для окончательного исправления данных.
Проанализируем еще несколько моментов, которые могут помочь в диагностике:
Тестирование и исправление с галочками «Проверка логической целостности» и «Очистка объектов». Это поможет выявить ссылки на несуществующие объекты в плане видов расчета.Функции для технического специалиста) может сбросить состояние ошибки.Подведем итог. Ошибка Значение не является значением объектного типа (ОтборВедущих) — это индикатор «грязных» данных в плане видов расчета Начисления. Решая её, мы в первую очередь должны стремиться к очистке справочников и планов расчетов от элементов с незаполненными ключевыми реквизитами, такими как Категория.