Apart from reading payroll results from PCL2 clusters, you may want to update payroll results. It may happen when part of the payroll processing is happening outside SAP and payroll results are interfaced to SAP (Inbound interface). The standard program RHRFPM_FILL_FUND_110 ('Convert the Percentage values in the Table Fund of Payroll results' ) serves as a guideline on how to update payroll results. A code excerpt of its subroutine 'mainroutine' from this program is as follows :*&--------------------------------------------------------------------**& Form mainroutine*&--------------------------------------------------------------------*FORM mainroutine TABLES pt_log TYPE tt_log USING p_pernr TYPE pernr_d p_date TYPE begda p_test TYPE xfeld. DATA: BEGIN OF lt_rgdir OCCURS 0. INCLUDE STRUCTURE pc261. DATA: END OF lt_rgdir. DATA: l_molga TYPE molga, l_relid TYPE relid_pcl, l_rc TYPE sysubrc, l_fund_update TYPE xfeld, l_update TYPE xfeld. DATA: l_payresult TYPE REF TO data. FIELD-SYMBOLS: <l_payresult> TYPE ANY, <lt_fund> TYPE hrpay99_fund. CALL FUNCTION 'HR_PCLX_INIT_BUFFER' EXCEPTIONS
OTHERS = 0.
CALL FUNCTION 'CU_READ_RGDIR_NEW'
EXPORTING
persnr = p_pernr
IMPORTING
molga = l_molga
TABLES
in_rgdir = lt_rgdir
EXCEPTIONS
OTHERS = 1.
IF sy-subrc <> 0. REJECT. ENDIF.
DELETE lt_rgdir WHERE rundt < p_date.
IF lt_rgdir[] IS INITIAL. REJECT. ENDIF.
IF l_molga IS INITIAL. REJECT. ENDIF.
PERFORM get_relid USING l_molga
CHANGING l_relid l_payresult l_rc.
IF l_rc <> 0. REJECT. ENDIF.
ASSIGN l_payresult->* TO <l_payresult>.
IF sy-subrc <> 0. REJECT. ENDIF.
pt_log-pernr = p_pernr.
LOOP AT lt_rgdir.
pt_log-seqnr = lt_rgdir-seqnr.
CLEAR <l_payresult>.
CALL FUNCTION 'PYXX_READ_PAYROLL_RESULT'
EXPORTING
clusterid = l_relid
employeenumber = p_pernr
sequencenumber = lt_rgdir-seqnr
CHANGING
payroll_result = <l_payresult>
EXCEPTIONS
OTHERS = 1.
IF sy-subrc <> 0.
CONTINUE.
ENDIF.
ASSIGN COMPONENT 'INTER-FUND' OF STRUCTURE <l_payresult>
TO <lt_fund>.
CHECK NOT <lt_fund> IS INITIAL.
CLEAR l_fund_update.
PERFORM check_fund TABLES <lt_fund>[]
CHANGING l_fund_update.
IF l_fund_update = 'X'.
l_update = 'X'.
CALL FUNCTION 'PYXX_WRITE_PAYROLL_RESULT'
EXPORTING
clusterid = l_relid
employeenumber = p_pernr
sequencenumber = lt_rgdir-seqnr
payroll_result = <l_payresult>
EXCEPTIONS
OTHERS = 1.
IF sy-subrc <> 0.
pt_log-comment = text-001.
APPEND pt_log.
REJECT.
ELSE.
pt_log-comment = text-002.
APPEND pt_log.
ENDIF.
ENDIF.
ENDLOOP.
IF l_update = 'X'.
CLEAR pt_log-seqnr.
CALL FUNCTION 'HR_FLUSH_BUFFER_UPDATE_PCLX'
EXPORTING
test = p_test
EXCEPTIONS
OTHERS = 1.
IF sy-subrc <> 0.
pt_log-comment = text-003.
APPEND pt_log.
ROLLBACK WORK.
REJECT.
ELSE.
IF p_test = ' '.
pt_log-comment = text-004.
COMMIT WORK.
ELSE.
pt_log-comment = text-005.
ENDIF.
APPEND pt_log.
ENDIF.
ENDIF.
ENDFORM. "mainroutine
*&--------------------------------------------------------------------*