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