На дату отчета рассчитывается разность дат по каждому актуальному(не уволенному) сотруднику:
- Стаж в компании = Дата отчета - Дата приема.
- Стаж на должности = Дата отчета - Дата первого перевода на текущую(последнюю) должность сотрудника. Т.е. в кадровой истории могут меняться подразделения сотрудника, но должность прежняя. Например, продавец-кассир сначала в одном, затем в других магазинах.
Если сотрудник работал на этой должности ранее, затем перешел на другую и вновь вернулся, то стаж по должности просуммирован не будет. Разность дат в днях преобразуется в полных Лет, полных Месяцев, и положительный остаток Дней.
Алгоритм расчета:
- ВсегоДнейСДатыПриема = ДатаОтчета - ДатаПриема. Общий интервал работы в календарных днях.
- ЦелыхЛет. ВсегоДнейСДатыПриема/365, целая часть, округленная в меньшую сторону.
- ЦелыхМесяцев меньше 12. ВсегоДнейСДатыПриема/30.4 - 12*ЦелыхЛет, где 30.4 = 365/12 - среднее количество календартных дней в месяце. Только положительный результат или 0.
- Остаток дней меньше месяца. ВсегоДнейСДатыПриема - 365*ЦелыхЛет - 12*ЦелыхМесяцев. Только положительный результат или 0.
При большом стаже погрешность может быть в несколько дней и только положительная.
Аналогично для стажа на акутальной должности, с даты перевода.
Проверено на платформах 8.3.12.1685, 8.3.16.1063, 8.3.18.1334 конфигурация ЗУП корп с 3.1.18 по 3.1.20
UPD 19.04.2021 более точный расчет интервалов, контроль неизменности последней должности,
UPD 12.01.2022 менее точный, но более правильный метод преобразования.
Тест на релизах 3.1.18.276, 3.1.18.336.