SAP BOM展开 完整有注释
- 格式:pdf
- 大小:81.29 KB
- 文档页数:11
*&-----------------------------------------------------------------* *& Report YPPR0042 SAP BOM展开*&-----------------------------------------------------------------*REPORT YPPR0042 NO STANDARD PAGE HEADING.TYPE-POOLS: SLIS.TABLES: MAST, "BOM 链接物料MARA, "常规物料数据STKO, "BOM 表头MAKT. "物料描述DATA: STB LIKE STPOX OCCURS0WITH HEADER LINE,WA_ALV_FIELD TYPE SLIS_FIELDCAT_ALV, "列描述内表,列清单WA_ALV_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV, "定义内表LAYOUT TYPE SLIS_LAYOUT_ALV,GS_LAYOUT TYPE SLIS_LAYOUT_ALV,GT_LIST_TOP_OF_PAGE TYPE SLIS_T_LISTHEADER,COUNTER TYPE I VALUE0,G_REPID LIKE SY-REPID,DC(1) TYPE C VALUE'X', "是否多层展开默为多层展开G_USER_COMMAND TYPE SLIS_FORMNAME VALUE'USER_COMMAND'.DATA: BEGIN OF SELPOOL.INCLUDE STRUCTURE CSTMAT.DATA: END OF SELPOOL.DATA: DSTST_FLG LIKE CSDATA-XFELD. "BOM 帮助字段DATA: BEGIN OF IT_DATA OCCURS0,STUFE LIKE STPOX-STUFE, "层次MATNR LIKE MARA-MATNR, "父件物料编码OJTXB(80) TYPE C, "父件物料描述BMENG TYPE I, "BOM中的基本数量IDNRK LIKE STPOX-IDNRK, "子件物料编码OJTXP(80) TYPE C, "子件物料描述ALPRF LIKE STPO-ALPRF, "优先级EWAHR LIKE STPO-EWAHR, "使用可能性STLAN LIKE STPOX-STLAN, "BOM用途STLAL LIKE STPOX-STLAL, "可选的BOMALPGR LIKE STPOX-ALPGR, "替代组MTART LIKE STPOX-MTART, "物料类型MMEIN LIKE STPOX-MMEIN, "基本计量单位STPRS LIKE STPOX-STPRS, "标准价格MNGLG LIKE STPOX-MNGLG, "以基本计量单位为准的已计算的组件数量MNGKO LIKE STPOX-MNGKO, "以组件计量单位为准的已计算的组件数量 MENGE LIKE STPOX-MENGE, "组件数量DATUV LIKE STPOX-DATUV, "开始生效/有效截止日期AENNR LIKE STPOX-AENNR, "更改编号ANDAT LIKE STPOX-ANDAT, "日期记录创建于ANNAM LIKE STPOX-ANNAM, "创建记录的用户AUSCH LIKE STPOX-AUSCH, "工序报废AVOAU LIKE STPOX-AVOAU, "工序废品NTGEW LIKE MARA-NTGEW, "净重BRGEW LIKE MARA-BRGEW, "毛重WEIGH LIKE MARA-BRGEW, "重量 = BOM用量 * 单重STAWN LIKE MARC-STAWN, "外贸的商品代码和进口代码STAWT(200) TYPE C, "海关编码描述SEL TYPE C,END OF IT_DATA.DATA: BEGIN OF MATCAT OCCURS50.INCLUDE STRUCTURE CSCMAT.DATA: END OF MATCAT.DATA: BEGIN OF MATS.INCLUDE STRUCTURE CSCMAT.DATA: END OF MATS.DATA: BEGIN OF DLLH_DATA,MATNR LIKE MARA-MATNR, "物料编码BMENG TYPE I, "BOM中的基本数量END OF DLLH_DATA.DATA: TDLLH_DATA LIKE DLLH_DATA OCCURS0.DATA: BEGIN OF WLXX_DATA,MATNR LIKE MARA-MATNR, "物料编码NORMT LIKE MARA-NORMT, "延伸机种,即机型MAKTX(80) TYPE C, "物料描述GROES LIKE MARA-GROES, "描述补充NTGEW LIKE MARA-NTGEW, "净重BRGEW LIKE MARA-BRGEW, "毛重STAWN LIKE MARC-STAWN, "外贸的商品代码和进口代码END OF WLXX_DATA.DATA: TWLXX_DATA LIKE WLXX_DATA OCCURS0.DATA: BEGIN OF HGBM_DATA,STAWN LIKE T604T-STAWN, "外贸的商品代码和进口代码TEXT1(200) TYPE C, "描述TEXT2 LIKE T604T-TEXT2, "描述TEXT3 LIKE T604T-TEXT3, "描述TEXT4 LIKE T604T-TEXT4, "描述TEXT5 LIKE T604T-TEXT5, "描述TEXT6 LIKE T604T-TEXT6, "描述TEXT7 LIKE T604T-TEXT7, "描述END OF HGBM_DATA.DATA: THGBM_DATA LIKE HGBM_DATA OCCURS0.SELECTION-SCREEN BEGIN OF BLOCK SCR1 WITH FRAME TITLE text-001.* SELECT-OPTIONS: S_WERKS FOR MAST-WERKS DEFAULT '1000'. "工厂SELECT-OPTIONS: S_MATNR FOR MARA-MATNR, "成品编码S_MTART FOR MARA-MTART, "物料类型S_MATKL FOR MARA-MATKL, "物料组S_MAKTX FOR MAKT-MAKTX, "物料描述S_NORMT FOR MARA-NORMT. "机型PARAMETERS: P_EMENG LIKE STKO-BMENG OBLIGATORY DEFAULT'1', "R equired quantityP_STLAN LIKE MAST-STLAN DEFAULT'1'. "B OM 用途SELECTION-SCREEN SKIP1.PARAMETERS:RB_MCB RADIOBUTTON GROUP RG1 DEFAULT'X', "多层展开RB_SCB RADIOBUTTON GROUP RG1. "单层展开SELECTION-SCREEN SKIP1.PARAMETERS:RB_YTD RADIOBUTTON GROUP RG2 DEFAULT'X', "有替代料RB_WTD RADIOBUTTON GROUP RG2. "无替代料SELECTION-SCREEN SKIP1.PARAMETERS:RB_ALL RADIOBUTTON GROUP RG3, "显示所有列RB_HGY RADIOBUTTON GROUP RG3 DEFAULT'X'. "仅显示海关专用列SELECTION-SCREEN SKIP1.PARAMETERS:RB_YBC RADIOBUTTON GROUP RG4, "仅计算原材料重量RB_WBC RADIOBUTTON GROUP RG4 DEFAULT'X'. "计算所有物料重量SELECTION-SCREEN END OF BLOCK SCR1.INITIALIZATION.G_REPID = SY-REPID.START-OF-SELECTION.SELECT MARA~MATNRINTO CORRESPONDING FIELDS OF TABLE TDLLH_DATA "取得物料编码内表FROM MARAINNER JOIN MAKT ON MARA~MATNR = MAKT~MATNRWHERE MARA~MATNR IN S_MATNR AND MARA~MTART IN S_MTART AND MARA~NORMT IN S_NORMT AND MAKT~MAKTX IN S_MAKTX AND MARA~MATKL IN S_MATKL AND MA KT~SPRAS = SY-LANGU.SORT TDLLH_DATA BY MATNR.SELECT T604T~STAWN T604T~TEXT1 T604T~TEXT2 T604T~TEXT3 T604T~TEXT4 T6 04T~TEXT5 T604T~TEXT6 T604T~TEXT7INTO TABLE THGBM_DATA "取得海关编码及描述内表FROM T604TWHERE T604T~SPRAS = SY-LANGU.SORT THGBM_DATA BY STAWN.LOOP AT THGBM_DATA INTO HGBM_DATA.CONCATENATE HGBM_DATA-TEXT1 HGBM_DATA-TEXT2 HGBM_DATA-TEXT3 HGBM_DATA-TEXT4 HGBM_DATA-TEXT5 HGBM_DATA-TEXT6 HGBM_DATA-TEXT7 INTO HGBM_DA TA-TEXT1.MODIFY THGBM_DATA FROM HGBM_DATA.ENDLOOP.IF RB_MCB = ''. "如果选择为单层展开则把原来的默认值由X 改为空DC = ''.ENDIF.CLEAR: DLLH_DATA.LOOP AT TDLLH_DATA INTO DLLH_DATA. "循环每个物料号CLEAR: STB.CALL FUNCTION'CS_BOM_EXPL_MAT_V2'EXPORTINGCAPID = 'ZP01'"BOM 应用程序DATUV = SY-DATUM "有效起始日EMENG = P_EMENG "基本数量 Required quantity STKO-BMENGMTNRV = DLLH_DATA-MATNR "成品号或半成品号STLAN = '1'"BOM用途,1代表生产 STLAL = ''"可选BOMMKTLS = 'X'MEHRS = DC "是否多层展开,'X' 代表多层RNDKZ = '1'"Round off: ' '=a lways, '1'=never, '2'=only levels > 1 是否取整WERKS = '1000'"工厂IMPORTINGTOPMAT = SELPOOL "开始BOM 展开的物料显示DSTST = DSTST_FLG "BOM 帮助字段TABLESSTB = STBMATCAT = MATCAT "下面含有组件的物料存放在该内表对应 STB-TTIDX 在类别表内的索引﹐标志直属哪个物料下的 BOM EXCEPTIONSALT_NOT_FOUND = 1CALL_INVALID = 2MATERIAL_NOT_FOUND = 3MISSING_AUTHORIZATION = 4NO_BOM_FOUND = 5NO_PLANT_DATA = 6NO_SUITABLE_BOM_FOUND = 7OTHERS = 8.LOOP AT STB.IT_DATA-STUFE = STB-STUFE. "层次IT_DATA-OJTXB = STB-OJTXB. "父件描述IT_DATA-BMENG = SELPOOL-BMENG.IT_DATA-IDNRK = STB-IDNRK. "子件编码IT_DATA-OJTXP = STB-OJTXP. "子件描述IT_DATA-ALPRF = STB-ALPRF. "优先级IT_DATA-EWAHR = STB-EWAHR. "使用可能性IT_DATA-STLAN = STB-STLAN. "BOM用途IT_DATA-STLAL = STB-STLAL. "可选的BOMIT_DATA-ALPGR = STB-ALPGR. "替代组IT_DATA-MTART = STB-MTART. "物料类型IT_DATA-MMEIN = STB-MMEIN. "基本计量单位IT_DATA-STPRS = STB-STPRS. "标准价格IT_DATA-MNGLG = STB-MNGLG. "以基本计量单位为准的已计算的组件数量IT_DATA-MNGKO = STB-MNGKO. "以组件计量单位为准的已计算的组件数量IT_DATA-MENGE = STB-MENGE. "组件数量IT_DATA-AUSCH = STB-AUSCH. "工序报废IT_DATA-AVOAU = STB-AVOAU. "工序废品IT_DATA-DATUV = STB-DATUV. "生效日期IT_DATA-STAWN = STB-STAWN. "外贸的商品代码和进口代码IT_DATA-AENNR = STB-AENNR. "更改编号IT_DATA-ANDAT = STB-ANDAT. "创建于IT_DATA-ANNAM = STB-ANNAM. "创建者READ TABLE MATCAT INTO MATS WITH KEY INDEX = STB-TTIDX. "根据STB-TTIDX 找MATCAT 中对应的 INDEX 可以得到其相对的上阶物料号IT_DATA-MATNR = MATS-MATNR. "相对的父件编码APPEND IT_DATA.ENDLOOP.ENDLOOP.*SORT IT_DATA BY MATNR STUFE ALPGR ALPRF IDNRK. "按成品号层次号替代组优先级原料号排序IF RB_WTD = ''. "如果选择无替代料则把替代料删除DELETE IT_DATA WHERE ALPGR <> ''AND ALPRF <> '1'. "ALPGR 替代组 ALPRF 为优先组 1为第一优先使用可性为 100 视为主料ENDIF.SELECT MARA~MATNR MARA~NORMT MAKT~MAKTX MARA~GROES MARA~NTGEW MARA~BR GEW MARC~STAWNINTO TABLE TWLXX_DATA "取得物料信息FROM MARAINNER JOIN MAKT ON MARA~MATNR = MAKT~MATNRINNER JOIN MARC ON MARA~MATNR = MARC~MATNRWHERE MAKT~SPRAS = SY-LANGU AND MARC~WERKS = '1000'.SORT TWLXX_DATA BY MATNR.LOOP AT IT_DATA.CLEAR: WLXX_DATA,HGBM_DATA.READ TABLE TWLXX_DATA INTO WLXX_DATA WITH KEY MATNR = IT_DATA-IDNRK BINARY SEARCH.CONCATENATE WLXX_DATA-MAKTX WLXX_DATA-GROES INTO WLXX_DATA-MAKTX.IT_DATA-OJTXP = WLXX_DATA-MAKTX. "连接后的完全的组件物料描述IT_DATA-NTGEW = WLXX_DATA-NTGEW.IF RB_WBC = 'X'AND IT_DATA-MTART <> '805'.IT_DATA-WEIGH = IT_DATA-MNGKO * WLXX_DATA-NTGEW.ENDIF.MODIFY IT_DATA.ENDLOOP.LOOP AT IT_DATA.CLEAR: WLXX_DATA,HGBM_DATA.READ TABLE TWLXX_DATA INTO WLXX_DATA WITH KEY MATNR = IT_DATA-MATNR BINARY SEARCH.CONCATENATE WLXX_DATA-MAKTX WLXX_DATA-GROES INTO WLXX_DATA-MAKTX. IT_DATA-OJTXB = WLXX_DATA-MAKTX. "连接后的完全的父件物料描述READ TABLE THGBM_DATA INTO HGBM_DATA WITH KEY STAWN = IT_DATA-STAWNBINARY SEARCH.IT_DATA-STAWT = HGBM_DATA-TEXT1. "根据海关编码得到相应的描述MODIFY IT_DATA.ENDLOOP.PERFORM COMMENT_BUILD CHANGING GT_LIST_TOP_OF_PAGE[].PERFORM SUB_FIELDCAT.PERFORM LAYOUT_INIT CHANGING GS_LAYOUT.CALL FUNCTION'REUSE_ALV_GRID_DISPLAY'"调用ALV显示表单数据EXPORTINGI_CALLBACK_PROGRAM = SY-REPIDI_CALLBACK_TOP_OF_PAGE = 'TOP_OF_PAGE'IT_FIELDCAT = WA_ALV_FIELDCATIS_LAYOUT = GS_LAYOUTI_CALLBACK_USER_COMMAND = G_USER_COMMANDTABLEST_OUTTAB = IT_DATAEXCEPTIONSPROGRAM_ERROR = 1OTHERS = 2.IF SY-SUBRC <> 0.MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNOWITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.ENDIF.FORM SUB_FIELDCAT.PERFORM ADD_FIELD USING'STUFE''层次''C111''X'.PERFORM ADD_FIELD USING'MATNR''父件编码''C111''X'.PERFORM ADD_FIELD USING'OJTXB''父件描述''C111''X'.PERFORM ADD_FIELD USING'BMENG''基本数量''C602''X'.PERFORM ADD_FIELD USING'IDNRK''子件编码''C111''X'.PERFORM ADD_FIELD USING'OJTXP''子件描述''C111''X'.* PERFORM ADD_FIELD USING 'MNGLG' 'MNGLG' 'C111' 'X'.PERFORM ADD_FIELD USING'MNGKO''用量''C111''X'.PERFORM ADD_FIELD USING'NTGEW''单重''C111''X'.PERFORM ADD_FIELD USING'WEIGH''重量''C111''X'.PERFORM ADD_FIELD USING'STAWN''海关编码''C111'''. "外贸的商品代码和进口代码显示前导 0PERFORM ADD_FIELD USING'STAWT''描述''C111''X'. "外贸的商品代码和进口代码描述IF RB_ALL = 'X'.PERFORM ADD_FIELD USING'MENGE''组件数量''C111''X'.PERFORM ADD_FIELD USING'MMEIN''基本计量单位''C111''X'.PERFORM ADD_FIELD USING'ALPGR''替代组''C111'''.PERFORM ADD_FIELD USING'ALPRF''优先级''C111''X'.PERFORM ADD_FIELD USING'EWAHR''使用可能性''C111''X'.PERFORM ADD_FIELD USING'MTART''物料类型''C111''X'.PERFORM ADD_FIELD USING'AVOAU''工序废品''C111''X'.PERFORM ADD_FIELD USING'AUSCH''工序报废''C111''X'.PERFORM ADD_FIELD USING'STLAN''BOM用途''C111''X'.PERFORM ADD_FIELD USING'STLAL''可选的BOM''C111''X'.PERFORM ADD_FIELD USING'DATUV''生效日期''C111''X'.PERFORM ADD_FIELD USING'AENNR''更改编号''C111''X'.PERFORM ADD_FIELD USING'ANDAT''创建于''C111''X'.PERFORM ADD_FIELD USING'ANNAM''创建者''C111''X'.ENDIF.ENDFORM.FORM ADD_FIELD USING I_FIELDNAME TYPE SLIS_FIELDNAME I_TEXT TYPE STRI NG I_NO TYPE C I_ZERO TYPE C.CLEAR WA_ALV_FIELD.WA_ALV_FIELD-FIELDNAME = I_FIELDNAME.WA_ALV_FIELD-TABNAME = 'IT_DATA'.WA_ALV_FIELD-DDICTXT = 'L'.WA_ALV_FIELD-NO_ZERO = I_ZERO. "为空时显示前导0 为X时不显示前导0WA_ALV_FIELD-SELTEXT_L = I_TEXT.IF WA_ALV_FIELD-FIELDNAME = 'BMENG'.WA_ALV_FIELD-EMPHASIZE = 'C602'.ENDIF.IF WA_ALV_FIELD-FIELDNAME = 'MNGKO'.WA_ALV_FIELD-EMPHASIZE = 'C510'.ENDIF.APPEND WA_ALV_FIELD TO WA_ALV_FIELDCAT.ENDFORM. "ADD_FIELDFORM LAYOUT_INIT CHANGING RS_LAYOUT TYPE SLIS_LAYOUT_ALV.RS_LAYOUT-COLWIDTH_OPTIMIZE = 'X'.RS_LAYOUT-BOX_FIELDNAME = 'SEL'.RS_LAYOUT-ZEBRA = 'X'.RS_LAYOUT-DETAIL_POPUP = 'X'.ENDFORM. "LAYOUT_INITFORM TOP_OF_PAGE.CALL FUNCTION'REUSE_ALV_COMMENTARY_WRITE'EXPORTINGIT_LIST_COMMENTARY = GT_LIST_TOP_OF_PAGE.ENDFORM. "TOP_OF_PAGEFORM COMMENT_BUILD CHANGING LT_TOP_OF_PAGE TYPE SLIS_T_LISTHEADER.DATA LS_LINE TYPE SLIS_LISTHEADER.CLEAR LS_LINE.LS_LINE-TYP = 'H'.LS_LINE-INFO = 'BOM展开'.APPEND LS_LINE TO LT_TOP_OF_PAGE.CLEAR LS_LINE.LS_LINE-TYP = 'S'.LS_LINE-KEY = '做成时间:'.LS_LINE-INFO = SY-DATUM.APPEND LS_LINE TO LT_TOP_OF_PAGE.LS_LINE-KEY = '做成者:'.LS_LINE-INFO = SY-UNAME.APPEND LS_LINE TO LT_TOP_OF_PAGE.ENDFORM. "COMMENT_BUILDFORM USER_COMMAND USING R_UCOMM LIKE SY-UCOMMRS_SELFIELD TYPE SLIS_SELFIELD.CASE R_UCOMM.WHEN'&IC1'. " SAP STANDARD CODE FOR DOUBLE-CLICKING IF RS_SELFIELD-SEL_TAB_FIELD = 'IT_DATA-MATNR'.SET PARAMETER ID'MAT'FIELD RS_SELFIELD-VALUE.CALL TRANSACTION'CS03'AND SKIP FIRST SCREEN.ENDIF.IF RS_SELFIELD-SEL_TAB_FIELD = 'IT_DATA-IDNRK'.SET PARAMETER ID'MAT'FIELD RS_SELFIELD-VALUE.CALL TRANSACTION'MM03'AND SKIP FIRST SCREEN.ENDIF.IF RS_SELFIELD-SEL_TAB_FIELD = 'IT_DATA-MBLNR'.SET PARAMETER ID'MBN'FIELD RS_SELFIELD-VALUE.CALL TRANSACTION'MB51'AND SKIP FIRST SCREEN.ENDIF.ENDCASE.ENDFORM.。