转自链接:https://www.jianshu.com/p/1b61ea6098cd
作者:憨憨憨豆
业务背景介绍
SAP提供BOM反查标准代码为CS15,该CS15可实现物料单层反查BOM和多层反查BOM,以及相应需求数量/结果数量计算;不过SAP未提供批量的反查功能,对此本人大致研究了一下标准程序,开发如下所示的批量反查BOM程序,可满足大部分企业需求;
(备注:程序中应用了大部分CS15标准程序,已实现单层展示和多层展示,单层的需求数量/计划数量的计算)
功能逻辑
1.实现多个物料批量反查BOM-单层(含需求数量和结果数量计算);
2.实现多个物料批量反查BOM-多层(不含需求数量和结果数量计算);
3.具体代码逻辑可参考标准程序:RCS15001;
实现难题
BOM反查多层展示,需要调用函数CS_WHERE_USED_MAT进行递归,较为难以开发;可参考标准程序:RCS15001实现;
模拟案例:
前端业务界面:
ALV报表界面:
相关程序
主程序
REPORT ZPPRP036 MESSAGE-ID 29 LINE-SIZE 132. INCLUDE ZPPRP036_T. INCLUDE ZPPRP036_S. INCLUDE ZPPRP036_F. INITIALIZATION."屏幕未显示之前执行,对程序设置值以及屏幕元素进行赋值 AT SELECTION-SCREEN. IF S_IDNRK-LOW IS INITIAL. MESSAGE ‘物料需填写‘ TYPE ‘E‘. ENDIF. IF PM_WERKS IS INITIAL. MESSAGE ‘工厂需填写‘ TYPE ‘E‘. ENDIF. IF PM_DIRKT IS INITIAL. MESSAGE E544 WITH ‘‘. ENDIF. IF NOT PM_EMENG IS INITIAL AND NOT PM_RMENG IS INITIAL. MESSAGE E512 WITH ‘‘. ENDIF. AT SELECTION-SCREEN OUTPUT. LOOP AT SCREEN. CASE SCREEN-GROUP1. WHEN ‘TY1‘. IF PM_MEHRS IS INITIAL. SCREEN-ACTIVE = ‘1‘."显示 ELSE. SCREEN-ACTIVE = ‘0‘."隐藏 ENDIF. ENDCASE. MODIFY SCREEN. ENDLOOP. START-OF-SELECTION. CLEAR SY-UCOMM. PERFORM FRM_GET_DATA. PERFORM FRM_OUTPUT_ALV. END-OF-SELECTION.
include ZPPRP036_T相关代码:
*&---------------------------------------------------------------------* *& 包含 ZPPRP036_T *&---------------------------------------------------------------------* TYPE-POOLS: "MBALV ICON, "Acc 2004 SLIS. DATA:IS_LAYOUT TYPE LVC_S_LAYO, IT_FIELDCAT_LVC TYPE LVC_T_FCAT WITH HEADER LINE. TABLES: STPO,MARC,STZU,CSDATA. DATA: BEGIN OF GT_DATA OCCURS 0, ZMATNR LIKE MARA-MATNR, MAKTX LIKE MAKT-MAKTX, DIMNG LIKE STPOL_ADD-DIMNG, DRMNG LIKE STPOL_ADD-DRMNG, STATUS TYPE STRING, "状态 MSG TYPE STRING, "消息 OBJIC(4) TYPE C. INCLUDE STRUCTURE STPOV. DATA: END OF GT_DATA. DATA: BEGIN OF GT_OUT OCCURS 0, ZMATNR LIKE MARA-MATNR, MAKTX LIKE MAKT-MAKTX, DIMNG LIKE STPOL_ADD-DIMNG, DRMNG LIKE STPOL_ADD-DRMNG, STATUS TYPE STRING, "状态 MSG TYPE STRING, "消息 OBJIC(4) TYPE C. INCLUDE STRUCTURE STPOV. DATA: END OF GT_OUT. * Loop-LTB (mehrstufig) "YHG125492 DATA: BEGIN OF LTB OCCURS 0. "YHG125492 INCLUDE STRUCTURE STPOV. "YHG125492 DATA: END OF LTB. * Loop-LTB (mehrstufig) "YHG125492 DATA: BEGIN OF LLTB OCCURS 0. "YHG125492 INCLUDE STRUCTURE STPOV. "YHG125492 DATA: END OF LLTB. * Loop-MATCAT (mehrstufig) "YHG125492 DATA: BEGIN OF MATCAT OCCURS 0. "YHG125492 INCLUDE STRUCTURE CSCMAT. "YHG125492 DATA: END OF MATCAT . * Loop-MATCAT (mehrstufig) "YHG125492 DATA: BEGIN OF LMATCAT OCCURS 0. "YHG125492 INCLUDE STRUCTURE CSCMAT. "YHG125492 DATA: END OF LMATCAT . DATA: BEGIN OF EQUICAT OCCURS 0. "YHG110068 INCLUDE STRUCTURE CSCEQUI. "YHG110068 DATA: END OF EQUICAT . "YHG110068 DATA: BEGIN OF KNDCAT OCCURS 0. "YHG110068 INCLUDE STRUCTURE CSCKND. "YHG110068 DATA: END OF KNDCAT . "YHG110068 DATA: BEGIN OF PRJCAT OCCURS 0. "MBA089075 INCLUDE STRUCTURE CSCPRJ. "MBA089075 DATA: END OF PRJCAT. "MBA089075 DATA: BEGIN OF STDCAT OCCURS 0. "YHG110068 INCLUDE STRUCTURE CSCSTD. "YHG110068 DATA: END OF STDCAT . "YHG110068 DATA: BEGIN OF TPLCAT OCCURS 0. "YHG110068 INCLUDE STRUCTURE CSCTPL. "YHG110068 DATA: END OF TPLCAT . DATA: BEGIN OF WU_CTAB OCCURS 0, "YHG125492 MATNR LIKE MARA-MATNR, "YHG125492 WERKS LIKE T001W-WERKS, "YHG125492 STLAN LIKE MAST-STLAN, "YHG125492 WUCHK LIKE CSDATA-XFELD, "Vw zu ermitteln versucht "YHG125492 ISUSD LIKE CSDATA-XFELD, "Vw gefunden "YHG125492 WUTCK LIKE CSDATA-XFELD, "Vw-Tab geprueft "YHG125492 END OF WU_CTAB. DATA: BEGIN OF WU_CTAB_KEY, "YHG125492 MATNR LIKE MARA-MATNR, "YHG125492 WERKS LIKE T001W-WERKS, "YHG125492 STLAN LIKE MAST-STLAN, "YHG125492 END OF WU_CTAB_KEY. DATA: BEGIN OF WU_ML_STACK OCCURS 0, "YHG125492 STUFE LIKE STPOV-LEVEL, "YHG125492 LOOPX LIKE SY-INDEX, "YHG125492 MATNR LIKE MARA-MATNR, "YHG125492 WERKS LIKE T001W-WERKS, "YHG125492 STLAN LIKE MAST-STLAN, "YHG125492 END OF WU_ML_STACK. "YHG125492 DATA: BEGIN OF MNG_STACK OCCURS 0, "YHG125492 STUFE LIKE STPOV-LEVEL, "YHG125492 EMENG LIKE STPOV-EMENG, "YHG125492 RMENG LIKE STPOV-EMENG, "YHG125492 EMFAC TYPE F, "HGA115915 LDSGN LIKE CSDATA-XFELD, "HGA118294 EXTRM LIKE CSDATA-XFELD, "HGA118294 END OF MNG_STACK. "YHG125492 *---------------------------------------------------------------------* * interne Feldleisten * *---------------------------------------------------------------------* * Materialdaten zum Einstiegsmaterial DATA: BEGIN OF SELPOOL. INCLUDE STRUCTURE MC29S. DATA: END OF SELPOOL. * Materialdaten zum Einstiegsmaterial merken (mehrstufig) DATA: BEGIN OF SAV_SELPOOL. "YHG125492 INCLUDE STRUCTURE MC29S. "YHG125492 DATA: END OF SAV_SELPOOL. "YHG125492 DATA: BEGIN OF WU_MEMID, "YHG125492 TABID(2) TYPE C, "YHG125492 MATNR LIKE MARA-MATNR, "YHG125492 WERKS LIKE T001W-WERKS, "YHG125492 STLAN LIKE MAST-STLAN, "YHG125492 END OF WU_MEMID. "YHG125492 DATA: DSP_IMENG(7) TYPE P DECIMALS 3, DSP_RMENG(7) TYPE P DECIMALS 3, OPO_MEINH LIKE STPO-MEINS, OPO_MENGE LIKE STPO-MENGE. "HGA115686 DATA: SAV_FRMNG TYPE F. "HGA131954 DATA: TMAT_REVLV LIKE AEOI-REVLV. "YHG083168 DATA: REVL_SDATU LIKE SY-DATUM. "YHG083168 DATA: WU_CTAB_LOOPX LIKE SY-TABIX. "YHG125492 DATA: STACK_PREVX LIKE SY-TABIX. "YHG125492 DATA: LTB_LOOPX LIKE SY-TABIX. "YHG125492 DATA: LTB_STRTX LIKE SY-TABIX. "YHG125492 DATA: ACT_LEVEL LIKE STPOV-LEVEL. "YHG125492 DATA: STACK_FLAG LIKE CSDATA-XFELD. "YHG125492 DATA: POP_FLAG LIKE CSDATA-XFELD. "YHG125492 DATA: END_FLAG LIKE CSDATA-XFELD. "YHG125492 DATA: "HGA118294 MAX_FNUM TYPE F VALUE ‘9.999999999999000E+09‘, "HGA118294 PNULL(13) TYPE P VALUE 0, "HGA118294 FNULL TYPE F VALUE ‘0.000000000000000E+00‘. "HGA118294
include ZPPRP036_S相关代码:
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001. SELECT-OPTIONS: S_IDNRK FOR STPO-IDNRK NO INTERVALS."OBLIGATORY PARAMETERS: PM_WERKS LIKE MARC-WERKS MEMORY ID WRK, "OBLIGATORY PM_STLAN LIKE STZU-STLAN, PM_DATUV LIKE STPO-DATUV DEFAULT SY-DATUM, PM_DATUB LIKE STPO-DATUV DEFAULT ‘99991231‘, PM_DIRKT LIKE CSDATA-XFELD DEFAULT ‘X‘. PARAMETERS: PM_MEHRS AS CHECKBOX USER-COMMAND FLAG * PM_MEHRS RADIOBUTTON GROUP G1 . SELECTION-SCREEN END OF BLOCK B1. *&---------------------------------------------------------------------* * DEFINE SELECTION SCREEN *&---------------------------------------------------------------------* SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME TITLE TEXT-002. PARAMETERS: PM_EMENG LIKE STPO-MENGE MODIF ID TY1, PM_RMENG LIKE STPO-MENGE MODIF ID TY1. SELECTION-SCREEN END OF BLOCK B2.
include ZPPRP036_F相关代码:
*&---------------------------------------------------------------------* *& 包含 ZPPRP036_F *&---------------------------------------------------------------------* FORM GET_WU_RECS "YHG125492 USING LCL_MATNR LCL_WERKS LCL_STLAN. * alle direkten Verwendungen nach LTB holen CALL FUNCTION ‘CS_WHERE_USED_MAT‘ EXPORTING DATUB = PM_DATUB DATUV = PM_DATUV MATNR = LCL_MATNR "YHG125492 STLAN = LCL_STLAN "YHG125492 WERKS = LCL_WERKS "YHG125492 STLTP = ‘M‘ "note 308150 IMPORTING TOPMAT = SELPOOL TABLES WULTB = LTB EQUICAT = EQUICAT KNDCAT = KNDCAT MATCAT = MATCAT STDCAT = STDCAT TPLCAT = TPLCAT PRJCAT = PRJCAT EXCEPTIONS * CALL_INVALID = 01 MATERIAL_NOT_FOUND = 02 NO_WHERE_USED_REC_FOUND = 03 NO_WHERE_USED_REC_SELECTED = 04 NO_WHERE_USED_REC_VALID = 05. ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_GET_DATA *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* *& --> p1 text *& <-- p2 text *&---------------------------------------------------------------------* FORM FRM_GET_DATA . SORT S_IDNRK BY LOW. DELETE ADJACENT DUPLICATES FROM S_IDNRK. LOOP AT S_IDNRK. CLEAR:LTB[],SAV_SELPOOL,WU_MEMID,WU_CTAB_KEY,WU_CTAB[]. CLEAR:WU_CTAB_LOOPX,LLTB[],LMATCAT,MATCAT,LMATCAT,WU_ML_STACK[],END_FLAG,LTB_LOOPX,POP_FLAG,STACK_FLAG,ACT_LEVEL,LTB_STRTX. PERFORM GET_WU_RECS "YHG125492 USING S_IDNRK-LOW "YHG125492 PM_WERKS "YHG125492 PM_STLAN. "YHG125492 CASE SY-SUBRC. WHEN 0. READ TABLE LTB INDEX 1. IF SY-SUBRC = 0 ."若存在数据 IF NOT PM_MEHRS IS INITIAL. * Daten zum Einstiegsmaterial sichern SAV_SELPOOL = SELPOOL. * LTB und MATCAT exportieren; PERFORM EXP_WUTAB USING S_IDNRK-LOW PM_WERKS PM_STLAN. * ** Verwendungsergebnis registrieren PERFORM REG_WURES USING S_IDNRK-LOW PM_WERKS PM_STLAN ‘X‘ ‘X‘ ‘ ‘. LOOP AT WU_CTAB. WU_CTAB_LOOPX = SY-TABIX. * ... hat Verwendung CHECK NOT WU_CTAB-ISUSD IS INITIAL. * ... zugeh. Verw.-Tab. noch nicht ueberprueft CHECK WU_CTAB-WUTCK IS INITIAL. WU_MEMID-TABID = ‘LT‘. WU_MEMID-MATNR = WU_CTAB-MATNR. WU_MEMID-WERKS = WU_CTAB-WERKS. *d WU_MEMID-STLAN = WU_CTAB-STLAN. "HGA114476 WU_MEMID-STLAN = PM_STLAN. "HGA114476 CLEAR: LLTB. REFRESH: LLTB. IMPORT LTB TO LLTB FROM MEMORY ID WU_MEMID. WU_MEMID-TABID = ‘MT‘. CLEAR: LMATCAT. REFRESH: LMATCAT. IMPORT MATCAT TO LMATCAT FROM MEMORY ID WU_MEMID. *d LOOP AT LLTB. "HGC154389 *d CHECK LLTB-BMTYP = TYP_MAT. "HGC154389 *d CHECK LLTB-REKRI IS INITIAL "HGC154389 *d AND LLTB-REKRS IS INITIAL. "HGC154389 LOOP AT LLTB "HGC154389 WHERE BMTYP EQ ‘M‘ "HGC154389 AND REKRI IS INITIAL "HGC154389 *d AND rekrs IS INITIAL. "HGC154389 MBA148624 AND REKRS IS INITIAL "HGC154389 MBA148624 AND KZKUP IS INITIAL "MBC167558 AND EXCPT NE ‘CONV‘. "MBA148624 READ TABLE LMATCAT INDEX LLTB-TTIDX. WU_CTAB_KEY-MATNR = LMATCAT-MATNR. WU_CTAB_KEY-WERKS = LLTB-WERKS. *d WU_CTAB_KEY-STLAN = LLTB-STLAN. "HGA114476 WU_CTAB_KEY-STLAN = PM_STLAN. "HGA114476 READ TABLE WU_CTAB WITH KEY WU_CTAB_KEY. CHECK SY-SUBRC <> 0. PERFORM GET_WU_RECS USING LMATCAT-MATNR LLTB-WERKS *d LLTB-STLAN. "HGA114476 PM_STLAN. "HGA114476 IF SY-SUBRC = 0. * LTB und MATCAT exportieren; PERFORM EXP_WUTAB USING LMATCAT-MATNR LLTB-WERKS *d LLTB-STLAN. "HGA114476 PM_STLAN. "HGA114476 * Verwendungsergebnis registrieren PERFORM REG_WURES USING LMATCAT-MATNR LLTB-WERKS *d LLTB-STLAN "HGA114476 PM_STLAN "HGA114476 ‘X‘ ‘X‘ ‘ ‘. ELSE. * Verwendungsergebnis registrieren PERFORM REG_WURES USING LMATCAT-MATNR LLTB-WERKS *d LLTB-STLAN "HGA114476 PM_STLAN "HGA114476 ‘X‘ ‘ ‘ ‘ ‘. ENDIF. ENDLOOP. READ TABLE WU_CTAB INDEX WU_CTAB_LOOPX. WU_CTAB-WUTCK = ‘X‘. MODIFY WU_CTAB. ENDLOOP. SELPOOL = SAV_SELPOOL. CLEAR: LTB. REFRESH: LTB. CLEAR: MATCAT. REFRESH: MATCAT. READ TABLE WU_CTAB INDEX 1. WU_MEMID-TABID = ‘LT‘. WU_MEMID-MATNR = WU_CTAB-MATNR. WU_MEMID-WERKS = WU_CTAB-WERKS. WU_MEMID-STLAN = WU_CTAB-STLAN. CLEAR: LLTB. REFRESH: LLTB. IMPORT LTB TO LLTB FROM MEMORY ID WU_MEMID. WU_MEMID-TABID = ‘MT‘. CLEAR: LMATCAT. REFRESH: LMATCAT. IMPORT MATCAT TO LMATCAT FROM MEMORY ID WU_MEMID. ACT_LEVEL = 1 . WU_ML_STACK-STUFE = ACT_LEVEL. WU_ML_STACK-LOOPX = 1 . WU_ML_STACK-MATNR = WU_CTAB-MATNR. WU_ML_STACK-WERKS = WU_CTAB-WERKS. WU_ML_STACK-STLAN = WU_CTAB-STLAN. APPEND WU_ML_STACK. LTB_STRTX = 1 . WHILE END_FLAG IS INITIAL. *d LOOP AT LLTB FROM LTB_STRTX. "HGC154389 *d CHECK LLTB-BMTYP = TYP_MAT. "HGC154389 LOOP AT LLTB FROM LTB_STRTX "HGC154389 WHERE BMTYP EQ ‘M‘. "HGC154389 LTB_LOOPX = SY-TABIX. IF POP_FLAG IS INITIAL OR LLTB-SUMFG EQ ‘x‘. READ TABLE LMATCAT INDEX LLTB-TTIDX. MATCAT = LMATCAT. APPEND MATCAT. LLTB-TTIDX = SY-TABIX. LLTB-LEVEL = ACT_LEVEL. LTB = LLTB. APPEND LTB. CHECK LLTB-SUMFG NE ‘X‘. CHECK LLTB-REKRI IS INITIAL AND LLTB-EXCPT NE ‘CONV‘ "MBB167558 AND LLTB-KZKUP IS INITIAL "note 593874 AND LLTB-REKRS IS INITIAL. WU_CTAB_KEY-MATNR = LMATCAT-MATNR. WU_CTAB_KEY-WERKS = LLTB-WERKS. *d WU_CTAB_KEY-STLAN = LLTB-STLAN. "HGA114476 WU_CTAB_KEY-STLAN = PM_STLAN. "HGA114476 READ TABLE WU_CTAB WITH KEY WU_CTAB_KEY. IF NOT WU_CTAB-ISUSD IS INITIAL. WU_ML_STACK-STUFE = ACT_LEVEL + 1 . WU_ML_STACK-LOOPX = 1 . WU_ML_STACK-MATNR = LMATCAT-MATNR. WU_ML_STACK-WERKS = LLTB-WERKS. *d WU_ML_STACK-STLAN = LLTB-STLAN. "HGA114476 WU_ML_STACK-STLAN = PM_STLAN. "HGA114476 APPEND WU_ML_STACK. STACK_PREVX = SY-TABIX - 1 . POP_FLAG = ‘X‘. ENDIF. ELSE. READ TABLE WU_ML_STACK WITH KEY ACT_LEVEL. WU_ML_STACK-LOOPX = LTB_LOOPX. MODIFY WU_ML_STACK INDEX SY-TABIX. STACK_FLAG = ‘X‘. EXIT. ENDIF. ENDLOOP. IF NOT POP_FLAG IS INITIAL. CLEAR: POP_FLAG. * ?war LLTB-Loop zuende * ja IF STACK_FLAG IS INITIAL. * vorletzten Stack-Satz einlesen READ TABLE WU_ML_STACK INDEX STACK_PREVX. * Anzahl Saetze der LLTB ermitteln DESCRIBE TABLE LLTB LINES SY-TABIX. * Index um 1 hoeher setzen, damit kein weiterer * Satz dieser LLTB mehr gelesen werden kann WU_ML_STACK-LOOPX = SY-TABIX + 1 . * LeseIndex merken MODIFY WU_ML_STACK INDEX STACK_PREVX. ELSE. CLEAR: STACK_FLAG. ENDIF. ACT_LEVEL = ACT_LEVEL + 1 . READ TABLE WU_ML_STACK WITH KEY ACT_LEVEL. ELSE. IF ACT_LEVEL = 1 . EXIT. END_FLAG = ‘X‘. ENDIF. DESCRIBE TABLE WU_ML_STACK LINES SY-TABIX. DELETE WU_ML_STACK INDEX SY-TABIX. SY-TABIX = SY-TABIX - 1. READ TABLE WU_ML_STACK INDEX SY-TABIX. ENDIF. WU_MEMID-TABID = ‘LT‘. WU_MEMID-MATNR = WU_ML_STACK-MATNR. WU_MEMID-WERKS = WU_ML_STACK-WERKS. WU_MEMID-STLAN = WU_ML_STACK-STLAN. CLEAR: LLTB. REFRESH: LLTB. IMPORT LTB TO LLTB FROM MEMORY ID WU_MEMID. WU_MEMID-TABID = ‘MT‘. CLEAR: LMATCAT. REFRESH: LMATCAT. IMPORT MATCAT TO LMATCAT FROM MEMORY ID WU_MEMID. ACT_LEVEL = WU_ML_STACK-STUFE. LTB_STRTX = WU_ML_STACK-LOOPX. ENDWHILE. ENDIF. "单层展示,并调整布局;-》需求数量和变动数量 MOVE-CORRESPONDING LTB[] TO GT_DATA[]. "相似结构体赋值 LOOP AT GT_DATA. PERFORM MNG_DSP_NEW. GT_DATA-MAKTX = SELPOOL-MAKTX. GT_DATA-DIMNG = DSP_IMENG. GT_DATA-DRMNG = DSP_RMENG. GT_DATA-ZMATNR = S_IDNRK-LOW. GT_DATA-STATUS = ‘@5B@‘. GT_DATA-OBJIC = ‘@A6@‘. MODIFY GT_DATA. CLEAR:DSP_IMENG,DSP_RMENG,SAV_FRMNG. ENDLOOP. APPEND LINES OF GT_DATA[] FROM 1 TO LINES( GT_DATA[] ) TO GT_OUT[]. ENDIF. WHEN 2."记录错误信息 CONCATENATE GT_OUT-MSG ‘物料未找到‘ INTO GT_OUT-MSG. GT_OUT-STATUS = ‘@5C@‘. GT_OUT-ZMATNR = S_IDNRK-LOW. APPEND GT_OUT . WHEN 3. CONCATENATE GT_OUT-MSG ‘物料在该工厂BOM中未找到‘ INTO GT_OUT-MSG. GT_OUT-STATUS = ‘@5C@‘. GT_OUT-ZMATNR = S_IDNRK-LOW. APPEND GT_OUT . WHEN 4. CONCATENATE GT_OUT-MSG ‘对于物料的使用,没有做出选择‘ INTO GT_OUT-MSG. GT_OUT-ZMATNR = S_IDNRK-LOW. APPEND GT_OUT . WHEN 5. CONCATENATE GT_OUT-MSG ‘& 有效值输入, & 未被使用‘ INTO GT_OUT-MSG. GT_OUT-ZMATNR = S_IDNRK-LOW. APPEND GT_OUT . ENDCASE. CLEAR:GT_OUT-MSG. ENDLOOP. ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_OUTPUT_ALV *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* *& --> p1 text *& <-- p2 text *&---------------------------------------------------------------------* FORM FRM_OUTPUT_ALV . DEFINE SET_FCAT. IT_FIELDCAT_LVC-FIELDNAME = &1. IT_FIELDCAT_LVC-SCRTEXT_L = &2. IT_FIELDCAT_LVC-NO_ZERO = &3. IT_FIELDCAT_LVC-LZERO = &4. IT_FIELDCAT_LVC-REF_TABLE = &5. IT_FIELDCAT_LVC-REF_FIELD = &6. APPEND IT_FIELDCAT_LVC. END-OF-DEFINITION. IS_LAYOUT-ZEBRA = ‘X‘. IS_LAYOUT-CWIDTH_OPT = ‘X‘. IS_LAYOUT-SEL_MODE = ‘D‘. IS_LAYOUT-CTAB_FNAME = ‘FLDNAME‘. SET_FCAT ‘ZMATNR‘ TEXT-F01 ‘‘ ‘‘ ‘MARA‘ ‘MATNR‘. "主组件 SET_FCAT ‘DIMNG‘ TEXT-E21 ‘‘ ‘‘ ‘STPOL_ADD‘ ‘DIMNG‘. "所需数量(显示的) SET_FCAT ‘DRMNG‘ TEXT-E22 ‘‘ ‘‘ ‘STPOL_ADD‘ ‘DRMNG‘. "结果数量 SET_FCAT ‘STATUS‘ TEXT-E23 ‘‘ ‘‘ ‘ICON‘ ‘ICON_D‘. "错误状态 SET_FCAT ‘MSG‘ TEXT-E24 ‘‘ ‘‘ ‘‘ ‘‘. "错误信息 SET_FCAT ‘MAKTX‘ TEXT-E25 ‘‘ ‘‘ ‘MAKT‘ ‘MAKT‘. "错误信息 SET_FCAT ‘OBJIC‘ TEXT-E26 ‘‘ ‘‘ ‘ICON‘ ‘ICON_D‘. "对象状态 SET_FCAT ‘LEVEL‘ TEXT-F02 ‘‘ ‘‘ ‘STPOV‘ ‘LEVEL‘. "层次(在多层 BOM 展开中) SET_FCAT ‘MATNR‘ TEXT-F03 ‘‘ ‘‘ ‘STPOV‘ ‘MATNR‘. "物料编号 SET_FCAT ‘EQUNR‘ TEXT-F04 ‘‘ ‘‘ ‘STPOV‘ ‘EQUNR‘. "设备号 SET_FCAT ‘BMTYP‘ TEXT-F05 ‘‘ ‘‘ ‘STPOV‘ ‘BMTYP‘. "物料清单类别 SET_FCAT ‘TTIDX‘ TEXT-F06 ‘‘ ‘‘ ‘STPOV‘ ‘TTIDX‘. "在类别表内的索引 SET_FCAT ‘OJTXB‘ TEXT-F07 ‘‘ ‘‘ ‘STPOV‘ ‘OJTXB‘. "对象描述(部件) SET_FCAT ‘REVLV‘ TEXT-F08 ‘‘ ‘‘ ‘STPOV‘ ‘REVLV‘. "版次 SET_FCAT ‘CSLTY‘ TEXT-F09 ‘‘ ‘‘ ‘STPOV‘ ‘CSLTY‘. "标志: 配置物料(物料变式) SET_FCAT ‘LSTFG‘ TEXT-F10 ‘‘ ‘‘ ‘STPOV‘ ‘LSTFG‘. "复选框 SET_FCAT ‘WERKS‘ TEXT-F11 ‘‘ ‘‘ ‘STPOV‘ ‘WERKS‘. "工厂 SET_FCAT ‘IWERK‘ TEXT-F12 ‘‘ ‘‘ ‘STPOV‘ ‘IWERK‘. "工厂 SET_FCAT ‘STLAN‘ TEXT-F13 ‘‘ ‘‘ ‘STPOV‘ ‘STLAN‘. "BOM 用途 SET_FCAT ‘STKOZ‘ TEXT-F14 ‘‘ ‘‘ ‘STPOV‘ ‘STKOZ‘. "内部计数器 SET_FCAT ‘LOEKZ‘ TEXT-F15 ‘‘ ‘‘ ‘STPOV‘ ‘LOEKZ‘. "BOM 删除标志 SET_FCAT ‘BMENG‘ TEXT-F16 ‘‘ ‘‘ ‘STPOV‘ ‘BMENG‘. "基本数量 SET_FCAT ‘STLST‘ TEXT-F17 ‘‘ ‘‘ ‘STPOV‘ ‘STLST‘. "BOM 状态 SET_FCAT ‘BMEIN‘ TEXT-F18 ‘‘ ‘‘ ‘STPOV‘ ‘BMEIN‘. "BOM 基本单位 SET_FCAT ‘EMENG‘ TEXT-F19 ‘‘ ‘‘ ‘STPOV‘ ‘EMENG‘. "CS 浮点字段 (数量帮助...) SET_FCAT ‘FXMNG‘ TEXT-F20 ‘‘ ‘‘ ‘STPOV‘ ‘FXMNG‘. "CS 浮点字段 (数量帮助...) SET_FCAT ‘MSIGN‘ TEXT-F21 ‘‘ ‘‘ ‘STPOV‘ ‘MSIGN‘. "复选框 SET_FCAT ‘EMEIH‘ TEXT-F22 ‘‘ ‘‘ ‘STPOV‘ ‘EMEIH‘. "组件计量单位 SET_FCAT ‘CRTFG‘ TEXT-F23 ‘‘ ‘‘ ‘STPOV‘ ‘CRTFG‘. "复选框 SET_FCAT ‘SUMFG‘ TEXT-F24 ‘‘ ‘‘ ‘STPOV‘ ‘SUMFG‘. "总计记录指示符 SET_FCAT ‘EXCPT‘ TEXT-F25 ‘‘ ‘‘ ‘STPOV‘ ‘EXCPT‘. "例外 SET_FCAT ‘STLTY‘ TEXT-F26 ‘‘ ‘‘ ‘STPOV‘ ‘STLTY‘. "物料清单类别 SET_FCAT ‘STLNR‘ TEXT-F27 ‘‘ ‘‘ ‘STPOV‘ ‘STLNR‘. "物料单 SET_FCAT ‘STLKN‘ TEXT-F28 ‘‘ ‘‘ ‘STPOV‘ ‘STLKN‘. "BOM 项目节点号 SET_FCAT ‘STPOZ‘ TEXT-F29 ‘‘ ‘‘ ‘STPOV‘ ‘STPOZ‘. "内部计数器 SET_FCAT ‘DATUV‘ TEXT-F30 ‘‘ ‘‘ ‘STPOV‘ ‘DATUV‘. "有效起始日期 SET_FCAT ‘AENNR‘ TEXT-F31 ‘‘ ‘‘ ‘STPOV‘ ‘AENNR‘. "更改编号 SET_FCAT ‘ANDAT‘ TEXT-F32 ‘‘ ‘‘ ‘STPOV‘ ‘ANDAT‘. "日期记录创建于 SET_FCAT ‘ANNAM‘ TEXT-F33 ‘‘ ‘‘ ‘STPOV‘ ‘ANNAM‘. "创建记录的用户 SET_FCAT ‘AEDAT‘ TEXT-F34 ‘‘ ‘‘ ‘STPOV‘ ‘AEDAT‘. "最后更改的日期 SET_FCAT ‘AENAM‘ TEXT-F35 ‘‘ ‘‘ ‘STPOV‘ ‘AENAM‘. "更改对象用户的名称 SET_FCAT ‘IDNRK‘ TEXT-F36 ‘‘ ‘‘ ‘STPOV‘ ‘IDNRK‘. "BOM 组件 SET_FCAT ‘PSWRK‘ TEXT-F37 ‘‘ ‘‘ ‘STPOV‘ ‘PSWRK‘. "发放工厂 SET_FCAT ‘POSTP‘ TEXT-F38 ‘‘ ‘‘ ‘STPOV‘ ‘POSTP‘. "项目类别(物料单) SET_FCAT ‘POSNR‘ TEXT-F39 ‘‘ ‘‘ ‘STPOV‘ ‘POSNR‘. "BOM 项目号 SET_FCAT ‘SORTF‘ TEXT-F40 ‘‘ ‘‘ ‘STPOV‘ ‘SORTF‘. "排序字符串 SET_FCAT ‘MEINS‘ TEXT-F41 ‘‘ ‘‘ ‘STPOV‘ ‘MEINS‘. "组件计量单位 SET_FCAT ‘MENGE‘ TEXT-F42 ‘‘ ‘‘ ‘STPOV‘ ‘MENGE‘. "组件数量 SET_FCAT ‘FMENG‘ TEXT-F43 ‘‘ ‘‘ ‘STPOV‘ ‘FMENG‘. "固定数量 SET_FCAT ‘AUSCH‘ TEXT-F44 ‘‘ ‘‘ ‘STPOV‘ ‘AUSCH‘. "组件报废百分比 SET_FCAT ‘AVOAU‘ TEXT-F45 ‘‘ ‘‘ ‘STPOV‘ ‘AVOAU‘. "工序报废 SET_FCAT ‘NETAU‘ TEXT-F46 ‘‘ ‘‘ ‘STPOV‘ ‘NETAU‘. "标志:净废品 SET_FCAT ‘SCHGT‘ TEXT-F47 ‘‘ ‘‘ ‘STPOV‘ ‘SCHGT‘. "指示符:散装物料 SET_FCAT ‘BEIKZ‘ TEXT-F48 ‘‘ ‘‘ ‘STPOV‘ ‘BEIKZ‘. "物料供应标识符 SET_FCAT ‘ERSKZ‘ TEXT-F49 ‘‘ ‘‘ ‘STPOV‘ ‘ERSKZ‘. "标识:备件 SET_FCAT ‘RVREL‘ TEXT-F50 ‘‘ ‘‘ ‘STPOV‘ ‘RVREL‘. "标识:与销售相关的项目 SET_FCAT ‘SANFE‘ TEXT-F51 ‘‘ ‘‘ ‘STPOV‘ ‘SANFE‘. "标识:与生产相关项目 SET_FCAT ‘SANIN‘ TEXT-F52 ‘‘ ‘‘ ‘STPOV‘ ‘SANIN‘. "指示器:与工厂维护相关的项目 SET_FCAT ‘SANKA‘ TEXT-F53 ‘‘ ‘‘ ‘STPOV‘ ‘SANKA‘. "与成本核算相关标志 SET_FCAT ‘SANKO‘ TEXT-F54 ‘‘ ‘‘ ‘STPOV‘ ‘SANKO‘. "标识:与工程相关项目 SET_FCAT ‘SANVS‘ TEXT-F55 ‘‘ ‘‘ ‘STPOV‘ ‘SANVS‘. "指示器:高级配置 SET_FCAT ‘STKKZ‘ TEXT-F56 ‘‘ ‘‘ ‘STPOV‘ ‘STKKZ‘. "PM 装配指示符 SET_FCAT ‘REKRI‘ TEXT-F57 ‘‘ ‘‘ ‘STPOV‘ ‘REKRI‘. "标志: BOM 是递归的 SET_FCAT ‘REKRS‘ TEXT-F58 ‘‘ ‘‘ ‘STPOV‘ ‘REKRS‘. "标志: 递归性允许 SET_FCAT ‘CADPO‘ TEXT-F59 ‘‘ ‘‘ ‘STPOV‘ ‘CADPO‘. "CAD 标识 SET_FCAT ‘NLFZT‘ TEXT-F60 ‘‘ ‘‘ ‘STPOV‘ ‘NLFZT‘. "提前期偏置量 SET_FCAT ‘VERTI‘ TEXT-F61 ‘‘ ‘‘ ‘STPOV‘ ‘VERTI‘. "组件消耗的分配键值 SET_FCAT ‘ALPOS‘ TEXT-F62 ‘‘ ‘‘ ‘STPOV‘ ‘ALPOS‘. "指示符:替代项目 SET_FCAT ‘EWAHR‘ TEXT-F63 ‘‘ ‘‘ ‘STPOV‘ ‘EWAHR‘. "使用可能性按 % (可选项目) SET_FCAT ‘EKGRP‘ TEXT-F64 ‘‘ ‘‘ ‘STPOV‘ ‘EKGRP‘. "采购组 SET_FCAT ‘LIFZT‘ TEXT-F65 ‘‘ ‘‘ ‘STPOV‘ ‘LIFZT‘. "以天计算的交货时间 SET_FCAT ‘LIFNR‘ TEXT-F66 ‘‘ ‘‘ ‘STPOV‘ ‘LIFNR‘. "供应商或债权人的帐号 SET_FCAT ‘PREIS‘ TEXT-F67 ‘‘ ‘‘ ‘STPOV‘ ‘PREIS‘. "价格 SET_FCAT ‘PEINH‘ TEXT-F68 ‘‘ ‘‘ ‘STPOV‘ ‘PEINH‘. "价格单位 SET_FCAT ‘WAERS‘ TEXT-F69 ‘‘ ‘‘ ‘STPOV‘ ‘WAERS‘. "货币码 SET_FCAT ‘SAKTO‘ TEXT-F70 ‘‘ ‘‘ ‘STPOV‘ ‘SAKTO‘. "成本要素 SET_FCAT ‘ROANZ‘ TEXT-F71 ‘‘ ‘‘ ‘STPOV‘ ‘ROANZ‘. "可变大小项目号 SET_FCAT ‘ROMS1‘ TEXT-F72 ‘‘ ‘‘ ‘STPOV‘ ‘ROMS1‘. "尺寸1 SET_FCAT ‘ROMS2‘ TEXT-F73 ‘‘ ‘‘ ‘STPOV‘ ‘ROMS2‘. "尺寸2 SET_FCAT ‘ROMS3‘ TEXT-F74 ‘‘ ‘‘ ‘STPOV‘ ‘ROMS3‘. "大小 3 SET_FCAT ‘ROMEI‘ TEXT-F75 ‘‘ ‘‘ ‘STPOV‘ ‘ROMEI‘. "大小 1 到 3 的计量单位 SET_FCAT ‘ROMEN‘ TEXT-F76 ‘‘ ‘‘ ‘STPOV‘ ‘ROMEN‘. "可变尺寸项目数量 SET_FCAT ‘RFORM‘ TEXT-F77 ‘‘ ‘‘ ‘STPOV‘ ‘RFORM‘. "公式码 SET_FCAT ‘UPSKZ‘ TEXT-F78 ‘‘ ‘‘ ‘STPOV‘ ‘UPSKZ‘. "指示符 : 子项目存在 SET_FCAT ‘LTXSP‘ TEXT-F79 ‘‘ ‘‘ ‘STPOV‘ ‘LTXSP‘. "语言:用此语言存储长文本 SET_FCAT ‘POTX1‘ TEXT-F80 ‘‘ ‘‘ ‘STPOV‘ ‘POTX1‘. "BOM 项目文本(行1) SET_FCAT ‘POTX2‘ TEXT-F81 ‘‘ ‘‘ ‘STPOV‘ ‘POTX2‘. "BOM 项目文本 (行 2) SET_FCAT ‘OBJTY‘ TEXT-F82 ‘‘ ‘‘ ‘STPOV‘ ‘OBJTY‘. "对象类型(BOM 项目) SET_FCAT ‘MATKL‘ TEXT-F83 ‘‘ ‘‘ ‘STPOV‘ ‘MATKL‘. "物料组 SET_FCAT ‘WEBAZ‘ TEXT-F84 ‘‘ ‘‘ ‘STPOV‘ ‘WEBAZ‘. "以天计的收货处理时间 SET_FCAT ‘DOKAR‘ TEXT-F85 ‘‘ ‘‘ ‘STPOV‘ ‘DOKAR‘. "文档类型 SET_FCAT ‘DOKNR‘ TEXT-F86 ‘‘ ‘‘ ‘STPOV‘ ‘DOKNR‘. "凭证编号 SET_FCAT ‘DOKVR‘ TEXT-F87 ‘‘ ‘‘ ‘STPOV‘ ‘DOKVR‘. "文档版本 SET_FCAT ‘DOKTL‘ TEXT-F88 ‘‘ ‘‘ ‘STPOV‘ ‘DOKTL‘. "凭证部分 SET_FCAT ‘CSSTR‘ TEXT-F89 ‘‘ ‘‘ ‘STPOV‘ ‘CSSTR‘. "平均物料纯度按 % SET_FCAT ‘CLASS‘ TEXT-F90 ‘‘ ‘‘ ‘STPOV‘ ‘CLASS‘. "类号 SET_FCAT ‘KLART‘ TEXT-F91 ‘‘ ‘‘ ‘STPOV‘ ‘KLART‘. "类别种类 SET_FCAT ‘POTPR‘ TEXT-F92 ‘‘ ‘‘ ‘STPOV‘ ‘POTPR‘. "项目类别(物料单) SET_FCAT ‘EKORG‘ TEXT-F93 ‘‘ ‘‘ ‘STPOV‘ ‘EKORG‘. "采购组织 SET_FCAT ‘CLOBK‘ TEXT-F94 ‘‘ ‘‘ ‘STPOV‘ ‘CLOBK‘. "所需组件 SET_FCAT ‘CLMUL‘ TEXT-F95 ‘‘ ‘‘ ‘STPOV‘ ‘CLMUL‘. "允许的多重选择 SET_FCAT ‘KNOBJ‘ TEXT-F96 ‘‘ ‘‘ ‘STPOV‘ ‘KNOBJ‘. "具有分配相关性的对象编号 SET_FCAT ‘LGORT‘ TEXT-F97 ‘‘ ‘‘ ‘STPOV‘ ‘LGORT‘. "生产订单的发货地点 SET_FCAT ‘KZKUP‘ TEXT-F98 ‘‘ ‘‘ ‘STPOV‘ ‘KZKUP‘. "指示符:联合产品 SET_FCAT ‘INTRM‘ TEXT-F99 ‘‘ ‘‘ ‘STPOV‘ ‘INTRM‘. "中间物料 SET_FCAT ‘DVDAT‘ TEXT-E01 ‘‘ ‘‘ ‘STPOV‘ ‘DVDAT‘. "最后日期班次的日期 SET_FCAT ‘DVNAM‘ TEXT-E02 ‘‘ ‘‘ ‘STPOV‘ ‘DVNAM‘. "进行日期变更的用户的名称 SET_FCAT ‘DSPST‘ TEXT-E03 ‘‘ ‘‘ ‘STPOV‘ ‘DSPST‘. "展开类型 SET_FCAT ‘ALPST‘ TEXT-E04 ‘‘ ‘‘ ‘STPOV‘ ‘ALPST‘. "替代项目:策略 SET_FCAT ‘ALPRF‘ TEXT-E05 ‘‘ ‘‘ ‘STPOV‘ ‘ALPRF‘. "替代项目:评比定单 SET_FCAT ‘ALPGR‘ TEXT-E06 ‘‘ ‘‘ ‘STPOV‘ ‘ALPGR‘. "替代项目:组 SET_FCAT ‘DATUB‘ TEXT-E07 ‘‘ ‘‘ ‘STPOV‘ ‘DATUB‘. "有效截止日期 SET_FCAT ‘VWALT‘ TEXT-E08 ‘‘ ‘‘ ‘STPOV‘ ‘VWALT‘. "可选的 BOM SET_FCAT ‘AENRA‘ TEXT-E09 ‘‘ ‘‘ ‘STPOV‘ ‘AENRA‘. "更改号到 SET_FCAT ‘AENKZ‘ TEXT-E10 ‘‘ ‘‘ ‘STPOV‘ ‘AENKZ‘. "修改标识 SET_FCAT ‘MTBME‘ TEXT-E11 ‘‘ ‘‘ ‘STPOV‘ ‘MTBME‘. "基本计量单位 SET_FCAT ‘MTAME‘ TEXT-E12 ‘‘ ‘‘ ‘STPOV‘ ‘MTAME‘. "发货单位 SET_FCAT ‘UMREZ‘ TEXT-E13 ‘‘ ‘‘ ‘STPOV‘ ‘UMREZ‘. "基本计量单位转换分子 SET_FCAT ‘UMREN‘ TEXT-E14 ‘‘ ‘‘ ‘STPOV‘ ‘UMREN‘. "转换为基本计量单位的分母 SET_FCAT ‘NLFZV‘ TEXT-E15 ‘‘ ‘‘ ‘STPOV‘ ‘NLFZV‘. "工序的提前期偏移量 SET_FCAT ‘NLFMV‘ TEXT-E16 ‘‘ ‘‘ ‘STPOV‘ ‘NLFMV‘. "工序提前期偏移量的单位 SET_FCAT ‘VBELN‘ TEXT-E17 ‘‘ ‘‘ ‘STPOV‘ ‘VBELN‘. "销售订单 SET_FCAT ‘VBPOS‘ TEXT-E18 ‘‘ ‘‘ ‘STPOV‘ ‘VBPOS‘. "销售订单行项 SET_FCAT ‘PSPNR‘ TEXT-E19 ‘‘ ‘‘ ‘STPOV‘ ‘PSPNR‘. "WBS 要素 SET_FCAT ‘RFPNT‘ TEXT-E20 ‘‘ ‘‘ ‘STPOV‘ ‘RFPNT‘. "BOM 传输的参考点 CALL FUNCTION ‘REUSE_ALV_GRID_DISPLAY_LVC‘ EXPORTING * I_INTERFACE_CHECK = ‘ ‘ * I_BYPASSING_BUFFER = * I_BUFFER_ACTIVE = I_CALLBACK_PROGRAM = SY-REPID I_CALLBACK_PF_STATUS_SET = ‘FRM_SET_PF_STATUS‘ * I_CALLBACK_USER_COMMAND = ‘FRM_ALV_USER_COMMAND‘ * I_CALLBACK_TOP_OF_PAGE = ‘ ‘ * I_CALLBACK_HTML_TOP_OF_PAGE = ‘ ‘ * I_CALLBACK_HTML_END_OF_LIST = ‘ ‘ * I_STRUCTURE_NAME = * I_BACKGROUND_ID = ‘ ‘ * I_GRID_TITLE = * I_GRID_SETTINGS = IS_LAYOUT_LVC = IS_LAYOUT IT_FIELDCAT_LVC = IT_FIELDCAT_LVC[] * IT_EXCLUDING = * IT_SPECIAL_GROUPS_LVC = * IT_SORT_LVC = * IT_FILTER_LVC = * IT_HYPERLINK = * IS_SEL_HIDE = * I_DEFAULT = ‘X‘ * I_SAVE = ‘ ‘ * IS_VARIANT = * IT_EVENTS = * IT_EVENT_EXIT = * IS_PRINT_LVC = * IS_REPREP_ID_LVC = * I_SCREEN_START_COLUMN = 0 * I_SCREEN_START_LINE = 0 * I_SCREEN_END_COLUMN = 0 * I_SCREEN_END_LINE = 0 * I_HTML_HEIGHT_TOP = * I_HTML_HEIGHT_END = * IT_ALV_GRAPHICS = * IT_EXCEPT_QINFO_LVC = * IR_SALV_FULLSCREEN_ADAPTER = * IMPORTING * E_EXIT_CAUSED_BY_CALLER = * ES_EXIT_CAUSED_BY_USER = TABLES T_OUTTAB = GT_OUT[] EXCEPTIONS PROGRAM_ERROR = 1 OTHERS = 2. IF SY-SUBRC <> 0. ENDIF. ENDFORM. FORM FRM_SET_PF_STATUS USING RT_EXTAB TYPE SLIS_T_EXTAB. DATA:RS_EXTAB TYPE LINE OF SLIS_T_EXTAB. * CLEAR:rs_extab,rt_extab. * IF rb1 = ‘X‘. * rs_extab-fcode = ‘EXECUTE‘. * APPEND rs_extab TO rt_extab. * rs_extab-fcode = ‘REVERSE‘. * APPEND rs_extab TO rt_extab. * ENDIF. * SET PF-STATUS ‘ZMAIN‘ EXCLUDING RT_EXTAB. SET PF-STATUS ‘ZMAIN‘. ENDFORM. *&---------------------------------------------------------------------* *& Form MNG_DSP_NEW *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* *& --> p1 text *& <-- p2 text *&---------------------------------------------------------------------* FORM MNG_DSP_NEW . DATA: TMP_FLT1 TYPE F, TMP_FLT2 TYPE F. * abs. Btrg. IF LTB-MSIGN = ‘-‘. GT_DATA-MENGE = GT_DATA-MENGE * -1 . GT_DATA-EMENG = GT_DATA-EMENG * -1 . GT_DATA-FXMNG = GT_DATA-FXMNG * -1 . ENDIF. * einstufig IF GT_DATA-LEVEL = 1 . "单层 CASE GT_DATA-SUMFG. WHEN SPACE. GT_DATA-EMENG = GT_DATA-MENGE. *d GT_DATA-EMEIH = GT_DATA-MEINS. "HGA013934 IF NOT PM_EMENG IS INITIAL. IF GT_DATA-FMENG IS INITIAL. DSP_IMENG = PM_EMENG. TMP_FLT1 = GT_DATA-BMENG * ( PM_EMENG / GT_DATA-MENGE ) . IF TMP_FLT1 < MAX_FNUM. DSP_RMENG = TMP_FLT1. SAV_FRMNG = TMP_FLT1. "HGA131954 ELSE. DSP_RMENG = MAX_FNUM. SAV_FRMNG = MAX_FNUM. "HGA131954 ENDIF. ELSE. DSP_IMENG = GT_DATA-MENGE. DSP_RMENG = PNULL. SAV_FRMNG = FNULL. "HGA131954 ENDIF. ENDIF. IF NOT PM_RMENG IS INITIAL. IF GT_DATA-FMENG IS INITIAL. TMP_FLT1 = GT_DATA-MENGE * ( PM_RMENG / GT_DATA-BMENG ) . IF TMP_FLT1 < MAX_FNUM. DSP_IMENG = TMP_FLT1. ELSE. DSP_IMENG = MAX_FNUM. ENDIF. DSP_RMENG = PM_RMENG. SAV_FRMNG = PM_RMENG. "HGA131954 ELSE. DSP_IMENG = GT_DATA-MENGE. DSP_RMENG = PNULL. SAV_FRMNG = FNULL. "HGA131954 ENDIF. ENDIF. IF PM_EMENG IS INITIAL AND PM_RMENG IS INITIAL. IF GT_DATA-FMENG IS INITIAL. DSP_IMENG = GT_DATA-MENGE. DSP_RMENG = GT_DATA-BMENG. SAV_FRMNG = GT_DATA-BMENG. "HGA131954 ELSE. DSP_IMENG = GT_DATA-MENGE. DSP_RMENG = PNULL. SAV_FRMNG = FNULL. "HGA131954 ENDIF. ENDIF. ENDCASE. * mehrstufig ELSE. "多层需求数量和应用数量计算 * CHECK GT_DATA-EXCPT NE ‘CONV‘. "MBA148624 * IF MNG_STACK-EXTRM IS INITIAL. * CASE GT_DATA-SUMFG. * WHEN SPACE. * * IF NOT PM_EMENG IS INITIAL. * IF GT_DATA-FMENG IS INITIAL. * DSP_IMENG = OPO_MENGE. * * TMP_FLT1 = GT_DATA-BMENG * * ( MNG_STACK-EMENG * / GT_DATA-EMENG ). * IF TMP_FLT1 < MAX_FNUM. * DSP_RMENG = TMP_FLT1. * SAV_FRMNG = TMP_FLT1. "HGA131954 * ELSE. * DSP_RMENG = MAX_FNUM. * SAV_FRMNG = MAX_FNUM. "HGA131954 * ENDIF. * ELSE. * TMP_FLT1 = ( GT_DATA-EMENG * * OPO_MENGE ) * / MNG_STACK-EMENG . * IF TMP_FLT1 < MAX_FNUM. * DSP_IMENG = TMP_FLT1. * ELSE. * DSP_IMENG = MAX_FNUM. * ENDIF. * * DSP_RMENG = PNULL. * SAV_FRMNG = FNULL. "HGA131954 * ENDIF. * ENDIF. * * IF NOT PM_RMENG IS INITIAL. * IF GT_DATA-FMENG IS INITIAL. * TMP_FLT1 = ( ( GT_DATA-EMENG * * PM_RMENG ) * / GT_DATA-BMENG ) * * MNG_STACK-EMFAC. * IF TMP_FLT1 < MAX_FNUM. * DSP_IMENG = TMP_FLT1. * ELSE. * DSP_IMENG = MAX_FNUM. * ENDIF. * * DSP_RMENG = PM_RMENG. * SAV_FRMNG = PM_RMENG. "HGA131954 * ELSE. * DSP_IMENG = GT_DATA-EMENG * MNG_STACK-EMFAC. * DSP_RMENG = PNULL. * SAV_FRMNG = FNULL. "HGA131954 * ENDIF. * ENDIF. * * IF PM_EMENG IS INITIAL * AND PM_RMENG IS INITIAL. * * IF GT_DATA-FMENG IS INITIAL. * DSP_IMENG = OPO_MENGE. * * TMP_FLT1 = GT_DATA-BMENG * * ( MNG_STACK-EMENG * / GT_DATA-EMENG ). * IF TMP_FLT1 < MAX_FNUM. * DSP_RMENG = TMP_FLT1. * SAV_FRMNG = TMP_FLT1. "HGA131954 * * ELSE. * DSP_RMENG = MAX_FNUM. * SAV_FRMNG = MAX_FNUM. "HGA131954 * ENDIF. * ELSE. * TMP_FLT1 = ( GT_DATA-EMENG * * OPO_MENGE ) * / MNG_STACK-EMENG . * IF TMP_FLT1 < MAX_FNUM. * DSP_IMENG = TMP_FLT1. * ELSE. * DSP_IMENG = MAX_FNUM. * ENDIF. * * DSP_RMENG = PNULL. * SAV_FRMNG = FNULL. "HGA131954 * * ENDIF. * ENDIF. * * ENDCASE. * **d IF act_ldsgn = ‘-‘. "note 57953 * IF MNG_STACK-LDSGN = ‘-‘. "note 57953 * DSP_IMENG = DSP_IMENG * -1 . * ENDIF. * ELSE. * DSP_IMENG = PNULL. * DSP_RMENG = PNULL. * SAV_FRMNG = FNULL. "HGA131954 * ENDIF. ENDIF. * abs. Btrg. rück IF GT_DATA-MSIGN = ‘-‘. GT_DATA-MENGE = GT_DATA-MENGE * -1 . GT_DATA-EMENG = GT_DATA-EMENG * -1 . GT_DATA-FXMNG = GT_DATA-FXMNG * -1 . DSP_IMENG = DSP_IMENG * -1 . ENDIF. ENDFORM. *&---------------------------------------------------------------------* *& Form EXP_WUTAB *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* * -->P_S_IDNRK_LOW text * -->P_PM_WERKS text * -->P_PM_STLAN text *&---------------------------------------------------------------------* FORM EXP_WUTAB USING LCL_MATNR LCL_WERKS LCL_STLAN. WU_MEMID-TABID = ‘LT‘. WU_MEMID-MATNR = LCL_MATNR. WU_MEMID-WERKS = LCL_WERKS. WU_MEMID-STLAN = LCL_STLAN. EXPORT LTB TO MEMORY ID WU_MEMID. WU_MEMID-TABID = ‘MT‘. EXPORT MATCAT TO MEMORY ID WU_MEMID. ENDFORM. *&---------------------------------------------------------------------* *& Form REG_WURES *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* * -->P_S_IDNRK_LOW text * -->P_PM_WERKS text * -->P_PM_STLAN text * -->P_ text * -->P_ text * -->P_ text *&---------------------------------------------------------------------* FORM REG_WURES USING LCL_MATNR LCL_WERKS LCL_STLAN LCL_WUCHK LCL_ISUSD LCL_WUTCK. WU_CTAB_KEY-MATNR = LCL_MATNR. WU_CTAB_KEY-WERKS = LCL_WERKS. WU_CTAB_KEY-STLAN = LCL_STLAN. READ TABLE WU_CTAB WITH KEY WU_CTAB_KEY. IF SY-SUBRC <> 0. MOVE-CORRESPONDING WU_CTAB_KEY TO WU_CTAB. WU_CTAB-WUCHK = LCL_WUCHK. WU_CTAB-ISUSD = LCL_ISUSD. WU_CTAB-WUTCK = LCL_WUTCK. APPEND WU_CTAB. ELSE. IF NOT LCL_WUCHK IS INITIAL. WU_CTAB-WUCHK = LCL_WUCHK. ENDIF. IF NOT LCL_ISUSD IS INITIAL. WU_CTAB-ISUSD = LCL_ISUSD. ENDIF. IF NOT LCL_WUTCK IS INITIAL. WU_CTAB-WUTCK = LCL_WUTCK. ENDIF. MODIFY WU_CTAB. ENDIF. ENDFORM.