2022 Dec 06 7:40 AM
Hello SAP Community,
And I am getting garbage values at various places. Can anybody guide me.
LOOP AT payroll_99-inter-rt INTO wa_rt.
CALL FUNCTION 'HR_99S_GET_EVAL_CLASS_VALUE'
EXPORTING
p_molga = gv_molga
p_lgart = wa_rt-lgart
p_eval_class = '02'
p_keydate = pn-begda
* P_T512W =
IMPORTING
p_value = ev_value
* P_RETURN_CODE =
.
CLEAR:wa_amount,wa_col.
IF ev_value = '02'.
wa_amount-earnlgart = wa_rt-lgart.
wa_amount-earnbetrg = wa_amount-earnbetrg + wa_rt-betrg."amount for earning
* CLEAR:wa_rt.
IF wa_amount-earnbetrg IS NOT INITIAL.
totearn = totearn + wa_amount-earnbetrg.
MOVE-CORRESPONDING wa_final TO wa_amount.
count_earn = count_earn + 1.
COLLECT wa_amount INTO it_amount .
* CLEAR:wa_amount."add
wa_col-lgart = wa_rt-lgart.
COLLECT wa_col INTO dy_col.
CLEAR:wa_rt,wa_amount,wa_final,wa_col.
ENDIF.
ELSEIF ev_value = '04'."Deduction
wa_amount-earnlgart = wa_rt-lgart.
wa_amount-dedbetrg = wa_amount-dedbetrg + wa_rt-betrg."amount for deduction
* CLEAR:wa_rt.
* wa_col-lgart = wa_rt-lgart.
IF wa_amount-dedbetrg IS NOT INITIAL.
totded = totded + wa_amount-dedbetrg.
MOVE-CORRESPONDING wa_final TO wa_amount.
count_ded = count_ded + 1.
COLLECT wa_amount INTO it_amount .
wa_col-lgart = wa_rt-lgart.
COLLECT wa_col INTO dy_col.
CLEAR:wa_rt,wa_amount,wa_final,wa_col.
ENDIF.
ELSEIF ev_value = '06'."Deduction
wa_amount-earnlgart = wa_rt-lgart.
wa_amount-dedbetrg = wa_amount-dedbetrg + wa_rt-betrg."amount for deduction
* CLEAR:wa_rt.
* wa_col-lgart = wa_rt-lgart.
IF wa_amount-dedbetrg IS NOT INITIAL.
totded = totded + wa_amount-dedbetrg.
MOVE-CORRESPONDING wa_final TO wa_amount.
count_ded = count_ded + 1.
COLLECT wa_amount INTO it_amount .
wa_col-lgart = wa_rt-lgart.
COLLECT wa_col INTO dy_col.
CLEAR:wa_rt,wa_amount,wa_final,wa_col.
ENDIF.
ELSEIF ev_value = '08'."Deduction
wa_amount-earnlgart = wa_rt-lgart.
wa_amount-dedbetrg = wa_amount-dedbetrg + wa_rt-betrg."amount for deduction
* CLEAR:wa_rt.
* wa_col-lgart = wa_rt-lgart.
IF wa_amount-dedbetrg IS NOT INITIAL.
totded = totded + wa_amount-dedbetrg.
MOVE-CORRESPONDING wa_final TO wa_amount.
count_ded = count_ded + 1.
COLLECT wa_amount INTO it_amount .
wa_col-lgart = wa_rt-lgart.
COLLECT wa_col INTO dy_col.
CLEAR:wa_rt,wa_amount,wa_final,wa_col.
ENDIF.
ENDIF.
ENDLOOP.
wa_col-lgart = 'TE'.
* wa_col-seq = 'W1.1'.
APPEND wa_col TO dy_col.
CLEAR : wa_col.
wa_col-lgart = 'TD'.
* wa_col-seq = 'W2.1'.
APPEND wa_col TO dy_col.
CLEAR : wa_col.
LOOP AT payroll_99-inter-rt INTO wa_rt
WHERE lgart = '/560'
AND betrg IS NOT INITIAL.
wa_amount-netpay = wa_rt-betrg.
wa_amount-earnlgart = wa_rt-lgart.
MOVE-CORRESPONDING wa_final TO wa_amount.
COLLECT wa_amount INTO it_amount.
CLEAR:wa_amount.
wa_col-lgart = wa_rt-lgart.
* wa_col-seq = 'W3'.
COLLECT wa_col INTO dy_col.
CLEAR : wa_col.
CLEAR : wa_rt.
ENDLOOP.
ENDIF.
END-OF-SELECTION.
DATA:it_fieldcat TYPE lvc_t_fcat, "slis_t_fieldcat_alv,
wa_fieldcat TYPE lvc_s_fcat. " slis_fieldcat_alv.
DATA:wa_layout TYPE slis_layout_alv.
* SORT dy_col ASCENDING BY seq.
DELETE ADJACENT DUPLICATES FROM dy_col COMPARING lgart.
SELECT lgart lgtxt FROM t512t
INTO TABLE it_t512
FOR ALL ENTRIES IN dy_col
WHERE sprsl = 'E'
AND molga = '40'
AND lgart = dy_col-lgart.
LOOP AT dy_col INTO wa_col.
READ TABLE it_t512 INTO wa_t512 WITH KEY lgart = wa_col-lgart.
IF sy-subrc = 0.
wa_col-text = wa_t512-lgtxt.
TRANSLATE wa_col-text TO UPPER CASE.
REPLACE ALL OCCURRENCES OF SUBSTRING '&' IN wa_col-text WITH '_'.
REPLACE ALL OCCURRENCES OF SUBSTRING '.' IN wa_col-text WITH ''.
* REPLACE ALL OCCURRENCES OF SUBSTRING blank IN wa_col-text WITH ''.
MODIFY dy_col FROM wa_col TRANSPORTING text.
ENDIF.
IF wa_col-lgart = 'TE'.
wa_col-text = 'Total_Earning'.
MODIFY dy_col FROM wa_col TRANSPORTING text.
ELSEIF wa_col-lgart = 'TD'.
wa_col-text = 'Total_Deducation'.
MODIFY dy_col FROM wa_col TRANSPORTING text.
ENDIF.
CLEAR : wa_col,wa_t512.
ENDLOOP.
LOOP AT it_amount INTO wa_amount.
READ TABLE it_t512 INTO wa_t512 WITH KEY lgart = wa_amount-earnlgart.
IF sy-subrc = 0.
wa_amount-earnlgtxt = wa_t512-lgtxt.
TRANSLATE wa_amount-earnlgtxt TO UPPER CASE.
REPLACE ALL OCCURRENCES OF SUBSTRING '&' IN wa_amount-earnlgtxt WITH '_'.
CONDENSE wa_amount-earnlgtxt NO-GAPS.
REPLACE ALL OCCURRENCES OF SUBSTRING '.' IN wa_col-text WITH ''.
MODIFY it_amount FROM wa_amount TRANSPORTING earnlgtxt.
ENDIF.
CLEAR : wa_amount,wa_t512,wa_amount-earnlgtxt.
ENDLOOP.
* SORT dy_col ASCENDING BY seq.
PERFORM get_structure.
PERFORM create_dynamic_structure.
PERFORM alv_display.
*&---------------------------------------------------------------------*
*& Form GET_STRUCTURE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM get_structure .
wa_layout-zebra = 'X'.
wa_layout-colwidth_optimize = 'X'.
wa_fieldcat-fieldname = 'PERNR'.
wa_fieldcat-scrtext_l = 'Personal No'.
wa_fieldcat-col_pos = 1.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'CNAME'.
wa_fieldcat-scrtext_l = 'Full Name'.
wa_fieldcat-outputlen = '30'.
wa_fieldcat-col_pos = 2.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'WERKS'.
wa_fieldcat-scrtext_l = 'Personal Area'.
wa_fieldcat-col_pos = 3.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'BTRTL'.
wa_fieldcat-scrtext_l = 'Personal Sub-Area'.
wa_fieldcat-col_pos = 4.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'ABKRS'.
wa_fieldcat-scrtext_l = 'Payroll Area'.
wa_fieldcat-col_pos = 5.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'PERSG'.
wa_fieldcat-scrtext_l = 'Employee Group'.
wa_fieldcat-col_pos = 6.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'PERSK'.
wa_fieldcat-scrtext_l = 'Employee Sub-Group'.
wa_fieldcat-col_pos = 7.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'STEXT'.
wa_fieldcat-scrtext_l = 'Designation'.
wa_fieldcat-col_pos = 8.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'HIRE_DATE'.
wa_fieldcat-scrtext_l = 'DOJ'.
wa_fieldcat-col_pos = 9.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'BEGDA'.
wa_fieldcat-scrtext_l = 'DOL'.
wa_fieldcat-col_pos = 10.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'EEPFM'.
wa_fieldcat-scrtext_l = 'PF No.'.
wa_fieldcat-col_pos = 11.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'ICNUM'.
wa_fieldcat-scrtext_l = 'UAN No'.
wa_fieldcat-col_pos = 12.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'ICNUM1'.
wa_fieldcat-scrtext_l = 'PAN No'.
wa_fieldcat-col_pos = 13.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'ICNUM2'.
wa_fieldcat-scrtext_l = 'Aadhar No'.
wa_fieldcat-col_pos = 14.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'BANKA'.
wa_fieldcat-scrtext_l = 'Bank Name'.
wa_fieldcat-col_pos = 15.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'BANKN'.
wa_fieldcat-scrtext_l = 'Bank Account Number'.
wa_fieldcat-col_pos = 16.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'ICNUM3'.
wa_fieldcat-scrtext_l = 'IFSCD code'.
wa_fieldcat-col_pos = 17.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
* gv_num = 17.
* SORT dy_col BY lgart seq.
* LOOP AT dy_col INTO wa_col WHERE seq = 'W1'.
* gv_num = gv_num + 1.
* PERFORM create_dy_field USING wa_col-text wa_col-text.
* CLEAR : wa_col.
* ENDLOOP.
*
* wa_col = VALUE #( dy_col[ seq = 'W1.1' ] OPTIONAL ).
* IF wa_col IS NOT INITIAL.
* gv_num = gv_num + 1.
* PERFORM create_dy_field USING wa_col-text wa_col-text.
* CLEAR : wa_col.
* ENDIF.
*
* LOOP AT dy_col INTO wa_col WHERE seq = 'W2'.
* gv_num = gv_num + 1.
* PERFORM create_dy_field USING wa_col-text wa_col-text.
* CLEAR : wa_col.
* ENDLOOP.
*
* wa_col = VALUE #( dy_col[ seq = 'W2.1' ] OPTIONAL ).
* IF wa_col IS NOT INITIAL.
* gv_num = gv_num + 1.
* PERFORM create_dy_field USING wa_col-text wa_col-text.
* CLEAR : wa_col.
* ENDIF.
*
* LOOP AT dy_col INTO wa_col WHERE seq = 'W3'.
* gv_num = gv_num + 1.
* PERFORM create_dy_field USING wa_col-text wa_col-text.
* CLEAR : wa_col.
* ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form CREATE_DYNAMIC_STRUCTURE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM create_dynamic_structure .
CALL METHOD cl_alv_table_create=>create_dynamic_table
EXPORTING
it_fieldcatalog = it_fieldcat
IMPORTING
ep_table = it_table.
ASSIGN it_table->* TO <l_table>.
CREATE DATA new_line LIKE LINE OF <l_table>.
ASSIGN new_line->* TO <dyn_wa>.
LOOP AT it_amount INTO wa_amount.
ASSIGN COMPONENT 'PERNR' OF STRUCTURE <dyn_wa> TO <l_field>.
<l_field> = wa_amount-pernr.
ASSIGN COMPONENT 'CNAME' OF STRUCTURE <dyn_wa> TO <l_field>.
<l_field> = wa_amount-cname.
ASSIGN COMPONENT 'WERKS' OF STRUCTURE <dyn_wa> TO <l_field>.
<l_field> = wa_amount-werks.
ASSIGN COMPONENT 'BTRTL' OF STRUCTURE <dyn_wa> TO <l_field>.
<l_field> = wa_amount-btrtl.
ASSIGN COMPONENT 'ABKRS' OF STRUCTURE <dyn_wa> TO <l_field>.
<l_field> = wa_amount-abkrs.
ASSIGN COMPONENT 'PERSG' OF STRUCTURE <dyn_wa> TO <l_field>.
<l_field> = wa_amount-persg.
ASSIGN COMPONENT 'PERSK' OF STRUCTURE <dyn_wa> TO <l_field>.
<l_field> = wa_amount-persk.
ASSIGN COMPONENT 'STEXT' OF STRUCTURE <dyn_wa> TO <l_field>.
<l_field> = wa_amount-stext.
ASSIGN COMPONENT 'HIRE_DATE' OF STRUCTURE <dyn_wa> TO <l_field>.
CONCATENATE wa_amount-hire_date+6(2) wa_amount-hire_date+4(2)
wa_amount-hire_date+0(4) INTO <l_field> SEPARATED BY '.'.
ASSIGN COMPONENT 'BEGDA' OF STRUCTURE <dyn_wa> TO <l_field>.
CONCATENATE wa_amount-begda+6(2) wa_amount-begda+4(2)
wa_amount-begda+0(4) INTO <l_field> SEPARATED BY '.'.
ASSIGN COMPONENT 'EEPFM' OF STRUCTURE <dyn_wa> TO <l_field>.
<l_field> = wa_amount-eepfm.
ASSIGN COMPONENT 'ICNUM' OF STRUCTURE <dyn_wa> TO <l_field>.
<l_field> = wa_amount-icnum.
ASSIGN COMPONENT 'ICNUM1' OF STRUCTURE <dyn_wa> TO <l_field>.
<l_field> = wa_amount-icnum1.
ASSIGN COMPONENT 'ICNUM2' OF STRUCTURE <dyn_wa> TO <l_field>.
<l_field> = wa_amount-icnum2.
ASSIGN COMPONENT 'BANKA' OF STRUCTURE <dyn_wa> TO <l_field>.
<l_field> = wa_amount-banka.
ASSIGN COMPONENT 'BANKN' OF STRUCTURE <dyn_wa> TO <l_field>.
<l_field> = wa_amount-bankn.
ASSIGN COMPONENT 'ICNUM3' OF STRUCTURE <dyn_wa> TO <l_field>.
<l_field> = wa_amount-icnum3.
IF wa_amount-earnbetrg IS NOT INITIAL.
READ TABLE it_fieldcat INTO wa_fieldcat WITH KEY fieldname = wa_amount-earnlgtxt.
IF sy-subrc = 0.
ASSIGN COMPONENT sy-tabix OF STRUCTURE <dyn_wa> TO <l_field>.
<l_field> = wa_amount-earnbetrg.
ENDIF.
READ TABLE it_fieldcat INTO wa_fieldcat WITH KEY fieldname = 'Total_Earning'.
IF sy-subrc = 0.
ASSIGN COMPONENT sy-tabix OF STRUCTURE <dyn_wa> TO <l_field>.
<l_field> = wa_amount-earnbetrg.
ENDIF.
* READ TABLE it_fieldcat INTO wa_fieldcat WITH KEY fieldname = 'Net_Salary'.
* IF sy-subrc = 0.
* ASSIGN COMPONENT sy-tabix OF STRUCTURE <dyn_wa> TO <l_field>.
* <l_field> = wa_amount-earnbetrg.
* ENDIF.
ENDIF.
IF wa_amount-dedbetrg IS NOT INITIAL.
READ TABLE it_fieldcat INTO wa_fieldcat WITH KEY fieldname = wa_amount-earnlgtxt.
IF sy-subrc = 0.
ASSIGN COMPONENT sy-tabix OF STRUCTURE <dyn_wa> TO <l_field>.
<l_field> = wa_amount-dedbetrg.
ENDIF.
READ TABLE it_fieldcat INTO wa_fieldcat WITH KEY fieldname = 'Total_Deducation'.
IF sy-subrc = 0.
ASSIGN COMPONENT sy-tabix OF STRUCTURE <dyn_wa> TO <l_field>.
<l_field> = wa_amount-dedbetrg.
ENDIF.
* READ TABLE it_fieldcat INTO wa_fieldcat WITH KEY fieldname = 'Net_Salary'.
* IF sy-subrc = 0.
* wa_amount-dedbetrg = wa_amount-dedbetrg * -1.
* ASSIGN COMPONENT sy-tabix OF STRUCTURE <dyn_wa> TO <l_field>.
* <l_field> = wa_amount-dedbetrg.
* ENDIF.
ENDIF.
ASSIGN COMPONENT 'netpay' OF STRUCTURE <dyn_wa> TO <l_field>.
<l_field> = wa_amount-netpay.
* CLEAR: wa_amount.
APPEND <dyn_wa> TO <l_table>.
CLEAR: <dyn_wa>.
CLEAR: wa_amount.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form ALV_DISPLAY
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM alv_display .
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
i_callback_program = sy-repid
it_fieldcat_lvc = it_fieldcat[]
* it_events = it_events[]
* i_callback_user_command = 'USER_COMMAND'
* i_callback_pf_status_set = 'PF_STATUS'
i_save = 'X'
TABLES
t_outtab = <l_table>.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form CREATE_DY_FIELD
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_WA_COL_TEXT text
* -->P_WA_COL_TEXT text
*----------------------------------------------------------------------*
FORM create_dy_field USING VALUE(p_name) TYPE lgtxt
VALUE(name) TYPE lgtxt.
CONDENSE p_name NO-GAPS.
wa_fieldcat-fieldname = p_name.
wa_fieldcat-scrtext_l = name.
wa_fieldcat-datatype = 'P'.
wa_fieldcat-inttype = 'P'.
wa_fieldcat-intlen = 20.
wa_fieldcat-decimals = 2.
wa_fieldcat-col_pos = gv_num.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
ENDFORM.
2022 Dec 07 1:44 PM
Hi Jinson,
please try to generate dynamic structures and tables with the classes
CL_ABAP_STRUCTDESCR, CL_ABAP_TABLEDESCR
For the ALV output, you can use the class CL_SALV_TABLE.
Regards
Thorsten