*&---------------------------------------------------------------------*
*& 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输出所需变量
DATA: S_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 0 WITH HEADER LINE .
DATA:MATCAT LIKE CSCMAT OCCURS 0 WITH HEADER LINE .
DATA:GT_MARD LIKE MARD OCCURS 0 WITH HEADER LINE .
DATA:GT_MSKA LIKE MSKA OCCURS 0 WITH HEADER LINE .
DATA:E_MT61D LIKE MT61D .
DATA:E_MDKP LIKE MDKP .
DATA:MDPSX LIKE MDPS OCCURS 0 WITH HEADER LINE .
DATA:MDEZX LIKE MDEZ OCCURS 0 WITH HEADER LINE .
DATA:MDSUX LIKE MDSU OCCURS 0 WITH HEADER LINE .
TYPES: BEGIN 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.
DATA: GT_DATA TYPE TABLE OF GTS_DATA WITH HEADER LINE.
DATA: GT_DATA_A TYPE TABLE OF GTS_DATA WITH HEADER LINE.
DATA: GV_TOP TYPE SDYDO_TEXT_ELEMENT.
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME.
PARAMETERS: S_WERKS TYPE T001W-WERKS MODIF ID C1 OBLIGATORY. "工厂
SELECT-OPTIONS: S_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
.
CLEAR: JEST.
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.
DATA: REF TYPE REF TO CL_GUI_ALV_GRID.
DATA : LV_STABLE TYPE LVC_S_STBL. "刷新稳定性
RANGES: L_WERKS FOR T001W-WERKS.
RANGES: L_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.
PP-BOM展开程序
最新推荐文章于 2023-11-24 16:33:56 发布