Difference between revisions of "SAP HCM ABAP PRESTAMOS"
From SapWiki
| Line 1: | Line 1: | ||
== EJEMPLO 01== | == EJEMPLO 01== | ||
| − | *cl_hrpa_loan_computations=>compute_estimated_end_of_loan | + | <nowiki>*cl_hrpa_loan_computations=>compute_estimated_end_of_loan |
| − | + | *cl_hrpa_loan_computations=>read_payments_for_loan_id | |
| − | + | *cl_hrpa_loan_computations=>compute_repayment_plan | |
| − | + | *&---------------------------------------------------------------------* | |
| − | + | *& Report Y_TEST_LOAN | |
| − | + | *& | |
| − | + | *&---------------------------------------------------------------------* | |
| − | + | *& | |
| − | + | *& | |
| − | + | *&---------------------------------------------------------------------* | |
| − | + | REPORT y_test_loan. | |
| − | + | TABLES pernr. | |
| − | + | INFOTYPES: 0045. | |
| − | + | DATA instance TYPE REF TO cl_hrpa_loan_computations. | |
| − | + | DATA gd_pclo_id TYPE pclo_id. | |
| − | + | DATA gd_estimated_end_of_loan TYPE d. | |
| − | + | DATA data_ref TYPE REF TO data. | |
| − | + | DATA gd_message_handler TYPE REF TO if_hrpa_message_handler. | |
| − | + | data gt_pagos type PCLO_PAYMENTS_TAB. | |
| − | + | data gt_P0078_TAB type P0078_TAB. | |
| − | + | data: gt_PCLO_REPAY_TAB type PCLO_REPAY_TAB, | |
| − | + | gt_PCLO_LOAN_CHANGES_TAB type PCLO_LOAN_CHANGES_TAB. | |
| − | + | * create dummy message handler | |
| − | + | data dummy_handler type ref to cl_hrpa_dummy_message_handler. | |
| − | + | create object dummy_handler. | |
| − | + | message_handler = dummy_handler. | |
| − | + | START-OF-SELECTION. | |
| − | + | GET pernr. | |
| − | + | PROVIDE * FROM p0045 BETWEEN pn-begda AND pn-endda. | |
| − | + | CALL METHOD cl_hrpa_loan_computations=>get_loan_id_from_p0045 | |
| − | + | EXPORTING | |
| − | + | p0045 = p0045 | |
| − | + | RECEIVING | |
| − | + | loan_id = gd_pclo_id. | |
| − | + | * CALCULO DE FECHA FINAL PRESTAMO | |
| − | + | TRY. | |
| − | + | CALL METHOD cl_hrpa_loan_computations=>compute_estimated_end_of_loan | |
| − | + | EXPORTING | |
| − | + | tclas = 'A' | |
| − | + | loan_id = gd_pclo_id | |
| − | + | message_handler = dummy_handler | |
| − | + | RECEIVING | |
| − | + | estimated_end_of_loan = gd_estimated_end_of_loan. | |
| − | + | ENDTRY. | |
| − | + | * PAGOS DE PRESTAMO | |
| − | + | TRY. | |
| − | + | CALL METHOD cl_hrpa_loan_computations=>read_payments_for_loan_id | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
EXPORTING | EXPORTING | ||
tclas = 'A' | tclas = 'A' | ||
loan_id = gd_pclo_id | loan_id = gd_pclo_id | ||
| − | + | * ZAHLA = '*' | |
| − | + | * SPRPS = '*' | |
| − | + | * BEGDA = LOW_DATE | |
| − | + | * ENDDA = HIGH_DATE | |
| − | + | * NO_AUTH_CHECK = FALSE | |
IMPORTING | IMPORTING | ||
| − | + | PAYMENTS_TAB = gt_pagos | |
| − | + | * DATA_EXISTS = | |
| − | + | * MISSING_AUTH = | |
. | . | ||
| − | + | CATCH CX_HRPA_VIOLATED_ASSERTION . | |
| − | + | ENDTRY. | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | END-OF-SELECTION. | + | TRY. |
| + | CALL METHOD cl_hrpa_loan_computations=>read_p0078_for_loan_id | ||
| + | EXPORTING | ||
| + | tclas = 'A' | ||
| + | loan_id = gd_pclo_id | ||
| + | * ZAHLA = '*' | ||
| + | * SPRPS = '*' | ||
| + | * BEGDA = LOW_DATE | ||
| + | * ENDDA = HIGH_DATE | ||
| + | * NO_AUTH_CHECK = FALSE | ||
| + | IMPORTING | ||
| + | P0078_TAB = gt_P0078_TAB | ||
| + | * DATA_EXISTS = | ||
| + | * MISSING_AUTH = | ||
| + | . | ||
| + | CATCH CX_HRPA_VIOLATED_ASSERTION . | ||
| + | ENDTRY. | ||
| + | |||
| + | * GENERAR PLAN DE AMORTIZACION | ||
| + | TRY. | ||
| + | CALL METHOD cl_hrpa_loan_computations=>compute_repayment_plan | ||
| + | EXPORTING | ||
| + | tclas = 'A' | ||
| + | loan_id = gd_pclo_id | ||
| + | * NEW_CURRENCY = | ||
| + | message_handler = dummy_handler | ||
| + | IMPORTING | ||
| + | REPAYMENT_PLAN = gt_PCLO_REPAY_TAB | ||
| + | LOAN_CHANGES = gt_PCLO_LOAN_CHANGES_TAB | ||
| + | * IS_OK = | ||
| + | . | ||
| + | CATCH CX_HRPA_VIOLATED_ASSERTION . | ||
| + | ENDTRY. | ||
| + | |||
| + | endPROVIDE. | ||
| + | |||
| + | END-OF-SELECTION.</nowiki> | ||
==Calculo fecha fin de préstamo== | ==Calculo fecha fin de préstamo== | ||
Revision as of 21:28, 4 April 2020
EJEMPLO 01
*cl_hrpa_loan_computations=>compute_estimated_end_of_loan
*cl_hrpa_loan_computations=>read_payments_for_loan_id
*cl_hrpa_loan_computations=>compute_repayment_plan
*&---------------------------------------------------------------------*
*& Report Y_TEST_LOAN
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT y_test_loan.
TABLES pernr.
INFOTYPES: 0045.
DATA instance TYPE REF TO cl_hrpa_loan_computations.
DATA gd_pclo_id TYPE pclo_id.
DATA gd_estimated_end_of_loan TYPE d.
DATA data_ref TYPE REF TO data.
DATA gd_message_handler TYPE REF TO if_hrpa_message_handler.
data gt_pagos type PCLO_PAYMENTS_TAB.
data gt_P0078_TAB type P0078_TAB.
data: gt_PCLO_REPAY_TAB type PCLO_REPAY_TAB,
gt_PCLO_LOAN_CHANGES_TAB type PCLO_LOAN_CHANGES_TAB.
* create dummy message handler
data dummy_handler type ref to cl_hrpa_dummy_message_handler.
create object dummy_handler.
message_handler = dummy_handler.
START-OF-SELECTION.
GET pernr.
PROVIDE * FROM p0045 BETWEEN pn-begda AND pn-endda.
CALL METHOD cl_hrpa_loan_computations=>get_loan_id_from_p0045
EXPORTING
p0045 = p0045
RECEIVING
loan_id = gd_pclo_id.
* CALCULO DE FECHA FINAL PRESTAMO
TRY.
CALL METHOD cl_hrpa_loan_computations=>compute_estimated_end_of_loan
EXPORTING
tclas = 'A'
loan_id = gd_pclo_id
message_handler = dummy_handler
RECEIVING
estimated_end_of_loan = gd_estimated_end_of_loan.
ENDTRY.
* PAGOS DE PRESTAMO
TRY.
CALL METHOD cl_hrpa_loan_computations=>read_payments_for_loan_id
EXPORTING
tclas = 'A'
loan_id = gd_pclo_id
* ZAHLA = '*'
* SPRPS = '*'
* BEGDA = LOW_DATE
* ENDDA = HIGH_DATE
* NO_AUTH_CHECK = FALSE
IMPORTING
PAYMENTS_TAB = gt_pagos
* DATA_EXISTS =
* MISSING_AUTH =
.
CATCH CX_HRPA_VIOLATED_ASSERTION .
ENDTRY.
TRY.
CALL METHOD cl_hrpa_loan_computations=>read_p0078_for_loan_id
EXPORTING
tclas = 'A'
loan_id = gd_pclo_id
* ZAHLA = '*'
* SPRPS = '*'
* BEGDA = LOW_DATE
* ENDDA = HIGH_DATE
* NO_AUTH_CHECK = FALSE
IMPORTING
P0078_TAB = gt_P0078_TAB
* DATA_EXISTS =
* MISSING_AUTH =
.
CATCH CX_HRPA_VIOLATED_ASSERTION .
ENDTRY.
* GENERAR PLAN DE AMORTIZACION
TRY.
CALL METHOD cl_hrpa_loan_computations=>compute_repayment_plan
EXPORTING
tclas = 'A'
loan_id = gd_pclo_id
* NEW_CURRENCY =
message_handler = dummy_handler
IMPORTING
REPAYMENT_PLAN = gt_PCLO_REPAY_TAB
LOAN_CHANGES = gt_PCLO_LOAN_CHANGES_TAB
* IS_OK =
.
CATCH CX_HRPA_VIOLATED_ASSERTION .
ENDTRY.
endPROVIDE.
END-OF-SELECTION.
Calculo fecha fin de préstamo
FORM calcula_fecha_fin using p0045 type p0045
CHANGING p_endda.
TYPES: BEGIN OF tp_dynfi,
initf TYPE c, " initialize if marked
key LIKE sy-tabix,
darbt LIKE p0078-betrg,
dbtcu LIKE p0078-btrcu, "currency for repayment plan
rate LIKE p0045-anrte,
ratec LIKE p0045-dbtcu,
tilbg LIKE p0045-tilbg,
zahld LIKE p0078-zahld,
vari TYPE disvariant,
END OF tp_dynfi.
DATA ps_dynfi TYPE tp_dynfi.
DATA: lt_p0078 TYPE p0078 OCCURS 0 WITH HEADER LINE.
DATA lt_p0045 TYPE TABLE OF p0045 WITH HEADER LINE.
SELECT * INTO CORRESPONDING FIELDS OF TABLE lt_p0078 FROM pa0078 WHERE pernr = p0045-pernr AND
dlart = p0045-dlart AND
objid = p0045-objps.
ps_dynfi-rate = p0045-anrte.
ps_dynfi-ratec = p0045-dbtcu.
ps_dynfi-tilbg = p0045-begda.
ps_dynfi-dbtcu = p0045-dbtcu.
CALL FUNCTION 'PCLO_BUILD_REPAYMENT_PLAN'
EXPORTING
ps_p0045 = p0045
pf_fday = p0045-begda
pf_lday = p0045-endda ""'99991231'
pt_paym = lt_p0078[]
pf_rate = ps_dynfi-rate
pf_ratecurr = ps_dynfi-ratec "GWY534928
pf_tilbg = ps_dynfi-tilbg
pf_curr = ps_dynfi-dbtcu "GWY428607-5
pf_variant = ps_dynfi-vari
pf_nodisp = '1'
IMPORTING
* ps_paper = gs_paper
pf_dlend = p0045-dlend
* pf_effin = gf_effin
pt_plan = gt_pclo_repay_tab. "amounts have currency pf_curr
p_endda = p0045-dlend.
ENDFORM. "CALCULa_fecha_fin
Obtener datos de préstamo
*Copiado de MP004500
FORM get_loan_results TABLES pt_savp STRUCTURE gt_savp
USING pf_pernr
pf_dlart
pf_objps
pf_dbtcu
CHANGING pfx_opelo
pfx_paylo
pfx_abrdt
pfx_subrc.
DATA: ltx_rgdir LIKE pc261 OCCURS 0 WITH HEADER LINE,
lt_rgdir TYPE hrpy_tt_rgdir, "GWY839032
lsx_rgdir LIKE ltx_rgdir,
lsx_result TYPE pay99_result,
lsx_v0 LIKE LINE OF lsx_result-inter-v0,
lsx_rt LIKE LINE OF lsx_result-inter-rt,
lfx_relid LIKE pcl2-relid,
lfx_molga LIKE t500l-molga,
lsx_t500l LIKE t500l,
lfx_amount LIKE q0045-darbt,
lfx_line LIKE sy-tabix,
lfx_fday TYPE d,
lfx_lday TYPE d,
lfx_opecu LIKE q0045-opecu,
ls_paper TYPE pc2paper,
lf_payment_value_date TYPE datum,
ls_loid_33 TYPE pclo_id. "Note 834827
*##--BEGIN--##
CLEAR: pfx_opelo, pfx_paylo, pfx_abrdt, pfx_subrc.
CALL FUNCTION 'CU_READ_RGDIR_NEW'
EXPORTING
persnr = pf_pernr
check_read_authority = space
IMPORTING
molga = lfx_molga
TABLES
in_rgdir = ltx_rgdir
EXCEPTIONS
OTHERS = 1.
IF sy-subrc <> 0.
MOVE sy-subrc TO pfx_subrc.
ELSE.
MOVE sy-subrc TO pfx_subrc.
CALL FUNCTION 'CD_READ_LAST_RESULT_IN_RGDIR'
IMPORTING
ptx_rgdir_nv = lsx_rgdir
TABLES
pt_rgdir = ltx_rgdir.
LOOP AT ltx_rgdir.
APPEND ltx_rgdir TO lt_rgdir.
ENDLOOP.
MOVE lsx_rgdir-fpend TO pfx_abrdt.
* get relid
SELECT SINGLE * FROM t500l
INTO lsx_t500l
WHERE molga = lfx_molga.
MOVE lsx_t500l-relid TO lfx_relid.
CALL FUNCTION 'PYXX_READ_PAYROLL_RESULT'
EXPORTING
clusterid = lfx_relid
employeenumber = pf_pernr
sequencenumber = lsx_rgdir-seqnr
read_only_international = 'X'
check_read_authority = ' '
CHANGING
payroll_result = lsx_result
EXCEPTIONS
OTHERS = 1.
IF sy-subrc <> 0.
MOVE sy-subrc TO pfx_subrc.
ELSE.
MOVE sy-subrc TO pfx_subrc.
* get loan result .....
LOOP AT lsx_result-inter-v0 INTO lsx_v0 WHERE v0typ = 'L'.
IF pf_dlart = lsx_v0-vinfo+0(4) AND
pf_objps = lsx_v0-vinfo+4(2).
LOOP AT lsx_result-inter-rt INTO lsx_rt
WHERE v0typ = 'L'
AND v0znr = lsx_v0-v0znr
AND lgart = '/LLB'.
MOVE: lsx_result-inter-versc-waers TO lfx_opecu,
lsx_rt-betrg TO pfx_opelo.
* PERFORM convert_to_local_currency
* USING pfx_opelo
* lfx_opecu
* pf_dbtcu
* pfx_abrdt
* 'W' "called from PBO
* SPACE "use BAPI for conversion
* pf_pernr
* lfx_molga
* lt_rgdir
* CHANGING pfx_opelo.
EXIT.
ENDLOOP.
IF sy-subrc <> 0. "no open loan
MOVE '9' TO pfx_subrc.
EXIT. "the loop "GWY458200
ELSE. "GWY458200
MOVE '0' TO pfx_subrc. "found open loan "GWY458200
EXIT. "the loop "GWY458200
ENDIF.
ELSE. "this loan is not yet processed in payroll
MOVE '7' TO pfx_subrc.
ENDIF.
ENDLOOP.
* get the correct payment for loans paid back already:
* in a productive system one can assume that a loan with
* q0045-begdaf < pfx_abrdt will be eather be open or paid back
CHECK p0045-begda < pfx_abrdt. "#EC PORTABLE "GWY458200
* calculate ammount beeing payed so far
PERFORM clear_ltrgdir TABLES ltx_rgdir.
DESCRIBE TABLE ltx_rgdir LINES lfx_line.
SORT ltx_rgdir ASCENDING BY seqnr.
READ TABLE ltx_rgdir INDEX 1.
lfx_fday = ltx_rgdir-fpbeg.
READ TABLE ltx_rgdir INDEX lfx_line.
lfx_lday = ltx_rgdir-fpend.
SORT pt_savp ASCENDING BY zahld.
LOOP AT pt_savp WHERE pydir = 'O'
AND sprps = space.
IF pt_savp-zahld >= lfx_fday AND
pt_savp-zahld <= lfx_lday.
LOOP AT ltx_rgdir WHERE fpbeg <= pt_savp-zahld
AND fpend >= pt_savp-zahld.
EXIT.
ENDLOOP.
IF sy-subrc NE 0. "JLA1532930
CONTINUE.
ENDIF.
ls_paper-pabrj = ltx_rgdir-fpper(4).
ls_paper-pabrp = ltx_rgdir-fpper+4(2).
CALL FUNCTION 'PCLO_GET_VALUE_DATE_PAYMENT' "GWY839032
EXPORTING
pf_zahla = pt_savp-zahla
pf_payment_begda = pt_savp-zahld
pf_payment_endda = pt_savp-endda
pf_molga = lfx_molga
pf_abkrs = ltx_rgdir-abkrs
* PF_ABKRS_BEGDA = '19000101'
* PF_ABKRS_ENDDA = '99991231'
pf_paper = ls_paper
IMPORTING
pfx_value_date = lf_payment_value_date
EXCEPTIONS
error = 1
payment_not_in_period = 2
OTHERS = 3.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
* PERFORM convert_to_local_currency
* USING pt_savp-betrg
* pt_savp-btrcu
* pf_dbtcu
* lf_payment_value_date
* 'W' "called from PBO
* SPACE "use BAPI for conversion
* pf_pernr
* lfx_molga
* lt_rgdir
* CHANGING pt_savp-betrg.
ADD pt_savp-betrg TO lfx_amount.
ENDIF.
ENDLOOP.
MOVE lfx_amount TO pfx_paylo.
ENDIF.
ENDIF.
ENDFORM. " GET_LOAN_RESULTS