Как в ЗУП 3.1 настроить доплату за смену в зависимости от вида времени одним начислением

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

В практике автоматизации учета заработной платы часто возникают задачи, которые кажутся простыми на первый взгляд, но требуют глубокого понимания механизмов платформы 1С:Предприятие 8.3. Одной из таких задач является расчет фиксированной доплаты за выход на смену, где сумма зависит от того, была ли смена дневной или ночной. При этом обязательным условием часто выступает использование строго одного вида расчета. Рассмотрим, как реализовать этот алгоритм в программе 1С:Зарплата и Управление Персоналом 3.1, используя стандартный функционал и логические формулы.

Анализ постановки задачи

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

Главная сложность здесь заключается в том, что в типовом функционале ЗУП начисления обычно привязаны либо к общему количеству отработанного времени за месяц, либо к конкретным видам времени. Нам же нужно заставить систему анализировать каждый день в отдельности.

Шаг 1. Настройка категории начисления и учета времени

Прежде чем приступать к написанию формулы, разберем ключевой параметр, который определяет поведение начисления. Создадим новый вид расчета в справочнике Начисления. Чтобы программа могла анализировать состав часов внутри каждого дня, нам необходимо правильно настроить вкладку «Учет времени».

Выполним следующие действия:

  1. На вкладке «Основное» укажем, что начисление выполняется «Ежемесячно» (или «Только если введено значение показателя», если доплата разовая).
  2. Перейдем на вкладку «Учет времени». Это критически важный этап. Здесь необходимо установить переключатель в положение «Дополнительная оплата за уже оплаченное время».
  3. В списке видов времени выберем все те виды, которые могут встречаться в смене охранника: Явка, Ночные часы, Вечерние часы.

Почему это важно? Когда мы выбираем «Дополнительная оплата», программа при расчете документа Начисление зарплаты и взносов начинает «просматривать» график или табель сотрудника посуточно. Если бы мы выбрали «За работу полную смену», система могла бы просто суммировать часы за месяц, что не позволило бы нам применить разную логику к разным дням.

Шаг 2. Разработка логической формулы

Проанализируем инструменты, которые предоставляет редактор формул 1С. Для решения нашей задачи идеально подходит тернарный оператор или функция ?. Синтаксис этой функции выглядит так: ?(Условие, Значение_Если_Истина, Значение_Если_Ложь).

Рассмотрим вариант формулы, который будет работать в нашем случае:

?(НочныеЧасы > 0, 80, 60) * (ВремяВЧасах > 0)

Разберем подробно, как работает эта конструкция:

Шаг 3. Решение проблемы «переходящих» смен

Проанализируем ситуацию с суточными сменами. В ЗУП 3.1 время в графике жестко привязано к календарным суткам. Смена «сутки через двое» (с 08:00 одного дня до 08:00 другого) в программе разбивается на две части:

  1. Первые сутки: с 08:00 до 00:00 (Явка, Вечерние, 2 часа Ночных).
  2. Вторые сутки: с 00:00 до 08:00 (6 часов Ночных, Явка).

Если мы используем формулу ?(НочныеЧасы > 0, 80, 60), то возникнет проблема: и в первый, и во второй календарный день присутствуют ночные часы. В итоге за одну суточную смену сотрудник получит 80 + 80 = 160 рублей, что не соответствует условию (нужно 80 за всю смену целиком).

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

Алгоритм настройки будет следующим:

  1. Создадим новый вид времени Выход на контроль (через справочник Виды использования рабочего времени). Укажем, что это рабочее время.
  2. В графике работы сотрудников добавим этот вид времени в те дни, когда смена начинается (по 1 часу).
  3. В формуле начисления заменим проверку ВремяВЧасах на проверку этого специфического вида времени.

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

Шаг 4. Настройка приоритетов и вытеснения

Для корректного расчета любого начисления в ЗУП важно настроить вкладку «Приоритет». Выясним причину, почему это необходимо. Если сотрудник во время своей смены заболел или ушел в отпуск, автоматическая доплата за контроль не должна начисляться.

Проверим, чтобы в правой колонке («Начисления, приоритет которых выше») были указаны все виды отсутствий:

Благодаря тому, что мы настроили начисление как «Дополнительную оплату за уже оплаченное время», оно будет автоматически вытесняться вместе с основными часами явки.

Итоговые рекомендации

Мы проанализировали механизм работы ежедневных начислений в ЗУП 3.1. Подведем итоги:

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

← На главную