SAP PP 批量反查BOM

转自链接: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实现;

模拟案例:

前端业务界面:

SAP PP 批量反查BOM
批量反查BOM界面

ALV报表界面:

SAP PP 批量反查BOM
批量反查BOM结果

相关程序

主程序
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.

 

 




SAP PP 批量反查BOM

上一篇:根据经纬度,查询最近距离


下一篇:web api 路由规则和接收数据