При работе в конфигурации 1С:Зарплата и управление персоналом 3.1 (а также в 1С:ERP и 1С:Комплексная автоматизация) пользователи и разработчики часто сталкиваются с ситуацией, когда документ Кадровый перевод списком отказывается проводиться. Система выдает критическую ошибку: «Ежемесячные начисления не установлены». При этом аналогичный одиночный документ по тому же сотруднику проводится без каких-либо нареканий. Проанализируем причины этой проблемы и разберем по шагам способы ее решения.
Первое, что нам необходимо понять: документ Кадровый перевод списком технически и логически отличается от одиночного документа. В программе заложена концепция разделения труда между кадровиком и расчетчиком. Рассмотрим подробнее, как это работает:
НачисленияУтверждены (тип Булево). Если вы просто добавили сотрудника в список, но не открыли окно редактирования его начислений по гиперссылке и не нажали «ОК», этот флаг остается в значении Ложь.Программа интерпретирует это так: кадровые данные внесены, но финансовая часть не подтверждена (в этом случае может потребоваться редактирование кадровой истории). Именно поэтому при попытке проведения срабатывает процедура ОбработкаПроверкиЗаполнения в модуле объекта, которая блокирует запись документа.
Если в вашем документе всего несколько человек, проще всего исправить ситуацию вручную. Проанализируем порядок действий:
Кадровый перевод списком.После этого признак НачисленияУтверждены для каждой строки будет установлен в Истина, и документ проведется.
В ситуациях, когда в списке сотни сотрудников, «прощелкивание» каждой строки нецелесообразно. Рассмотрим, как решить проблему массово с помощью стандартной обработки:
Кадровый перевод списком.Начисления утверждены и установите напротив него галочку, а в колонке «Новое значение» выберите Да.Важно: Этот метод сработает только в том случае, если табличные части с начислениями фактически заполнены (например, подтянулись из штатного расписания), но просто не был взведен флаг утверждения.
Если вы создаете документ программно (при миграции данных или интеграции), одной записи в основные реквизиты недостаточно. Выясним, какие именно действия в коде предотвратят ошибку. Посмотрим на пример правильного заполнения объекта:
// Предположим, ДокОбъект — это созданный документ Кадровый перевод списком
Для Каждого СтрокаСотрудник Из ДокОбъект.Сотрудники Цикл
// Заполнение кадровых данных...
// Обязательно устанавливаем флаг утверждения начислений
ДокОбъект.НачисленияУтверждены = Истина;
КонецЦикла;
Попытка
ДокОбъект.Записать(РежимЗаписиДокумента.Проведение);
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
Проанализируем ситуацию глубже: помимо флага НачисленияУтверждены, система проверяет соответствие идентификаторов строк. Если вы программно заполняете таблицу Начисления, убедитесь, что поле ИдентификаторСтрокиВидаРасчета корректно связано с основной таблицей Сотрудники. Если связи нет, программа посчитает, что начисления «чужие» или отсутствуют.
Второй вопрос, часто возникающий в этой теме — пропажа показателей после изменения формулы. Рассмотрим, почему это происходит и как восстановить данные:
Начисления, 1С заново анализирует текст. Если вы удалили показатель Оклад и вписали его снова, для системы это может стать «новым» вхождением. Старые документы, которые ссылались на предыдущую структуру формулы, перестают «видеть» значения показателей.Показатели расчета зарплаты, установлена ли галочка «Вводится в кадровых документах». Если она снята, колонка для ввода показателя исчезнет из формы кадрового перевода.Чтобы вернуть показатели, попробуйте следующий метод: постепенно восстанавливайте формулу, добавляя показатели в той же последовательности, в которой они были изначально. Программа сопоставляет колонки в интерфейсе с порядком появления переменных в тексте формулы слева направо. Если это не помогает, рекомендуется не менять старое начисление, а создать новое и перевести сотрудников на него через Кадровый перевод.
Если в вашей базе ведется история изменений штатного расписания, Кадровый перевод списком становится крайне чувствителен к заполнению позиций. Проанализируем типичный сбой:
Когда штатное расписание не заполнено, документ может проводиться, так как проверять не с чем. Но как только вы создаете Утверждение штатного расписания, система начинает требовать строгого соответствия. Если в позиции штатки указаны начисления, но не заданы значения показателей (или задана «вилка» мин/макс), документ в списочном режиме может выдать ошибку «Ежемесячные начисления не установлены», так как он не может автоматически определить конкретную цифру для каждого сотрудника. В этом случае ручное уточнение в каждой строке (Решение 1) является обязательным.
Итог: Основной ключ к решению проблемы — реквизит НачисленияУтверждены. Используйте его при программной разработке и проверяйте его состояние при возникновении пользовательских ошибок.