Difference between revisions of "SAP HCM ABAP PRESTAMOS"
From SapWiki
Line 162: | Line 162: | ||
==Obtener datos de préstamo== | ==Obtener datos de préstamo== | ||
− | <nowiki> *Copiado de MP004500 | + | <nowiki>*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</nowiki> |
Revision as of 21:29, 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