Как настроить компенсацию питания в ЗУП 2.5 в зависимости от фактически отработанных часов за каждый день?

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

Настройка дополнительных начислений в программе 1С:Зарплата и управление персоналом 2.5 (на обычных формах) часто сталкивается с ограничениями движка расчетных механизмов. Типовая задача — расчет компенсации питания, размер которой зависит от того, сколько часов сотрудник отработал в конкретный день — требует особого подхода, так как стандартные формулы оперируют итогами за месяц, а не подневными данными. Разберем, как решить эту задачу эффективно.

Анализ проблемы: почему стандартная формула может ошибаться

Рассмотрим ситуацию: сотруднику положено 350 рублей за день, если он отработал более 6 часов, 175 рублей (50%), если от 4 до 6 часов, и 0 рублей, если менее 4 часов. Проблема заключается в том, что в ЗУП 2.5 формула вида расчета видит только общие показатели за расчетный период: ОтработаноВремениВЧасах и ОтработаноВремениВДнях.

Проанализируем попытку использовать среднее арифметическое значение (ОтработаноВремениВЧасах / ОтработаноВремениВДнях). Если сотрудник отработал 10 дней по 8 часов и 10 дней по 2 часа, то среднее время составит 5 часов. Согласно формуле, основанной на среднем значении, система начислит ему по 175 рублей за все 20 дней. Однако по условиям задачи он должен получить 350 рублей за 10 «полных» дней и 0 рублей за остальные. Таким образом, использование средних величин допустимо только при строго стабильном графике работы без отклонений по часам внутри дня.

Вариант 1. Использование сложной формулы (для стабильных графиков)

Если в вашей организации график работы сотрудников неизменен (например, всегда 8 часов или всегда 5 часов), мы можем использовать вложенные условия в формуле начисления. Посмотрим на пример реализации такой логики:


Результат = ?(ОтработаноВремениВЧасах = 0, 0, 
    ?(ОтработаноВремениВЧасах / ОтработаноВремениВДнях >= 6, 350 * ОтработаноВремениВДнях, 
        ?(ОтработаноВремениВЧасах / ОтработаноВремениВДнях < 4, 0, 175 * ОтработаноВремениВДнях)
    )
)

Важные замечания по формуле:

  1. Проверка на ноль: Обязательно проверяем ОтработаноВремениВЧасах, чтобы избежать ошибки деления на ноль для сотрудников, которые весь месяц были в отпуске или на больничном.
  2. Ограничение вложенности: В ЗУП 2.5 нельзя строить бесконечные цепочки условий ?(). Обычно предел составляет 3-4 уровня вложенности, после чего конфигуратор выдает ошибку синтаксиса.
  3. Показатель «Отработано времени»: Используйте предопределенные показатели, которые учитывают фактическую явку.

Вариант 2. Использование внешних обработок (универсальный способ)

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

Проанализируем алгоритм, который должна выполнять такая обработка:

  1. Получить данные из регистра расчета Основные начисления или регистра накопления Рабочее время сотрудников (если ведется табель).
  2. В цикле обойти каждый календарный день периода.
  3. Для каждого дня сравнить количество часов с условиями (4 и 6 часов).
  4. Накопить итоговую сумму компенсации за месяц.
  5. Записать результат в колонку «Результат» или в соответствующий показатель.

Пример фрагмента кода (схематично) для анализа времени внутри обработки:


// Выборка данных по фактически отработанным часам за каждый день
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
               |    РабочееВремя.ДнейОтработано КАК Дни,
               |    РабочееВремя.ЧасовОтработано КАК Часы,
               |    РабочееВремя.Период КАК Дата
               |ИЗ
               |    РегистрНакопления.РабочееВремяСотрудников КАК РабочееВремя
               |ГДЕ
               |    РабочееВремя.Сотрудник = &Сотрудник
               |    И РабочееВремя.Период МЕЖДУ &ДатаНач И &ДатаКон";

// В цикле обхода выборки
СуммаПитания = 0;
Пока Выборка.Следующий() Цикл
    Если Выборка.Часы >= 6 Тогда
        СуммаПитания = СуммаПитания + 350;
    ИначеЕсли Выборка.Часы >= 4 Тогда
        СуммаПитания = СуммаПитания + 175;
    КонецЕсли;
КонецЦикла;

Вариант 3. Настройка через показатели и шкалу (с двумя видами расчета)

Если вы не хотите прибегать к программированию, можно использовать механизм «Оценка показателя по шкале». Однако для этого придется разделить начисление на два отдельных вида расчета или вводить два разных показателя вручную:

В этом случае бухгалтер при расчете зарплаты должен будет вручную (или с помощью простой загрузки из Excel) проставить количество дней в соответствующие колонки. Формула будет выглядеть максимально прозрачно:

(КоличествоДней_Питание_100 * 350) + (КоличествоДней_Питание_50 * 175)

Дополнительные настройки вида расчета

Независимо от выбранного способа расчета суммы, необходимо правильно настроить параметры самого Вида расчета на закладках в справочнике «Начисления организаций»:

1. Закладка «Время»

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

2. Закладка «Налоги» и «Взносы»

Выясним статус данной выплаты. Поскольку компенсация питания чаще всего является доходом сотрудника:

3. Закладка «Прочее»

Если вы используете первый вариант с формулой, обязательно добавьте в список вытесняющих видов расчета все неявки: «Больничный лист», «Отпуск основной», «Отпуск за свой счет», «Прогул». Это гарантирует, что ОтработаноВремениВДнях будет рассчитано корректно и компенсация не начислится за дни отсутствия.

Резюме

Подведем итоги. Настройка компенсации питания в ЗУП 2.5 с ежедневной проверкой часов штатными формулами возможна только при условии линейных графиков. В сложных ситуациях мы рекомендуем использовать внешнюю обработку заполнения ТЧ. Это позволит избежать громоздких и потенциально ошибочных формул, обеспечит точный расчет на основе данных Табеля и значительно упростит работу бухгалтера, сводя ручной ввод к минимуму.

← На главную