Добрый день.
Сделал проверку на ввод присутствий-отсутствий одного вида на одно время в экзите ZXPADU02 на операции ipsyst-ioper = 'INS' or 'COP' or 'MOD'. Для проверки на существование записей ИТ читаю с помощью ФМ HR_READ_INFOTYPE и сравниваю с записью innnn. Возникла проблема на случай модификации (ipsyst-ioper = 'MOD'): для пропуска модифицируемой записи использую проверку psave-pskey <> <wa_pnnnn>-pskey (<wa_pnnnn> - считано ФМ HR_READ_INFOTYPE). Проверка работает нормально при работе через PA30, а в случае запуска мероприятия через pa40 структура psave содержит уже измененные данные. Есть какие-нибудь идеи, как обойти? Через временные привязки не получается, т.к. есть подтипы 2001/2002, которые могут существовать одновременно, главное, чтобы подтип был разный.
Code:
if innnn-infty >= '2001' and
innnn-infty <= '2002' and
"innnn-infty <= '2003' and
innnn-sprps <> 'X' and
( ipsyst-ioper = 'INS' or
ipsyst-ioper = 'COP' or
ipsyst-ioper = 'MOD' ).
data:
v_intersects type c,
v_intersects2 type c,
v_type(20) type c,
it_pnnnn type table of prelp.
field-symbols:
<wa_pnnnn> type prelp,
<wa> type any,
<new> type any,
<beguz1> type beguz,
<enduz1> type enduz,
<beguz2> type beguz,
<enduz2> type enduz.
CALL FUNCTION 'HR_READ_INFOTYPE'
EXPORTING
* TCLAS = 'A'
PERNR = innnn-pernr
INFTY = innnn-infty
BEGDA = innnn-begda
ENDDA = innnn-endda
* BYPASS_BUFFER = ' '
* LEGACY_MODE = ' '
* IMPORTING
* SUBRC =
TABLES
INFTY_TAB = it_pnnnn
EXCEPTIONS
INFTY_NOT_FOUND = 1
OTHERS = 2
.
v_type = 'P'.
v_type+1(4) = innnn-infty.
assign innnn to <new> casting type (v_type).
assign component 'ENDUZ' of structure <new> to <enduz1>.
" если новое присутствие не на весь день
if <enduz1> cn ' 0'.
assign component 'BEGUZ' of structure <new> to <beguz1>.
endif.
loop at it_pnnnn assigning <wa_pnnnn>
where
subty = innnn-subty and
sprps <> 'X'.
check ipsyst-ioper <> 'MOD' or psave-pskey <> <wa_pnnnn>-pskey.
" если новое присутствие не на весь день
if <enduz1> cn ' 0'.
assign <wa_pnnnn> to <wa> casting type (v_type).
assign component 'ENDUZ' of structure <wa> to <enduz2>.
" если старая запись на весь день
if <enduz2> co ' 0'.
v_intersects = 'X'.
else.
assign component 'BEGUZ' of structure <wa> to <beguz2>.
if <beguz1> >= <enduz2> or
<beguz2> >= <enduz1>.
else.
v_intersects = 'X'.
endif.
endif.
else.
v_intersects = 'X'.
endif.
if v_intersects = 'X'.
case innnn-infty.
when '2001'.
v_type = 'отсутствие'.
when '2002'.
v_type = 'присутствие'.
when '2003'.
v_type = 'замещение'.
when others.
v_type = 'запись инфотипа'.
endcase.
message e003(zhr00) with 'Уже существует' v_type 'подтипа' innnn-subty.
exit.
endif.
endloop.
endif.