В практике работы с программой 1С:Зарплата и управление персоналом 8 (редакция 3.1) часто возникает ситуация, когда при попытке прекратить ранее назначенную надбавку или доплату система выдает ошибку: «Для сотрудника нет действующего начисления на [дата]». Это сбивает с толку, так как в карточке сотрудника начисление отображается как действующее. В этой статье мы подробно разберем, почему возникает этот конфликт данных, как проанализировать плановые начисления сотрудников, скрытые механизмы системы и какими способами можно устранить проблему, не прибегая к удалению документов.
Для начала проанализируем ситуацию с точки зрения логики программы. Документ Прекращение планового начисления — это специализированный инструмент, который должен найти в базе запись о «бессрочном» или еще действующем начислении и поставить ему отметку о завершении. Если программа сообщает, что «действующего начисления нет», это означает одно из двух:
Кадровый перевод или Изменение оплаты труда).Рассмотрим подробнее второй вариант, так как он является наиболее коварным. В современных версиях ЗУП 3.1 используются так называемые интервальные регистры. Они хранят информацию о начислениях в виде готовых периодов «Дата начала — Дата окончания». Если при создании документа назначения (например, Назначение планового начисления) пользователь случайно ввел дату окончания (часто это 31.12 текущего года), а затем просто стер ее клавишей Backspace или Delete, визуально поле может стать пустым, но в структуре базы данных (в табличной части документа) значение может сохраниться. Это приводит к рассинхронизации экранной формы и реальных записей в регистрах.
Прежде чем предпринимать какие-либо действия по исправлению, нам необходимо точно выяснить, что «видит» система. Для этого можно провести анализ плановых начислений сотрудников и обратиться к регистрам сведений, которые отвечают за хранение плановых начислений. Выполним следующие действия:
ПлановыеНачисления. Установим отбор по сотруднику и интересующему нас виду расчета. Проверим колонку Действует до. Если там стоит дата (например, 31.12.2023), значит, система считает начисление срочным.ПлановыеНачисленияИнтервальный. Этот регистр является производным, и именно на его данные опирается механизм проведения документов. Часто бывает так, что в основном регистре даты нет, а в интервальном она «зависла» из-за программного сбоя.Если мы обнаружили дату окончания в интервальном регистре, которую не видим в документе-основании, мы столкнулись с классической проблемой целостности интервалов.
Выясним причину появления даты в регистрах. Как правило, регистры двигает документ-регистратор. Если в регистре есть дата, значит, документ ее туда «записал». Рассмотрим, как проверить содержимое табличной части документа НазначениеПлановогоНачисления, даже если на форме всё чисто.
Для этого программисту или опытному пользователю рекомендуется использовать специализированную консоль запросов для ЗУП. Напишем простой запрос к табличной части Сотрудники документа-основания:
ВЫБРАТЬ
Док.Ссылка КАК ДокументСсылка,
Док.Сотрудник КАК Сотрудник,
Док.ДатаЗавершения КАК ДатаЗавершения
ИЗ
Документ.НазначениеПлановогоНачисления.Сотрудники КАК Док
ГДЕ
Док.Сотрудник = &Сотрудник
И Док.Начисление = &ВидРасчета
Если результат запроса в поле ДатаЗавершения покажет значение, отличное от 01.01.0001 (пустая дата), значит, реквизит в базе заполнен. На форме документа он может быть не виден из-за особенностей настройки прав или функциональных опций, либо из-за того, что при очистке поля значение не сбросилось в значение «пусто».
Если мы подтвердили, что в документе-основании «спряталась» ненужная дата окончания, мы можем исправить это без перепроведения всей цепочки документов вручную. Воспользуемся обработкой «Групповое изменение реквизитов»:
Документ.Назначение планового начисления.Сотрудники и в ней поле Дата завершения (или Дата окончания).После этой манипуляции документ нужно перепровести, чтобы он обновил записи в регистрах сведений ПлановыеНачисления.
Бывают ситуации, когда в документах всё корректно, а в регистре ПлановыеНачисленияИнтервальный все равно отображается неверный период. Это может быть следствием ошибки при обновлении конфигурации или аварийного завершения работы базы. В ЗУП 3.1 предусмотрен штатный механизм «лечения» таких расхождений.
Проанализируем алгоритм действий для восстановления интервалов:
ПересчетДанныхИнтервальныхРегистров).Плановые начисления) и укажем период или конкретного сотрудника.Важный момент: если проблема массовая, пересчет может занять длительное время, поэтому рекомендуем запускать его в периоды низкой нагрузки на базу.
Рассмотрим еще один нюанс, упомянутый в обсуждении. Если начисление настроено так, что оно зависит от показателя, у которого в настройках стоит признак «Используется только в месяце, в котором вводится значение», то такое начисление ведет себя специфически. Оно «живет» ровно один календарный месяц.
Посмотрим на пример: если вы ввели значение показателя в январе, то начисление будет действовать с 1 по 31 января. Пытаясь прекратить его документом от 6 февраля, вы получите ошибку, так как с 1 февраля оно технически уже не назначено сотруднику (оно само прекратилось в конце января). В этом случае документ Прекращение планового начисления вообще не нужен — начисление и так не будет рассчитываться в феврале.
Подводя итог, если вы столкнулись с невозможностью прекратить начисление, действуйте по следующему алгоритму:
Кадровым переводом или Изменением оплаты труда.Дата окончания.Соблюдение этих шагов позволит вам поддерживать чистоту кадрового учета и избегать труднообъяснимых ошибок при расчете заработной платы.