*&---------------------------------------------------------------------* *& Report ZCOR002 *&---------------------------------------------------------------------* *& *&---------------------------------------------------------------------* REPORT zcor002. INCLUDE zcor002_top. INCLUDE zcor002_sel. INCLUDE zcor002_frm. START-OF-SELECTION . PERFORM frm_get_data. "取数 PERFORM frm_layout_build." 设置表格样式 PERFORM frm_field_build. " 建立表头数据 PERFORM frm_data_out. "输出ALV
*&---------------------------------------------------------------------* *& 包含 ZCOR002_TOP *&---------------------------------------------------------------------* TABLES: mkpf,mseg,ckmlprkeph . DATA: BEGIN OF gs_alv, sel TYPE c, num TYPE i, gjahr LIKE ckmlprkeph-bdatj, poper LIKE ckmlprkeph-poper, werks LIKE marc-werks, matnr LIKE marc-matnr, maktx LIKE makt-maktx, mmsta LIKE marc-mmsta, sum1 LIKE ckmlkeph-kst001, "初始库存 - 总实际值 menge1 LIKE mseg-menge, kst001_1 LIKE ckmlkeph-kst001, kst002_1 LIKE ckmlkeph-kst002, kst004_1 LIKE ckmlkeph-kst004, kst006_1 LIKE ckmlkeph-kst006, kst008_1 LIKE ckmlkeph-kst008, sum2 LIKE ckmlkeph-kst001, "本期收据 - 总实际值 menge2 LIKE mseg-menge, kst001_2 LIKE ckmlkeph-kst001, kst002_2 LIKE ckmlkeph-kst002, kst004_2 LIKE ckmlkeph-kst004, kst006_2 LIKE ckmlkeph-kst006, kst008_2 LIKE ckmlkeph-kst008, sum3 LIKE ckmlkeph-kst001, "本期消耗 - 总实际值 menge3 LIKE mseg-menge, kst001_3 LIKE ckmlkeph-kst001, kst002_3 LIKE ckmlkeph-kst002, kst004_3 LIKE ckmlkeph-kst004, kst006_3 LIKE ckmlkeph-kst006, kst008_3 LIKE ckmlkeph-kst008, sum4 LIKE ckmlkeph-kst001, "期末库存 - 总实际值 menge4 LIKE mseg-menge, kst001_4 LIKE ckmlkeph-kst001, kst002_4 LIKE ckmlkeph-kst002, kst004_4 LIKE ckmlkeph-kst004, kst006_4 LIKE ckmlkeph-kst006, kst008_4 LIKE ckmlkeph-kst008, "未分摊 sum_not LIKE ckmlkeph-kst001, kst001_not LIKE ckmlkeph-kst001, kst002_not LIKE ckmlkeph-kst002, kst004_not LIKE ckmlkeph-kst004, kst006_not LIKE ckmlkeph-kst006, kst008_not LIKE ckmlkeph-kst008, END OF gs_alv . DATA gt_alv LIKE TABLE OF gs_alv . DATA: gs_fieldcat TYPE slis_fieldcat_alv, gt_fieldcat TYPE slis_t_fieldcat_alv, gs_layout TYPE slis_layout_alv.
*&---------------------------------------------------------------------* *& 包含 ZCOR002_SEL *&---------------------------------------------------------------------* SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001. PARAMETERS p_gjahr LIKE ckmlprkeph-bdatj OBLIGATORY . PARAMETERS p_poper LIKE ckmlprkeph-poper OBLIGATORY . SELECT-OPTIONS s_werks FOR mseg-werks . SELECT-OPTIONS s_matnr FOR mseg-matnr . SELECTION-SCREEN END OF BLOCK b1 .
*&---------------------------------------------------------------------* *& 包含 ZCOR002_FRM *&---------------------------------------------------------------------* *&---------------------------------------------------------------------* *& Form FRM_GET_DATA *&---------------------------------------------------------------------* * 取数 *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM frm_get_data . DATA: lt_makt TYPE TABLE OF makt, ls_makt TYPE makt. DATA: BEGIN OF ls_marc, matnr LIKE marc-matnr, werks LIKE marc-werks, mmsta LIKE marc-mmsta, END OF ls_marc. DATA lt_marc LIKE TABLE OF ls_marc. DATA: BEGIN OF ls_mseg,"总数据 mblnr LIKE mseg-mblnr, mjahr LIKE mseg-mjahr, zeile LIKE mseg-zeile, werks LIKE mseg-werks, matnr LIKE mseg-matnr, budat_mkpf LIKE mseg-budat_mkpf, shkzg LIKE mseg-shkzg, menge LIKE mseg-menge, bwart LIKE mseg-bwart, END OF ls_mseg. DATA lt_mseg LIKE TABLE OF ls_mseg ."总数据 FIELD-SYMBOLS <ls_mseg> LIKE ls_mseg."总数据 TYPES: BEGIN OF ty_mseg,"初始库存、本期收据、本期消耗要用到的类型 werks TYPE mseg-werks, matnr TYPE mseg-matnr, menge TYPE mseg-menge, END OF ty_mseg. DATA: lt_mseg1 TYPE TABLE OF ty_mseg, "初始库存 - 数量 ls_mseg1 TYPE ty_mseg. "初始库存 - 数量 DATA: lt_mseg2 TYPE TABLE OF ty_mseg, "本期收据 - 数量 ls_mseg2 TYPE ty_mseg. "本期收据 - 数量 DATA: lt_mseg3 TYPE TABLE OF ty_mseg, "本期消耗 - 数量 ls_mseg3 TYPE ty_mseg. "本期消耗 - 数量 DATA: lt_mseg4 TYPE TABLE OF ty_mseg, "期末库存 - 数量 ls_mseg4 TYPE ty_mseg. "期末库存 - 数量 DATA: lt_mseg_del LIKE TABLE OF ls_mseg, "根据筛选出来的MSEG删除重复项后只保留WERKS MATNR ls_mseg_del LIKE ls_mseg. DATA: lt_zcot001 LIKE TABLE OF zcot001, ls_zcot001 LIKE zcot001. "原料 DATA: BEGIN OF ls_ckmlhd , * kalnr LIKE ckmlhd-kalnr, matnr LIKE ckmlhd-matnr, bwkey LIKE ckmlhd-bwkey. INCLUDE TYPE ckmlprkeph . DATA: END OF ls_ckmlhd . DATA: lt_ckmlhd LIKE TABLE OF ls_ckmlhd. "总数据 * ls_ckmlhd LIKE ckmlhd. "总数据 FIELD-SYMBOLS <ls_ckmlhd> LIKE LINE OF lt_ckmlhd ."总数据 DATA: lt_ckmlprkeph LIKE TABLE OF ckmlprkeph, "总数据 ls_ckmlprkeph LIKE ckmlprkeph. "总数据 DATA: lt_ckmlkeph LIKE TABLE OF ckmlkeph, "总数据 ls_ckmlkeph LIKE ckmlkeph. "总数据 TYPES: BEGIN OF ty_ckmlhd, kalnr TYPE ckmlhd-kalnr, werks TYPE mseg-werks, matnr TYPE mseg-matnr, kst001 TYPE ckmlkeph-kst001, kst002 TYPE ckmlkeph-kst002, kst004 TYPE ckmlkeph-kst004, kst006 TYPE ckmlkeph-kst006, kst008 TYPE ckmlkeph-kst008, END OF ty_ckmlhd. DATA: lt_ckmlhd1 TYPE HASHED TABLE OF ty_ckmlhd WITH UNIQUE KEY kalnr werks matnr, "初始库存 - 原料、包材、人工、机器、制造费用 ls_ckmlhd1 TYPE ty_ckmlhd. "初始库存 - 原料、包材、人工、机器、制造费用 FIELD-SYMBOLS <ls_ckmlhd1> TYPE ty_ckmlhd . DATA: lt_ckmlhd2 TYPE HASHED TABLE OF ty_ckmlhd WITH UNIQUE KEY kalnr werks matnr, "本期收据 - 原料、包材、人工、机器、制造费用 ls_ckmlhd2 TYPE ty_ckmlhd. "本期收据 - 原料、包材、人工、机器、制造费用 FIELD-SYMBOLS <ls_ckmlhd2> TYPE ty_ckmlhd . DATA: lt_ckmlhd3 TYPE HASHED TABLE OF ty_ckmlhd WITH UNIQUE KEY kalnr werks matnr, "本期消耗 - 原料、包材、人工、机器、制造费用 ls_ckmlhd3 TYPE ty_ckmlhd. "本期消耗 - 原料、包材、人工、机器、制造费用 FIELD-SYMBOLS <ls_ckmlhd3> TYPE ty_ckmlhd . DATA: lt_ckmlhd4 TYPE HASHED TABLE OF ty_ckmlhd WITH UNIQUE KEY kalnr werks matnr, "期末库存 - 原料、包材、人工、机器、制造费用 ls_ckmlhd4 TYPE ty_ckmlhd. "期末库存 - 原料、包材、人工、机器、制造费用 FIELD-SYMBOLS <ls_ckmlhd4> TYPE ty_ckmlhd . DATA l_num TYPE i VALUE IS INITIAL . SELECT * INTO TABLE lt_makt FROM makt WHERE matnr IN s_matnr AND spras = 1 . SORT lt_makt BY matnr . SELECT matnr werks mmsta INTO CORRESPONDING FIELDS OF TABLE lt_marc FROM marc WHERE matnr IN s_matnr AND werks IN s_werks. SORT lt_marc BY werks matnr . SELECT mblnr mjahr zeile werks matnr budat_mkpf shkzg menge bwart INTO CORRESPONDING FIELDS OF TABLE lt_mseg FROM mseg WHERE werks IN s_werks AND matnr IN s_matnr . SELECT * INTO TABLE lt_zcot001 FROM zcot001 . SELECT * hd~kalnr, hd~matnr, hd~bwkey, ph~* INTO CORRESPONDING FIELDS OF TABLE @lt_ckmlhd FROM ckmlhd AS hd INNER JOIN ckmlprkeph AS ph ON hd~kalnr = ph~kalnr WHERE hd~matnr IN @s_matnr AND hd~bwkey IN @s_werks AND ph~bdatj = @p_gjahr AND ph~poper = @p_poper AND ph~keart = 'H' AND ph~prtyp = 'S' AND ph~curtp = '10' AND ph~untper = '' AND ph~kkzst = '' AND ph~patnr = '' AND ph~dipa = '' . SORT lt_ckmlhd BY bwkey matnr . SELECT * INTO CORRESPONDING FIELDS OF TABLE lt_ckmlkeph FROM ckmlkeph FOR ALL ENTRIES IN lt_ckmlhd WHERE kalnr = lt_ckmlhd-kalnr AND bdatj = p_gjahr AND poper = p_poper AND keart = 'H' AND curtp = '10' AND untper = '' AND ptyp = '' AND bvalt = '' AND kkzst = '' AND patnr = '' AND dipa = '' . SORT lt_ckmlkeph BY kalnr categ . APPEND LINES OF lt_mseg TO lt_mseg_del . SORT lt_mseg_del BY werks matnr . DELETE ADJACENT DUPLICATES FROM lt_mseg_del COMPARING werks matnr . "初始库存-数量、本期收据-数量、本期消耗-数量 - 计算 LOOP AT lt_mseg ASSIGNING <ls_mseg>. IF <ls_mseg>-budat_mkpf+0(4) < p_gjahr OR <ls_mseg>-budat_mkpf+0(4) = p_gjahr AND "初始库存 - 数量 <ls_mseg>-budat_mkpf+4(2) < p_poper . MOVE-CORRESPONDING <ls_mseg> TO ls_mseg1 . IF <ls_mseg>-shkzg = 'S'. COLLECT ls_mseg1 INTO lt_mseg1 . ELSEIF <ls_mseg>-shkzg = 'H'. ls_mseg1-menge = ls_mseg1-menge * -1 . COLLECT ls_mseg1 INTO lt_mseg1 . ENDIF. CLEAR ls_mseg1 . ELSEIF <ls_mseg>-budat_mkpf+0(4) = p_gjahr AND <ls_mseg>-budat_mkpf+4(2) <= p_poper . MOVE-CORRESPONDING <ls_mseg> TO ls_mseg2 . "本期收据 - 数量 READ TABLE lt_zcot001 INTO ls_zcot001 WITH KEY bwart = <ls_mseg>-bwart shkzg = <ls_mseg>-shkzg mark = 'IN'. IF sy-subrc = 0 . IF <ls_mseg>-shkzg = 'S'. COLLECT ls_mseg2 INTO lt_mseg2 . ELSEIF <ls_mseg>-shkzg = 'H'. ls_mseg2-menge = ls_mseg2-menge * -1 . COLLECT ls_mseg2 INTO lt_mseg2 . ENDIF. CLEAR ls_mseg2 . ELSE. CLEAR ls_zcot001 . READ TABLE lt_zcot001 INTO ls_zcot001 WITH KEY bwart = <ls_mseg>-bwart shkzg = '' mark = 'IN'. IF sy-subrc = 0 . IF <ls_mseg>-shkzg = 'S'. COLLECT ls_mseg2 INTO lt_mseg2 . ELSEIF <ls_mseg>-shkzg = 'H'. ls_mseg2-menge = ls_mseg2-menge * -1 . COLLECT ls_mseg2 INTO lt_mseg2 . ENDIF. CLEAR ls_mseg2 . ENDIF. ENDIF. CLEAR ls_zcot001. "本期消耗 - 数量 MOVE-CORRESPONDING <ls_mseg> TO ls_mseg3 . READ TABLE lt_zcot001 INTO ls_zcot001 WITH KEY bwart = <ls_mseg>-bwart shkzg = <ls_mseg>-shkzg " mark = 'OUT'. IF sy-subrc = 0 . IF <ls_mseg>-shkzg = 'S'. COLLECT ls_mseg3 INTO lt_mseg3 . ELSEIF <ls_mseg>-shkzg = 'H'. ls_mseg3-menge = ls_mseg3-menge * -1 . COLLECT ls_mseg3 INTO lt_mseg3 . ENDIF. CLEAR ls_mseg3 . ELSE. CLEAR ls_zcot001 . READ TABLE lt_zcot001 INTO ls_zcot001 WITH KEY bwart = <ls_mseg>-bwart shkzg = '' mark = 'IN'. IF sy-subrc = 0 . IF <ls_mseg>-shkzg = 'S'. COLLECT ls_mseg3 INTO lt_mseg3 . ELSEIF <ls_mseg>-shkzg = 'H'. ls_mseg3-menge = ls_mseg3-menge * -1 . COLLECT ls_mseg3 INTO lt_mseg3 . ENDIF. CLEAR ls_mseg3 . ENDIF. ENDIF. CLEAR ls_zcot001. ENDIF. ENDLOOP. SORT lt_mseg1 BY werks matnr . SORT lt_mseg2 BY werks matnr . SORT lt_mseg3 BY werks matnr . "期末库存数量 - 计算 LOOP AT lt_mseg_del INTO ls_mseg_del . "期初库存数量 READ TABLE lt_mseg1 INTO ls_mseg1 WITH KEY werks = ls_mseg_del-werks matnr = ls_mseg_del-matnr BINARY SEARCH . IF sy-subrc = 0 . ls_mseg4-menge = ls_mseg1-menge . ELSE. ls_mseg4-menge = 0 . ENDIF. "本期收据数量 READ TABLE lt_mseg2 INTO ls_mseg2 WITH KEY werks = ls_mseg_del-werks matnr = ls_mseg_del-matnr BINARY SEARCH . IF sy-subrc = 0 . ls_mseg4-menge = ls_mseg2-menge . ELSE. ls_mseg4-menge = ls_mseg4-menge + 0 . ENDIF. "本期消耗数量 READ TABLE lt_mseg3 INTO ls_mseg3 WITH KEY werks = ls_mseg_del-werks matnr = ls_mseg_del-matnr BINARY SEARCH . IF sy-subrc = 0 . ls_mseg4-menge = ls_mseg3-menge . ELSE. ls_mseg4-menge = ls_mseg4-menge - 0 . ENDIF. APPEND ls_mseg4 TO lt_mseg4 . CLEAR: ls_mseg1,ls_mseg2,ls_mseg3,ls_mseg4 . CLEAR ls_mseg_del . ENDLOOP. "原料、包材、人工、机器、制造费用 取值 LOOP AT lt_ckmlhd ASSIGNING <ls_ckmlhd>. "原料 READ TABLE lt_ckmlkeph WITH KEY kalnr = <ls_ckmlhd>-kalnr BINARY SEARCH TRANSPORTING NO FIELDS . IF sy-subrc = 0 . LOOP AT lt_ckmlkeph INTO ls_ckmlkeph FROM sy-tabix . IF ls_ckmlkeph-kalnr = <ls_ckmlhd>-kalnr AND "初始库存 - 原料 ls_ckmlkeph-categ = 'AB'. ls_ckmlhd1-werks = <ls_ckmlhd>-bwkey . ls_ckmlhd1-matnr = <ls_ckmlhd>-matnr . MOVE-CORRESPONDING ls_ckmlkeph TO ls_ckmlhd1 . COLLECT ls_ckmlhd1 INTO lt_ckmlhd1 . CLEAR ls_ckmlhd1 . ELSEIF ( ls_ckmlkeph-kalnr = <ls_ckmlhd>-kalnr AND "本期收据 - 原料 ls_ckmlkeph-categ = 'PC' ) OR ( ls_ckmlkeph-kalnr = <ls_ckmlhd>-kalnr AND ls_ckmlkeph-categ = 'ZU' ) OR ( ls_ckmlkeph-kalnr = <ls_ckmlhd>-kalnr AND ls_ckmlkeph-categ = 'VP' ) . ls_ckmlhd2-werks = <ls_ckmlhd>-bwkey . ls_ckmlhd2-matnr = <ls_ckmlhd>-matnr . MOVE-CORRESPONDING ls_ckmlkeph TO ls_ckmlhd2 . COLLECT ls_ckmlhd2 INTO lt_ckmlhd2 . CLEAR ls_ckmlhd2 . ELSEIF ls_ckmlkeph-kalnr = <ls_ckmlhd>-kalnr AND "本期消耗 - 原料 ls_ckmlkeph-categ = 'VN' . ls_ckmlhd3-werks = <ls_ckmlhd>-bwkey . ls_ckmlhd3-matnr = <ls_ckmlhd>-matnr . MOVE-CORRESPONDING ls_ckmlkeph TO ls_ckmlhd3 . COLLECT ls_ckmlhd3 INTO lt_ckmlhd3 . CLEAR ls_ckmlhd3 . ELSEIF ls_ckmlkeph-kalnr = <ls_ckmlhd>-kalnr AND "本期消耗 - 原料 ls_ckmlkeph-categ = 'EB' . ls_ckmlhd4-werks = <ls_ckmlhd>-bwkey . ls_ckmlhd4-matnr = <ls_ckmlhd>-matnr . MOVE-CORRESPONDING ls_ckmlkeph TO ls_ckmlhd4 . COLLECT ls_ckmlhd4 INTO lt_ckmlhd4 . CLEAR ls_ckmlhd4 . ELSE. EXIT . ENDIF. ENDLOOP. ENDIF. ENDLOOP. "初始库存 - 原料、包材、人工、机器、制造费用 结果计算. LOOP AT lt_ckmlhd1 ASSIGNING <ls_ckmlhd1> . "初始库存数量 READ TABLE lt_mseg1 INTO ls_mseg1 WITH KEY werks = <ls_ckmlhd1>-werks matnr = <ls_ckmlhd1>-matnr BINARY SEARCH . IF sy-subrc = 0 . READ TABLE lt_ckmlhd INTO ls_ckmlhd WITH KEY bwkey = <ls_ckmlhd1>-werks matnr = <ls_ckmlhd1>-matnr BINARY SEARCH . IF sy-subrc = 0 . <ls_ckmlhd1>-kst001 = ls_ckmlhd-kst001 * ls_mseg1-menge . <ls_ckmlhd1>-kst002 = ls_ckmlhd-kst002 * ls_mseg1-menge . <ls_ckmlhd1>-kst004 = ls_ckmlhd-kst004 * ls_mseg1-menge . <ls_ckmlhd1>-kst006 = ls_ckmlhd-kst006 * ls_mseg1-menge . <ls_ckmlhd1>-kst008 = ls_ckmlhd-kst008 * ls_mseg1-menge . ENDIF. CLEAR ls_ckmlhd . ENDIF. CLEAR ls_mseg1 . ENDLOOP. "本期收据 - 原料、包材、人工、机器、制造费用 结果计算. LOOP AT lt_ckmlhd2 ASSIGNING <ls_ckmlhd2> . "初始库存数量 READ TABLE lt_mseg2 INTO ls_mseg2 WITH KEY werks = <ls_ckmlhd2>-werks matnr = <ls_ckmlhd2>-matnr BINARY SEARCH . IF sy-subrc = 0 . READ TABLE lt_ckmlhd INTO ls_ckmlhd WITH KEY bwkey = <ls_ckmlhd2>-werks matnr = <ls_ckmlhd2>-matnr BINARY SEARCH . IF sy-subrc = 0 . <ls_ckmlhd2>-kst001 = ls_ckmlhd-kst001 * ls_mseg2-menge . <ls_ckmlhd2>-kst002 = ls_ckmlhd-kst002 * ls_mseg2-menge . <ls_ckmlhd2>-kst004 = ls_ckmlhd-kst004 * ls_mseg2-menge . <ls_ckmlhd2>-kst006 = ls_ckmlhd-kst006 * ls_mseg2-menge . <ls_ckmlhd2>-kst008 = ls_ckmlhd-kst008 * ls_mseg2-menge . ENDIF. CLEAR ls_ckmlhd . ENDIF. CLEAR ls_mseg2 . ENDLOOP. "本期消耗 - 原料、包材、人工、机器、制造费用 结果计算. LOOP AT lt_ckmlhd3 ASSIGNING <ls_ckmlhd3> . "初始库存数量 READ TABLE lt_mseg3 INTO ls_mseg3 WITH KEY werks = <ls_ckmlhd3>-werks matnr = <ls_ckmlhd3>-matnr BINARY SEARCH . IF sy-subrc = 0 . READ TABLE lt_ckmlhd INTO ls_ckmlhd WITH KEY bwkey = <ls_ckmlhd3>-werks matnr = <ls_ckmlhd3>-matnr BINARY SEARCH . IF sy-subrc = 0 . <ls_ckmlhd3>-kst001 = ls_ckmlhd-kst001 * ls_mseg3-menge . <ls_ckmlhd3>-kst002 = ls_ckmlhd-kst002 * ls_mseg3-menge . <ls_ckmlhd3>-kst004 = ls_ckmlhd-kst004 * ls_mseg3-menge . <ls_ckmlhd3>-kst006 = ls_ckmlhd-kst006 * ls_mseg3-menge . <ls_ckmlhd3>-kst008 = ls_ckmlhd-kst008 * ls_mseg3-menge . ENDIF. CLEAR ls_ckmlhd . ENDIF. CLEAR ls_mseg3 . ENDLOOP. "期末库存 - 原料、包材、人工、机器、制造费用 结果计算. LOOP AT lt_ckmlhd4 ASSIGNING <ls_ckmlhd4> . "初始库存数量 READ TABLE lt_mseg4 INTO ls_mseg4 WITH KEY werks = <ls_ckmlhd4>-werks matnr = <ls_ckmlhd4>-matnr BINARY SEARCH . IF sy-subrc = 0 . READ TABLE lt_ckmlhd INTO ls_ckmlhd WITH KEY bwkey = <ls_ckmlhd4>-werks matnr = <ls_ckmlhd4>-matnr BINARY SEARCH . IF sy-subrc = 0 . <ls_ckmlhd4>-kst001 = ls_ckmlhd-kst001 * ls_mseg4-menge . <ls_ckmlhd4>-kst002 = ls_ckmlhd-kst002 * ls_mseg4-menge . <ls_ckmlhd4>-kst004 = ls_ckmlhd-kst004 * ls_mseg4-menge . <ls_ckmlhd4>-kst006 = ls_ckmlhd-kst006 * ls_mseg4-menge . <ls_ckmlhd4>-kst008 = ls_ckmlhd-kst008 * ls_mseg4-menge . ENDIF. CLEAR ls_ckmlhd . ENDIF. CLEAR ls_mseg4 . ENDLOOP. SORT lt_ckmlhd1 BY werks matnr . SORT lt_ckmlhd2 BY werks matnr . SORT lt_ckmlhd3 BY werks matnr . SORT lt_ckmlhd4 BY werks matnr . * 填充ALV LOOP AT lt_mseg_del INTO ls_mseg_del . l_num = l_num + 1 . gs_alv-num = l_num . gs_alv-gjahr = p_gjahr ."年度 gs_alv-poper = p_poper ."期间 gs_alv-werks = ls_mseg_del-werks ."工厂 gs_alv-matnr = ls_mseg_del-matnr ."物料编号 "物料描述 READ TABLE lt_makt INTO ls_makt WITH KEY matnr = ls_mseg_del-matnr BINARY SEARCH . IF sy-subrc = 0 . gs_alv-maktx = ls_makt-maktx . CLEAR ls_makt . ENDIF. "停用标识 READ TABLE lt_marc INTO ls_marc WITH KEY werks = ls_mseg_del-werks matnr = ls_mseg_del-matnr BINARY SEARCH . IF sy-subrc = 0 . gs_alv-mmsta = ls_marc-mmsta . CLEAR ls_marc. ENDIF. "初始库存数量 READ TABLE lt_mseg1 INTO ls_mseg1 WITH KEY werks = ls_mseg_del-werks matnr = ls_mseg_del-matnr BINARY SEARCH . IF sy-subrc = 0 . gs_alv-menge1 = ls_mseg1-menge . CLEAR ls_mseg1 . ENDIF. "初始库存:原料、包材、人工、机器、制造费用 READ TABLE lt_ckmlhd1 INTO ls_ckmlhd1 WITH KEY werks = ls_mseg_del-werks matnr = ls_mseg_del-matnr . IF sy-subrc = 0 . gs_alv-kst001_1 = ls_ckmlhd1-kst001 . gs_alv-kst002_1 = ls_ckmlhd1-kst002 . gs_alv-kst004_1 = ls_ckmlhd1-kst004 . gs_alv-kst006_1 = ls_ckmlhd1-kst006 . gs_alv-kst008_1 = ls_ckmlhd1-kst008 . CLEAR ls_ckmlhd1 . ENDIF. "初始库存:总实际值 gs_alv-sum1 = gs_alv-kst001_1 + gs_alv-kst002_1 + gs_alv-kst004_1 + gs_alv-kst006_1 + gs_alv-kst008_1 . "本期收据数量 READ TABLE lt_mseg2 INTO ls_mseg2 WITH KEY werks = ls_mseg_del-werks matnr = ls_mseg_del-matnr BINARY SEARCH . IF sy-subrc = 0 . gs_alv-menge2 = ls_mseg2-menge . CLEAR ls_mseg2 . ENDIF. "本期收据:原料、包材、人工、机器、制造费用 READ TABLE lt_ckmlhd2 INTO ls_ckmlhd2 WITH KEY werks = ls_mseg_del-werks matnr = ls_mseg_del-matnr . IF sy-subrc = 0 . gs_alv-kst001_2 = ls_ckmlhd2-kst001 . gs_alv-kst002_2 = ls_ckmlhd2-kst002 . gs_alv-kst004_2 = ls_ckmlhd2-kst004 . gs_alv-kst006_2 = ls_ckmlhd2-kst006 . gs_alv-kst008_2 = ls_ckmlhd2-kst008 . CLEAR ls_ckmlhd2 . ENDIF. "本期收据:总实际值 gs_alv-sum2 = gs_alv-kst001_2 + gs_alv-kst002_2 + gs_alv-kst004_2 + gs_alv-kst006_2 + gs_alv-kst008_2 . "本期消耗数量 READ TABLE lt_mseg3 INTO ls_mseg3 WITH KEY werks = ls_mseg_del-werks matnr = ls_mseg_del-matnr BINARY SEARCH . IF sy-subrc = 0 . gs_alv-menge3 = ls_mseg3-menge . CLEAR ls_mseg3 . ENDIF. "本期消耗:原料、包材、人工、机器、制造费用 READ TABLE lt_ckmlhd3 INTO ls_ckmlhd3 WITH KEY werks = ls_mseg_del-werks matnr = ls_mseg_del-matnr . IF sy-subrc = 0 . gs_alv-kst001_3 = ls_ckmlhd3-kst001 . gs_alv-kst002_3 = ls_ckmlhd3-kst002 . gs_alv-kst004_3 = ls_ckmlhd3-kst004 . gs_alv-kst006_3 = ls_ckmlhd3-kst006 . gs_alv-kst008_3 = ls_ckmlhd3-kst008 . CLEAR ls_ckmlhd3 . ENDIF. "本期消耗:总实际值 gs_alv-sum3 = gs_alv-kst001_3 + gs_alv-kst002_3 + gs_alv-kst004_3 + gs_alv-kst006_3 + gs_alv-kst008_3 . "期末库存数量 READ TABLE lt_mseg4 INTO ls_mseg4 WITH KEY werks = ls_mseg_del-werks matnr = ls_mseg_del-matnr BINARY SEARCH . IF sy-subrc = 0 . gs_alv-menge4 = ls_mseg4-menge . CLEAR ls_mseg4 . ENDIF. "期末库存:原料、包材、人工、机器、制造费用 READ TABLE lt_ckmlhd4 INTO ls_ckmlhd4 WITH KEY werks = ls_mseg_del-werks matnr = ls_mseg_del-matnr . IF sy-subrc = 0 . gs_alv-kst001_4 = ls_ckmlhd4-kst001 . gs_alv-kst002_4 = ls_ckmlhd4-kst002 . gs_alv-kst004_4 = ls_ckmlhd4-kst004 . gs_alv-kst006_4 = ls_ckmlhd4-kst006 . gs_alv-kst008_4 = ls_ckmlhd4-kst008 . CLEAR ls_ckmlhd4 . ENDIF. "期末库存:总实际值 gs_alv-sum4 = gs_alv-kst001_4 + gs_alv-kst002_4 + gs_alv-kst004_4 + gs_alv-kst006_4 + gs_alv-kst008_4 . "未分摊 gs_alv-sum_not = gs_alv-sum1 + gs_alv-sum2 - gs_alv-sum3 - gs_alv-sum4."总实际值 gs_alv-kst001_not = gs_alv-kst001_1 + gs_alv-kst001_2 - gs_alv-kst001_3 - gs_alv-kst001_4."原料 gs_alv-kst002_not = gs_alv-kst002_1 + gs_alv-kst002_2 - gs_alv-kst002_3 - gs_alv-kst002_4."包材 gs_alv-kst004_not = gs_alv-kst004_1 + gs_alv-kst004_2 - gs_alv-kst004_3 - gs_alv-kst004_4."人工 gs_alv-kst006_not = gs_alv-kst006_1 + gs_alv-kst006_2 - gs_alv-kst006_3 - gs_alv-kst006_4."机器 gs_alv-kst008_not = gs_alv-kst008_1 + gs_alv-kst008_2 - gs_alv-kst008_3 - gs_alv-kst008_4."制造费用 APPEND gs_alv TO gt_alv . CLEAR gs_alv . ENDLOOP. ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_LAYOUT_BUILD *&---------------------------------------------------------------------* * " 设置表格样式 *----------------------------------------------------------------------* FORM frm_layout_build . gs_layout-box_fieldname = 'SEL'. " 选择模式,在最左端有选择按钮 gs_layout-colwidth_optimize = 'X'. " 自动调整列宽 gs_layout-zebra = 'X'. " 表格斑马线 ENDFORM. "frm_layout_build *&---------------------------------------------------------------------* *& Form FRM_FIELD_BUILD *&---------------------------------------------------------------------* * " 建立表头数据 *----------------------------------------------------------------------* FORM frm_field_build . PERFORM field_set USING 'NUM' '序号' '序号' '15' '' '' . PERFORM field_set USING 'GJAHR' '年度' '年度' '15' '' '' . PERFORM field_set USING 'POPER' '期间' '期间' '15' '' '' . PERFORM field_set USING 'WERKS' '工厂' '工厂' '15' '' '' . PERFORM field_set USING 'MATNR' '物料编号' '物料编号' '255' '' '' . PERFORM field_set USING 'MAKTX' '物料描述' '物料描述' '255' '' '' . PERFORM field_set USING 'MMSTA' '停用标识' '停用标识' '255' '' '' . PERFORM field_set USING 'SUM1' '初始库存-总实际值' '初始库存-总实际值' '255' '' '' . PERFORM field_set USING 'MENGE1' '初始库存-数量' '初始库存-数量' '255' '' '' . PERFORM field_set USING 'KST001_1' '初始库存-原料' '初始库存-原料' '255' '' '' . PERFORM field_set USING 'KST002_1' '初始库存-包材' '初始库存-包材' '255' '' '' . PERFORM field_set USING 'KST004_1' '初始库存-人工' '初始库存-人工' '255' '' '' . PERFORM field_set USING 'KST006_1' '初始库存-机器' '初始库存-机器' '255' '' '' . PERFORM field_set USING 'KST008_1' '初始库存-制造费用' '初始库存-制造费用' '255' '' '' . PERFORM field_set USING 'SUM2' '本期收据-总实际值' '本期收据-总实际值' '255' '' '' . PERFORM field_set USING 'MENGE2' '本期收据-数量' '本期收据-数量' '255' '' '' . PERFORM field_set USING 'KST001_2' '本期收据-原料' '本期收据-原料' '255' '' '' . PERFORM field_set USING 'KST002_2' '本期收据-包材' '本期收据-包材' '255' '' '' . PERFORM field_set USING 'KST004_2' '本期收据-人工' '本期收据-人工' '255' '' '' . PERFORM field_set USING 'KST006_2' '本期收据-机器' '本期收据-机器' '255' '' '' . PERFORM field_set USING 'KST008_2' '本期收据-制造费用' '本期收据-制造费用' '255' '' '' . PERFORM field_set USING 'SUM3' '本期消耗-总实际值' '本期消耗-总实际值' '255' '' '' . PERFORM field_set USING 'MENGE3' '本期消耗-数量' '本期消耗-数量' '255' '' '' . PERFORM field_set USING 'KST001_3' '本期消耗-原料' '本期消耗-原料' '255' '' '' . PERFORM field_set USING 'KST002_3' '本期消耗-包材' '本期消耗-包材' '255' '' '' . PERFORM field_set USING 'KST004_3' '本期消耗-人工' '本期消耗-人工' '255' '' '' . PERFORM field_set USING 'KST006_3' '本期消耗-机器' '本期消耗-机器' '255' '' '' . PERFORM field_set USING 'KST008_3' '本期消耗-制造费用' '本期消耗-制造费用' '255' '' '' . PERFORM field_set USING 'SUM4' '期末库存-总实际值' '期末库存-总实际值' '255' '' '' . PERFORM field_set USING 'MENGE4' '期末库存-数量' '期末库存-数量' '255' '' '' . PERFORM field_set USING 'KST001_4' '期末库存-原料' '期末库存-原料' '255' '' '' . PERFORM field_set USING 'KST002_4' '期末库存-包材' '期末库存-包材' '255' '' '' . PERFORM field_set USING 'KST004_4' '期末库存-人工' '期末库存-人工' '255' '' '' . PERFORM field_set USING 'KST006_4' '期末库存-机器' '期末库存-机器' '255' '' '' . PERFORM field_set USING 'KST008_4' '期末库存-制造费用' '期末库存-制造费用' '255' '' '' . PERFORM field_set USING 'SUM_NOT' '未分摊-总实际值' '未分摊-总实际值' '255' '' '' . PERFORM field_set USING 'KST001_NOT' '未分摊-原料' '未分摊-原料' '255' '' '' . PERFORM field_set USING 'KST002_NOT' '未分摊-包材' '未分摊-包材' '255' '' '' . PERFORM field_set USING 'KST004_NOT' '未分摊-人工' '未分摊-人工' '255' '' '' . PERFORM field_set USING 'KST006_NOT' '未分摊-机器' '未分摊-机器' '255' '' '' . PERFORM field_set USING 'KST008_NOT' '未分摊-制造费用' '未分摊-制造费用' '255' '' '' . ENDFORM. "FRM_FIELD_BUILD *&---------------------------------------------------------------------* *& Form FRM_DATA_OUT *&---------------------------------------------------------------------* * 输出数据 *----------------------------------------------------------------------* FORM frm_data_out . CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING i_callback_program = sy-repid * i_callback_pf_status_set = c_cns_pf_status * i_callback_user_command = c_cns_user_command is_layout = gs_layout it_fieldcat = gt_fieldcat i_save = 'X' * i_grid_settings = ls_gset TABLES t_outtab = gt_alv EXCEPTIONS program_error = 1 OTHERS = 2. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. ENDFORM. "frm_data_out *&---------------------------------------------------------------------* *& Form FIELD_SET *&---------------------------------------------------------------------* FORM field_set USING p_fieldname p_seltext_l p_seltext_s p_outputlen p_ref_fieldname p_ref_tabname . gs_fieldcat-fieldname = p_fieldname . gs_fieldcat-seltext_l = p_seltext_l . gs_fieldcat-seltext_s = p_seltext_s . gs_fieldcat-outputlen = p_outputlen . gs_fieldcat-ref_fieldname = p_ref_fieldname. gs_fieldcat-ref_tabname = p_ref_tabname. APPEND gs_fieldcat TO gt_fieldcat. CLEAR gs_fieldcat. ENDFORM. "field_set
^_^很多人都把资料锁进了note里,以后还怎么百度呢^_^
浙公网安备 33010602011771号