Маленькая операция для оценки времени на проверку окончания учетного периода при суммированном учете рабочего времени. Поводом для изменения является окончание календарного года или увольнение. А дальше в оценке времени уже анализируется баланс рабочего времени, формируются виды оплаты в своем правиле.
Программа SAPFP51T
*&———————————————————————*
*& Form OP_ENDP
*&———————————————————————*
* Проверяем окончание учетного период для сумм учета (СУРВ)
*———————————————————————-*
FORM op_endp.
DATA: lv_ndate LIKE sy-datum,
lt_p0000 LIKE p0000 OCCURS 1 WITH HEADER LINE.
lv_ndate = acdate + 1.
vargt = ‘N’.
» месяц
IF ( op+5(1) = ‘M’ ) AND ( lv_ndate+6(2) = ’01’ ).
vargt = ‘Y’.
ENDIF.
» год
IF ( op+5(1) = ‘Y’) AND ( acdate+4(4) = ‘1231’ ).
vargt = ‘Y’.
ENDIF.
IF vargt = ‘N’.
» проверяем на мероприятия (увольнение/перевод)
» читаем мероприятия на следующий день, так как изменение нужно отразить уже сегодня (а мероприятие будет только завтра)
CALL FUNCTION ‘HR_READ_INFOTYPE_AUTHC_DISABLE’ .
CALL FUNCTION ‘HR_READ_INFOTYPE’
EXPORTING
pernr = pernr-pernr
infty = ‘0000’
begda = lv_ndate
endda = lv_ndate
TABLES
infty_tab = lt_p0000.
READ TABLE lt_p0000 INDEX 1.
IF sy-subrc = 0.
» Проверяем на изменение статуса
IF ( wpbp-stat2 lt_p0000-stat2 ).
vargt = ‘Y’.
ENDIF.
ENDIF.
ENDIF.
PERFORM fillvargt.
ENDFORM. «OP_ENDP
2 комментария
fall3n
Так как в WPBP в оценке времени всегда лежат данные на следующий день, то можно сделать проще 🙄 :
DATA: lv_next_day LIKE acdate,
ls_wpbp_next_day TYPE pc205.
lv_next_day = acdate + 1.
vargt = 'N'.
" месяц
IF ( op+5(1) = 'M' ) AND ( lv_next_day+6(2) = '01' ).
vargt = 'Y'.
ENDIF.
" год
IF ( op+5(1) = 'Y') AND ( acdate+4(4) = '1231' ).
vargt = 'Y'.
ENDIF.
IF vargt = 'N'.
" проверяем на мероприятия (увольнение/перевод)
" читаем мероприятия на следующий день, так как изменение нужно отразить уже сегодня (а мероприятие будет только завтра)
LOOP AT wpbp INTO ls_wpbp_next_day WHERE begda = lv_next_day.
" Проверяем на изменение статуса
IF ( wpbp-stat2 ls_wpbp_next_day-stat2 ).
vargt = 'Y'.
ENDIF.
EXIT.
ENDLOOP.
ENDIF.
PERFORM fillvargt.
ENDFORM. «OP_ENDP
VirVit
Согласен. Но результатов может и не быть на следующий день 😉