У нас датой увольнения считается дата последнего дня работы сотрудника, посему соорудил такую подпрограммку:
Если этот день у вас считается днем мероприятия - все будет намного проще.
Code:
FORM getuvoldate USING tabn type pernr_d
CHANGING stat2 type c isuvol type c dat type c.
data: tm(10).
data: tm(10), lasttm(10), tm_uvol(10).
DATA: meropri like p0000 occurs 10 with header line.
CALL FUNCTION 'HR_READ_INFOTYPE'
EXPORTING
* TCLAS = 'A'
PERNR = tabn
INFTY = '0000'
BEGDA = '18000101'
ENDDA = sy-datum
* BYPASS_BUFFER = ' '
* LEGACY_MODE = ' '
* IMPORTING
SUBRC = 0
TABLES
INFTY_TAB = meropri
* EXCEPTIONS
* INFTY_NOT_FOUND = 1
* OTHERS = 2
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
* иницилизация. если эта дата появится в отчете - таб.номер имеет только одно присвоение - увольнение.
* как при этом действовать - х.з., поидее такого не должно быть
lasttm = '01011800'.
isuvol = ''.
loop at meropri.
if meropri-massn = 'A4' or meropri-massn = 'A5'.
* В качестве даты увольнения брать дату окончания предыдущего присвоения
tm = lasttm.
isuvol = 'X'.
endif.
if meropri-begda < sy-datum.
if meropri-endda > sy-datum.
stat2 = meropri-stat2.
endif.
endif.
* Запомнить дату окончания текущего присвоения
lasttm = meropri-endda.
endloop.
dat = '--.--.----'.
if isuvol = 'X'.
move tm+6(2) to dat+0(2).
move tm+4(2) to dat+3(2).
move tm+0(4) to dat+6(4).
endif.
ENDFORM.