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

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

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

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

Рассмотрим ситуацию на практическом примере. Сотрудник увольняется 17 октября. Нам необходимо рассчитать ему премию исходя из среднего заработка за прошлый квартал со сдвигом в 2 месяца (июнь, июль, август), разделенного на норму рабочих дней октября и умноженного на фактически отработанные дни в октябре (13 дней из 23 по норме). Для расчета мы пытаемся использовать формулу:

Результат = ((РасчетнаяБаза / 3) / НормаДней) * ОтработаноДней

Однако при расчете документа программа упорно подставляет в показатель ОтработаноДней значение 23 (норма времени) вместо фактических 13 дней, несмотря на то, что документ «Увольнение» уже проведен.


Выясняем причину: почему «ломается» расчет времени?

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

  1. Механизм вытеснения и отклонений: В обычном режиме программа определяет отработанное время (показатели ОтработаноДней или ВремяВДнях) на основании зарегистрированных в текущем месяце видов времени (например, «Явка») и документов-отклонений (командировки, больничные, увольнения).
  2. Конфликт периодов: Как только в формулу начисления добавляется показатель РасчетнаяБаза, период действия которой не совпадает с текущим месяцем расчета (настроен сдвиг базового периода на несколько месяцев назад), программа переключает контекст оценки времени.
  3. Потеря связи с фактическим временем: При сдвиге базового периода система теряет доступ к текущему фактическому учету времени (виду времени «Явки» текущего месяца). Программа «считает», что данные о фактическом времени в контексте этой базы недоступны, и по умолчанию заполняет показатели времени значением нормы рабочего времени (НормаДней). При этом, если убрать из формулы показатель РасчетнаяБаза, время начинает определяться корректно.

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


Решение 1. Двухэтапный расчет через промежуточное техническое начисление

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

Разберем этот способ по шагам:

Шаг 1. Создаем промежуточное (техническое) начисление

Нам необходимо собрать базу за прошлые периоды и поделить ее на 3 месяца. Для этого:

  1. Перейдем в раздел Настройки — Начисления и создадим новое начисление (например, «База для премии уволенным (техническая)»).
  2. На вкладке Основное укажем назначение начисления: Доход в натуральной форме (это крайне важно, чтобы начисление не выдавалось к выплате деньгами и не облагалось налогами повторно). Начисляться оно будет Ежемесячно или По отдельному документу.
  3. В поле «Результат рассчитывается» введем формулу: РасчетнаяБаза / 3
  4. На вкладке Расчет базы настроим базовый период: выберем «Несколько месяцев», длительность базового периода — 3 месяца, сдвиг — 2 месяца. В список базовых начислений подберем те виды начислений, из которых должна складываться квартальная премия.

Шаг 2. Создаем основное начисление премии

Теперь создадим итоговую премию, которая будет рассчитываться в документе «Премия»:

  1. Создадим новое начисление с назначением Премия, выполняемое По отдельному документу (документом «Премия»).
  2. Введем формулу расчета: (РасчетнаяБаза / НормаДней) * ВремяВДнях
  3. На вкладке Расчет базы укажем в качестве базового начисления только наше созданное на шаге 1 техническое начисление («База для премии уволенным (техническая)»).
  4. Важно: период расчета базы для этой итоговой премии установим как Текущий месяц.

Почему это сработает? Поскольку итоговое начисление обращается к расчетной базе за текущий месяц, конфликт периодов исчезает. Программа легко считывает фактически отработанные сотрудником дни (13 дней) и делит их на норму текущего месяца (23 дня), умножая на результат технического начисления, в котором уже посчитана средняя величина базы за прошлые сдвинутые периоды.


Решение 2. Использование индивидуального показателя расчета (через Шаблон ввода данных)

Если вариант с созданием двух начислений кажется вам избыточным, можно пойти по пути автоматизации ввода отработанных дней через собственный показатель, минуя ручную правку в самом документе начисления.

Рассмотрим пошагово реализацию этого варианта:

  1. Перейдем в меню Настройки — Показатели расчета зарплаты и создадим новый показатель:
    • Наименование: Фактически отработанные дни для премии.
    • Идентификатор: ФактическиОтработаноДнейДляПремии.
    • Назначение: Для сотрудника.
    • Тип показателя: Числовой.
    • Использование: Вводится только при расчете (непосредственно в документе начисления) или Вводится единовременно документом ввода данных.
  2. В формуле нашей премии заменим стандартный показатель ОтработаноДней на наш новый показатель: ((РасчетнаяБаза / 3) / НормаДней) * ФактическиОтработаноДнейДляПремии
  3. При создании документа расчетчик сможет один раз заполнить количество фактически отработанных дней для уволенного сотрудника в специальной колонке табличной части или загрузить их списком. Программа произведет математически верный расчет без программных сбоев.

Решение 3. Использование расширения конфигурации (для полной автоматизации)

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

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

((РасчетнаяБаза / 3) / НормаДней) * ВремяВДнях

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

← На главную