Расчет стажа
Добавлено: 09 апр 2013, 02:31
Уважаемые соратники, нужна ваша помощь. Рассчитываю стаж у сотрудника на дату с помощью
Все прекрасно работает. Но эти функции считают стаж за весь период до указанной даты, а нужно рассчитать количество лет месяцев дней на каждый из периодов стажа по отдельности.
Пробовал следующий алгоритм:
Приближенно, считает правильно, но постоянно вылазит "погрешность" в +-1 день относительно того, что показывает Галактика на 3 вкладке карточки сотрудника.
Пробовал также следующий способ:
Совсем уж чушь получается (что не удивительно). Мб кто-нибудь подскажет, как Галактика считает стажи? Или листинг runstaj.vip кинет кто? В общем, "Бэн, ай нид хэлп".
Код: Выделить всё
irunstaj.NGetStajDays (fPerson, _cstaj, _date);
irunstaj.NGetStajMonths(fPerson, _cstaj, _date);
irunstaj.NGetStajYears (fPerson, _cstaj, _date);
Пробовал следующий алгоритм:
Код: Выделить всё
...
allDay := longint(((Year(RunDate) - Year(ServLen2.FromDate)) * 360 +
(Month(RunDate) - Month(ServLen2.FromDate)) * 30 +
(Day(RunDate) - Day(ServLen2.FromDate))) * ServLen2.Rate;
if (ServLen2.FromDate <= RunDate)
allDay := allDay + 1;
set BYears := DivI(allDay, 360);
if (BYears < 0)
set BYears := 0;
set BMonths := DivI(allDay mod 360, 30);
if (BMonths < 0)
set BMonths := 0;
set BDays := allDay mod 30;
if (BDays < 0)
set BDays := 0;
...
Пробовал также следующий способ:
Код: Выделить всё
year := servlen.yearse - servlen.yearsb;
month := servlen.monthse - servlen.monthsb;
day := servlen.dayse - servlen.daysb;