Difference between revisions of "SAP HCM ABAP CLUSTER"
From SapWiki
Line 386: | Line 386: | ||
the accompanying ‘P’ records (previous). | the accompanying ‘P’ records (previous). | ||
This is the module most frequently used in evaluation programs. | This is the module most frequently used in evaluation programs. | ||
+ | |||
+ | <nowiki> | ||
+ | FORM read_cluster TABLES p_rgdir STRUCTURE pc261 | ||
+ | p_coava STRUCTURE pc2co_ava | ||
+ | USING p_pernr LIKE pernr-pernr | ||
+ | p_molga LIKE t500l-molga | ||
+ | CHANGING p_waers LIKE pc202-waers. . | ||
+ | |||
+ | REFRESH: p_rgdir, p_coava, inper_directory. | ||
+ | CLEAR: p_rgdir, p_coava, inper_directory_entry, inper_directory. | ||
+ | CALL FUNCTION 'CU_READ_RGDIR' | ||
+ | EXPORTING | ||
+ | persnr = pernr-pernr | ||
+ | IMPORTING | ||
+ | molga = molga | ||
+ | TABLES | ||
+ | in_rgdir = p_rgdir | ||
+ | EXCEPTIONS | ||
+ | no_record_found = 1 | ||
+ | OTHERS = 2. | ||
+ | IF sy-subrc <> 0. | ||
+ | ENDIF. | ||
+ | LOOP AT p_rgdir WHERE ipend BETWEEN pn-begda AND pn-endda | ||
+ | AND void IS INITIAL. | ||
+ | MOVE-CORRESPONDING p_rgdir TO inper_directory_entry. | ||
+ | COLLECT inper_directory_entry INTO inper_directory. | ||
+ | ENDLOOP. | ||
+ | |||
+ | LOOP AT inper_directory INTO inper_directory_entry. | ||
+ | CLEAR evp_inper. REFRESH evp_inper. | ||
+ | CALL FUNCTION 'CD_EVALUATION_PERIODS' | ||
+ | EXPORTING | ||
+ | bonus_date = inper_directory_entry-ipend | ||
+ | inper_modif = inper_directory_entry-iperm | ||
+ | inper = inper_directory_entry-inper | ||
+ | pay_type = inper_directory_entry-inpty | ||
+ | pay_ident = inper_directory_entry-inpid | ||
+ | TABLES | ||
+ | rgdir = p_rgdir | ||
+ | evpdir = evp_inper | ||
+ | EXCEPTIONS | ||
+ | no_record_found = 1 | ||
+ | OTHERS = 2. | ||
+ | IF sy-subrc <> 0. | ||
+ | EXIT. | ||
+ | ENDIF. | ||
+ | |||
+ | LOOP AT evp_inper INTO evp | ||
+ | WHERE fpend BETWEEN pn-begda AND pn-endda. | ||
+ | IF evp-srtza EQ 'P'. | ||
+ | MOVE-CORRESPONDING inper_directory_entry TO evp. "important | ||
+ | ENDIF. | ||
+ | APPEND evp. | ||
+ | ENDLOOP. | ||
+ | ENDLOOP. | ||
+ | |||
+ | DESCRIBE TABLE evp LINES evp_number_lines. | ||
+ | |||
+ | CHECK evp_number_lines GT 0. | ||
+ | |||
+ | LOOP AT evp. | ||
+ | PERFORM data_cluster TABLES evp | ||
+ | p_coava | ||
+ | USING evp-fpper | ||
+ | CHANGING p_waers. | ||
+ | ENDLOOP. | ||
+ | ENDFORM. " read_cluster | ||
+ | |||
+ | |||
+ | |||
+ | *&--------------------------------------------------------------------* | ||
+ | *& Form data_cluster | ||
+ | *&--------------------------------------------------------------------* | ||
+ | * text | ||
+ | *---------------------------------------------------------------------* | ||
+ | * -->P_EVP text | ||
+ | * -->P_COAVA text | ||
+ | * -->P_FPPER text | ||
+ | *---------------------------------------------------------------------* | ||
+ | FORM data_cluster TABLES p_evp STRUCTURE pc261 | ||
+ | p_coava STRUCTURE pc2co_ava | ||
+ | USING p_fpper LIKE evp-fpper | ||
+ | CHANGING p_waers TYPE waers. | ||
+ | |||
+ | DATA: ls_coava LIKE pc2co_ava OCCURS 0 WITH HEADER LINE. | ||
+ | |||
+ | CALL FUNCTION 'PYXX_READ_PAYROLL_RESULT' | ||
+ | EXPORTING | ||
+ | clusterid = import_relid | ||
+ | employeenumber = pernr-pernr | ||
+ | sequencenumber = p_evp-seqnr | ||
+ | read_only_international = ' ' | ||
+ | check_read_authority = ' ' | ||
+ | CHANGING | ||
+ | payroll_result = result | ||
+ | EXCEPTIONS | ||
+ | illegal_isocode_or_clusterid = 1 | ||
+ | error_generating_import = 2 | ||
+ | import_mismatch_error = 3 | ||
+ | subpool_dir_full = 4 | ||
+ | no_read_authority = 5 | ||
+ | no_record_found = 6 | ||
+ | versions_do_not_match = 7 | ||
+ | OTHERS = 8. | ||
+ | IF sy-subrc <> 0. | ||
+ | * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO | ||
+ | * WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. | ||
+ | ELSE. | ||
+ | p_waers = result-inter-versc-waers. | ||
+ | CLEAR ls_coava. | ||
+ | REFRESH ls_coava. | ||
+ | LOOP AT result-nat-coava INTO ls_coava | ||
+ | WHERE ( indcl EQ '02' OR indcl EQ '08' ) AND pyper EQ p_fpper. | ||
+ | MOVE ls_coava TO p_coava. | ||
+ | APPEND p_coava. | ||
+ | ENDLOOP. | ||
+ | SORT p_coava BY abkrs indcl indcm pyper inper fpper | ||
+ | begda endda awart. "+ | ||
+ | DELETE ADJACENT DUPLICATES FROM p_coava. | ||
+ | ENDIF. | ||
+ | ENDFORM. " data_cluster</nowiki> |
Revision as of 20:13, 12 February 2021
Contents
Lectura de datos de Préstamo
*----------------------------------------------------------------------* * FORM ....... *----------------------------------------------------------------------* * copiado de include MP004541 *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* 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 p_cuota pfx_subrc. data: ltx_rgdir like pc261 occurs 0 with header line, ltx_rgdir_o like pc261 occurs 0 with header line, 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 data wa_prest_ipc type zhr_prest_ipc. *##--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. return. endif. move sy-subrc to pfx_subrc. * Limitar directorio de cluster al período seleccionado call function 'CD_SELECT_DATE_RANGE' exporting fpper_begda = g_begda fpper_endda = g_endda tables in_rgdir = ltx_rgdir out_rgdir = ltx_rgdir_o. "take only regular and actual periods loop at ltx_rgdir_o transporting no fields where void = abap_true or payty <> space or srtza <> 'A'. delete ltx_rgdir_o index sy-tabix. endloop. ltx_rgdir[] = ltx_rgdir_o[]. sort ltx_rgdir descending by seqnr. data(l_lines) = lines( ltx_rgdir ). if l_lines = 0. pfx_subrc = 9. return. endif. * get relid select single * from t500l into lsx_t500l where molga = lfx_molga. move lsx_t500l-relid to lfx_relid. data(lflag_loan_exists) = abap_false. data lv_subrc type sy-subrc. loop at ltx_rgdir into lsx_rgdir where fpend >= p0045-begda. "for performance if lflag_loan_exists = abap_true. exit. "stop loop at rgdir, because period was found endif. 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). lflag_loan_exists = abap_true. pfx_abrdt = lsx_rgdir-fpend. lv_subrc = 1. loop at lsx_result-inter-rt into lsx_rt where v0typ = 'L' and v0znr = lsx_v0-v0znr and lgart = '/LLB'. if lsx_rt-betrg = 0. "this is a potential period "here the loan is already paid back completely lv_subrc = 1. "this is equal to that no /LLB exists exit. "the loop and check previous period else. * verificar si ya se actualizo por IPC select single * into wa_prest_ipc from zhr_prest_ipc where pernr = pf_pernr and seqnr = lsx_rgdir-seqnr. if sy-subrc <> 0. move: lsx_result-inter-versc-waers to lfx_opecu, lsx_rt-betrg to pfx_opelo. lv_subrc = 0. else. lv_subrc = 1. pfx_opelo = 0. exit. endif. endif. endloop. if lv_subrc = 0. loop at lsx_result-inter-rt into lsx_rt where v0typ = 'L' and v0znr = lsx_v0-v0znr and lgart = '/LRP'. if lsx_rt-betrg = 0. "this is a potential period "here the loan is already paid back completely lv_subrc = 1. "this is equal to that no /LLB exists exit. "the loop and check previous period else. move lsx_rt-betrg to p_cuota. endif. endloop. endif. else. "this loan is not yet processed in payroll move '7' to pfx_subrc. endif. endloop. endif. endloop. endform. " GET_LOAN_RESULTS
Modificar Cluster
- Ejemplo de lectura de cluster con modificacion a tabla BT
CLEAR rgdir. REFRESH rgdir. CALL FUNCTION 'CU_READ_RGDIR_NEW' EXPORTING persnr = i_pernr TABLES in_rgdir = rgdir EXCEPTIONS no_record_found = 1 import_mismatch_error = 2 no_read_authority = 3 OTHERS = 4. check sy-subrc = 0. DELETE rgdir WHERE fpper NE i_fpper. DESCRIBE TABLE rgdir LINES sy-tfill. check sy-tfill > 0. LOOP AT rgdir. ld_pernr = i_pernr. ld_seqnr = rgdir-seqnr. CALL FUNCTION 'PYXX_READ_PAYROLL_RESULT' EXPORTING clusterid = 'CL' employeenumber = ld_pernr sequencenumber = ld_seqnr read_only_buffer = ' ' CHANGING payroll_result = ls_result EXCEPTIONS illegal_isocode_or_clusterid = 1 error_generating_import = 2 import_mismatch_error = 3 subpool_dir_full = 4 no_read_authority = 5 no_record_found = 6 versions_do_not_match = 7 OTHERS = 8. * procesar bt loop at ls_result-inter-bt into gs_bt. add i_monto to gs_bt-betrg. modify ls_result-inter-bt from gs_bt. ENDLOOP. check sy-subrc = 0. CALL FUNCTION 'PYXX_WRITE_PAYROLL_RESULT' EXPORTING clusterid = 'CL' employeenumber = ld_pernr sequencenumber = ld_seqnr payroll_result = ls_result EXCEPTIONS illegal_isocode_or_clusterid = 1 error_generating_export = 2 export_error = 3 subpool_dir_full = 4 no_update_authority = 5 incomplete_result_imported = 6 OTHERS = 7. IF sy-subrc <> 0. * error EXIT. ENDIF. CALL FUNCTION 'HR_FLUSH_BUFFER_UPDATE_PCLX' EXPORTING test = ' ' EXCEPTIONS insert_error = 1 no_update_authority = 2 OTHERS = 3. IF sy-subrc <> 0. * error EXIT. ENDIF.
Leer payroll completo
REPORT yleer_cluster. CLASS cl_payroll DEFINITION. PUBLIC SECTION. CLASS-METHODS: leer_payroll IMPORTING i_pernr TYPE p0000-pernr EXPORTING et_payres TYPE STANDARD TABLE EXCEPTIONS no_data. ENDCLASS. CLASS cl_payroll IMPLEMENTATION. METHOD leer_payroll. DATA lt_rgdir TYPE STANDARD TABLE OF pc261. DATA: ls_payres TYPE REF TO data, lt_payres TYPE REF TO data. DATA: l_pernr TYPE p0003-pernr, l_molga TYPE t500l-molga, l_relid TYPE t500l-relid, l_typename TYPE t52relid-typename, l_tabname TYPE t52relid-tabname. FIELD-SYMBOLS <ls_evp> TYPE any. FIELD-SYMBOLS: <ls_payres> TYPE any, <es_payres> TYPE any, <lt_payres> TYPE STANDARD TABLE. CALL FUNCTION 'CU_READ_RGDIR_NEW' EXPORTING persnr = i_pernr IMPORTING molga = l_molga TABLES in_rgdir = lt_rgdir. IF l_molga IS INITIAL. RAISE no_data. ENDIF. SELECT SINGLE relid INTO l_relid FROM t500l WHERE molga = l_molga. * read typename from t52relid. SELECT SINGLE typename tabname FROM t52relid INTO (l_typename, l_tabname) WHERE relid = l_relid. CREATE DATA ls_payres TYPE (l_typename). "PAYCL_RESULT CREATE DATA lt_payres TYPE TABLE OF (l_typename). ASSIGN ls_payres->* TO <ls_payres>. ASSIGN lt_payres->* TO <lt_payres>. LOOP AT lt_rgdir INTO DATA(ls_rgdir). "Read payroll results CALL FUNCTION 'PYXX_READ_PAYROLL_RESULT' EXPORTING clusterid = l_relid employeenumber = i_pernr sequencenumber = ls_rgdir-seqnr filter_cumulations = abap_false CHANGING payroll_result = <ls_payres> EXCEPTIONS OTHERS = 1. IF sy-subrc = 0. "Get evp ASSIGN COMPONENT 'EVP' OF STRUCTURE <ls_payres> TO <ls_evp>. <ls_evp> = ls_rgdir. APPEND <ls_payres> TO <lt_payres>. ENDIF. ENDLOOP. et_payres[] = <lt_payres>. ENDMETHOD. ENDCLASS. PARAMETERS p_pernr TYPE p0000-pernr. START-OF-SELECTION. DATA lt_payres TYPE TABLE OF paycl_result. CALL METHOD cl_payroll=>leer_payroll EXPORTING i_pernr = p_pernr IMPORTING et_payres = lt_payres EXCEPTIONS no_data = 1. if sy-subrc <> 0. return. endif.
Función PYXX_READ_RGDIR_PAYRESULTS
DATA: lt_results TYPE table of pay99_result, lt_rgdir type table of pc261. data: l_pernr type pernr_d, l_molga TYPE t500l-molga. l_pernr = i_pernr. CALL FUNCTION 'CU_READ_RGDIR_NEW' EXPORTING persnr = l_pernr check_read_authority = space IMPORTING molga = l_molga TABLES in_rgdir = lt_rgdir EXCEPTIONS OTHERS = 1. IF sy-subrc <> 0. RETURN. ENDIF. CALL FUNCTION 'PYXX_READ_RGDIR_PAYRESULTS' EXPORTING clusterid = 'CL' employeenumber = l_pernr read_only_international = 'X' TABLES rgdir = lt_rgdir imported_periods = lt_results EXCEPTIONS import_error = 1 OTHERS = 2.
Function Module: CD_EVALUATION_PERIODS
This module transfers the payroll results to a payroll run as ‘A’ records (current). It also transfers the accompanying ‘P’ records (previous). This is the module most frequently used in evaluation programs.
FORM read_cluster TABLES p_rgdir STRUCTURE pc261 p_coava STRUCTURE pc2co_ava USING p_pernr LIKE pernr-pernr p_molga LIKE t500l-molga CHANGING p_waers LIKE pc202-waers. . REFRESH: p_rgdir, p_coava, inper_directory. CLEAR: p_rgdir, p_coava, inper_directory_entry, inper_directory. CALL FUNCTION 'CU_READ_RGDIR' EXPORTING persnr = pernr-pernr IMPORTING molga = molga TABLES in_rgdir = p_rgdir EXCEPTIONS no_record_found = 1 OTHERS = 2. IF sy-subrc <> 0. ENDIF. LOOP AT p_rgdir WHERE ipend BETWEEN pn-begda AND pn-endda AND void IS INITIAL. MOVE-CORRESPONDING p_rgdir TO inper_directory_entry. COLLECT inper_directory_entry INTO inper_directory. ENDLOOP. LOOP AT inper_directory INTO inper_directory_entry. CLEAR evp_inper. REFRESH evp_inper. CALL FUNCTION 'CD_EVALUATION_PERIODS' EXPORTING bonus_date = inper_directory_entry-ipend inper_modif = inper_directory_entry-iperm inper = inper_directory_entry-inper pay_type = inper_directory_entry-inpty pay_ident = inper_directory_entry-inpid TABLES rgdir = p_rgdir evpdir = evp_inper EXCEPTIONS no_record_found = 1 OTHERS = 2. IF sy-subrc <> 0. EXIT. ENDIF. LOOP AT evp_inper INTO evp WHERE fpend BETWEEN pn-begda AND pn-endda. IF evp-srtza EQ 'P'. MOVE-CORRESPONDING inper_directory_entry TO evp. "important ENDIF. APPEND evp. ENDLOOP. ENDLOOP. DESCRIBE TABLE evp LINES evp_number_lines. CHECK evp_number_lines GT 0. LOOP AT evp. PERFORM data_cluster TABLES evp p_coava USING evp-fpper CHANGING p_waers. ENDLOOP. ENDFORM. " read_cluster *&--------------------------------------------------------------------* *& Form data_cluster *&--------------------------------------------------------------------* * text *---------------------------------------------------------------------* * -->P_EVP text * -->P_COAVA text * -->P_FPPER text *---------------------------------------------------------------------* FORM data_cluster TABLES p_evp STRUCTURE pc261 p_coava STRUCTURE pc2co_ava USING p_fpper LIKE evp-fpper CHANGING p_waers TYPE waers. DATA: ls_coava LIKE pc2co_ava OCCURS 0 WITH HEADER LINE. CALL FUNCTION 'PYXX_READ_PAYROLL_RESULT' EXPORTING clusterid = import_relid employeenumber = pernr-pernr sequencenumber = p_evp-seqnr read_only_international = ' ' check_read_authority = ' ' CHANGING payroll_result = result EXCEPTIONS illegal_isocode_or_clusterid = 1 error_generating_import = 2 import_mismatch_error = 3 subpool_dir_full = 4 no_read_authority = 5 no_record_found = 6 versions_do_not_match = 7 OTHERS = 8. IF sy-subrc <> 0. * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO * WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. ELSE. p_waers = result-inter-versc-waers. CLEAR ls_coava. REFRESH ls_coava. LOOP AT result-nat-coava INTO ls_coava WHERE ( indcl EQ '02' OR indcl EQ '08' ) AND pyper EQ p_fpper. MOVE ls_coava TO p_coava. APPEND p_coava. ENDLOOP. SORT p_coava BY abkrs indcl indcm pyper inper fpper begda endda awart. "+ DELETE ADJACENT DUPLICATES FROM p_coava. ENDIF. ENDFORM. " data_cluster