Difference between revisions of "SAP HCM BADI"
From SapWiki
| Line 1: | Line 1: | ||
| − | ==BADI <nowiki>HRPAD00INFTY</nowiki>== | + | ==BADI <nowiki>HRPAD00INFTY</nowiki> (Tarea actualiz./Actualiz.infotipo)== |
| − | ===ejemplo de IN_UPDATE | + | ===ejemplo de IN_UPDATE === |
* enviar datos a sistema externo al crear, modificar o borrar registros de IT2001 y IT2002 | * enviar datos a sistema externo al crear, modificar o borrar registros de IT2001 y IT2002 | ||
| Line 78: | Line 78: | ||
ENDMETHOD. | ENDMETHOD. | ||
| + | |||
| + | =====ejemplo de AFTER_INPUT=== | ||
| + | method IF_EX_HRPAD00INFTY~AFTER_INPUT. | ||
| + | |||
| + | DATA: ls_p0041 TYPE p0041, | ||
| + | lv_date TYPE begda, | ||
| + | lv_date2 TYPE begda, | ||
| + | lv_date3 TYPE begda, | ||
| + | lv_years(4) type n. | ||
| + | |||
| + | DATA: datar_0041 TYPE datar, | ||
| + | date_0041 TYPE datum. | ||
| + | ** Check country code | ||
| + | CHECK i001p-molga EQ '39'. "CL Chile | ||
| + | ** Check infotype | ||
| + | CHECK new_innnn-infty EQ '0041'. | ||
| + | ** No check for Delete operation | ||
| + | CHECK NOT ipsyst-ioper = 'DEL'. | ||
| + | ** Convert to structure | ||
| + | CALL METHOD cl_hr_pnnnn_type_cast=>prelp_to_pnnnn | ||
| + | EXPORTING | ||
| + | prelp = new_innnn | ||
| + | IMPORTING | ||
| + | pnnnn = ls_p0041. | ||
| + | |||
| + | DO 12 TIMES VARYING datar_0041 FROM ls_p0041-dar01 NEXT ls_p0041-dar02 | ||
| + | VARYING date_0041 FROM ls_p0041-dat01 NEXT ls_p0041-dat02. | ||
| + | IF datar_0041 = '07'. "vacaciones legales | ||
| + | lv_date = date_0041. | ||
| + | ELSEIF datar_0041 = '02'. "antiguedad | ||
| + | lv_date2 = date_0041. | ||
| + | ELSEIF datar_0041 = '04'. "progresivos | ||
| + | lv_date3 = date_0041. | ||
| + | * ELSEIF date_0041 IS INITIAL. | ||
| + | * EXIT. | ||
| + | ENDIF. | ||
| + | ENDDO. | ||
| + | |||
| + | if lv_date <> lv_date2. | ||
| + | MESSAGE e016(RP) WITH 'Fecha Vac. Legales' lv_date 'distinto a Fecha Antigüedad' lv_date2. | ||
| + | endif. | ||
| + | |||
| + | if lv_date3(4) < lv_date2(4). | ||
| + | lv_years = lv_date2(4) - lv_date3(4). | ||
| + | |||
| + | if lv_years > 10. | ||
| + | message e016(RP) WITH 'Fecha Progresivos' | ||
| + | 'permite el reconocimiento máximo de 10 años' | ||
| + | 'respecto a Fecha Antigüedad' lv_date2. | ||
| + | ELSEIF lv_date3+4(4) NE lv_date2+4(4). | ||
| + | message e016(RP) WITH 'Mes y día de progresivos deben ser' | ||
| + | 'igual al de antigüedad legal'. | ||
| + | endif. | ||
| + | endif. | ||
| + | |||
| + | endmethod. | ||
Revision as of 17:31, 26 March 2020
BADI HRPAD00INFTY (Tarea actualiz./Actualiz.infotipo)
ejemplo de IN_UPDATE
- enviar datos a sistema externo al crear, modificar o borrar registros de IT2001 y IT2002
METHOD if_ex_hrpad00infty~in_update.
DATA: lt_p0001 TYPE TABLE OF p0001,
ls_p0001 TYPE p0001.
DATA: lt_oper TYPE TABLE OF psoper,
ls_oper TYPE psoper,
ls_prel TYPE prelp,
ls_prel_old TYPE prelp.
DATA: ls_t503 TYPE t503,
ls_t001p TYPE t001p.
DATA l_f(1).
CHECK ipspar-infty = '2001' OR ipspar-infty = '2002'.
CLEAR: ls_oper.
LOOP AT new_image INTO ls_oper WHERE infty = '2001' or infty = '2002'.
APPEND ls_oper TO lt_oper.
ENDLOOP.
sort lt_oper by opera. "primero borrar 'D' => después insertar 'I'
CLEAR: ls_oper.
LOOP AT old_image INTO ls_oper WHERE infty = '2001' or infty = '2002'.
MOVE-CORRESPONDING ls_oper TO ls_prel_old.
EXIT.
ENDLOOP.
CALL FUNCTION 'HR_READ_INFOTYPE'
EXPORTING
pernr = ipspar-pernr
infty = '0001'
TABLES
infty_tab = lt_p0001
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.
LOOP AT lt_p0001 INTO ls_p0001 WHERE begda <= ipspar-endda AND
endda >= ipspar-begda.
ENDLOOP.
SELECT SINGLE * INTO ls_t503 FROM t503
WHERE persg = ls_p0001-persg
AND persk = ls_p0001-persk.
SELECT SINGLE * INTO ls_t001p FROM t001p
WHERE werks = ls_p0001-werks
AND btrtl = ls_p0001-btrtl.
LOOP AT lt_oper INTO ls_oper.
MOVE-CORRESPONDING ls_oper TO ls_prel.
CALL FUNCTION 'Z_HCM_ENVIA_DATA'
EXPORTING
tclas = ipspar-tclas
innnn = ls_prel
i001p = ls_t001p
i_opera = ls_oper-opera
EXCEPTIONS
error_occured = 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.
ENDLOOP.
ENDMETHOD.
==ejemplo de AFTER_INPUT
method IF_EX_HRPAD00INFTY~AFTER_INPUT.
DATA: ls_p0041 TYPE p0041,
lv_date TYPE begda,
lv_date2 TYPE begda,
lv_date3 TYPE begda,
lv_years(4) type n.
DATA: datar_0041 TYPE datar,
date_0041 TYPE datum.
** Check country code
CHECK i001p-molga EQ '39'. "CL Chile
** Check infotype
CHECK new_innnn-infty EQ '0041'.
** No check for Delete operation
CHECK NOT ipsyst-ioper = 'DEL'.
** Convert to structure
CALL METHOD cl_hr_pnnnn_type_cast=>prelp_to_pnnnn
EXPORTING
prelp = new_innnn
IMPORTING
pnnnn = ls_p0041.
DO 12 TIMES VARYING datar_0041 FROM ls_p0041-dar01 NEXT ls_p0041-dar02
VARYING date_0041 FROM ls_p0041-dat01 NEXT ls_p0041-dat02.
IF datar_0041 = '07'. "vacaciones legales
lv_date = date_0041.
ELSEIF datar_0041 = '02'. "antiguedad
lv_date2 = date_0041.
ELSEIF datar_0041 = '04'. "progresivos
lv_date3 = date_0041.
* ELSEIF date_0041 IS INITIAL.
* EXIT.
ENDIF.
ENDDO.
if lv_date <> lv_date2.
MESSAGE e016(RP) WITH 'Fecha Vac. Legales' lv_date 'distinto a Fecha Antigüedad' lv_date2.
endif.
if lv_date3(4) < lv_date2(4).
lv_years = lv_date2(4) - lv_date3(4).
if lv_years > 10.
message e016(RP) WITH 'Fecha Progresivos'
'permite el reconocimiento máximo de 10 años'
'respecto a Fecha Antigüedad' lv_date2.
ELSEIF lv_date3+4(4) NE lv_date2+4(4).
message e016(RP) WITH 'Mes y día de progresivos deben ser'
'igual al de antigüedad legal'.
endif.
endif.
endmethod.