В практике расчета заработной платы часто возникает задача: определить количество календарных дней, в течение которых сотрудник фактически числился в организации за определенный период (например, за месяц или год). Это необходимо для расчета различных надбавок, премий или компенсаций. Особую сложность задача представляет в тех случаях, когда организация использует базовую версию программы или имеет строгие ограничения на использование внешних обработок и расширений конфигурации. В такой ситуации нам необходимо полагаться исключительно на штатный функционал настройки формул и начислений.
Разберем детально, как реализовать автоматический расчет календарных дней работы, учитывая даты приема и увольнения сотрудника, без привлечения программистов.
Рассмотрим ситуацию: нам нужно получить показатель, который равен количеству календарных дней нахождения сотрудника в штате. Логика расчета должна быть следующей:
Проанализируем доступные системные показатели. Многие пользователи путают показатели КалендарныеДниМесяца и КалендарныеДни. Выясним причину их различия: КалендарныеДниМесяца — это константа для каждого месяца (28, 30 или 31 день), которая не зависит от того, работал сотрудник или нет. Нам же нужен динамический показатель, привязанный к периоду действия начисления.
Самый эффективный способ решить задачу штатными средствами — это правильно настроить вкладку «Учет времени» в самом начислении. Программа 1С:ЗУП (или ЗГУ) устроена так, что значения многих показателей зависят от того, какой вид времени сопоставлен с начислением.
Выполним настройку по шагам:
КалендарныеДни.Почему это работает? Когда в начислении указан вид времени «Календарные дни», система при расчете автоматически ограничивает этот показатель фактическим периодом работы сотрудника в организации. Если сотрудник уволился 15-го числа, то период действия начисления физически не может выйти за пределы 15-го числа, и показатель КалендарныеДни вернет 15, а не 30.
Иногда требуется исключить праздничные дни из расчета календарных дней. Для этого в системе предусмотрен показатель КалендарныеДниБезПраздников. Проанализируем пример формулы, которая может использоваться для расчета суммы, зависящей от календарного времени:
Результат = (РазмерПособия / КалендарныеДниМесяца) * КалендарныеДни
В данной формуле:
РазмерПособия — ваш фиксированный показатель.КалендарныеДниМесяца — общее количество дней в месяце (например, 31 в январе).КалендарныеДни — количество дней, когда сотрудник числился в штате (например, 10 дней, если он уволился 10 января).Если задача стоит сложнее — например, нужно получить количество календарных дней работы за весь год для расчета годовой премии в декабре, — обычное месячное начисление не поможет напрямую. Однако мы можем применить метод накопления.
Разберем этот алгоритм:
КалендарныеДни в отдельный вспомогательный показатель.КазначейскаяДоля или просто РасчетнаяБаза (если техническое начисление фиксировало дни как сумму).Этот метод позволяет «собрать» календарные дни по крупицам за каждый месяц и получить их общую сумму в конце года, полностью игнорируя периоды, когда сотрудник не состоял в трудовых отношениях.
Посмотрим на пример. Сотрудник Иванов принят на работу 20 сентября. В сентябре 30 календарных дней.
Если мы используем простую формулу с показателем КалендарныеДни и правильной настройкой учета времени, программа увидит, что период работы Иванова в сентябре — с 20.09 по 30.09.
Следовательно, КалендарныеДни = 11.
Если бы мы просто использовали КалендарныеДниМесяца, мы бы получили 30, что привело бы к ошибке в расчетах. А ручной ввод, как справедливо отмечено в обсуждении, неизбежно ведет к человеческому фактору, особенно при большом штате сотрудников.
Поскольку в базовых конфигурациях (ЗУП Базовая, ЗГУ Базовая) нельзя вносить изменения в программный код и использовать расширения, данные настройки являются единственным легальным способом автоматизации.
Помните: если вы создаете новый показатель для ручного ввода, старайтесь минимизировать его использование. Всегда проверяйте, нет ли возможности заменить его системным показателем, который программа рассчитывает самостоятельно на основании кадровых данных (приказов о приеме, переводе и увольнении).
Таким образом, комбинируя предопределенные показатели и специфические настройки учета времени в документах «Начисление зарплаты и взносов», мы достигаем полной автоматизации процесса без программирования.