При расчете окончательного расчета и сопутствующих выплат увольняемым сотрудникам бухгалтеры часто сталкиваются со специфическим поведением программы 1С:Зарплата и управление персоналом (ЗУП 3.1). Типичный сценарий: сотруднику необходимо начислить премию, база которой берется за прошлые периоды (например, квартал со сдвигом в несколько месяцев), но пропорционально времени, отработанному в месяце увольнения.
При попытке настроить такую премию стандартной формулой программа начинает игнорировать реальное количество отработанных дней уволенного сотрудника и принудительно подставляет в расчет полную норму времени за месяц. Выясним причину этой проблемы и подробно разберем, как настроить корректный расчет без изменения типовой конфигурации.
Рассмотрим ситуацию на практическом примере. Сотрудник увольняется 17 октября. Нам необходимо рассчитать ему премию исходя из среднего заработка за прошлый квартал со сдвигом в 2 месяца (июнь, июль, август), разделенного на норму рабочих дней октября и умноженного на фактически отработанные дни в октябре (13 дней из 23 по норме). Для расчета мы пытаемся использовать формулу:
Результат = ((РасчетнаяБаза / 3) / НормаДней) * ОтработаноДней
Однако при расчете документа программа упорно подставляет в показатель ОтработаноДней значение 23 (норма времени) вместо фактических 13 дней, несмотря на то, что документ «Увольнение» уже проведен.
Проанализируем внутреннюю логику работы программы 1С:ЗУП 3.1. В системе реализован строгий механизм разграничения периодов действия начислений и сбора данных для расчетной базы:
ОтработаноДней или ВремяВДнях) на основании зарегистрированных в текущем месяце видов времени (например, «Явка») и документов-отклонений (командировки, больничные, увольнения).РасчетнаяБаза, период действия которой не совпадает с текущим месяцем расчета (настроен сдвиг базового периода на несколько месяцев назад), программа переключает контекст оценки времени.НормаДней). При этом, если убрать из формулы показатель РасчетнаяБаза, время начинает определяться корректно.Это известная программная особенность поведения расчетного механизма 1С:ЗУП 3.1, которая проявляется при совместном использовании сдвинутой расчетной базы и показателей фактически отработанного времени в рамках одного начисления.
Это самый изящный и полностью автоматический способ решения проблемы без программирования и ручного ввода данных. Наша задача — «развести» по разным начислениям расчетную базу прошлых периодов и показатели времени текущего месяца, чтобы исключить конфликт контекстов.
Разберем этот способ по шагам:
Нам необходимо собрать базу за прошлые периоды и поделить ее на 3 месяца. Для этого:
Доход в натуральной форме (это крайне важно, чтобы начисление не выдавалось к выплате деньгами и не облагалось налогами повторно). Начисляться оно будет Ежемесячно или По отдельному документу.
РасчетнаяБаза / 3
3 месяца, сдвиг — 2 месяца. В список базовых начислений подберем те виды начислений, из которых должна складываться квартальная премия.Теперь создадим итоговую премию, которая будет рассчитываться в документе «Премия»:
Премия, выполняемое По отдельному документу (документом «Премия»).
(РасчетнаяБаза / НормаДней) * ВремяВДнях
Текущий месяц.Почему это сработает? Поскольку итоговое начисление обращается к расчетной базе за текущий месяц, конфликт периодов исчезает. Программа легко считывает фактически отработанные сотрудником дни (13 дней) и делит их на норму текущего месяца (23 дня), умножая на результат технического начисления, в котором уже посчитана средняя величина базы за прошлые сдвинутые периоды.
Если вариант с созданием двух начислений кажется вам избыточным, можно пойти по пути автоматизации ввода отработанных дней через собственный показатель, минуя ручную правку в самом документе начисления.
Рассмотрим пошагово реализацию этого варианта:
Фактически отработанные дни для премии.ФактическиОтработаноДнейДляПремии.Для сотрудника.Числовой.Вводится только при расчете (непосредственно в документе начисления) или Вводится единовременно документом ввода данных.ОтработаноДней на наш новый показатель:
((РасчетнаяБаза / 3) / НормаДней) * ФактическиОтработаноДнейДляПремии
В случаях, когда бухгалтерия категорически отказывается вносить любые данные вручную и требует расчета «в один клик», правильным решением будет привлечение программиста 1С для разработки или установки готового расширения конфигурации.
Суть доработки заключается в переопределении запроса к регистрам расчета в модуле расчета времени для документов «Премия» или «Разовое начисление». Расширение принудительно возвращает контекст учета времени к фактическому периоду действия начисления уволенного сотрудника, игнорируя смещение расчетной базы. Это позволяет сохранить исходную простую формулу:
((РасчетнаяБаза / 3) / НормаДней) * ВремяВДнях
При этом конфигурация остается на стандартной поддержке, а автоматическое обновление программы не вызывает трудностей.