При настройке нестандартных начислений в программе 1С:Зарплата и управление персоналом 3 (например, для расчета управленческого отпуска, доплаты до оклада или корректировки премии) пользователи часто сталкиваются с ситуацией: в формулу добавляется предопределенный показатель КоличествоДнейОтпуска, однако в документе Начисление зарплаты и взносов расчет выполняется не по фактическим дням отпуска, а по общему количеству дней в месяце (например, 30 или 31 день).
Разберем причины такого поведения системы, проанализируем внутренние механизмы платформы и рассмотрим рабочие способы настройки начислений для корректного учета дней отпуска.
Выясним причину такого поведения. Предопределенный показатель КоличествоДнейОтпуска предназначен строго для специализированных документов (таких как документ Отпуск или расчет компенсаций в документе Увольнение). Механизм его расчета привязан к границам периода действия конкретной рассчитываемой записи.
Когда начисление настраивается с ежемесячным выполнением в документе Начисление зарплаты и взносов, период действия строки начисления по умолчанию охватывает весь месяц (с первого по последнее число). В результате показатель КоличествоДнейОтпуска рассчитывает разницу между датой начала и датой окончания расчетного периода и возвращает полное число календарных дней месяца (31 день в январе, 30 в апреле и т. д.), игнорируя реальные периоды отсутствия.
Рассмотрим несколько проверенных способов решения этой задачи в зависимости от ваших требований к расчету.
Если начисление должно выполняться автоматически в документе Начисление зарплаты и взносов при наличии зарегистрированного отпуска, заменим показатель времени и привяжем начисление к учету времени.
Разберем по шагам настройку начисления:
КоличествоДнейОтпуска на показатель ВремяВДнях (или ВремяВКалендарныхДнях, если требуется учет календарных дней). Пример формулы:
Оклад * ВремяВДнях / 29.4
Важная особенность переходящих отпусков: если отпуск начинается в одном месяце, а заканчивается в другом (или начислен заранее), начисление по виду времени за текущий месяц рассчитает показатели ВремяВДнях только за те дни, которые фактически приходятся на текущий расчетный период.
Если данные об отпусках загружаются из внешней системы или отпуск рассчитывается в межрасчетный период заранее, наиболее надежным способом является создание пользовательского числового показателя.
Выполним настройку по шагам:
ДниОтпускаУправленческие).Оклад * ДниОтпускаУправленческие / 29.4
Этот способ полностью исключает ошибки вытеснения, влияние производственного календаря и сложности с переходящими периодами отпусков.
Если цель начисления состоит в том, чтобы рассчитать разницу между управленческой суммой отпуска и типовым начисленным отпуском (например, для уменьшения премии или формирования доплаты), проанализируем вариант с использованием расчетной базы.
РасчетнаяБаза:
Макс(РасчетныйОкладЗаПериод - РасчетнаяБаза, 0)
Таким образом, программа автоматически возьмет сумму уже начисленного документа Отпуск и рассчитает необходимую разницу без необходимости прямого вычисления календарных дней.