PP-BOM展开程序

*&---------------------------------------------------------------------*
*& Report ZMMR102
*&---------------------------------------------------------------------*
*& Author              :  NathanSun
*& Create Date         :  2019-05-23
*& Program Type        :  Report
*& Description         :  BOM展开程序
*&---------------------------------------------------------------------*
REPORT ZPPR001.
*&---------------------------------------------------------------------*
*& 包含               YN_TEST02_TOP
*&---------------------------------------------------------------------*
TABLES:MARA,STKO.

TYPE-POOLS:SLIS,T001W.

"定义ALV输出所需变量
DATAS_LAYOUT    TYPE SLIS_LAYOUT_ALV,
      GT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV.

DATA:TOPMAT  LIKE CSTMAT .
DATA:DSTST   LIKE CSDATA-XFELD .
DATA:STB     LIKE STPOX OCCURS WITH HEADER LINE  .
DATA:MATCAT  LIKE CSCMAT OCCURS WITH HEADER LINE  .
DATA:GT_MARD LIKE MARD OCCURS WITH HEADER LINE  .
DATA:GT_MSKA LIKE MSKA OCCURS WITH HEADER LINE  .
DATA:E_MT61D LIKE MT61D  .
DATA:E_MDKP  LIKE MDKP  .
DATA:MDPSX   LIKE MDPS OCCURS WITH HEADER LINE  .
DATA:MDEZX   LIKE MDEZ OCCURS WITH HEADER LINE  .
DATA:MDSUX   LIKE MDSU OCCURS WITH HEADER LINE  .

TYPESBEGIN OF GTS_DATA,
         WERKS   TYPE  STPOX-WERKS,                      "工厂
         WERKS_C TYPE  STPOX-WERKS,                      "工厂
         TTIDX   TYPE  STPOX-TTIDX,                      "在类别表内的索引
         MATNR_C TYPE  CSCMAT-MATNR,                     "根物料
         MATNR   TYPE  CSCMAT-MATNR,                     "父项物料
         MAKTX   TYPE  MAKT-MAKTX,                       "描述
         STLAN   TYPE  STPOX-STLAN,                      "BOM用途
         STLAL   TYPE  STPOX-STLAL,                      "可选BOM
         STUFE   TYPE  STPOX-STUFE,                      "层次
         BMENG   TYPE  STKO-BMENG,                       "需求数量
         POSNR   TYPE  STPOX-POSNR,                      "项目号
         IDNRK   TYPE  STPOX-IDNRK,                      "子项物料
         OJTXP   TYPE  STPOX-OJTXP,                      "描述
         MNGLG   TYPE  STPOX-MNGLG,                      "BOM用量
         MMEIN   TYPE  STPOX-MMEIN,                      "单位
         MATKL   TYPE  MARA-MATKL,                       "物料群组
         BESKZ   TYPE  MARC-BESKZ,                       "采购类型
         RGEKZ   TYPE  MARC-RGEKZ,                       "反冲标志
         PLIFZ   TYPE  MARC-PLIFZ,                       "L/T
         LABST   TYPE  MARD-LABST,                       "非限制使用的估价的库存
         KALAB   TYPE  MSKA-KALAB,                       "非限制使用的估价的库存
         ZKCSL   TYPE  MSKA-KALAB,                       "当前库存数量
         MNG01   TYPE  MDEZ-MNG01,                       "承诺数量
         ZKGSL   TYPE  MSKA-KALAB,                       "可供数量
         ALPGR   TYPE  STPOX-ALPGR,                      "替代群组
         ALPRF   TYPE  STPOX-ALPRF,                      "优先顺序
         EWAHR   TYPE  STPOX-EWAHR,                      "使用几率
       END OF GTS_DATA.

DATAGT_DATA   TYPE TABLE OF GTS_DATA WITH HEADER LINE.
DATAGT_DATA_A TYPE TABLE OF GTS_DATA WITH HEADER LINE.
DATAGV_TOP    TYPE SDYDO_TEXT_ELEMENT.

SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME.
PARAMETERS:     S_WERKS  TYPE  T001W-WERKS  MODIF ID C1 OBLIGATORY.                        "工厂
SELECT-OPTIONSS_MATNR  FOR   MARA-MATNR   MODIF ID C1 OBLIGATORY.                        "物料
PARAMETERS:     S_BMENG  TYPE  STKO-BMENG DEFAULT '1' MODIF ID C1 OBLIGATORY.              "需求数量
SELECTION-SCREEN END OF BLOCK B1.

*&---------------------------------------------------------------------*
*& Form SCREEN_SETTING
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM SCREEN_SETTING .

ENDFORM.
*&---------------------------------------------------------------------*
*& Form FOM_GETDATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM FOM_GETDATA .
  DATA GT_MARA TYPE TABLE OF MARA WITH HEADER LINE .
  DATA LV_AUFNR TYPE RESB-AUFNR .
  DATA LV_OBJNR TYPE AUFK-OBJNR .
  DATA JEST     TYPE JEST .
  CLEAR GT_MARA[] .
  SELECT MATNR INTO CORRESPONDING FIELDS OF TABLE GT_MARA[] FROM MARA
    
WHERE MATNR IN S_MATNR
    
.
  CLEAR GT_DATA[] .
  LOOP AT GT_MARA.
    CLEAR STB[] .
    CLEAR MATCAT[] .
    CLEAR TOPMAT .
    CLEAR DSTST .
    CALL FUNCTION 'CS_BOM_EXPL_MAT_V2'
      EXPORTING
        CAPID                 'PP01' "应用程序一般为PP01
        DATUV                 SY-DATUM "通常为系统的当前日期
        MTNRV                 GT_MARA-MATNR "要展开BOM的物料
        MEHRS                 'X' " x表示多层展开﹐space表示只展开第一层
        WERKS                 S_WERKS "通常为1000
        EMENG                 S_BMENG "需求数量
      IMPORTING
        TOPMAT                TOPMAT
        DSTST                 
DSTST
      
TABLES
        STB                   STB "展开的BOM存放在该内表
        MATCAT                MATCAT "下面含有元件的物料存放在该内表
      EXCEPTIONS
        ALT_NOT_FOUND         1
        CALL_INVALID          2
        MATERIAL_NOT_FOUND    3
        MISSING_AUTHORIZATION 4
        NO_BOM_FOUND          5
        NO_PLANT_DATA         6
        NO_SUITABLE_BOM_FOUND 7
        CONVERSION_ERROR      8
        OTHERS                9.

*    IF SY-SUBRC <> 0.
*      MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*      WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
*      EXIT.
*    ENDIF.

    LOOP AT STB.

      GT_DATA-WERKS   STB-WERKS .
      GT_DATA-TTIDX   STB-TTIDX .
      GT_DATA-MATNR_C GT_MARA-MATNR .
      GT_DATA-STLAN   STB-STLAN .
      GT_DATA-STUFE   STB-STUFE .
      GT_DATA-POSNR   STB-POSNR .
      GT_DATA-IDNRK   STB-IDNRK .
      GT_DATA-OJTXP   STB-OJTXP .
      GT_DATA-MNGLG   STB-MNGLG .
      GT_DATA-MMEIN   STB-MMEIN .
      GT_DATA-ALPGR   STB-ALPGR .
      GT_DATA-ALPRF   STB-ALPRF .
      GT_DATA-EWAHR   STB-EWAHR .

      CLEAR MATCAT .
      READ TABLE MATCAT WITH KEY INDEX STB-TTIDX .
      GT_DATA-MATNR   MATCAT-MATNR .
      SELECT SINGLE MAKTX INTO GT_DATA-MAKTX FROM MAKT
        
WHERE MATNR GT_DATA-MATNR_C
          
AND SPRAS 1
          .
      GT_DATA-MATNR   GT_DATA-MATNR_C .
      GT_DATA-STLAL   STB-STLAL .
      GT_DATA-BMENG   S_BMENG .
      SELECT SINGLE MATKL INTO GT_DATA-MATKL FROM MARA
        
WHERE MATNR GT_DATA-MATNR
          
.
      SELECT SINGLE BESKZ RGEKZ PLIFZ INTO GT_DATA-BESKZ GT_DATA-RGEKZ GT_DATA-PLIFZ FROM MARC
        
WHERE MATNR GT_DATA-MATNR
          
AND WERKS S_WERKS
          
.
*常规非限制使用库存数量
      CLEAR GT_MARD[] .
      SELECT LABST INTO CORRESPONDING FIELDS OF TABLE GT_MARD FROM MARD
        
WHERE MATNR GT_DATA-MATNR
          
AND WERKS S_WERKS
          
.
      CLEAR GT_DATA-LABST .
      LOOP AT GT_MARD.
        GT_DATA-LABST GT_DATA-LABST + GT_MARD-LABST .
        CLEAR GT_MARD .
      ENDLOOP.
*销售订单非限制使用库存数量(MTO)
      CLEAR GT_MSKA[] .
      SELECT KALAB INTO CORRESPONDING FIELDS OF TABLE GT_MSKA FROM MSKA
        
WHERE MATNR GT_DATA-MATNR
          
AND WERKS S_WERKS
          
.
      CLEAR GT_DATA-KALAB .
      LOOP AT GT_MSKA.
        GT_DATA-KALAB GT_DATA-KALAB + GT_MSKA-KALAB .
        CLEAR GT_MSKA .
      ENDLOOP.
*当前库存数量
      GT_DATA-ZKCSL GT_DATA-LABST + GT_DATA-KALAB .
*承诺数量
      CLEAR E_MT61D .
      CLEAR E_MDKP .
      CLEAR MDPSX[] .
      CLEAR MDEZX[] .
      CLEAR MDSUX[] .
      CALL FUNCTION 'MD_MRP_LIST_API'
        EXPORTING
*         PLSCN                    =
          MATNR                    GT_DATA-IDNRK
          WERKS                    
GT_DATA-WERKS
*         BERID                    =
*         AFIBZ                    =
*         SINFG                    = 'X'
*         LIFNR                    =
*         AFHOR                    =
*         DTNUM                    =
*         INPER                    =
*         DISPLAY_LIST_MDPSX       =
*         DISPLAY_LIST_MDEZX       =
*         DISPLAY_LIST_MDSUX       =
        IMPORTING
          E_MT61D                  E_MT61D
          E_MDKP                   
E_MDKP
        
TABLES
          MDPSX                    MDPSX[]
          MDEZX                    
MDEZX[]
          MDSUX                    
MDSUX[]
        
EXCEPTIONS
          MRP_LIST_NOT_FOUND       1
          MATERIAL_PLANT_NOT_FOUND 2
          ERROR                    3
          OTHERS                   4.

      CLEAR GT_DATA-MNG01.
      LOOP AT MDEZX WHERE DELB0 'OrdRes' AND MNG01 < 0.
*        READ TABLE MDPSX WITH KEY DAT00 = MDEZX-DAT01 BAUGR = MDEZX-EXTRA.
        CLEAR MDPSX .
        READ TABLE MDPSX INDEX SY-TABIX.
*        CLEAR LV_AUFNR .
*        SELECT SINGLE AUFNR INTO LV_AUFNR FROM RESB
*          WHERE RSNUM = MDPSX-RSNUM
*          .
        CLEAR LV_OBJNR .
        SELECT SINGLE OBJNR INTO LV_OBJNR FROM AUFK
          
WHERE AUFNR MDPSX-DEL12
          
.
        CLEARJEST.
        SELECT SINGLE INTO CORRESPONDING FIELDS OF JEST FROM JEST
          
WHERE OBJNR LV_OBJNR
            
AND STAT  'I0002'
            AND INACT SPACE.
        IF SY-SUBRC 0.
          GT_DATA-MNG01 GT_DATA-MNG01 + MDEZX-MNG01 .
        ENDIF.
        CLEAR MDEZX .
      ENDLOOP.

*可供数量
      GT_DATA-ZKGSL GT_DATA-ZKCSL + GT_DATA-MNG01 .
      GT_DATA-WERKS_C S_WERKS .

      APPEND GT_DATA .
      CLEAR GT_DATA .
      CLEAR STB .
    ENDLOOP.
  ENDLOOP.
*  SORT GT_DATA[] BY MATNR_C MATNR .

ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_DISPLAY
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM FRM_DISPLAY .
  CLEAR S_LAYOUT.
  S_LAYOUT-ZEBRA 'X'.
  S_LAYOUT-COLWIDTH_OPTIMIZE 'X'.
*  s_layout-box_fieldname    = 'BOX'.
  PERFORM FRM_FILL_FIELD .

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      IS_LAYOUT               S_LAYOUT
      IT_FIELDCAT             
GT_FIELDCAT
      I_CALLBACK_PROGRAM      
SY-REPID
*     I_CALLBACK_PF_STATUS_SET    = 'PF_STATUS_SET'
*     i_callback_html_top_of_page = 'HTML_TOP_OF_PAGE'
      I_CALLBACK_USER_COMMAND 'USER_COMMAND'
    TABLES
      T_OUTTAB                GT_DATA[].
ENDFORM.

FORM FRM_FILL_FIELD .
  DATA:  WA_FIELDCAT TYPE SLIS_FIELDCAT_ALV.
  DEFINE FILL_FIELD.
    wa_fieldcat-fieldname &1.
    wa_fieldcat-seltext_l &2.
*    IF wa_fieldcat-fieldname =  'MSLJH' or wa_fieldcat-fieldname =  'WCBJH'.
*      wa_fieldcat-EMPHASIZE = 'C600'. "设置字段的颜色
*    ENDIF.
*
*    IF wa_fieldcat-fieldname =  'MSLMB' or wa_fieldcat-fieldname =  'WCBMB'.
*      wa_fieldcat-EMPHASIZE = 'C710'. "设置字段的颜色
*    ENDIF.

    IF wa_fieldcat-fieldname 'PLNBEZ' OR wa_fieldcat-fieldname 'MATNR' .
      wa_fieldcat-ref_tabname 'MARA'.
      wa_fieldcat-ref_fieldname 'MATNR'.
    ENDIF.

    IF wa_fieldcat-fieldname 'ARKTX' OR wa_fieldcat-fieldname 'WAKTX' .
      wa_fieldcat-ref_tabname 'VBAP'.
      wa_fieldcat-ref_fieldname 'ARKTX'.
    ENDIF.

    IF wa_fieldcat-fieldname 'AUFNR' .
      wa_fieldcat-ref_tabname 'AUFK'.
      wa_fieldcat-ref_fieldname 'AUFNR'.
    ENDIF.

    APPEND wa_fieldcat TO gt_fieldcat.
    CLEAR wa_fieldcat.
  END-OF-DEFINITION.
  FILL_FIELD :
        'WERKS_C'  '工厂',
        'MATNR'    '父项物料',
        'MAKTX'    '描述',
        'STLAN'    'BOM用途',
        'STLAL'    '可选BOM',
        'STUFE'    '层次',
        'BMENG'    '需求数量',
        'POSNR'    '项目号',
        'IDNRK'    '子项物料',
        'OJTXP'    '描述',
        'MNGLG'    'BOM用量',
        'MMEIN'    '单位',
        'WERKS'    '供货工厂',
        'MATKL'    '物料群组',
        'BESKZ'    '采购类型',
        'RGEKZ'    '反冲标志',
        'PLIFZ'    'L/T',
        'ZKCSL'    '当前库存数量',
        'MNG01'    '承诺数量',
        'ZKGSL'    '可供数量',
        'ALPGR'    '替代群组',
        'ALPRF'    '优先顺序',
        'EWAHR'    '使用几率'.

ENDFORM.

FORM PF_STATUS_SET USING RT_EXTAB TYPE SLIS_T_EXTAB.
  SET PF-STATUS 'STANDARD_FULLSCREEN'.
ENDFORM.

FORM USER_COMMAND USING I_UCOMM LIKE SY-UCOMM
                    IS_SELFIELD 
TYPE SLIS_SELFIELD.
  DATAREF TYPE REF TO CL_GUI_ALV_GRID.
  DATA LV_STABLE TYPE LVC_S_STBL.   "刷新稳定性
  RANGESL_WERKS FOR T001W-WERKS.
  RANGESL_MATNR FOR MARA-MATNR.
  DATA:L_BUKRS TYPE T001K-BUKRS.

  LV_STABLE-ROW '1'.
  LV_STABLE-COL '1'.

  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    IMPORTING
      E_GRID REF.
  CALL METHOD REF->CHECK_CHANGED_DATA.

  CASE I_UCOMM.
    WHEN '&IC1'."表示双击

    WHEN 'POST_T'.
  ENDCASE.

  CALL METHOD REF->REFRESH_TABLE_DISPLAY
    
EXPORTING
      IS_STABLE LV_STABLE.
ENDFORM.

INITIALIZATION .

AT SELECTION-SCREEN.
  PERFORM SCREEN_SETTING.

START-OF-SELECTION.
  PERFORM FOM_GETDATA .
  PERFORM FRM_DISPLAY.

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值