1

Тема: Есть ли у вас "заготовка" для вычисления стажа работы

Столкнулся с тем, что в Универсале недостает многих функций работы с датами, а нужно срочно просчитать по работникам стаж в формате: отработано дней.месяцев.годов.
Может кто уже решил эту проблему, то помогите!!!

2

Re: Есть ли у вас "заготовка" для вычисления стажа работы

Добрый день, расчет стажа, например, можно посмотреть в макросе "Расчет стажа".
Исходный код функции TimeDifference, которая там используется, приводится ниже

/* Определение длины интервала в формате
  {количество лет,количество месяцев,количество дней}
  FUNCTION TimeDifference(dDateStart, dDateEnd)
  Параметры:
  dDateStart - дата начала интервала
  dDateEnd   - дата конца интервала
  Возвращает массив {nYear, nMonth, nDay}
  nYear   - количество лет
  nMonth  - количество месяцев
  nDay    - количество дней
*/
FUNCTION TimeDifference(dDateStart, dDateEnd)
LOCAL nYear1, nMonth1, nDay1
LOCAL nYear2, nMonth2, nDay2
LOCAL nMonth, nDay, nYear
LOCAL j, k, d, dStartYear, dStartMonth


IF dDateStart > dDateEnd .OR. EMPTY(dDateStart) .OR. EMPTY(dDateEnd)
   RETURN {0, 0, 0}
ENDIF
dDateEnd++
nYear1  := YEAR(dDateStart)
nMonth1 := MONTH(dDateStart)
nDay1   := DAY(dDateStart)

nYear2  := YEAR(dDateEnd)
nMonth2 := MONTH(dDateEnd)
nDay2   := DAY(dDateEnd)

nYear   := nYear2-nYear1
IF nYear > 0
   IF nMonth2 < nMonth1 .OR. (nMonth2 = nMonth1 .AND. nDay2 < nDay1)
      --nYear
   ENDIF
   dStartYear := AddMonth(dDateStart,nYear*12)
ELSE
   dStartYear :=dDateStart
ENDIF

j := k:= 0
DO WHILE .T.
   d := AddMonth(dStartYear,++j)
   IF d >dDateEnd
      EXIT
   ELSE
      k := j
   ENDIF
ENDDO

nMonth := k
dStartMonth := AddMonth(dStartYear,k)
nDay := dDateEnd - dStartMonth
RETURN {nYear, nMonth, nDay}

3

Re: Есть ли у вас "заготовка" для вычисления стажа работы

Щиро дякую!