This document explains the implementing procedure of Business Add-In : HR_INDVAL for indirect valuation/calculation of wage types in info type 0008. Indirect valuation module can be used to determine amount for a wage type depending on other wage types or the pay scale structure. ABAP code for calculation should be mentioned in the method DO_INDIRECT_VALUATION.
Standard indirect evaluation modules are supplied by SAP to meet basic requirements of indirect valuation. Custom module should be created and activated only if the standard modules does not fit to the requirement. BAdI HR_INDVAL is filter dependent and custom module will act as the filter value.
Custom module is used to calculate HRA (House rent allowance) based on % of employee BASIC salary. HRA is calculated based on the employee master parameters Employee group, Employee subgroup and City type to which employee belongs. Custom Z table is used to create the master data for maintaining HRA% to BASIC salary based on above parameters. Indirect valuation module use Z table records to calculate the HRA amount.
Custom table for HRA% to BASIC maintained as
Custom module can be created using the IMG Path : SAP IMG -> Personnel Management -> Personnel Administration -> Payroll data -> Indirect Valuation -> Create Indirect valuation module. This module will appear as the value for filter type PADIV_MODULE while creating BAdI implementation.
TYPES : BEGIN OF ty_lgart,
lgart TYPE lgart,
betxx TYPE pad_amt7s,
END OF ty_lgart.
DATA : lt_p0008 TYPE p0008_tab,
lt_p0001 TYPE p0001_tab,
lt_p0006 TYPE p0006_tab,
lt_zival TYPE STANDARD TABLE OF zhcm_003_ival, "Z table with HRA% to Basic"
lt_lgart TYPE STANDARD TABLE OF ty_lgart.
DATA : wa_p0008 TYPE p0008,
wa_p0001 TYPE p0001,
wa_p0006 TYPE p0006,
wa_zival TYPE zhcm_003_ival, "Z table with HRA% to Basic"
wa_lgart TYPE ty_lgart.
DATA : lv_subrc TYPE sy-subrc,
lv_persg TYPE persg,
lv_persk TYPE persk,
lv_busrt TYPE busrt,
lv_bet01 TYPE pad_amt7s,
lv_no TYPE n LENGTH 2,
lv_lgart TYPE c LENGTH 15,
lv_betxx TYPE c LENGTH 15.
DATA : lr_struct_descr TYPE REF TO cl_abap_structdescr.
FIELD-SYMBOLS : <fs_lgart> TYPE lgart,
<fs_betxx> TYPE pad_amt7s,
<fs_components> LIKE LINE OF cl_abap_structdescr=>components,
<fs_comp> TYPE any.
lr_struct_descr ?= cl_abap_typedescr=>describe_by_data(
p_data = wa_p0008 ).
CLEAR : lv_subrc.
********************************************************************
** Read infotype 0001 to Employee organization assignment details **
********************************************************************
CALL FUNCTION 'HR_INDVAL_READ_INFOTYPE'
EXPORTING
tclas = tclas
pernr = pernr
infty = '0001'
begda = begda
endda = endda
IMPORTING
subrc = lv_subrc
TABLES
infty_tab = lt_p0001
EXCEPTIONS
infty_not_found = 1
undefined_error = 2
OTHERS = 3.
********************************************************************
** Read IT 0006 using HR_INDVAL_READ_INFOTYPE and output in lt_p0006
** Read IT 0008 using HR_INDVAL_READ_INFOTYPE and output in lt_p0008
********************************************************************
CLEAR : wa_p0001.
READ TABLE lt_p0001 INTO wa_p0001 INDEX 1.
IF sy-subrc EQ 0.
MOVE wa_p0001-persg TO lv_persg. "Employee group
MOVE wa_p0001-persk TO lv_persk. "Employee subgroup
ENDIF.
CLEAR : wa_p0006.
READ TABLE lt_p0006 INTO wa_p0006 WITH KEY subty = '1'.
IF sy-subrc EQ 0.
MOVE wa_p0006-busrt TO lv_busrt. "City type"
ENDIF.
********************************************************************
** Read infotype 0008 work area and convert to internal table
********************************************************************
lv_no = '01'.
DO.
CONCATENATE 'LGA' lv_no INTO lv_lgart.
CONCATENATE 'BET' lv_no INTO lv_betxx.
READ TABLE lr_struct_descr->components ASSIGNING <fs_components>
WITH KEY name = lv_lgart.
IF sy-subrc EQ 0.
UNASSIGN <fs_comp>.
ASSIGN COMPONENT <fs_components>-name
OF STRUCTURE wa_p0008 TO <fs_comp>.
IF sy-subrc EQ 0.
ASSIGN <fs_comp> TO <fs_lgart>.
UNASSIGN <fs_components>.
READ TABLE lr_struct_descr->components ASSIGNING <fs_components>
WITH KEY name = lv_betxx.
IF sy-subrc EQ 0.
UNASSIGN <fs_comp>.
ASSIGN COMPONENT <fs_components>-name
OF STRUCTURE wa_p0008 TO <fs_comp>.
IF sy-subrc EQ 0.
ASSIGN <fs_comp> TO <fs_betxx>.
MOVE <fs_lgart> TO wa_lgart-lgart.
MOVE <fs_betxx> TO wa_lgart-betxx.
IF wa_lgart NE '' AND wa_lgart-betxx NE 0.
APPEND wa_lgart TO lt_lgart.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ELSE.
EXIT.
ENDIF.
ADD 1 TO lv_no.
ENDDO.
********************************************************************
** Calculate Basic pay for HRA calculation (Currently hardcoded) **
********************************************************************
LOOP AT lt_lgart INTO wa_lgart WHERE ( lgart EQ '9001' OR
lgart EQ '9002' ).
ADD wa_lgart-betxx TO lv_bet01.
ENDLOOP.
********************************************************************
** Calculate HRA amount based on Z table **
********************************************************************
IF lv_busrt EQ 'M' OR lv_busrt EQ 'S' OR lv_busrt EQ 'O'.
IF ( lv_persg IS NOT INITIAL AND
lv_persk IS NOT INITIAL AND
lv_busrt IS NOT INITIAL AND
lv_bet01 GT 0 ).
CLEAR : wa_zival.
SELECT SINGLE * FROM zhcm_003_ival
INTO wa_zival
WHERE lgart = lgart
AND persg = lv_persg
AND persk = lv_persk
AND city_type = lv_busrt
AND endda >= endda
AND begda <= begda.
IF sy-subrc EQ 0.
CLEAR : lv_mod10.
MOVE-CORRESPONDING valuation_input TO valuation_output.
valuation_output-amount = ( lv_bet01 * wa_zival-rate_perc ) / 100.
ELSE.
** Error : HRA Calculation Table not maintained"
CALL FUNCTION 'HR_INDVAL_MESSAGE_HANDLE'
EXPORTING
msgty = 'E'
msgid = 'ZHCM'
msgno = '002'.
move 4 to subrc.
MESSAGE ID 'ZHCM' TYPE 'E' NUMBER '002'
RAISING error_indval.
ENDIF.
ENDIF.
ELSE.
** "Error : Invalid City type in Infotype 0006"
CALL FUNCTION 'HR_INDVAL_MESSAGE_HANDLE'
EXPORTING
msgty = 'E'
msgid = 'ZHCM'
msgno = '001'.
move 4 to subrc.
MESSAGE ID 'ZHCM' TYPE 'E' NUMBER '001'
RAISING error_indval.
ENDIF.
Wage type (in this scenario - Wage type for HRA) need to be linked with the indirect valuation module, to activate the calculation implemented in BAdI. Wage type can be linked with Module using the IMG Path : SAP IMG -> Payroll -> Payroll : <country> -> Reimbursements, Allowances & Perks -> Maintain Wage type characteristics. This can also be accessed through transaction code OH13
Note : ABAP source code and scenario mentioned above are only for representational purpose. Source code may change according to the actual business requirement.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
5 | |
2 | |
2 | |
2 | |
2 | |
2 | |
2 | |
1 | |
1 | |
1 |