RE:Rutina Calculo Retroactivo SAP-HR
No es tan complicado, pero puedes revisar los programas de reportes de nomina.
con la misma rutina que extraes los datos de nomina
Este codigo es para nomina mexicana. espero te sirva
PERFORM retroactivo USING t_rgdir.
*&---------------------------------------------------------------------*
*& Form RETROACTIVO
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM retroactivo USING p_rgdir LIKE t_rgdir.
DATA: sum_ret LIKE t_retro OCCURS 1 WITH HEADER LINE,
per_ret LIKE rgdir OCCURS 1 WITH HEADER LINE.
REFRESH: t_retro, sum_ret.
CLEAR: t_retro, sum_ret.
CALL FUNCTION 'CU_READ_RGDIR'
EXPORTING
persnr = p_rgdir-pernr
* NO_AUTHORITY_CHECK = ' '
* IMPORTING
* MOLGA =
TABLES
in_rgdir = rgdir
* EXCEPTIONS
* NO_RECORD_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.
CALL FUNCTION 'CD_EVALUATION_PERIODS'
EXPORTING
bonus_date = '00000000'
inper_modif = p_rgdir-permo
inper = p_rgdir-fpper
* PAY_TYPE = ' '
* PAY_IDENT = ' '
TABLES
rgdir = rgdir
evpdir = evpdir
* IABKRS =
* EXCEPTIONS
* NO_RECORD_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 evpdir WHERE fpper < p_rgdir-fpper.
*-- Fill RX-key
rx-key-pernr = p_rgdir-pernr.
rx-key-seqno = evpdir-seqnr.
rp-imp-c2-mx. " Para Nomina Mexicana
*-- Import Record from Database PCL2 nomina Mexicana
IF rp-imp-mx-subrc = 0.
LOOP AT rt WHERE betrg IN o_betrg
* AND lgart IN o_lgartd
AND ( lgart IN o_lgartc
OR lgart IN o_lgartp )
AND anzhl IN o_anzhl
.
CLEAR: sum_ret.
IF evpdir-srtza <> 'A'.
* IF rgdir-fpper = rgdir-inper. "periodo pago
sum_ret-betrg = '-1' * rt-betrg .
ELSE. "de evpdir-srtza = P.
sum_ret-betrg = rt-betrg .
ENDIF. "de evpdir-srtza = P.
sum_ret-fpper = evpdir-fpper.
sum_ret-inper = evpdir-inper.
sum_ret-lgart = rt-lgart.
APPEND sum_ret.
ENDLOOP. "de rt
* PERFORM rt_loop USING ' '. "XFEALRK012726
ENDIF. "de rp-imp-mx-subrc = 0.
* ENDIF. "(RETURN EQ 0?)
ENDLOOP. "EVP
**Suma de conceptos anteriores
SORT sum_ret BY lgart fpper.
LOOP AT sum_ret.
t_retro-betrg = t_retro-betrg + sum_ret-betrg.
AT END OF lgart.
t_retro-lgart = sum_ret-lgart.
t_retro-fpper = sum_ret-fpper.
APPEND t_retro.
CLEAR: t_retro.
ENDAT. "de lgart.
ENDLOOP. "de sum_ret
ENDFORM. " RETROACTIVO