ZFI Cost Sheet Report Analysis
ZFI Cost Sheet Report Analysis
INCLUDE zfit_cost_sheet_top_cp.
INCLUDE zfit_cost_sheet_sel_cp.
INCLUDE zfit_cost_sheet_detail_cp.
*--------------------------------------------------------------------*
*&---------------------------------------------------------------------*
******** START OF SELECTION EVENT ********************************
*&---------------------------------------------------------------------*
START-OF-SELECTION.
PERFORM get_data.
PERFORM generate_alv_fieldcat.
PERFORM sub_eventtab_build USING t_events.
PERFORM sub_comment_build USING t_list_top_of_page.
PERFORM set_cell_colours.
PERFORM alv_show.
*&---------------------------------------------------------------------*
*& Form GET_DATA
*&---------------------------------------------------------------------*
FORM get_data .
DATA: t_list TYPE abaplist OCCURS 0.
DATA: lt_ascii TYPE TABLE OF soli.
FIELD-SYMBOLS <lt_pay_data> TYPE table.
DATA lr_pay_data TYPE REF TO data.
DATA itab TYPE REF TO data.
r_matnr_ss[] = s_matnr[].
SELECT * FROM zmmt_prod_cc INTO TABLE @DATA(it_prdcc) WHERE matnr IN @s_matnr AND werks IN @s_plant.
SELECT * FROM zmmt_oper_idend INTO TABLE it_opid.
SELECT * FROM zmmt_oper_cost INTO TABLE @DATA(it_glcc) FOR ALL ENTRIES IN @it_prdcc WHERE prodcc = @it_p
rdcc-kostl.
SELECT * FROM zmmt_oper_cost1 INTO TABLE @DATA(it_gl)." where PRODCC = @i_tab-KOSTL.
* SELECT * FROM zmmt_mat_cost INTO TABLE @DATA(it_mat) WHERE gjahr = @p_spmon+0(4).
SELECT * FROM zmmt_mat_cost INTO TABLE @DATA(it_mat) WHERE gjahr IN @s_gjahr.
"added by krj
LOOP AT s_spmon.
IF s_spmon-high IS NOT INITIAL.
s_gjper-sign = 'I'.
s_gjper-option = 'BT'.
CONCATENATE s_gjahr-low s_spmon-low INTO s_gjper-low.
CONCATENATE s_gjahr-low s_spmon-high INTO s_gjper-high.
APPEND s_gjper.
ELSE.
s_gjper-sign = 'I'.
s_gjper-option = 'EQ'.
CONCATENATE s_gjahr-low s_spmon-low INTO s_gjper-low.
APPEND s_gjper.
ENDIF.
ENDLOOP.
"end by krj
* SELECT rbukrs,
* gjahr,
* rcntr,
* SUM( hsl ) AS hsl
* FROM acdoca INTO TABLE @DATA(i_acdoca2) " FOR ALL ENTRIES IN @iT_PRDCC
* WHERE rldnr = '0L'
* AND rbukrs IN @s_bukrs
* AND rcntr = @ls_prdcc-kostl
* AND poper = @p_spmon+4(3)
* AND gjahr = @p_spmon+0(4)
** AND drcrk = 'S'
* GROUP BY rbukrs, gjahr, rcntr.
* IF sy-subrc = 0.
*
* READ TABLE i_acdoca2 ASSIGNING FIELD-SYMBOL(<fs_1>) INDEX 1.
* IF sy-subrc EQ 0.
* tot_ix = <fs_1>-hsl.
2
* ENDIF.
* ENDIF.
CLEAR ls_glbal.
UNASSIGN <fs5>.
AT END OF id.
3
ls_glbal1-hsl = lv_sum.
ls_glbal1-hsl_fc = lv_sum_fc.
ls_glbal1-hsl_vc = lv_sum_vc.
APPEND ls_glbal1 TO i_glbal.
CLEAR: ls_glbal1, lv_sum, lv_sum_fc, lv_sum_vc.
ENDAT.
CLEAR: ls_glbal.
ENDLOOP.
ENDIF.
CLEAR lv_do.
DO num TIMES.
lv_do = lv_do + 1.
IF lv_do = 1.
gjper1 = s_gjper-low.
ELSE.
gjper1 = gjper1 + 1.
ENDIF.
5
LOOP AT it_finaltab INTO DATA(wa) WHERE gjper = gjper1.
s_matnr-low = wa-material.
s_matnr-sign = 'I'.
s_matnr-option = 'EQ'.
APPEND s_matnr.
lt_seltab = VALUE #( BASE lt_seltab
( selname = 'R_MATNR'
kind = 'S'
sign = 'I'
option = 'EQ'
low = s_matnr-low
) ).
CLEAR: wa.
ENDLOOP.
6
*ENDLOOP.
DATA :l_sum TYPE dmbtr.
DATA(it_finaltab_261) = it_finaltab[].
DELETE it_finaltab_261 WHERE movment_type EQ '531'.
DELETE it_finaltab_261 WHERE movment_type EQ '532'.
DELETE it_finaltab_261 WHERE movment_type EQ space.
DELETE it_finaltab_261 WHERE material+0(1) EQ '*'.
REFRESH it_finaltab_261.
CLEAR: tot_b.
PERFORM add_record USING 'HANDLING LOSS' '' '' ''.
PERFORM add_record USING '' 'HL_COAL' '' 'X'.
PERFORM add_record USING '' 'HL_IRNL' '' 'X'.
PERFORM add_record USING '' 'HL_IRNF' '' 'X'.
PERFORM add_record USING '' 'HL_LIME' '' 'X'.
PERFORM add_record USING '' 'HL_DOLO' '' 'X'.
PERFORM add_record USING 'TOT. HANDLING LOSS' '' 'TOT_B' 'P'.
REFRESH it_finaltab_531.
*BREAK-POINT.
i_finaltab-matnr = '**CREDIT TOTAL*'.
i_finaltab-qty = qty2.
i_finaltab-cvar = sqty1.
i_finaltab-var = sqty2.
i_finaltab-cfix = sqty3.
i_finaltab-fix = sqty4.
MOVE 'C510' TO i_finaltab-linecolor.
APPEND i_finaltab.
9
DATA: lv_spl1 TYPE char10,
lv_spl2 TYPE char10.
READ TABLE output INTO DATA(w_out) WITH KEY matnr = <fs2>-matnr gjper = <fs2>-gjper.
IF sy-subrc EQ 0 AND lv_htype1 NE 'NUMC'.
** LOOP AT it_finaltab_1 INTO DATA(w_final)." WHERE gjper = <fs2>-gjper.
*** READ TABLE output INTO DATA(w_out) WITH KEY matnr = <fs2>-matnr gjper = <fs2>-gjper.
** CLEAR: w_out.
** lv_qty_final = lv_qty_final + <fs2>-qty.
** lv_tamt_dmbtr = lv_tamt_dmbtr + <fs2>-dmbtr.
READ TABLE output INTO w_out WITH KEY matnr = <fs2>-matnr gjper = <fs2>-gjper.
IF sy-subrc = 0.
DATA : lv_htype LIKE dd01v-datatype.
CLEAR lv_htype.
CALL FUNCTION 'NUMERIC_CHECK'
EXPORTING
string_in = <fs2>-matnr
IMPORTING
htype = lv_htype.
IF w_out-vprsv EQ 'V' AND lv_htype NE 'NUMC'.
w_out-pvprs = w_out-pvprs / w_out-peinh.
<fs2>-tamt = w_out-pvprs * <fs2>-qty.
* lv_tamt = lv_tamt + ( w_out-pvprs * <fs2>-qty ).
lv_tamt_var = lv_tamt_var + ( w_out-pvprs * <fs2>-qty ).
lv_amt = <fs2>-amt = w_out-pvprs.
ELSEIF w_out-vprsv EQ 'S' AND lv_htype NE 'NUMC'.
w_out-stprs = w_out-stprs / w_out-peinh.
<fs2>-tamt = w_out-stprs * <fs2>-qty.
* lv_tamt = lv_tamt + ( w_out-stprs * <fs2>-qty ).
lv_tamt_var = lv_tamt_var + ( w_out-stprs * <fs2>-qty ).
lv_amt = <fs2>-amt = w_out-stprs.
** <fs2>-amt = w_out-stprs.
ELSEIF lv_htype EQ 'NUMC'.
<fs2>-amt = <fs2>-tamt / <fs2>-qty.
lv_tamt = lv_tamt + lv_tamt_dmbtr.
lv_tamt_var = lv_tamt_var + lv_tamt_dmbtr.
ENDIF.
* READ TABLE it_mat INTO wa_mat WITH KEY gjahr = p_spmon+0(4) poper = p_spmon+4(3) matnr = <fs2
>-matnr werks = s_plant-low.
READ TABLE it_mat INTO wa_mat WITH KEY gjahr = <fs2>-gjper+0(4)
* poper = <fs2>-gjper+4(3) matnr = <fs2>-matnr werks = s_plant-low.
poper = <fs2>-gjper+4(3) matnr = <fs2>-matnr werks = s_plant-low.
IF sy-subrc EQ 0.
<fs2>-var = ( <fs2>-tamt * wa_mat-vc ) / 100.
* <fs2>-var = lv_var + ( lv_tamt_var * wa_mat-vc ) / 100.
13
<fs2>-fix = ( <fs2>-tamt * wa_mat-fc ) / 100.
* <fs2>-fix = lv_fix + ( lv_tamt_var * wa_mat-fc ) / 100.
* <fs2>-cvar = <fs2>-var / qty.
* <fs2>-cfix = <fs2>-fix / qty.
* CLEAR WA_MAT.
ELSE.
<fs2>-var = <fs2>-tamt.
* lv_var = lv_var + lv_tamt_var.
* <fs2>-cvar = <fs2>-tamt / qty.
ENDIF.
ENDIF.
CLEAR: w_out, lv_qty_final,lv_tamt_var.
** ENDLOOP. "Extra internal loop commented
* <fs2>-tamt = lv_tamt.
* <fs2>-amt = lv_tamt / <fs2>-qty.
* <fs2>-var = lv_var.
* <fs2>-fix = lv_fix.
* <fs2>-cvar = <fs2>-var / qty.
* <fs2>-cfix = <fs2>-fix / qty.
* CLEAR: lv_tamt,lv_var,lv_fix,lv_tamt_dmbtr.
IF ( <fs2>-mvmt = '261' OR <fs2>-mvmt = '262' ).
lv_totamt261 = lv_totamt261 + <fs2>-tamt.
qty_4 = qty_4 + <fs2>-var.
qty_5 = qty_5 + <fs2>-fix.
qty4 = qty4 + <fs2>-cvar.
qty5 = qty5 + <fs2>-cfix.
ELSEIF ( <fs2>-mvmt = '531' OR <fs2>-mvmt = '532' ).
lv_totamt531 = lv_totamt531 + <fs2>-tamt.
sqty4 = sqty4 + <fs2>-fix.
sqty2 = sqty2 + <fs2>-var.
sqty3 = sqty3 + <fs2>-cfix.
sqty1 = sqty1 + <fs2>-cvar.
ENDIF.
* IF <fs2>-tamt NE '0.00' AND <fs2>-qty NE '0.00'.
* <fs2>-amt = <fs2>-tamt / <fs2>-qty.
* ENDIF.
IF <fs2>-tamt NE '0.00' AND qty NE '0.00'.
* <fs2>-ctamt = <fs2>-tamt / qty1.
<fs2>-ctamt = <fs2>-tamt / qty.
ENDIF.
IF qty NE '0.00' AND <fs2>-qty NE '0.00'.
* <fs2>-ucurr = <fs2>-qty / qty1.
<fs2>-ucurr = <fs2>-qty / qty.
ENDIF.
ELSEIF sy-subrc EQ 0 AND lv_htype1 EQ 'NUMC'. " Raw-Material Cost
IF <fs2>-tamt NE '0.00' AND qty NE '0.00'.
<fs2>-ctamt = <fs2>-tamt / qty.
ENDIF.
IF qty NE '0.00' AND <fs2>-qty NE '0.00'.
<fs2>-ucurr = <fs2>-qty / qty.
ENDIF.
IF ( <fs2>-mvmt = '531' OR <fs2>-mvmt = '532' ).
lv_totamt531 = lv_totamt531 + <fs2>-tamt.
14
ELSEIF ( <fs2>-mvmt = '261' OR <fs2>-mvmt = '262' ).
lv_totamt261 = lv_totamt261 + <fs2>-tamt.
ENDIF.
ENDIF.
ENDLOOP.
********* Cummulation
*DELETE ADJACENT DUPLICATES FROM I_FINALTAB COMPARING MATNR MVMT.
DATA: lt_seen TYPE HASHED TABLE OF ty_key WITH UNIQUE KEY matnr bwart,
wa_key TYPE ty_key,
flag_seen.
CLEAR flag_seen.
LOOP AT i_finaltab INTO DATA(wa_data1).
wa_key-matnr = wa_data1-matnr.
wa_key-bwart = wa_data1-mvmt.
IF wa_key-bwart EQ '261' OR wa_key-bwart EQ '262'.
wa_key-bwart = '261'.
ELSEIF wa_key-bwart EQ '531' OR wa_key-bwart EQ '532'.
wa_key-bwart = '531'.
ENDIF.
ENDLOOP.
i_finaltab[] = i_finaltab_tmp[].
REFRESH i_finaltab_tmp.
DATA(lv_matval) = i_finaltab-tamt.
DATA(lv_qty) = i_finaltab-qty.
DATA(lv_fix_1) = i_finaltab-fix.
15
DATA(lv_var_1) = i_finaltab-var.
DATA(lv_ctamt_sum) = i_finaltab-ctamt.
CLEAR: lv_matval, lv_qty, lv_fix_1, lv_var_1,lv_ctamt_sum.
LOOP AT i_finaltab1 INTO DATA(wa_fintab) WHERE ( matnr+0(1) NE '*' AND mvmt IS NOT INITIAL ). "( mvmt is NOT I
NITIAL AND MVMT CN '***' ).
AT NEW matnr.
CLEAR: lv_matval, lv_qty, lv_fix_1, lv_var_1.
ENDAT.
AT END OF matnr.
DATA(lv_flag) = 'X'.
ENDAT.
IF lv_flag = 'X'.
READ TABLE i_finaltab ASSIGNING FIELD-SYMBOL(<fs_3>) WITH KEY matnr = wa_fintab-matnr mvmt = wa_fintab-
mvmt.
IF sy-subrc NE 0.
READ TABLE i_finaltab ASSIGNING <fs_3> WITH KEY matnr = wa_fintab-matnr mvmt = ( wa_fintab-mvmt + 1 ).
IF sy-subrc NE 0.
READ TABLE i_finaltab ASSIGNING <fs_3> WITH KEY matnr = wa_fintab-matnr mvmt = ( wa_fintab-mvmt - 1 ).
IF sy-subrc NE 0.
ELSE.
DATA(lv_flag_3) = 'X'.
ENDIF.
ELSE.
lv_flag_3 = 'X'.
ENDIF.
ELSE.
lv_flag_3 = 'X'.
ENDIF.
IF sy-subrc EQ 0 AND lv_flag_3 = 'X'.
CLEAR lv_flag_3.
<fs_3>-tamt = lv_matval.
<fs_3>-qty = lv_qty.
<fs_3>-var = lv_fix_1.
<fs_3>-fix = lv_var_1.
<fs_3>-amt = lv_matval / lv_qty.
<fs_3>-cvar = lv_fix_1 / qty.
<fs_3>-cfix = lv_var_1 / qty.
<fs_3>-ctamt = lv_matval / qty.
* LV_CTAMT_SUM = ( LV_CTAMT_SUM + <FS_3>-CTAMT ).
<fs_3>-ucurr = lv_qty / qty.
<fs_3>-mvmt = wa_fintab-mvmt.
ENDLOOP.
***********************EndSet
*endloop.
UNASSIGN <fs2>.
*BREAK-POINT.
READ TABLE i_finaltab ASSIGNING <fs2> WITH KEY matnr = '*TOTAL MATERIAL*'.
IF sy-subrc EQ 0.
CLEAR: <fs2>-qty, <fs2>-uom, <fs2>-cvar, <fs2>-cfix.
<fs2>-tamt = lv_totamt261.
<fs2>-ctamt = <fs2>-tamt / qty.
* <fs2>-ctamt = LV_CTAMT_SUM.
tot_4 = <fs2>-cvar = qty4.
tot_5 = <fs2>-cfix = qty5.
tot_6 = <fs2>-var = qty_4.
tot_7 = <fs2>-fix = qty_5.
ENDIF.
* CLEAR: qty4, qty5, qty_4, qty_5.
READ TABLE i_finaltab ASSIGNING <fs2> WITH KEY matnr = '**CREDIT TOTAL*'.
IF sy-subrc EQ 0.
CLEAR: <fs2>-qty, <fs2>-uom, <fs2>-cvar, <fs2>-cfix.
<fs2>-tamt = lv_totamt531.
<fs2>-ctamt = <fs2>-tamt / qty.
<fs2>-cvar = sqty1.
<fs2>-cfix = sqty3.
17
<fs2>-var = sqty2.
<fs2>-fix = sqty4.
ENDIF.
* CLEAR: qty6, qty7, qty_6, qty_7.
***MATERIAL COST DERIVATIONS.
CLEAR: tot_a, tot_c, tot_d, tot_e.
tot_a = lv_totamt261.
tot_c = tot_a + tot_b.
tot_d = lv_totamt531.
tot_e = tot_c + tot_d.
tot_16 = i_finaltab-fix = tot_7 + tot_11 + sqty4.
tot_17 = i_finaltab-var = tot_10 + tot_6 + sqty2.
tot_18 = i_finaltab-cfix = tot_5 + tot_9 + sqty3.
tot_19 = i_finaltab-cvar = tot_4 + tot_8 + sqty1.
READ TABLE i_finaltab ASSIGNING <fs2> WITH KEY matnr = '**GROSS MATERIAL COST*'.
IF sy-subrc EQ 0.
CLEAR: <fs2>-qty, <fs2>-uom.
<fs2>-tamt = tot_a + tot_b. "lv_totamt531.
<fs2>-ctamt = <fs2>-tamt / qty.
tot_12 = <fs2>-cvar = tot_4 + tot_8.
tot_13 = <fs2>-cfix = tot_5 + tot_9.
tot_14 = <fs2>-var = tot_6 + tot_10.
tot_15 = <fs2>-fix = tot_7 + tot_11.
ENDIF.
UNASSIGN <fs2>.
*BREAK-POINT.
PERFORM add_record USING '' '' 'TOT_E' 'P'.
* perform add_exp '
* BREAK-POINT.
PERFORM add_record USING 'NET MATERIAL COST' '' 'TOT_E' 'P'.
PERFORM add_record USING 'TOT. COST INCL INTEREST' '' 'TOT_XII' 'P'.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form ADD_RECORD
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 Header
*& <-- p2 Identifier
*&---------------------------------------------------------------------*
FORM add_record USING p_hdr TYPE char25
p_id TYPE char20
total TYPE char20
x TYPE c.
STATICS: tot_i TYPE wrbtr,
tot_ii TYPE wrbtr,
tot_iii TYPE wrbtr,
tot_iv TYPE wrbtr,
tot_v TYPE wrbtr,
tot_vi TYPE wrbtr,
tot_vii TYPE wrbtr,
tot_viii TYPE wrbtr,
* TOT_IX TYPE wrbtr, GLOBAL DECLR
tot_x TYPE wrbtr,
tot_x1 TYPE wrbtr,
tot_x2 TYPE wrbtr,
tot_x3 TYPE wrbtr,
tot_x4 TYPE wrbtr,
tot_xi TYPE wrbtr,
tot_xi1 TYPE wrbtr,
tot_xi2 TYPE wrbtr,
19
tot_xi3 TYPE wrbtr,
tot_xi4 TYPE wrbtr,
tot_xii TYPE wrbtr.
CLEAR i_finaltab.
IF p_hdr IS NOT INITIAL.
CONCATENATE '**' p_hdr '*' INTO i_finaltab-matnr.
i_finaltab-qty = ''.
MOVE 'C510' TO i_finaltab-linecolor.
IF x EQ 'P'. "IS NOT INITIAL.
IF total_hl IS NOT INITIAL.
i_finaltab-tamt = total_hl.
ENDIF.
* BREAK-POINT.
CASE total.
WHEN 'TOT_B'.tot_b = total_hl.
WHEN 'TOT_C'.
tot_c = tot_b.
tot_12 = i_finaltab-fix = tot_4 + tot_8.
tot_13 = i_finaltab-var = tot_5 + tot_9.
tot_14 = i_finaltab-cfix = tot_6 + tot_10.
tot_15 = i_finaltab-cvar = tot_7 + tot_11.
WHEN 'TOT_E'.
i_finaltab-tamt = tot_e.
i_finaltab-fix = tot_16.
i_finaltab-var = tot_17.
i_finaltab-cfix = tot_18.
i_finaltab-cvar = tot_19.
WHEN 'TOT_III'.
tot_iii = total_hl.
tot_20 = i_finaltab-fix = qty_9.
tot_21 = i_finaltab-var = qty_8 .
tot_22 = i_finaltab-cfix = qty9.
tot_23 = i_finaltab-cvar = qty8 .
WHEN 'TOT_IV'.
tot_iv = total_hl.
tot_24 = i_finaltab-fix = qty_9.
tot_25 = i_finaltab-var = qty_8 .
tot_26 = i_finaltab-cfix = qty9.
tot_27 = i_finaltab-cvar = qty8 .
WHEN 'TOT_V'.
tot_v = total_hl.
tot_28 = i_finaltab-fix = qty_9.
tot_29 = i_finaltab-var = qty_8 .
tot_30 = i_finaltab-cfix = qty9.
tot_31 = i_finaltab-cvar = qty8 .
WHEN 'TOT_VI'.
i_finaltab-tamt = tot_vi = tot_iii + tot_iv + tot_v.
sqty5 = i_finaltab-fix = tot_20 + tot_24 + tot_28.
sqty6 = i_finaltab-var = tot_21 + tot_25 + tot_29.
sqty7 = i_finaltab-cfix = tot_22 + tot_26 + tot_30.
sqty8 = i_finaltab-cvar = tot_23 + tot_27 + tot_31.
WHEN 'TOT_VII'.
i_finaltab-tamt = tot_vii = tot_e + tot_vi.
20
tot_32 = i_finaltab-fix = tot_16 + sqty5.
tot_33 = i_finaltab-var = tot_17 + sqty6.
tot_34 = i_finaltab-cfix = tot_18 + sqty7.
tot_35 = i_finaltab-cvar = tot_19 + sqty8.
WHEN 'TOT_VIII'.
tot_viii = total_hl.
tot_36 = i_finaltab-fix = qty_9.
tot_37 = i_finaltab-var = qty_8 .
tot_38 = i_finaltab-cfix = qty9 .
tot_39 = i_finaltab-cvar = qty8 .
WHEN 'TOT_IX'.
READ TABLE i_glbal INTO DATA(ls_glbal2) WITH KEY id = 'CST_ABSR'.
* i_finaltab-tamt = tot_b + tot_i + tot_ii + tot_iii + tot_iv + tot_v + tot_viii.
i_finaltab-tamt = tot_vii + tot_viii - tot_e. "Less Credit Material Cost.
* i_finaltab-tamt = TOT_VI + TOT_VIII.
** i_finaltab-fix = tot_24 + tot_28 + tot_32.
** i_finaltab-var = tot_25 + tot_29 + tot_33.
** i_finaltab-cfix = tot_26 + tot_30 + tot_34.
** i_finaltab-cvar = tot_27 + tot_31 + tot_35.
i_finaltab-fix = tot_32 + qty_9 - tot_16.
i_finaltab-var = tot_33 + qty_8 - tot_17.
i_finaltab-cfix = tot_34 + qty9 - tot_18.
i_finaltab-cvar = tot_35 + qty8 - tot_19.
** i_finaltab-fix = ( i_finaltab-fix + ls_glbal2-hsl ) * -1.
** i_finaltab-var = ( i_finaltab-var + ls_glbal2-hsl ) * -1.
** i_finaltab-cfix = ( i_finaltab-cfix + ls_glbal2-hsl ) * -1.
** i_finaltab-cvar = ( i_finaltab-cvar + ls_glbal2-hsl ) * -1.
i_finaltab-tamt = ( i_finaltab-tamt + ls_glbal2-hsl ) * -1.
i_finaltab-fix = ( i_finaltab-fix + ls_glbal2-hsl_fc ) * -1.
i_finaltab-var = ( i_finaltab-var + ls_glbal2-hsl_vc ) * -1.
i_finaltab-cfix = ( i_finaltab-fix / qty ).
i_finaltab-cvar = ( i_finaltab-var / qty ).
tot_ix = i_finaltab-tamt.
tot_ix1 = i_finaltab-fix.
tot_ix2 = i_finaltab-var.
tot_ix3 = i_finaltab-cfix.
tot_ix4 = i_finaltab-cvar.
WHEN 'TOT_X'.
* BREAK-POINT.
i_finaltab-tamt = tot_x = tot_vii + tot_viii + tot_ix.
tot_x1 = i_finaltab-fix = tot_32 + tot_36 + tot_ix1.
tot_x2 = i_finaltab-var = tot_33 + tot_37 + tot_ix2.
tot_x3 = i_finaltab-cfix = tot_34 + tot_38 + tot_ix3.
tot_x4 = i_finaltab-cvar = tot_35 + tot_39 + tot_ix4.
WHEN 'TOT_XI'.
tot_xi = total_hl.
tot_xi1 = i_finaltab-cvar = qty8 .
tot_xi2 = i_finaltab-cfix = qty9.
tot_xi3 = i_finaltab-var = qty_8 .
tot_xi4 = i_finaltab-fix = qty_9.
WHEN 'TOT_XII'.
i_finaltab-tamt = tot_xii = tot_x + tot_xi.
** i_finaltab-cvar = tot_x1 + tot_xi1.
21
** i_finaltab-cfix = tot_x2 + tot_xi2.
** i_finaltab-var = tot_x3 + tot_xi3.
** i_finaltab-fix = tot_x4 + tot_xi4.
i_finaltab-fix = tot_x1 + tot_xi4.
i_finaltab-var = tot_x2 + tot_xi3.
i_finaltab-cvar = tot_x4 + tot_xi1.
i_finaltab-cfix = tot_x3 + tot_xi2.
ENDIF.
i_finaltab-ctamt = i_finaltab-tamt / qty.
IF p_hdr = 'NET MATERIAL COST' OR p_hdr = 'TOT. OPERATING COST' OR total = 'TOT_III' " p_hdr = 'PROD COST BE
FORE INT&DEP' OR
OR total = 'TOT_IV' OR total = 'TOT_V' OR total = 'TOT_VI' OR total = 'TOT_VII' OR total = 'TOT_VIII' OR total = 'TO
T_IX'
OR total = 'TOT_X' OR total = 'TOT_XI' OR total = 'TOT_XII'..
ELSE.
i_finaltab-cvar = qty8 .
i_finaltab-cfix = qty9.
i_finaltab-var = qty_8 .
i_finaltab-fix = qty_9.
tot_8 = i_finaltab-cvar + tot_8 .
tot_9 = i_finaltab-cfix + tot_9.
tot_10 = i_finaltab-var + tot_10 .
tot_11 = i_finaltab-fix + tot_11.
ENDIF.
APPEND i_finaltab.
CLEAR: total_hl,qty8, qty9, qty_8, qty_9.
ENDIF.
CLEAR i_finaltab.
IF p_id IS NOT INITIAL.
READ TABLE i_glbal INTO ls_glbal2 WITH KEY id = p_id.
IF sy-subrc EQ 0.
READ TABLE it_opid INTO DATA(ls_opid) WITH KEY id = p_id.
IF sy-subrc EQ 0.
i_finaltab-matnr = ls_opid-name.
ENDIF.
i_finaltab-tamt = ls_glbal2-hsl.
IF x EQ 'X'.
total_hl = total_hl + ls_glbal2-hsl.
ENDIF.
i_finaltab-fix = ls_glbal2-hsl_fc.
i_finaltab-var = ls_glbal2-hsl_vc.
Below is a clean and practical Man-Day estimate for the ZFI_COST_SHEET report based on the code you shared.
Your code is large, multi-module, multi-loop, multi-table, with ACDOCA summarization, MATERIAL movements
(MATDOC), period logic, and custom Z-tables.
It also integrates with a custom class (zcl_cost_sheet_s99) for cost calculation.
Reasons:
23
Activity Effort (Man-days)
8. Documentation + KT 0.5
o ZFIT_COST_SHEET_TOP_CP
o ZFIT_COST_SHEET_SEL_CP
o ZFIT_COST_SHEET_DETAIL_CP
Includes:
o qty
24
o tamt
o var/fix
o cvar/cfix
ALV design
Covers:
Fixing SELECT…ENDSELECT
This code has heavy financial logic; ensuring accuracy takes effort.
Test Scenarios:
Multiple materials
POPER/GJPER rollover
UOM conversions
25
Reduce loops
8. Documentation + KT – 0.5 MD
Test cases
KT to support team
✅ Total = 14 Man-Days
26
27