Code listing for: ZPPR001
Description: 三层BOM显示报表
*======================================================================* * T-Code: ZPPR001 * * Program Name ZPPR001 * * DESCRIPTION: 三层BOM显示报表 * * * * TYPE: Report * * APPLICATION AREA: PP * *----------------------------------------------------------------------* * FUNCTION: 显示三层BOM显示报表,方便导入新bom * * * *----------------------------------------------------------------------* * MODIFICATION LOG: * * VER DD/MM/YY Author DESCRIPTION CHANGE REQUEST * * --- -------- ------------- ---------------------- ---------------* * 000 25/07/13 libo Initial release DEVK906922 * *----------------------------------------------------------------------* REPORT zppr001 NO STANDARD PAGE HEADING. TABLES:mast, mara. DATA:BEGIN OF gt_output OCCURS 0, werks LIKE mast-werks, "工厂 matnr LIKE mast-matnr, "物料号 maktx1 LIKE makt-maktx, "物料描述 stlan LIKE mast-stlan, "BOM用途 stlal LIKE mast-stlal, "可选的BOM stktx LIKE stko-stktx, "可选BOM文本 bmeng(18), "BOM基本数量 bmein LIKE stpox-mmein, "BOM基本数量单位 MMEIN posnr LIKE stpo-posnr, "BOM 项目号 idnrk LIKE stpo-idnrk, "组件 maktx LIKE makt-maktx, "描述 mnglg LIKE stpox-mnglg, "组件数量 meins LIKE stpox-meins, "组件数量单位 lgort LIKE stpox-lgort, "生产仓储地点 brgew LIKE mara-brgew, "毛重 ntgew LIKE mara-ntgew, "净重 level TYPE char1,"层级 END OF gt_output. DATA:gt_data LIKE STANDARD TABLE OF gt_output WITH HEADER LINE. DATA:gt_stb LIKE STANDARD TABLE OF stpox WITH HEADER LINE. include zincalv. DATA: BEGIN OF gt_stpo OCCURS 0, werks LIKE mast-werks, matnr LIKE mast-matnr, maktx1 LIKE makt-maktx, bmeng LIKE stko-bmeng, "BOM基本数量 bmein LIKE stko-bmein, "BOM基本数量单位 stlan LIKE mast-stlan, "BOM用途 stlnr LIKE mast-stlnr, "物料单 stlty LIKE stpo-stlty, stlkn LIKE stpo-stlkn, stpoz LIKE stpo-stpoz, stlal LIKE mast-stlal, "可选的BOM stktx LIKE stko-stktx, "可选文字 002 add posnr LIKE stpo-posnr, "BOM 项目号 postp LIKE stpo-postp, "项目类别(物料单) oidnrk LIKE stpo-idnrk, "old组件 omaktx LIKE makt-maktx, "old描述 omenge LIKE stpo-menge, "old组件数量 omeins LIKE stpo-meins, "old组件数量单位 olgort LIKE stpo-lgort, "old生产仓储地点 idnrk LIKE stpo-idnrk, "组件 maktx LIKE makt-maktx, "描述 menge LIKE stpo-menge, "组件数量 meins LIKE stpo-meins, "组件数量单位 lgort LIKE stpo-lgort, "生产仓储地点 END OF gt_stpo. DATA:gt_makt LIKE STANDARD TABLE OF makt WITH HEADER LINE. DATA:BEGIN OF gt_mtnrv OCCURS 0, matnr LIKE mara-matnr, matkl LIKE mara-matkl, END OF gt_mtnrv. DATA:gt_mtnrv_lt LIKE STANDARD TABLE OF gt_mtnrv WITH HEADER LINE, gt_mtnrv_tp LIKE STANDARD TABLE OF gt_mtnrv WITH HEADER LINE, gt_mtnrv_zlj LIKE STANDARD TABLE OF gt_mtnrv WITH HEADER LINE. DATA:BEGIN OF gt_mara OCCURS 0, matkl LIKE mara-matkl, matnr LIKE mara-matnr, lvorm LIKE mara-lvorm, brgew LIKE mara-brgew, ntgew LIKE mara-ntgew, meins LIKE mara-meins, END OF gt_mara. DATA:BEGIN OF gt_matnr OCCURS 0, matnr LIKE mara-matnr, level TYPE char1,"层级 matkl LIKE mara-matkl, idnrk LIKE mara-matnr, posnr(4) TYPE n, END OF gt_matnr. DATA:BEGIN OF gt_mast OCCURS 0, matnr LIKE mast-matnr, werks LIKE mast-werks, stlan LIKE mast-stlan, stlnr LIKE mast-stlnr, stlal LIKE mast-stlal, stktx LIKE stko-stktx, bmeng LIKE stko-bmeng, bmein LIKE stko-bmein, END OF gt_mast. RANGES:r_lt FOR mara-matnr,"轮胎 r_tp FOR mara-matnr,"胎胚 r_gs FOR mara-matnr,"钢丝 r_zlj FOR mara-matnr,"终炼胶 r_ycl FOR mara-matnr."原材料 CONSTANTS:c_zlj LIKE mara-matkl VALUE '113', c_m TYPE char1 VALUE 'M', c_char_x TYPE char1 VALUE 'X'. SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001. PARAMETERS: p_werks LIKE mkal-werks OBLIGATORY. "工厂 SELECT-OPTIONS:s_matnr FOR mara-matnr. "物料号 SELECT-OPTIONS:s_lvorm FOR mara-lvorm, "删除标记 s_stlal FOR mast-stlal."可选bom PARAMETERS:p_datuv LIKE stas-datuv DEFAULT sy-datum."BOM起始有效期 SELECTION-SCREEN END OF BLOCK b1. START-OF-SELECTION. PERFORM frm_init_range. PERFORM frm_get_data. PERFORM frm_process_data. PERFORM frm_disp_data. *&---------------------------------------------------------------------* *& Form frm_get_bom *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM frm_get_data. write_screen text-i01. DATA:l_tabix LIKE sy-tabix. SELECT matnr matkl INTO CORRESPONDING FIELDS OF TABLE gt_mtnrv FROM mara WHERE matnr IN s_matnr AND ( matkl IN r_lt OR matkl IN r_tp OR matkl IN r_zlj ) AND lvorm IN s_lvorm. gt_mtnrv_zlj[] = gt_mtnrv[]. gt_mtnrv_tp[] = gt_mtnrv[]. gt_mtnrv_lt[] = gt_mtnrv[]. DELETE gt_mtnrv_lt WHERE matkl NOT IN r_lt. DELETE gt_mtnrv_tp WHERE matkl NOT IN r_tp. DELETE gt_mtnrv_zlj WHERE matkl NOT IN r_zlj. IF gt_mtnrv[] IS NOT INITIAL. SELECT mast~matnr mast~werks mast~stlan mast~stlnr mast~stlal stko~stktx stko~bmeng stko~bmein INTO CORRESPONDING FIELDS OF TABLE gt_mast FROM mast INNER JOIN mara ON mast~matnr = mara~matnr INNER JOIN stko ON mast~stlnr = stko~stlnr AND mast~stlal = stko~stlal AND stko~lkenz = '' AND stko~stlty = c_m FOR ALL entries IN gt_mtnrv WHERE mast~matnr = gt_mtnrv-matnr AND mast~werks = p_werks AND mast~stlal IN s_stlal AND mast~stlan = '1'. ENDIF. DATA:lt_stb LIKE STANDARD TABLE OF stpox WITH HEADER LINE, lt_mast LIKE STANDARD TABLE OF mast WITH HEADER LINE, lt_mat LIKE STANDARD TABLE OF cscmat WITH HEADER LINE. REFRESH:gt_stb,gt_data. LOOP AT gt_mtnrv_lt. REFRESH:lt_stb,lt_mat. LOOP AT gt_mast WHERE matnr = gt_mtnrv_lt-matnr. PERFORM sub_get_bom TABLES lt_stb"lt_mat USING '' gt_mast-matnr gt_mast-stlal gt_mast-stlan gt_mast-werks gt_mast-stktx gt_mast-bmeng gt_mast-bmein 'LT'. APPEND LINES OF lt_stb TO gt_stb. ENDLOOP. ENDLOOP. LOOP AT gt_mtnrv_tp. LOOP AT gt_mast WHERE matnr = gt_mtnrv_tp-matnr. PERFORM sub_get_bom TABLES lt_stb "lt_mat USING c_char_x gt_mast-matnr gt_mast-stlal gt_mast-stlan gt_mast-werks gt_mast-stktx gt_mast-bmeng gt_mast-bmein 'TP'. APPEND LINES OF lt_stb TO gt_stb. ENDLOOP. ENDLOOP. LOOP AT gt_mtnrv_zlj. LOOP AT gt_mast WHERE matnr = gt_mtnrv_zlj-matnr. PERFORM sub_get_bom TABLES lt_stb" lt_mat USING c_char_x gt_mast-matnr gt_mast-stlal gt_mast-stlan gt_mast-werks gt_mast-stktx gt_mast-bmeng gt_mast-bmein 'ZLJ'. APPEND LINES OF lt_stb TO gt_stb. ENDLOOP. ENDLOOP. IF gt_mast[] IS NOT INITIAL. SELECT matnr maktx APPENDING CORRESPONDING FIELDS OF TABLE gt_makt FROM makt FOR ALL ENTRIES IN gt_mast WHERE matnr = gt_mast-matnr AND spras = sy-langu. SELECT matkl matnr lvorm brgew ntgew meins APPENDING TABLE gt_mara FROM mara FOR ALL ENTRIES IN gt_mast WHERE matnr = gt_mast-matnr. ENDIF. IF gt_data[] IS NOT INITIAL. SELECT matnr maktx APPENDING CORRESPONDING FIELDS OF TABLE gt_makt FROM makt FOR ALL ENTRIES IN gt_data WHERE matnr = gt_data-idnrk AND spras = sy-langu. SELECT matkl matnr lvorm brgew ntgew meins APPENDING TABLE gt_mara FROM mara FOR ALL ENTRIES IN gt_data WHERE matnr = gt_data-idnrk. ENDIF. ENDFORM. "frm_get_bom *&---------------------------------------------------------------------* *& Form FRM_INIT_RANGE *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM frm_init_range . REFRESH:r_lt,r_tp,r_gs,r_zlj,r_ycl. "轮胎 insert_range r_lt 'I' 'EQ' '31' ''. insert_range:r_lt 'I' 'EQ' '32' ''. insert_range:r_lt 'I' 'EQ' '34' ''. "胎胚 insert_range:r_tp 'I' 'EQ' '204' ''. "钢丝 insert_range:r_gs 'I' 'BT' '114' '117'. "终炼胶 insert_range:r_zlj 'I' 'EQ' '223' ''. "原材料 insert_range:r_ycl 'I' 'BT' '100' '113'. ENDFORM. " FRM_INIT_RANGE *&---------------------------------------------------------------------* *& Form FRM_PROCESS_DATA *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM frm_process_data . DATA:l_posnr(4) TYPE n, l_tabix LIKE sy-tabix. * DATA:lt_data LIKE STANDARD TABLE OF gt_data WITH HEADER LINE. REFRESH:gt_matnr. write_screen text-i02. *先的到所有数据 LOOP AT gt_data. l_tabix = sy-tabix. CLEAR:gt_matnr. gt_matnr-matnr = gt_data-matnr. gt_matnr-idnrk = gt_data-idnrk. READ TABLE gt_mara WITH KEY matnr = gt_data-idnrk. IF sy-subrc = 0. gt_matnr-matkl = gt_mara-matkl. ENDIF. READ TABLE gt_mara WITH KEY matnr = gt_data-matnr. IF sy-subrc = 0. gt_data-ntgew = gt_mara-ntgew. gt_data-brgew = gt_mara-brgew. ENDIF. IF gt_matnr-matkl IN r_lt. gt_matnr-level = '1'. ENDIF. IF gt_matnr-matkl IN r_tp. gt_matnr-level = '2'. ENDIF. IF gt_matnr-matkl IN r_gs OR gt_matnr-matkl IN r_zlj. gt_matnr-level = '3'. ENDIF. IF gt_matnr-matkl IN r_ycl. gt_matnr-level = '4'. ENDIF. IF gt_matnr-matkl IN r_zlj. gt_matnr-matkl = c_zlj. ENDIF. COLLECT gt_matnr. gt_data-level = gt_matnr-level. READ TABLE gt_makt WITH KEY matnr = gt_data-matnr. IF sy-subrc = 0. gt_data-maktx1 = gt_makt-maktx. ENDIF. READ TABLE gt_makt WITH KEY matnr = gt_data-idnrk. IF sy-subrc = 0. gt_data-maktx = gt_makt-maktx. ENDIF. MODIFY gt_data INDEX l_tabix TRANSPORTING maktx1 maktx ntgew brgew. ENDLOOP. SORT gt_matnr BY matnr level matkl idnrk. LOOP AT gt_matnr. l_tabix = sy-tabix. AT NEW level. CLEAR:l_posnr. ENDAT. l_posnr = l_posnr + 10. IF gt_matnr-matkl = c_zlj. gt_matnr-matkl = '223'. ENDIF. gt_matnr-posnr = l_posnr. MODIFY gt_matnr INDEX l_tabix TRANSPORTING posnr matkl. ENDLOOP. *赋值项目号 LOOP AT gt_data. l_tabix = sy-tabix. READ TABLE gt_matnr WITH KEY matnr = gt_data-matnr idnrk = gt_data-idnrk. IF sy-subrc = 0. gt_data-posnr = gt_matnr-posnr. MODIFY gt_data INDEX l_tabix TRANSPORTING posnr. ENDIF. ENDLOOP. SORT gt_data BY matnr stlal level posnr idnrk. gt_output[] = gt_data[]. ENDFORM. " FRM_PROCESS_DATA *&---------------------------------------------------------------------* *& Form FRM_DISP_DATA *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM frm_disp_data . PERFORM sub_init_layout USING text-i04 ''. PERFORM sub_insert_fields. PERFORM sub_disp_data_new. ENDFORM. " FRM_DISP_DATA *&---------------------------------------------------------------------* *& Form SUB_INSERT_FIELDS *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM sub_insert_fields . alv_head 'WERKS' text-t01 space c_char_x space '04' ."工厂 alv_head 'MATNR' text-t02 c_char_x c_char_x space '18' ."物料号 alv_head 'MAKTX1' text-t03 space space space '40' ."物料描述 alv_head 'STLAN' text-t04 space space space '01' ."BOM用途 alv_head 'STLAL' text-t05 c_char_x space space '02' ."可选的BOM alv_head 'STKTX' text-t06 space space space '40' ."可选BOM文本 alv_head 'BMENG' text-t07 space space space '18' ."BOM基本数量 alv_head 'BMEIN' text-t08 space space space '03' ."BOM基本单位 alv_head 'POSNR' text-t09 space space space '04' ."BOM 项目号 alv_head 'IDNRK' text-t10 c_char_x space space '18' ."组件 alv_head 'MAKTX' text-t11 space space space '40' ."描述 alv_head 'MNGLG' text-t12 space space space '18' ."组件数量 alv_head 'MEINS' text-t13 space space space '03' ."组件数量单位 alv_head 'LGORT' text-t14 space space space '04' ."生产仓储地点 alv_head 'BRGEW' text-t15 space space space '18' ."毛重 alv_head 'NTGEW' text-t16 space space space '18' ."净重 ENDFORM. " SUB_INSERT_FIELDS *&---------------------------------------------------------------------* *& Form SUB_DISP_DATA_NEW *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM sub_disp_data_new. write_screen text-i03. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC' EXPORTING i_interface_check = '' i_callback_program = sy-cprog i_callback_pf_status_set = 'SET_PF_STATUS' i_grid_title = text-i04 is_layout_lvc = gs_layout it_fieldcat_lvc = gt_fieldcat i_save = 'A' i_default = c_char_x TABLES t_outtab = gt_output[] EXCEPTIONS program_error = 1 OTHERS = 2. ENDFORM. " SUB_DISP_DATA_NEW *&---------------------------------------------------------------------* *& Form set_pf_status_r1 *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->RT_EXTAB text *----------------------------------------------------------------------* FORM set_pf_status USING rt_extab TYPE slis_t_extab. SET PF-STATUS 'PF_STATUS'. ENDFORM. "set-pf-status *&---------------------------------------------------------------------* *& Form SUB_GET_BOM *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->P_L_MEHRS text * -->P_L_MTNRV text * -->P_L_STLAL text * -->P_L_STLAN text * -->P_L_WERKS text * -->P_LT_STB text * -->P_LT_MAT text *----------------------------------------------------------------------* FORM sub_get_bom TABLES lt_stb STRUCTURE stpox * lt_mat STRUCTURE cscmat USING l_mehrs l_mtnrv l_stlal l_stlan l_werks l_stktx l_emeng l_bmein l_type. REFRESH:lt_stb. CALL FUNCTION 'CS_BOM_EXPL_MAT_V2' EXPORTING capid = 'PP01' datuv = p_datuv mdmps = space mehrs = l_mehrs mtnrv = l_mtnrv stlal = l_stlal stlan = l_stlan emeng = l_emeng werks = l_werks TABLES stb = lt_stb[] * matcat = lt_mat[] EXCEPTIONS alt_not_found = 1 call_invalid = 2 material_not_found = 3 missing_authorization = 4 no_bom_found = 5 no_plant_data = 6 no_suitable_bom_found = 7 conversion_error = 8 OTHERS = 9. LOOP AT lt_stb. CLEAR:gt_data. CASE l_type. WHEN 'LT'. CHECK lt_stb-matkl IN r_tp. WHEN 'TP'. CHECK lt_stb-matkl IN r_zlj OR lt_stb-matkl IN r_gs. WHEN 'ZLJ'. CHECK lt_stb-matkl IN r_ycl. WHEN OTHERS. ENDCASE. gt_data-werks = l_werks. gt_data-matnr = l_mtnrv. gt_data-stlan = l_stlan. "BOM用途 gt_data-stlal = l_stlal. "可选的BOM gt_data-stktx = l_stktx. WRITE l_emeng TO gt_data-bmeng. CONDENSE gt_data-bmeng. gt_data-bmein = l_bmein. gt_data-idnrk = lt_stb-idnrk. "组件 gt_data-mnglg = lt_stb-mnglg. "组件数量 gt_data-meins = lt_stb-meins. "组件数量单位 gt_data-lgort = lt_stb-lgort. "生产仓储地点 COLLECT gt_data. ENDLOOP. ENDFORM. " SUB_GET_BOM *Text elements *---------------------------------------------------------- * 001 选项 * I01 取数据... * I02 处理数据... * I03 显示数据... * I04 三层BOM显示报表 * T01 工厂 * T02 物料号 * T03 物料描述 * T04 BOM用途 * T05 可选的BOM * T06 可选BOM文本 * T07 BOM基本数量 * T08 BOM基本数量单位 * T09 BOM#项目号 * T10 组件 * T11 描述 * T12 组件数量 * T13 组件数量单位 * T14 生产仓储地点 * T15 毛重 * T16 净重 *Selection texts *---------------------------------------------------------- * P_DATUV 有效起始日期 * P_WERKS 工厂 * S_LVORM 物料删除标记 * S_MATNR 物料 * S_STLAL 可选BOM
Extracted by Direct Download Enterprise version 1.3 - E.G.Mellodew. 1998-2004 UK. Sap Release 700