SAP PP 批量反查BOM

业务背景介绍

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.

  • 9
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值