Математика для расчета стажа очень простая, каждые 30 дней переводятся в полные месяцы, 12 месяцев в полные годы (прикладываю скриншот из приказа).
Т.е. что бы посчитать стаж между двумя датами, нужно вычесть между собой Годы, Месяцы и Дни, при этом если не хватает месяцев, то превращаем один год в 12 месяцев, а если не хватает дней, то превращаем один месяц в 30 дней.
Например:
02.02.2000
- 02.04.1998
----------------
от 2-х месяцев мы не можем отнять 4, занимаем у года 12 месяцев
02.14.1999
- 02.04.1998
----------------
00.10.0001
получается 1 год и 10 месяцев.
В 1С данный расчет сделан через запрос, и, насколько я понял, берется число календарных дней месяца, а не 30 как изложено в Приказе Минтруда, из-за этого набегает разница 1-3 дня.
Реализуем процедуру для расчета стажа по методу из приказа:
Процедура РазностьДатСтаж(ДатаНачала, ДатаОкончания, ПериодРаботыДней, ПериодРаботыЛет, ПериодРаботыМесяцев) Экспорт
//Разность лет
ГодН = Год(ДатаНачала);
ГодК = Год(ДатаОкончания);
ПериодРаботыЛет = ГодК - ГодН;
//Разность месяцев
МесяцН = Месяц(ДатаНачала);
МесяцК = Месяц(ДатаОкончания);
//Если месяцев не хватает - занимаем у года
Если МесяцК < МесяцН Тогда
ПериодРаботыЛет = ПериодРаботыЛет - 1;
МесяцК = МесяцК + 12;
КонецЕсли;
ПериодРаботыМесяцев = МесяцК - МесяцН;
//Разность дней
ДеньН = День(ДатаНачала);
ДеньК = День(ДатаОкончания)+1;
//Если дней не хватает - занимаем у месяца
Если ДеньК < ДеньН Тогда
ПериодРаботыМесяцев = ПериодРаботыМесяцев - 1;
ДеньК = ДеньК + 30;
КонецЕсли;
ПериодРаботыДней = ДеньК - ДеньН;
КонецПроцедуры
Проверку на пересечение периодов я не делал, т.к. кадровик адекватный и данные вводит сразу без пересечений.
Данный код включен в расширение, в котором заменена процедура расчета стажа по кнопке "Рассчитать стажи" и изменена процедура расчета стажа при выводе стажа на текущую дату, расширение необходимо подключать без использования безопасного режима.