Настройка дополнительных начислений в программе 1С:Зарплата и управление персоналом 2.5 (на обычных формах) часто сталкивается с ограничениями движка расчетных механизмов. Типовая задача — расчет компенсации питания, размер которой зависит от того, сколько часов сотрудник отработал в конкретный день — требует особого подхода, так как стандартные формулы оперируют итогами за месяц, а не подневными данными. Разберем, как решить эту задачу эффективно.
Рассмотрим ситуацию: сотруднику положено 350 рублей за день, если он отработал более 6 часов, 175 рублей (50%), если от 4 до 6 часов, и 0 рублей, если менее 4 часов. Проблема заключается в том, что в ЗУП 2.5 формула вида расчета видит только общие показатели за расчетный период: ОтработаноВремениВЧасах и ОтработаноВремениВДнях.
Проанализируем попытку использовать среднее арифметическое значение (ОтработаноВремениВЧасах / ОтработаноВремениВДнях). Если сотрудник отработал 10 дней по 8 часов и 10 дней по 2 часа, то среднее время составит 5 часов. Согласно формуле, основанной на среднем значении, система начислит ему по 175 рублей за все 20 дней. Однако по условиям задачи он должен получить 350 рублей за 10 «полных» дней и 0 рублей за остальные. Таким образом, использование средних величин допустимо только при строго стабильном графике работы без отклонений по часам внутри дня.
Если в вашей организации график работы сотрудников неизменен (например, всегда 8 часов или всегда 5 часов), мы можем использовать вложенные условия в формуле начисления. Посмотрим на пример реализации такой логики:
Результат = ?(ОтработаноВремениВЧасах = 0, 0,
?(ОтработаноВремениВЧасах / ОтработаноВремениВДнях >= 6, 350 * ОтработаноВремениВДнях,
?(ОтработаноВремениВЧасах / ОтработаноВремениВДнях < 4, 0, 175 * ОтработаноВремениВДнях)
)
)
Важные замечания по формуле:
ОтработаноВремениВЧасах, чтобы избежать ошибки деления на ноль для сотрудников, которые весь месяц были в отпуске или на больничном.?(). Обычно предел составляет 3-4 уровня вложенности, после чего конфигуратор выдает ошибку синтаксиса.Для случаев с «рваным» графиком, когда сотрудник сегодня работает 3 часа, а завтра 12, единственный корректный метод — это расчет суммы вне формулы. Мы рекомендуем создать вид расчета с ручным вводом суммы и использовать внешнюю обработку заполнения табличных частей для документа «Начисление зарплаты сотрудникам организаций» или «Ввод показателей расчетных схем». Рассмотрим пошагово, как это реализовать.
Проанализируем алгоритм, который должна выполнять такая обработка:
Пример фрагмента кода (схематично) для анализа времени внутри обработки:
// Выборка данных по фактически отработанным часам за каждый день
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| РабочееВремя.ДнейОтработано КАК Дни,
| РабочееВремя.ЧасовОтработано КАК Часы,
| РабочееВремя.Период КАК Дата
|ИЗ
| РегистрНакопления.РабочееВремяСотрудников КАК РабочееВремя
|ГДЕ
| РабочееВремя.Сотрудник = &Сотрудник
| И РабочееВремя.Период МЕЖДУ &ДатаНач И &ДатаКон";
// В цикле обхода выборки
СуммаПитания = 0;
Пока Выборка.Следующий() Цикл
Если Выборка.Часы >= 6 Тогда
СуммаПитания = СуммаПитания + 350;
ИначеЕсли Выборка.Часы >= 4 Тогда
СуммаПитания = СуммаПитания + 175;
КонецЕсли;
КонецЦикла;
Если вы не хотите прибегать к программированию, можно использовать механизм «Оценка показателя по шкале». Однако для этого придется разделить начисление на два отдельных вида расчета или вводить два разных показателя вручную:
КоличествоДней_Питание_100КоличествоДней_Питание_50В этом случае бухгалтер при расчете зарплаты должен будет вручную (или с помощью простой загрузки из Excel) проставить количество дней в соответствующие колонки. Формула будет выглядеть максимально прозрачно:
(КоличествоДней_Питание_100 * 350) + (КоличествоДней_Питание_50 * 175)
Независимо от выбранного способа расчета суммы, необходимо правильно настроить параметры самого Вида расчета на закладках в справочнике «Начисления организаций»:
1. Закладка «Время»
Для того чтобы расчет корректно соотносился с отработанными днями, выберите переключатель «Дополнительное начисление за уже оплаченное время». В поле «Вид времени» укажите Явка. Это позволит системе понимать, что данная выплата привязана к присутствию сотрудника на рабочем месте.
2. Закладка «Налоги» и «Взносы»
Выясним статус данной выплаты. Поскольку компенсация питания чаще всего является доходом сотрудника:
2510 (Оплата за него организациями питания...).3. Закладка «Прочее»
Если вы используете первый вариант с формулой, обязательно добавьте в список вытесняющих видов расчета все неявки: «Больничный лист», «Отпуск основной», «Отпуск за свой счет», «Прогул». Это гарантирует, что ОтработаноВремениВДнях будет рассчитано корректно и компенсация не начислится за дни отсутствия.
Подведем итоги. Настройка компенсации питания в ЗУП 2.5 с ежедневной проверкой часов штатными формулами возможна только при условии линейных графиков. В сложных ситуациях мы рекомендуем использовать внешнюю обработку заполнения ТЧ. Это позволит избежать громоздких и потенциально ошибочных формул, обеспечит точный расчет на основе данных Табеля и значительно упростит работу бухгалтера, сводя ручной ввод к минимуму.