*&---------------------------------------------------------------------*
*& REPORT ZRPT_MM_WLKC *
*& *
*&---------------------------------------------------------------------*
*& 某系列物料下所有的零件平均用量 *
*& *
*&---------------------------------------------------------------------*
REPORT ZRPT_MM_WLKC .
TABLES:SSCRFIELDS,MARC,STPO,T023T,MARA,MAKT,T134T,MAST,ZMBOM,ZCBOM.
TYPE-POOLS:SLIS.
TYPES: BEGIN OF T_H_ITAB,"按系列平均显示
MATKL LIKE MARA-MATKL,
C_MATNR LIKE MARA-MATNR,
C_MAKTX LIKE MAKT-MAKTX,
WGBEZ LIKE T023T-WGBEZ,
MENGE LIKE STPO-MENGE,"BOM用量
EISBE LIKE MARC-EISBE,"安全库存
SOBSL LIKE MARC-SOBSL,"特殊采购类型
COUNT TYPE I,
END OF T_H_ITAB,
BEGIN OF T_ITAB, "按物料显示
MATKL LIKE MARA-MATKL,
M_MATNR LIKE MARA-MATNR,
M_MAKTX LIKE MAKT-MAKTX,
STLNR LIKE MAST-STLNR,"物料单号
C_MATNR LIKE MARA-MATNR,
C_MAKTX LIKE MAKT-MAKTX,
MENGE LIKE STPO-MENGE,"BOM用量
MEINS LIKE STPO-MEINS, "组件计量单位
EISBE LIKE MARC-EISBE,"安全库存
SOBSL LIKE MARC-SOBSL,"特殊采购类型
WERKS LIKE MARC-WERKS,"工厂
MTART LIKE MARA-MTART,"组件物料类型
WGBEZ LIKE T023T-WGBEZ,
END OF T_ITAB
.
DATA:H_ITAB TYPE TABLE OF T_H_ITAB WITH HEADER LINE,
ITAB1 TYPE TABLE OF T_ITAB WITH HEADER LINE,"半成品
ITAB TYPE TABLE OF T_ITAB WITH HEADER LINE."成品
CONTROLS: TAB_CONTROL TYPE TABLEVIEW USING SCREEN 0200.
DATA: OK_0200 LIKE SY-UCOMM.
DATA:STDATUM LIKE SY-DATUM,
STUZEIT LIKE SY-UZEIT.
FIELD-SYMBOLS:<GOB_FS> TYPE STANDARD TABLE .
SELECTION-SCREEN BEGIN OF BLOCK BLK1 WITH FRAME TITLE TXT1 .
SELECT-OPTIONS:
MATNR FOR MARA-MATNR, "物料号
MATKL FOR MARA-MATKL, "物料组
MTART FOR MARA-MTART DEFAULT 'Z013' TO 'Z015' OBLIGATORY."默认成品物料类型展开
PARAMETERS:
TOTAL AS CHECKBOX DEFAULT 'X'.
SELECTION-SCREEN END OF BLOCK BLK1.
SELECTION-SCREEN BEGIN OF BLOCK BLK2 WITH FRAME TITLE TXT2 .
"PARAMETERS:
" WERKS LIKE MAST-WERKS DEFAULT '1000' OBLIGATORY.
SELECT-OPTIONS:
WERKS FOR MAST-WERKS DEFAULT '1000' OBLIGATORY,
STLAN FOR MAST-STLAN DEFAULT '1' OBLIGATORY, "BOM用途
STLAL FOR MAST-STLAL, "选择BOM
SOBSL FOR MARC-SOBSL DEFAULT '30' OBLIGATORY "默认组件和散件都需要展开的物料
.
SELECTION-SCREEN END OF BLOCK BLK2.
SELECTION-SCREEN BEGIN OF BLOCK BLK3 WITH FRAME TITLE TXT3 .
PARAMETERS:ZTEST AS CHECKBOX USER-COMMAND CHECK DEFAULT 'X'."选择此条件表示将数据保存到数据库中
PARAMETERS:ZMUUPD AS CHECKBOX DEFAULT 'X'."更新到ZPP_MU01里
*PARAMETERS:P_EKGRP LIKE MARC-EKGRP.
SELECT-OPTIONS:
P_EKGRP FOR MARC-EKGRP,
S_MTART FOR MARA-MTART.
SELECTION-SCREEN END OF BLOCK BLK3.
*SET SCREEN 200.
INITIALIZATION.
TXT1 = '请输入选择条件'.
TXT2 = '附加条件'.
TXT3 = '特殊运行'.
* MTART-LOW = 'Z011'.
* MTART-OPTION = 'EQ'.
* MTART-SIGN = 'I'.
* APPEND MTART.
AT SELECTION-SCREEN.
CASE SSCRFIELDS-UCOMM.
WHEN 'CHECK'.
IF ZTEST <> 'X' . .
CALL FUNCTION 'POPUP_TO_DISPLAY_TEXT_LO'
EXPORTING
* TITEL = ' '
TEXTLINE1 = '数据将保存到数据库表ZCBOM,ZMBOM中 '
* TEXTLINE2 = ' '
* TEXTLINE3 = ' '
START_COLUMN = 25
START_ROW = 6.
CLEAR: MATNR[],MATKL[].
ENDIF.
ENDCASE.
END-OF-SELECTION.
STDATUM = SY-DATUM.
STUZEIT = SY-UZEIT.
PERFORM GET_DATA.
IF TOTAL = 'X'.
ASSIGN H_ITAB[] TO <GOB_FS>.
ELSE.
ASSIGN ITAB[] TO <GOB_FS>.
ENDIF.
PERFORM WRITERPTRUNRECORD.
PERFORM DIS_ALV USING <GOB_FS> TOTAL.
*&---------------------------------------------------------------------*
*& FORM WRITERPTRUNRECORD
*&---------------------------------------------------------------------*
* TEXT
*----------------------------------------------------------------------*
FORM WRITERPTRUNRECORD.
DATA:L_WERKS LIKE T001W OCCURS 0 WITH HEADER LINE.
SELECT * INTO TABLE L_WERKS
FROM T001W
WHERE WERKS IN WERKS.
LOOP AT L_WERKS.
GET TIME.
CALL FUNCTION 'ZSYS_RPT_RUNRECORD'
EXPORTING
TCODE = SY-TCODE
PROGRAMM = SY-CPROG
"BUKRS = BUKRS
WERKS = L_WERKS-WERKS
DATUMRST = STDATUM
UZEITRST = STUZEIT
BATCH = SY-BATCH
DATUMREND = SY-DATUM
UZEITREND = SY-UZEIT
DATUMC = '20060429'
RUNNER = SY-UNAME
RPTSRC = 'MM'.
ENDLOOP.
ENDFORM. "WRITERPTRUNRECORD
*
*&---------------------------------------------------------------------*
*& FORM GET_DATA
*&---------------------------------------------------------------------*
* TEXT
*----------------------------------------------------------------------*
* --> P1 TEXT
* <-- P2 TEXT
*----------------------------------------------------------------------*
FORM GET_DATA .
TYPES: BEGIN OF LOC_T_ITAB,
MATKL LIKE MARA-MATKL,
M_MATNR LIKE MARA-MATNR,
M_MAKTX LIKE MAKT-MAKTX,
STLNR LIKE MAST-STLNR, "物料单号
STLAL LIKE MAST-STLAL,
STLAN LIKE MAST-STLAN,
WERKS LIKE MAST-WERKS,
WGBEZ LIKE T023T-WGBEZ,
END OF LOC_T_ITAB
.
***** 栈结构
TYPES:
BEGIN OF LOC_T_STK_TAB,
* M_MANTR LIKE MARC-MATNR,
* C_MATNR LIKE MARC-MATNR,
STLNR LIKE MAST-STLNR ,
STLAL LIKE MAST-STLAL,
STLAN LIKE MAST-STLAN,
WERKS LIKE MAST-WERKS,
* SOBSL LIKE MAST-SOBSL,
MENGE LIKE STPO-MENGE,
SOBSL LIKE MARC-SOBSL,
END OF LOC_T_STK_TAB
.
******************
DATA:TMPIDNRK LIKE STPO-IDNRK.
DATA: LOC_ITAB TYPE TABLE OF LOC_T_ITAB WITH HEADER LINE,
L_MARA TYPE TABLE OF MARA WITH HEADER LINE,
LOC_WA_STK TYPE LOC_T_STK_TAB ,
LOC_STK_TAB TYPE TABLE OF LOC_T_STK_TAB WITH HEADER LINE.
DATA:BEGIN OF LOC_STPO OCCURS 0,
C_MATNR LIKE STPO-IDNRK,
C_MAKTX LIKE MAKT-MAKTX,
MENGE LIKE STPO-MENGE,
MEINS LIKE STPO-MEINS, "组件计量单位
SOBSL LIKE MARC-SOBSL, "特殊采购标识
EISBE LIKE MARC-EISBE, "安全库存
VERKZ LIKE MARC-VERKZ, "版本标识符
MTART LIKE MARA-MTART, "物料类型
END OF LOC_STPO.
FIELD-SYMBOLS:<LOC_FS> TYPE T_H_ITAB.
DATA:LT001W LIKE T001W OCCURS 0 WITH HEADER LINE.
SELECT * INTO TABLE LT001W FROM T001W WHERE WERKS IN WERKS.
LOOP AT LT001W.
CLEAR LOC_ITAB[]. CLEAR LOC_STPO[].CLEAR ITAB[].CLEAR ITAB1[].CLEAR H_ITAB[].
***************选择出成品
SELECT MARA~MATKL "物料组
MARA~MATNR "物料
MAKT~MAKTX "物料描述
MAST~STLNR "物料单号
MAST~STLAL
MAST~STLAN
MAST~WERKS
INTO TABLE LOC_ITAB
FROM MAST
JOIN MARA ON ( MARA~MATNR = MAST~MATNR AND MARA~LVORM = SPACE )
JOIN MAKT ON ( MAKT~MATNR = MAST~MATNR AND MAKT~SPRAS = '1' )
WHERE MARA~MATNR IN MATNR AND
MARA~MTART IN MTART AND
MARA~MATKL IN MATKL AND
MARA~LVORM = SPACE AND
MAST~STLAL IN STLAL AND
MAST~STLAN IN STLAN AND
MAST~WERKS EQ LT001W-WERKS.
********** 处理每一个成品下BOM
LOOP AT LOC_ITAB.
CLEAR LOC_STK_TAB.
SELECT SINGLE T023T~WGBEZ into LOC_ITAB-WGBEZ from T023T
where T023T~MATKL = LOC_ITAB-MATKL AND T023T~SPRAS = '1'.
modify LOC_ITAB.
MOVE-CORRESPONDING LOC_ITAB TO LOC_STK_TAB.
LOC_STK_TAB-MENGE = '1' .
**** 循环初始化把一个产品的物料单号放入队列中
APPEND LOC_STK_TAB.
WHILE LOC_STK_TAB[] IS NOT INITIAL . "当队列中物料单号不为空时
READ TABLE LOC_STK_TAB INDEX 1 . "取出物料单号,展开其下的BOM
DELETE LOC_STK_TAB INDEX 1 . "删除从队列中
SELECT STPO~IDNRK
MAKT~MAKTX
STPO~MENGE
STPO~MEINS "组件计量单位
MARC~SOBSL "特殊采购标识
MARC~EISBE "安全库存
MARC~VERKZ "生产版本标识
MARA~MTART "组件类型
INTO TABLE LOC_STPO
FROM STPO
JOIN STAS ON ( STAS~STLNR = STPO~STLNR AND STAS~STLTY = STPO~STLTY AND STAS~STLKN = STPO~STLKN )
JOIN MAKT ON ( MAKT~MATNR = STPO~IDNRK AND MAKT~SPRAS = '1' )
JOIN MARC ON ( MARC~MATNR = STPO~IDNRK AND MARC~WERKS = LOC_STK_TAB-WERKS AND MARC~LVORM = SPACE )
JOIN MARA ON ( MARA~MATNR = STPO~IDNRK )
WHERE STPO~STLTY = 'M' AND STAS~LKENZ <> 'X' AND
STPO~STLNR = LOC_STK_TAB-STLNR AND
STPO~LKENZ = SPACE .
IF SY-SUBRC = 0 .
LOOP AT LOC_STPO."处理子组件
CLEAR ITAB.
CLEAR ITAB1.
LOC_STPO-MENGE = LOC_STK_TAB-MENGE * LOC_STPO-MENGE. "数量为队列中数据 * 其下数量
MOVE-CORRESPONDING LOC_ITAB TO ITAB. "抬头的主要数据
MOVE-CORRESPONDING LOC_STPO TO ITAB. "子零件的数据
MOVE-CORRESPONDING LOC_ITAB TO ITAB1. "抬头的主要数据
MOVE-CORRESPONDING LOC_STPO TO ITAB1. "子零件的数据
******* 判断此物料组件下是否挂有BOM
SELECT SINGLE * FROM MAST
WHERE MAST~MATNR = LOC_STPO-C_MATNR AND
MAST~WERKS = LT001W-WERKS AND
MAST~STLAN IN STLAN AND
MAST~STLAL IN STLAL AND
EXISTS ( SELECT * FROM MARC WHERE MARC~MATNR = MAST~MATNR AND MARC~WERKS = MAST~WERKS AND MARC~LVORM = SPACE AND WERKS = LT001W-WERKS )
.
IF SY-SUBRC = 0 ."挂有组件
IF WERKS EQ '2100'."委外加工组件
IF ( LOC_STPO-MTART EQ 'Z001' OR
LOC_STPO-MTART EQ 'Z002' OR
LOC_STPO-MTART EQ 'Z003' OR
LOC_STPO-MTART EQ 'Z004' OR
LOC_STPO-MTART EQ 'Z008' ) AND LOC_STPO-SOBSL NOT IN SOBSL.
COLLECT ITAB.
CLEAR ITAB.
CONTINUE.
ENDIF.
ENDIF.
IF LOC_STPO-SOBSL IN SOBSL."委外加工组件
COLLECT ITAB.
CLEAR ITAB.
ENDIF.
CLEAR LOC_WA_STK .
MOVE-CORRESPONDING MAST TO LOC_WA_STK .
LOC_WA_STK-MENGE = LOC_STPO-MENGE.
APPEND LOC_WA_STK TO LOC_STK_TAB."把此BOM组件加入到栈中
CLEAR LOC_WA_STK .
COLLECT ITAB1.
CLEAR ITAB1.
ELSE. "无组件
CLEAR L_MARA.
SELECT * FROM MARA INTO L_MARA
WHERE MATNR = LOC_STPO-C_MATNR AND MTART IN ('Z006','Z007','Z008','Z009','Z010','Z011').
ENDSELECT.
IF SY-SUBRC = 0 ."物料 半成品没有转成自制零件情况会放到这里
COLLECT ITAB1.
CLEAR ITAB1.
ELSE.
"20210514 ADD 处理挂着BOM 后面又不用了的
CLEAR TMPIDNRK.
SELECT STPO~IDNRK INTO TMPIDNRK FROM STAS
JOIN STPO ON STPO~STLTY = STAS~STLTY AND STPO~STLNR = STAS~STLNR AND
STPO~STLKN = STAS~STLKN AND STPO~AEDAT = STAS~ANDAT
AND STAS~ANNAM = STPO~AENAM AND STPO~AENNR = STAS~AENNR
WHERE STAS~DATUV < SY-DATUM AND
STPO~IDNRK = LOC_STPO-C_MATNR AND STAS~AENNR <> SPACE AND
STPO~STLNR = LOC_STK_TAB-STLNR.
ENDSELECT.
IF SY-SUBRC <> 0 AND TMPIDNRK IS INITIAL.
COLLECT ITAB.
CLEAR ITAB.
ENDIF.
ENDIF.
ENDIF.
ENDLOOP.
ENDIF.
ENDWHILE.
ENDLOOP.
IF ZTEST = SPACE.
PERFORM INS_TAB USING LT001W-WERKS.
PERFORM INS_TAB1 USING LT001W-WERKS.
ENDIF.
IF TOTAL = 'X'.
LOOP AT ITAB.
MOVE-CORRESPONDING ITAB TO H_ITAB.
H_ITAB-COUNT = 1 .
COLLECT H_ITAB.
CLEAR H_ITAB.
ENDLOOP.
* CLEAR ITAB[].
LOOP AT H_ITAB ASSIGNING <LOC_FS>.
<LOC_FS>-MENGE = <LOC_FS>-MENGE / <LOC_FS>-COUNT.
ENDLOOP.
ENDIF.
ENDLOOP.
ENDFORM. " GET_DATA
*&---------------------------------------------------------------------*
*& FORM DIS_ALV
*&---------------------------------------------------------------------*
* TEXT
*----------------------------------------------------------------------*
* --> P1 TEXT
* <-- P2 TEXT
*----------------------------------------------------------------------*
FORM DIS_ALV USING LOC_ITAB TYPE STANDARD TABLE
LOC_TOTAL TYPE C.
DATA: IT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV,
IS_VARIANT LIKE DISVARIANT,
IT_EVENTS TYPE SLIS_T_EVENT,
IS_LAYOUT TYPE SLIS_LAYOUT_ALV,
TITLE TYPE LVC_TITLE,
I_CALLBACK_PROGRAM TYPE SY-REPID,
IT_SORT TYPE SLIS_T_SORTINFO_ALV WITH HEADER LINE
.
PERFORM FIELDCAT_INIT USING IT_FIELDCAT
LOC_TOTAL.
PERFORM LAYOUT_INIT USING IS_LAYOUT.
IF LOC_TOTAL <> 'F'.
PERFORM EVENTTAB_BUILD USING IT_EVENTS.
ENDIF.
TITLE = '按产品展开BOM'.
IF LOC_TOTAL = 'F'.
CONCATENATE TITLE '-显示部件' ITAB-C_MAKTX '用处' INTO TITLE.
ENDIF.
I_CALLBACK_PROGRAM = SY-REPID.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
* I_INTERFACE_CHECK = ' '
* I_BYPASSING_BUFFER = ' '
* I_BUFFER_ACTIVE = ' '
I_CALLBACK_PROGRAM = I_CALLBACK_PROGRAM
* I_CALLBACK_PF_STATUS_SET = ' '
* I_CALLBACK_USER_COMMAND = ' '
* I_CALLBACK_TOP_OF_PAGE = ' '
* I_CALLBACK_HTML_TOP_OF_PAGE = 'TOP_OF_PAGE'
* I_CALLBACK_HTML_END_OF_LIST = ' '
* I_STRUCTURE_NAME =
* I_BACKGROUND_ID = ' '
I_GRID_TITLE = TITLE
* I_GRID_SETTINGS =
IS_LAYOUT = IS_LAYOUT
IT_FIELDCAT = IT_FIELDCAT
* IT_EXCLUDING =
* IT_SPECIAL_GROUPS =
* IT_SORT =
* IT_FILTER =
* IS_SEL_HIDE =
* I_DEFAULT = 'X'
* I_SAVE = ' '
* IS_VARIANT = IS_VARIANT
IT_EVENTS = IT_EVENTS
* IT_EVENT_EXIT =
* IS_PRINT =
* IS_REPREP_ID =
* I_SCREEN_START_COLUMN = 0
* I_SCREEN_START_LINE = 0
* I_SCREEN_END_COLUMN = 0
* I_SCREEN_END_LINE = 0
* IT_ALV_GRAPHICS =
* IT_HYPERLINK =
* IT_ADD_FIELDCAT =
* IT_EXCEPT_QINFO =
* I_HTML_HEIGHT_TOP =
* I_HTML_HEIGHT_END =
* IMPORTING
* E_EXIT_CAUSED_BY_CALLER =
* ES_EXIT_CAUSED_BY_USER =
TABLES
T_OUTTAB = LOC_ITAB
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2
.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
clear LOC_ITAB[].
ENDFORM. " DIS_ALV
*&---------------------------------------------------------------------*
*& FORM FIELDCAT_INIT
*&---------------------------------------------------------------------*
* TEXT
*----------------------------------------------------------------------*
* -->P_IT_FIELDCAT TEXT
*----------------------------------------------------------------------*
FORM FIELDCAT_INIT USING IT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV
LOC_TOTAL TYPE C.
DATA: LS_FIELDCAT TYPE SLIS_FIELDCAT_ALV.
LS_FIELDCAT-FIELDNAME = 'MATKL'.
** LS_FIELDCAT-DATATYPE = 'C'.
LS_FIELDCAT-REPTEXT_DDIC = '物料组'.
* LS_FIELDCAT-NO_ZERO = 'X'.
* LS_FIELDCAT-HOTSPOT = 'X'.
* LS_FIELDCAT-KEY = 'X'.
APPEND LS_FIELDCAT TO IT_FIELDCAT.
CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = 'WGBEZ'.
LS_FIELDCAT-REPTEXT_DDIC = '物料组描述'.
APPEND LS_FIELDCAT TO IT_FIELDCAT.
CLEAR LS_FIELDCAT.
IF LOC_TOTAL <> 'X'.
LS_FIELDCAT-FIELDNAME = 'M_MATNR'.
LS_FIELDCAT-REPTEXT_DDIC = '成品号'.
LS_FIELDCAT-NO_ZERO = 'X'.
APPEND LS_FIELDCAT TO IT_FIELDCAT.
CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = 'M_MAKTX'.
LS_FIELDCAT-REPTEXT_DDIC = '产品描述'.
APPEND LS_FIELDCAT TO IT_FIELDCAT.
CLEAR LS_FIELDCAT.
ENDIF.
LS_FIELDCAT-FIELDNAME = 'C_MATNR'.
LS_FIELDCAT-REPTEXT_DDIC = '部件号'.
LS_FIELDCAT-NO_ZERO = 'X'.
IF LOC_TOTAL <> 'F'.
LS_FIELDCAT-HOTSPOT = 'X'.
ENDIF.
APPEND LS_FIELDCAT TO IT_FIELDCAT.
CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = 'C_MAKTX'.
LS_FIELDCAT-REPTEXT_DDIC = '部件描述'.
APPEND LS_FIELDCAT TO IT_FIELDCAT.
CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = 'MENGE'.
LS_FIELDCAT-REPTEXT_DDIC = '所需数量'.
LS_FIELDCAT-NO_ZERO = 'X'.
APPEND LS_FIELDCAT TO IT_FIELDCAT.
CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = 'SOBSL'.
LS_FIELDCAT-REPTEXT_DDIC = '特殊采购类型'.
APPEND LS_FIELDCAT TO IT_FIELDCAT.
CLEAR LS_FIELDCAT.
ENDFORM. " FIELDCAT_INIT
*&---------------------------------------------------------------------*
*& FORM LAYOUT_INIT
*&---------------------------------------------------------------------*
* TEXT
*----------------------------------------------------------------------*
* -->P_IS_LAYOUT TEXT
*----------------------------------------------------------------------*
FORM LAYOUT_INIT USING IS_LAYOUT TYPE SLIS_LAYOUT_ALV.
IS_LAYOUT-COLWIDTH_OPTIMIZE = 'X'.
IS_LAYOUT-F2CODE = 'ZDET'.
* IS_LAYOUT-LIGHTS_FIELDNAME ='VIEWED' .
* IS_LAYOUT-LIGHTS_TABNAME =
* IS_LAYOUT-BOX_FIELDNAME = 'SELECTED'.
ENDFORM. " LAYOUT_INIT
*&---------------------------------------------------------------------*
*& FORM EVENTTAB_BUILD
*&---------------------------------------------------------------------*
* TEXT
*----------------------------------------------------------------------*
* -->P_IT_EVENTS TEXT
*----------------------------------------------------------------------*
FORM EVENTTAB_BUILD USING IT_EVENTS TYPE SLIS_T_EVENT .
DATA: LS_EVENT TYPE SLIS_ALV_EVENT.
* MOVE 'PF_STATUS_SET' TO LS_EVENT-NAME.
* MOVE 'PF_STATUS_SET' TO LS_EVENT-FORM.
* APPEND LS_EVENT TO IT_EVENTS.
* CLEAR LS_EVENT.
MOVE 'USER_COMMAND' TO LS_EVENT-NAME.
MOVE 'USER_COMMAND' TO LS_EVENT-FORM.
APPEND LS_EVENT TO IT_EVENTS.
CLEAR LS_EVENT.
* MOVE 'HTML_TOP_OF_PAGE' TO LS_EVENT-NAME.
* MOVE 'TOP_OF_PAGE' TO LS_EVENT-FORM.
* APPEND LS_EVENT TO IT_EVENTS.
* CLEAR LS_EVENT.
ENDFORM. " EVENTTAB_BUILD
*&--------------------------------------------------------------------*
*& FORM USER_COMMAND_1
*&--------------------------------------------------------------------*
* TEXT
*---------------------------------------------------------------------*
* -->RF_UCOMM TEXT
* -->RS_SELFIELDTEXT
*---------------------------------------------------------------------*
FORM USER_COMMAND USING RF_UCOMM LIKE SY-UCOMM
RS_SELFIELD TYPE SLIS_SELFIELD. "#EC CALLED
* DATA: EBELN TYPE EBELN.
DATA:LOC_ITAB TYPE TABLE OF T_ITAB WITH HEADER LINE.
FIELD-SYMBOLS:<LOC_FS>,<LOC_FS1>.
CASE RF_UCOMM.
WHEN 'ZDET'.
IF RS_SELFIELD-TABINDEX > 0 .
READ TABLE <GOB_FS> INDEX RS_SELFIELD-TABINDEX ASSIGNING <LOC_FS>.
IF SY-SUBRC = 0 .
ASSIGN COMPONENT 'C_MATNR' OF STRUCTURE <LOC_FS> TO <LOC_FS1>.
IF SY-SUBRC = 0 .
LOOP AT ITAB WHERE C_MATNR = <LOC_FS1>.
APPEND ITAB TO LOC_ITAB.
ENDLOOP.
PERFORM DIS_ALV USING LOC_ITAB[] 'F'.
ENDIF.
ENDIF.
ELSE.
MESSAGE W004(ZJACK_ERR).
ENDIF.
ENDCASE.
ENDFORM. "USER_COMMAND
*&---------------------------------------------------------------------*
*& FORM INS_TAB
*&---------------------------------------------------------------------*
*----------------------------------------------------------------------*
FORM INS_TAB USING PWERKS TYPE WERKS_D.
DATA:LOC_CBOM LIKE TABLE OF ZCBOM WITH HEADER LINE,
LOC_MBOM LIKE TABLE OF ZMBOM WITH HEADER LINE.
DATA:LOC_COUNT TYPE I VALUE 0.
AUTHORITY-CHECK OBJECT 'Z_MM_CMBOM'
* ID 'ZMM_PRINT' DUMMY
******* ID 'OBJTYPE' FIELD 'PROG'
******* ID 'OBJNAME' DUMMY
******* ID 'P_GROUP' DUMMY
ID 'ACTVT' FIELD '01'
.
IF SY-SUBRC <> 0.
MESSAGE E001(00) WITH '没有更新数据的权限'.
EXIT.
ENDIF.
SORT ITAB BY C_MATNR.
LOOP AT ITAB.
LOC_CBOM-M_MATNR = ITAB-M_MATNR.
LOC_CBOM-MATKL = ITAB-MATKL.
LOC_CBOM-C_MATNR = ITAB-C_MATNR.
LOC_CBOM-MENGE = ITAB-MENGE.
LOC_CBOM-MEINS = ITAB-MEINS.
LOC_CBOM-AEDAT = SY-DATUM.
LOC_CBOM-WERKS = ITAB-WERKS.
APPEND LOC_CBOM.
IF ITAB-C_MATNR = LOC_MBOM-C_MATNR.
LOC_MBOM-MENGE = ITAB-MENGE + LOC_MBOM-MENGE.
LOC_COUNT = LOC_COUNT + 1 .
ELSE.
IF LOC_MBOM-C_MATNR <> SPACE.
LOC_MBOM-MENGE = LOC_MBOM-MENGE / LOC_COUNT.
APPEND LOC_MBOM.
CLEAR LOC_MBOM.
ENDIF.
LOC_MBOM-C_MATNR = ITAB-C_MATNR.
LOC_MBOM-MENGE = ITAB-MENGE.
LOC_MBOM-MEINS = ITAB-MEINS.
LOC_MBOM-AEDAT = SY-DATUM.
LOC_MBOM-WERKS = ITAB-WERKS.
LOC_COUNT = 1 .
ENDIF.
ENDLOOP.
DELETE FROM ZCBOM WHERE ZCBOM~WERKS EQ PWERKS.
DELETE FROM ZMBOM WHERE ZMBOM~WERKS EQ PWERKS.
COMMIT WORK.
INSERT ZCBOM FROM TABLE LOC_CBOM ACCEPTING DUPLICATE KEYS.
INSERT ZMBOM FROM TABLE LOC_MBOM ACCEPTING DUPLICATE KEYS.
COMMIT WORK.
"更新到计划排产组件ADD BY PETER
FREE LOC_MBOM.
DATA:L_UPDATE TYPE CHAR1.
DATA:LTS_MAPLP TYPE TABLE OF ZPP_MAPLP WITH HEADER LINE.
IF ZMUUPD = 'X'.
SORT LOC_CBOM BY M_MATNR.
LOOP AT LOC_CBOM .
AT NEW M_MATNR.
CLEAR L_UPDATE.
REFRESH LTS_MAPLP.
SELECT SINGLE MPLNR INTO LOC_CBOM-M_MATNR
FROM ZPP_MAPLP WHERE MPLNR = LOC_CBOM-M_MATNR
AND WERKS EQ LOC_CBOM-WERKS.
IF SY-SUBRC = 0.
L_UPDATE = 'X'.
DELETE FROM ZPP_MAPLP WHERE MPLNR = LOC_CBOM-M_MATNR AND WERKS EQ LOC_CBOM-WERKS.
ENDIF.
ENDAT.
IF L_UPDATE = 'X'.
SELECT SINGLE MARA~MATNR INTO LOC_CBOM-C_MATNR
FROM MARA JOIN MARC
ON MARA~MATNR = MARC~MATNR
WHERE MARA~MATNR = LOC_CBOM-C_MATNR
AND MARA~MTART IN S_MTART
AND MARC~EKGRP = P_EKGRP
AND MARC~WERKS = LOC_CBOM-WERKS.
IF SY-SUBRC = 0.
LTS_MAPLP-WERKS = LOC_CBOM-WERKS.
LTS_MAPLP-MPLNR = LOC_CBOM-M_MATNR.
LTS_MAPLP-MATNR = LOC_CBOM-C_MATNR.
LTS_MAPLP-KMPMG = LOC_CBOM-MENGE.
LTS_MAPLP-CERNAM = SY-UNAME.
LTS_MAPLP-CERDAT = SY-DATUM.
APPEND LTS_MAPLP.
ENDIF.
ENDIF.
ENDLOOP.
IF LTS_MAPLP[] IS NOT INITIAL.
INSERT ZPP_MAPLP FROM TABLE LTS_MAPLP ACCEPTING DUPLICATE KEYS.
ENDIF.
ENDIF.
ENDFORM. " INS_TAB
*&---------------------------------------------------------------------*
*& FORM INS_TAB1
*& 成品-半成品(下挂BOM)的+ 半成品 物料类型 保存 到 ZBOM1中
*&---------------------------------------------------------------------*
*----------------------------------------------------------------------*
FORM INS_TAB1 USING PWERKS TYPE T001W-WERKS.
DATA:LOC_CBOM LIKE TABLE OF ZCBOM1 WITH HEADER LINE.
DATA:LOC_COUNT TYPE I VALUE 0.
SORT ITAB BY C_MATNR.
LOOP AT ITAB1.
LOC_CBOM-M_MATNR = ITAB1-M_MATNR.
LOC_CBOM-MATKL = ITAB1-MATKL.
LOC_CBOM-C_MATNR = ITAB1-C_MATNR.
LOC_CBOM-MENGE = ITAB1-MENGE.
LOC_CBOM-MEINS = ITAB1-MEINS.
LOC_CBOM-AEDAT = SY-DATUM.
LOC_CBOM-WERKS = ITAB1-WERKS.
LOC_CBOM-MTART = ITAB1-MTART.
APPEND LOC_CBOM.
ENDLOOP.
DELETE FROM ZCBOM1 WHERE ZCBOM1~WERKS EQ PWERKS.
COMMIT WORK.
INSERT ZCBOM1 FROM TABLE LOC_CBOM ACCEPTING DUPLICATE KEYS.
COMMIT WORK.
ENDFORM. "INS_TAB1