Почему в 1С:ЗУП 3.1 неправильно рассчитывается доплата до среднего по больничному листу?

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

При создании пользовательских начислений в программе 1С:Зарплата и Управление Персоналом (редакция 3.1) специалисты часто сталкиваются с парадоксальной ситуацией: по отдельности показатели в формуле считаются верно, но при объединении в общую конструкцию итоговый результат оказывается ошибочным. Типичный пример — создание начисления «Доплата до среднего заработка на период болезни», где программа вместо фактических дней болезни подставляет в формулу норму дней за весь месяц.

В этой статье мы подробно разберем, почему так происходит, как работают показатели времени в 1С и какие настройки необходимо выполнить, чтобы расчет стал корректным.

Анализ проблемы: почему формула «ломается»?

Рассмотрим ситуацию на примере формулы, предложенной пользователем:

(Оклад + НадбавкаПерсональная) / НормаДней * ВремяВДняхЧасах - РасчетнаяБаза

По задумке автора, программа должна взять сумму оклада и надбавки, вычислить дневную ставку и умножить ее на количество дней болезни, после чего вычесть уже начисленную сумму по больничному листу (РасчетнаяБаза). Однако на практике показатель ВремяВДняхЧасах внезапно принимает значение 21 (норма месяца), хотя по факту сотрудник болел всего 8 дней.

Проанализируем причины этого поведения:

  1. Контекст показателя времени: В 1С:ЗУП показатели ВремяВДнях или ВремяВДняхЧасах не являются универсальными «счетчиками». Их значение напрямую зависит от того, какой «Вид времени» указан в настройках начисления на соответствующей вкладке.
  2. Отсутствие связи с периодом: Если начисление выполняется документом «Разовое начисление», программа может «не понимать», к какому именно периоду (дням болезни) относится данный расчет, и по умолчанию берет общее рабочее время по графику сотрудника.
  3. Механизм вытеснения (приоритет): Если в настройках приоритета больничный лист вытесняет ваше новое начисление, то фактическое время для расчета может обнуляться или подменяться нормой.

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

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

  1. Перейдем в раздел Настройки — Расчет зарплаты.
  2. Выберем ссылку Настройка состава начислений и удержаний.
  3. На вкладке Прочие начисления установим флажок Доплата до среднего заработка на период болезни.

После этого в списке начислений появится предопределенный вид расчета, а в самом документе Больничный лист на вкладке Оплата появится галочка Доплачивать до среднего заработка. Программа сама определит нужные даты и суммы, что исключает ошибки в ручном написании формул.

Способ 2. Правильная настройка пользовательского начисления

Если по каким-то причинам типовой функционал не подходит и требуется создать свое начисление (например, через «Разовое начисление»), проанализируем необходимые настройки.

Настройка вкладки «Основное»:

В поле «Назначение начисления» вместо «Прочие начисления и выплаты» следует выбрать Повременная оплата труда и надбавки. Это критически важно для того, чтобы программа корректно работала с показателями времени. В поле «Начисление выполняется» укажите По отдельному документу (Разовое начисление).

Корректная формула:

Для более стабильного результата можно использовать следующую конструкцию:


(Оклад + НадбавкаПерсональная) * ДоляНеполногоРабочегоВремени * ВремяВДнях / НормаДней - РасчетнаяБаза

Настройка вкладки «Учет времени»:

Это самый важный этап. Рассмотрим пошагово:

  1. Переключатель «Род времени» установите в положение Дополнительная оплата за уже оплаченное время. Это позволит программе начислять сумму «сверху» на период, который уже занят другим видом времени (больничным).
  2. В поле «Вид времени» выберите Болезнь (или тот вид времени, который соответствует вашему расчету). Если оставить там «Рабочее время», показатель ВремяВДнях всегда будет стремиться к норме графика.

Настройка вкладки «Расчет базы»:

Чтобы показатель РасчетнаяБаза отработал верно, убедитесь, что:

Работа с документом «Разовое начисление»

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

Разберем алгоритм действий в документе:

  1. Выберите созданное начисление и сотрудника.
  2. Обратите внимание на колонки Дата начала и Дата окончания. Если они не заполнены или в них указан весь месяц (например, с 01.01 по 31.01), то программа подставит в ВремяВДнях значение 21.
  3. Укажите точно тот же период, который указан в больничном листе (например, с 10.01 по 17.01). Сразу после уточнения дат нажмите кнопку Пересчитать сотрудника. Значение показателя ВремяВДнях должно измениться на 8.

Взаимодействие с приоритетами

Проанализируем вкладку Приоритет в карточке начисления. Для доплаты до среднего ситуация двоякая:

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

Резюме для настройки

Если вы решили идти путем создания собственного начисления, придерживайтесь следующего чек-листа:

  1. Назначение: Повременная оплата труда.
  2. Тип времени: Дополнительная оплата за уже оплаченное время.
  3. Вид времени: Больничный (Б).
  4. Формула: Проверьте наличие всех скобок и корректность имен показателей.
  5. Документ: В «Разовом начислении» обязательно заполняйте конкретные даты болезни в строке сотрудника.

Такой подход гарантирует, что 1С:ЗУП 3.1 правильно определит количество дней для расчета, и ваша формула (Оклад + НадбавкаПерсональная) / НормаДней * ВремяВДнях - РасчетнаяБаза выдаст ожидаемый результат.

← На главную