************************************************************************
* REPORT RM07MLBS (Transaction MB52)
************************************************************************
* List of stock quantities and values
************************************************************************
*----------------------------------------------------------------------*
* Program ID : ZMMR065V2
* Program Name : 报关库存数据表
*----------------------------------------------------------------------*
* Date Created : 2011/02/10
* Created By : Real 2011/02/10 *
* Description :
*----------------------------------------------------------------------*
* Modification : *
* Date Modified Modified By Transport Request Description *
*
*----------------------------------------------------------------------*
REPORT ZMMR065V2 MESSAGE-ID M7 NO STANDARD PAGE HEADING LINE-SIZE 170.
************************************************************************
* Data declarations
************************************************************************
* Type pools
TYPE-POOLS: SLIS, IMREP.
* Database tables
TABLES: MARA, MAKT, MARD, MCHB, MKOL, MSLB, MSKA, MSKU, MSSA, MSPR,
MSSQ, MBEW, EBEW, QBEW, T134M, T001W, T001L, MARC, T001, T001K,
T023, T024,VBKD,EKKO,ZLJGB,EORD.
TABLES : SSCRFIELDS. "for the user-commands
TABLES:AFKO,AFPO,AUFK,PRPS.
* working table for the entries of all stock tables
DATA: BEGIN OF COLLECTOR OCCURS 0,
MATNR LIKE MARA-MATNR,
WERKS LIKE T001W-WERKS,
LGORT LIKE MARD-LGORT,
SOBKZ LIKE MKOL-SOBKZ,
PSPNR LIKE MSPR-PSPNR,
VBELN LIKE MSKA-VBELN,
POSNR LIKE MSKA-POSNR,
LIFNR LIKE MSLB-LIFNR,
KUNNR LIKE MSKU-KUNNR,
LVORM LIKE MARD-LVORM,
KZBWS LIKE MSSA-KZBWS,
CHARG LIKE MCHB-CHARG,
LABST LIKE MARD-LABST,
INSME LIKE MARD-INSME,
SPEME LIKE MARD-SPEME,
EINME LIKE MARD-EINME,
RETME LIKE MARD-RETME,
UMLME LIKE MARD-UMLME,
END OF COLLECTOR.
* Internal tables
DATA: BEGIN OF HEADER OCCURS 0,
MATNR LIKE MARA-MATNR,
MAKTX LIKE MAKT-MAKTX,
WERKS LIKE T001W-WERKS,
NAME1 LIKE T001W-NAME1,
MTART LIKE MARA-MTART,
MATKL LIKE MARA-MATKL,
END OF HEADER.
DATA: BEGIN OF BESTAND OCCURS 0,
* Key fields
MATNR LIKE MARA-MATNR,
IDNRK LIKE MARA-MATNR,"成品下级物料
WERKS LIKE T001W-WERKS,
LGORT LIKE MARD-LGORT,
SOBKZ LIKE MKOL-SOBKZ,
SSNUM LIKE BICKEY-SSNUM,
PSPNR LIKE MSPR-PSPNR,
VBELN LIKE MSKA-VBELN,
POSNR LIKE MSKA-POSNR,
BSTKD LIKE VBKD-BSTKD,
LIFNR LIKE MKOL-LIFNR,
KUNNR LIKE MSKU-KUNNR,
KZBWS LIKE MSSA-KZBWS,
CHARG LIKE MCHB-CHARG,
* Additional data (texts, unit, ...)
MAKTX LIKE MARAV-MAKTX,
BWKEY LIKE MBEW-BWKEY,
MTART LIKE MARAV-MTART,
MATKL LIKE MARAV-MATKL,
MEINS LIKE MARAV-MEINS,
LABOX LIKE MARD-LABST,
AUSME LIKE MARC-AUSME,
BWTTY LIKE MARC-BWTTY,
XCHAR LIKE MARC-XCHAR,
LGOBE LIKE T001L-LGOBE,
BWTAR LIKE MCHA-BWTAR,
WAERS LIKE T001-WAERS,
NAME1 LIKE T001W-NAME1,
* Quantities and currencies
TOTAL LIKE MARD-LABST,
LABST LIKE MARD-LABST,
WLABS LIKE MBEW-SALK3,
INSME LIKE MARD-INSME,
WINSM LIKE MBEW-SALK3,
SPEME LIKE MARD-SPEME,
WSPEM LIKE MBEW-SALK3,
EINME LIKE MARD-EINME,
WEINM LIKE MBEW-SALK3,
RETME LIKE MARD-RETME,
WRETM LIKE MBEW-SALK3,
UMLME LIKE MARD-UMLME,
WUMLM LIKE MBEW-SALK3,
BKLAS LIKE MBEW-BKLAS,
BKBEZ LIKE T025T-BKBEZ,
AUFNR TYPE AUFNR,
INCO1 TYPE INCO1, "Incoterms (Part 1)
NTGEW TYPE NTGEW, "Net Weight
GEWEI TYPE GEWEI, "Weight Unit
BRGEW TYPE NTGEW, "Total Weight(KG)
MEINS_GC TYPE ZLJGB-MEINS, "GMT工厂商品单位
NTGEW_GMT LIKE ZLJGB-NTGEW, "GMT备案单重(KG)
MEINS_GMT LIKE ZLJGB-MEINS_GMT, "申报单位
VARIA TYPE P DECIMALS 8,"GMT与SAP单重差异
SERIA LIKE ZLJGB-SERIA, "商品备案序号
CUSTN LIKE ZLJGB-CUSTN, "海关编码
CUSTX LIKE ZLJGB-CUSTX, "申报商品名称
MEINS_GMT1 LIKE ZLJGB-MEINS_GMT1, "法定单位1
SBMNG(16) TYPE P DECIMALS 7,"库存转换为申报数量
MEINS_ZH LIKE ZLJGB-MEINS_ZH,
MEINS_GMT_ZH LIKE ZLJGB-MEINS_GMT_ZH,
DUMMY TYPE ALV_DUMMY,"Dummy field
FARBE TYPE SLIS_T_SPECIALCOL_ALV,
LVORM LIKE MARD-LVORM,
SET(1),
END OF BESTAND.
*****---WIP REPORT PARAMENTER-----**************
TABLES: RESB,JEST,PORDARCH,TJ02T,MKPF,MSEG,ZT006A.
DATA: BEGIN OF ITAB OCCURS 0,
WERKS LIKE AUFK-WERKS,
MODEL LIKE AFPO-MATNR, "Material for Order
MODTX LIKE MAKT-MAKTX,
PROJN LIKE AFPO-PROJN,
AUFNR LIKE AFKO-LEAD_AUFNR,
RSNUM LIKE AFKO-RSNUM,
MEINS LIKE AFPO-MEINS,
PSMNG LIKE AFPO-PSMNG, "Order quantity
WEMNG LIKE AFPO-WEMNG, "Qty of goods received
SUB_AUFNR LIKE AFKO-AUFNR, "Order Number
SUB_RSNUM LIKE AFKO-RSNUM, "
POSNR LIKE RESB-POSNR,
MATNR LIKE RESB-MATNR, "Material Number
MAKTX LIKE MAKT-MAKTX,
MTART LIKE MARA-MTART,
LGORT LIKE RESB-LGORT,
GMEIN LIKE RESB-MEINS, "材料基本单位
BDMNG LIKE RESB-BDMNG, "Requirement Quantity
ENMNG LIKE RESB-ENMNG, "Quantity withdrawn
COMNG LIKE RESB-ENMNG, "折算成原材料
BADQTY LIKE RESB-ENMNG, "Bad Qty
WIPQTY LIKE RESB-ENMNG, "WIP Qty
DMBTR LIKE MSEG-DMBTR,
INCO1 TYPE INCO1, "Incoterms (Part 1)
NTGEW TYPE NTGEW, "Net Weight
GEWEI TYPE GEWEI, "Weight Unit
BRGEW TYPE NTGEW, "Total Weight(KG)
MEINS_GC TYPE ZLJGB-MEINS, "GMT工厂商品单位
NTGEW_GMT LIKE ZLJGB-NTGEW, "GMT备案单重(KG)
VARIA TYPE P DECIMALS 8, "GMT与SAP单重差异
SERIA LIKE ZLJGB-SERIA, "商品备案序号
CUSTN LIKE ZLJGB-CUSTN, "海关编码
CUSTX LIKE ZLJGB-CUSTX, "申报商品名称
MEINS_GMT LIKE ZLJGB-MEINS_GMT, "申报单位
MEINS_GMT1 LIKE ZLJGB-MEINS_GMT1, "法定单位1
MEINS_ZH LIKE ZLJGB-MEINS_ZH,
MEINS_GMT_ZH LIKE ZLJGB-MEINS_GMT_ZH,
SBMNG(16) TYPE P DECIMALS 7, "库存转换为申报数量
SET(1),
END OF ITAB.
*****---CONSUMPTION MATERIAL REPORT PARAMENTER---*******
DATA: BEGIN OF CONSUME OCCURS 0,
WERKS LIKE AUFK-WERKS,
MODEL LIKE AFPO-MATNR, "Material for Order Prodution
MODTX LIKE MAKT-MAKTX,
PSPNR LIKE AFPO-PROJN,
LGORT LIKE MCHB-LGORT,
LGOBE LIKE T001L-LGOBE,
CHARG LIKE MCHB-CHARG,
LABST LIKE MARD-LABST,
INSME LIKE MARD-INSME,
SPEME LIKE MARD-SPEME,
TOTAL LIKE MARD-LABST,
WLABS LIKE MBEW-SALK3,
WAERS LIKE T001-WAERS,
AUFNR LIKE AFKO-AUFNR, "Order Number
MEINS LIKE AFPO-MEINS, "Order production unit
PSMNG LIKE AFPO-PSMNG, "Order quantity
WEMNG LIKE AFPO-WEMNG, "Qty of goods received
DLGORT LIKE STPO-LGORT, "Issue location for production order
POSNR LIKE STPO-POSNR, "BOM Item Number
MATNR LIKE STPO-IDNRK, "Material Number
MAKTX LIKE MAKT-MAKTX, "Material Description in Chinese
MAKTZ LIKE MAKT-MAKTX, "Material Description in English
MMEIN LIKE STPO-MEINS, "Base Unit
MNGLG LIKE STPO-MEINS, "Component quantity In base unit
GMEIN LIKE STPO-MEINS, "Component unit of measure
MENGE LIKE STPO-MENGE, "Component quantity
COMNG LIKE STPO-MENGE, "Consume Quantity
MTART LIKE MARA-MTART, "Material Type
INCO1 TYPE INCO1, "Incoterms (Part 1)
NTGEW TYPE NTGEW, "Net Weight
GEWEI TYPE GEWEI, "Weight Unit
BRGEW TYPE NTGEW, "Total Weight(KG)
MEINS_GC TYPE ZLJGB-MEINS, "GMT工厂商品单位
NTGEW_GMT LIKE ZLJGB-NTGEW, "GMT备案单重(KG)
MEINS_GMT LIKE ZLJGB-MEINS_GMT, "法定单位
VARIA TYPE P DECIMALS 8,"GMT与SAP单重差异
MEINS_ZH LIKE ZLJGB-MEINS_ZH,
MEINS_GMT_ZH LIKE ZLJGB-MEINS_GMT_ZH,
SERIA LIKE ZLJGB-SERIA, "商品备案序号
CUSTN LIKE ZLJGB-CUSTN, "海关编码
CUSTX LIKE ZLJGB-CUSTX, "申报商品名称
MEINS_GMT1 LIKE ZLJGB-MEINS_GMT1, "法定单位1
SBMNG(16) TYPE P DECIMALS 7,"库存转换为申报数量
SET(1),
END OF CONSUME.
DATA P1 TYPE P LENGTH 13 DECIMALS 0.
DATA : BEGIN OF COMBINE OCCURS 10,
FLAG(3) TYPE C,
WERKS LIKE T001W-WERKS,
MTART LIKE MARAV-MTART,
MATNR LIKE MARA-MATNR,
MAKTX LIKE MARAV-MAKTX,
MODEL LIKE MARAV-MATNR,
MODTX LIKE MAKT-MAKTX,
IDNRK LIKE MARA-MATNR,"成品下级物料
LGORT LIKE MARD-LGORT,
LGOBE LIKE T001L-LGOBE,
PSPNR LIKE MSPR-PSPNR,
CHARG LIKE MSPR-CHARG,
LABST LIKE MARD-LABST,
CLABS LIKE MARD-VMLAB,
INSME LIKE MARD-INSME,
SPEME LIKE MARD-SPEME,
WIPQTY LIKE RESB-ENMNG, "WIP Qty
TOTAL LIKE MARD-LABST,
WLABS LIKE MBEW-SALK3,
WAERS LIKE T001-WAERS,
AUFNR LIKE AFKO-AUFNR, "Order Number
COMNG LIKE RESB-BDMNG, "成品转换为原材料
MEINS LIKE MARAV-MEINS, "base unit
INCO1 TYPE INCO1, "Incoterms (Part 1)
NTGEW TYPE NTGEW, "Net Weight
GEWEI TYPE GEWEI, "Weight Unit
BRGEW TYPE NTGEW, "Total Weight(KG)
MEINS_GC TYPE ZLJGB-MEINS, "GMT工厂商品单位
NTGEW_GMT LIKE ZLJGB-NTGEW, "GMT备案单重(KG)
MEINS_GMT LIKE ZLJGB-MEINS_GMT, "法定单位
VARIA TYPE P DECIMALS 8,"GMT与SAP单重差异
SERIA LIKE ZLJGB-SERIA, "商品备案序号
CUSTN LIKE ZLJGB-CUSTN, "海关编码
CUSTX LIKE ZLJGB-CUSTX, "申报商品名称
MEINS_GMT1 LIKE ZLJGB-MEINS_GMT1, "法定单位1
SBMNG(16) TYPE P DECIMALS 7,"库存转换为申报数量
SET(1),
END OF COMBINE.
DATA : BEGIN OF TEMP,
UMREZ LIKE MARM-UMREZ,
UMREN LIKE MARM-UMREN,
END OF TEMP.
DATA:BEGIN OF TA_EKKO,
LIFNR LIKE EKKO-LIFNR,
MATNR LIKE EKPO-MATNR,
EKORG LIKE EKKO-EKORG,
WERKS LIKE EKPO-WERKS,
* INFNR LIKE EKPO-INFNR,
END OF TA_EKKO.
DATA:I_ZM065 LIKE ZM065 OCCURS 0 WITH HEADER LINE.
* define a lean table organ
TYPES : BEGIN OF STYPE_ORGAN,
WERKS LIKE T001W-WERKS,
BWKEY LIKE T001W-BWKEY,
NAME1 LIKE T001W-NAME1,
BUKRS LIKE T001-BUKRS,
WAERS LIKE T001-WAERS,
END OF STYPE_ORGAN,
STAB_ORGAN TYPE STANDARD TABLE OF
STYPE_ORGAN
WITH DEFAULT KEY.
DATA: G_T_ORGAN TYPE STAB_ORGAN,
G_S_ORGAN TYPE STYPE_ORGAN.
* define a buffer table for the MARD entries with flag
* for deletion
TYPES : BEGIN OF STYPE_MARD_LV,
MATNR LIKE MARD-MATNR,
WERKS LIKE MARD-WERKS,
LGORT LIKE MARD-LGORT,
LVORM LIKE MARD-LVORM,
END OF STYPE_MARD_LV,
HTAB_MARD_LV TYPE HASHED TABLE OF
STYPE_MARD_LV
WITH UNIQUE KEY MATNR WERKS LGORT.
DATA : G_S_MARD_LV TYPE STYPE_MARD_LV,
G_T_MARD_LV TYPE HTAB_MARD_LV.
* define a buffer table for the storage bins
TYPES : BEGIN OF STYPE_T001L,
WERKS LIKE T001L-WERKS,
LGORT LIKE T001L-LGORT,
LGOBE LIKE T001L-LGOBE,
END OF STYPE_T001L,
HTAB_T001L TYPE HASHED TABLE OF
STYPE_T001L
WITH UNIQUE KEY WERKS LGORT.
DATA : G_S_T001L TYPE STYPE_T001L,
G_T_T001L TYPE HTAB_T001L.
* define working areas for access table organ "n531604
TYPES : BEGIN OF STYPE_BUFFER, "n531604
WERKS LIKE T001W-WERKS,
BUKRS LIKE T001-BUKRS,
SUBRC LIKE SYST-SUBRC,
END OF STYPE_BUFFER,
STAB_BUFFER TYPE STANDARD TABLE OF
STYPE_BUFFER
WITH DEFAULT KEY.
DATA : G_S_BUFFER TYPE STYPE_BUFFER,
G_T_BUFFER TYPE STAB_BUFFER.
* User settings for the checkboxes
DATA: OREF_SETTINGS TYPE REF TO CL_MMIM_USERDEFAULTS.
* define working fields
DATA : G_CNT_COL_POS TYPE I,
G_CNT_SPOS TYPE I.
DATA : G_FLAG_OK(01) TYPE C,
G_FLAG_MESS_333(01) TYPE C,
G_FLAG_T001L(01) TYPE C.
DATA : G_CNT_VARIANT_ERROR TYPE I. "n667256
* does the user want to suppress objects from plant level ? "n577268
DATA : G_FLAG_SUPPRESS_INIT_LGORT(01) TYPE C. "n577268
DATA : BEGIN OF G_FLAG_SOBKZ,
VBELN(01) TYPE C,
PSPNR(01) TYPE C,
LIFNR(01) TYPE C,
KUNNR(01) TYPE C,
END OF G_FLAG_SOBKZ.
CONSTANTS : C_NO_OUT(01) TYPE C VALUE 'X',
C_OUT(01) TYPE C VALUE SPACE.
* flag to be set when INITIALIZATION was processed "n667256
DATA G_FLAG_INITIALIZATION(01) TYPE C. "n667256
* authorization check should be always processed "n829722
DATA T_FLAG_LAUNCHED(01) TYPE C. "n829722
DATA CHAR1 TYPE C LENGTH 40.
****-------------------------DEFINE DISPLAY VARIABLE--------------****
TYPE-POOLS: SLIS.
DATA: G_REPID TYPE SY-REPID.
DATA: L_ALV_FILED TYPE SLIS_FIELDCAT_ALV.
DATA: L_ALV_FILEDCAT TYPE SLIS_T_FIELDCAT_ALV.
DATA: LAYOUT TYPE SLIS_LAYOUT_ALV.
DATA: GS_PRINT TYPE SLIS_PRINT_ALV.
DATA : TCODE LIKE TSTC-TCODE .
CONSTANTS: CS_CALLBACK_USER TYPE SLIS_FORMNAME
VALUE 'ALV_USER_COMMAND',
SUB_CALLBACK_USER TYPE SLIS_FORMNAME
VALUE 'ALV_SUBUSER_COMMAND'.
DEFINE ADDFIELD.
L_ALV_FILED-FIELDNAME = &1.
L_ALV_FILED-REPTEXT_DDIC = &2.
L_ALV_FILED-OUTPUTLEN = &3.
L_ALV_FILED-NO_ZERO = &4.
L_ALV_FILED-EMPHASIZE = &5.
L_ALV_FILED-DO_SUM = &6.
* L_ALV_FILED-F4AVAILABL = &7.
L_ALV_FILED-FIX_COLUMN = &7.
L_ALV_FILED-NO_OUT = &7.
APPEND L_ALV_FILED TO L_ALV_FILEDCAT.
CLEAR L_ALV_FILED.
END-OF-DEFINITION.
SELECTION-SCREEN BEGIN OF BLOCK SINGLE WITH FRAME. TITLE TEXT-003.
*SELECTION-SCREEN BEGIN OF LINE.
* SELECTION-SCREEN POSITION 1 .
PARAMETERS : STK RADIOBUTTON GROUP GRP1 DEFAULT 'X' MODIF ID BL0.
* SELECTION-SCREEN COMMENT 2(11) TEXT-008 FOR FIELD STK.
* SELECTION-SCREEN POSITION 14 .
* PARAMETERS: P_UPD AS CHECKBOX MODIF ID BL0.
* SELECTION-SCREEN COMMENT 15(66) TEXT-004 FOR FIELD P_UPD.
*SELECTION-SCREEN END OF LINE.
PARAMETERS : WIP RADIOBUTTON GROUP GRP1,
PRD RADIOBUTTON GROUP GRP1,
COM RADIOBUTTON GROUP GRP1.
SELECTION-SCREEN END OF BLOCK SINGLE.
SELECTION-SCREEN BEGIN OF BLOCK PLANT WITH FRAME. TITLE TEXT-002.
SELECT-OPTIONS:
WERKS FOR T001L-WERKS NO INTERVALS NO-EXTENSION
MEMORY ID WRK OBLIGATORY MODIF ID BL0. "718285
SELECTION-SCREEN END OF BLOCK PLANT.
************************************************************************
* Selection screen
************************************************************************
SELECTION-SCREEN BEGIN OF BLOCK ABGRENZUNG WITH FRAME. TITLE TEXT-001.
SELECT-OPTIONS:
MATNR FOR MARA-MATNR MEMORY ID MAT MATCHCODE OBJECT MAT1 MODIF ID BL1,
LGORT FOR T001L-LGORT MEMORY ID LAG MODIF ID BL1,
CHARG FOR MCHB-CHARG MEMORY ID CHA MATCHCODE OBJECT MCH1 MODIF ID BL1.
* for the selection os special stocks
PARAMETERS : PA_SOND LIKE RMMMB-KZLSO
DEFAULT 'X' MODIF ID BL1 NO-DISPLAY.
SELECT-OPTIONS:
SO_SOBKZ FOR MKOL-SOBKZ MODIF ID BL1 NO-DISPLAY.
* select only lines who contain at least one negative stock
PARAMETERS: NEGATIV LIKE AM07M-SENEG MODIF ID BL1 NO-DISPLAY.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS: XMCHB LIKE AM07M-MB52_XMCHB "n494306
DEFAULT 'X' MODIF ID BL1. "NO-DISPLAY.
SELECTION-SCREEN COMMENT (30) TEXT-009 FOR FIELD XMCHB MODIF ID BL1.
* Checkbox to eliminate lines with zero stocks
PARAMETERS: NOZERO LIKE RMMMB-KZNUL MODIF ID BL1 DEFAULT 'X'."NO-DISPLAY
SELECTION-SCREEN COMMENT (30) TEXT-010 FOR FIELD NOZERO MODIF ID BL1.
PARAMETERS: P_UPD AS CHECKBOX MODIF ID BL1.
SELECTION-SCREEN COMMENT (30) TEXT-011 FOR FIELD P_UPD MODIF ID BL1.
SELECTION-SCREEN END OF LINE.
* Checkbox to disable value processing.
PARAMETERS: NOVALUES LIKE AM07M-MB52_NOVAL MODIF ID BL1 NO-DISPLAY. "n494306
*SELECTION-SCREEN BEGIN OF LINE.
* SELECTION-SCREEN POSITION 1 .
*PARAMETERS: P_MAN1 RADIOBUTTON GROUP GRP2 MODIF ID BL3.
*PARAMETERS: P_MAN2 RADIOBUTTON GROUP GRP2 MODIF ID BL3.
* SELECTION-SCREEN COMMENT 2(66) TEXT-004 FOR FIELD P_UPD.
*SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK ABGRENZUNG.
* for the selection os special stocks
SELECTION-SCREEN BEGIN OF BLOCK LB2 WITH FRAME. TITLE TEXT-071.
SELECT-OPTIONS:
S_AUFNR FOR AFKO-AUFNR MODIF ID BL2,
S_MATNR FOR MARA-MATNR MEMORY ID MAT MODIF ID BL2,
S_PROJN FOR PRPS-PSPNR MODIF ID BL2.
SELECTION-SCREEN END OF BLOCK LB2.
SELECTION-SCREEN BEGIN OF BLOCK LB3 WITH FRAME. TITLE TEXT-072.
PARAMETERS: BYMATR RADIOBUTTON GROUP GRP3 MODIF ID BL5 DEFAULT 'X',
BYTYPE RADIOBUTTON GROUP GRP3 MODIF ID BL5.
SELECTION-SCREEN END OF BLOCK LB3.
*----------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK LBS WITH FRAME. TITLE TEXT-070.
SELECT-OPTIONS:
MATART FOR MARA-MTART NO-DISPLAY,
MATKLA FOR MARA-MATKL NO-DISPLAY,
EKGRUP FOR MARC-EKGRP NO-DISPLAY.
SELECTION-SCREEN END OF BLOCK LBS.
*----------------------------------------------------------------------*
AT SELECTION-SCREEN OUTPUT.
LOOP AT SCREEN.
IF SCREEN-GROUP1 = 'BL1'.
IF STK = 'X'.
SCREEN-ACTIVE = 1.
MODIFY SCREEN.
CONTINUE.
ELSEIF WIP = 'X'.
SCREEN-ACTIVE = 0.
MODIFY SCREEN.
CONTINUE.
ELSEIF PRD = 'X'.
SCREEN-ACTIVE = 1.
MODIFY SCREEN.
CONTINUE.
ELSEIF COM = 'X'.
SCREEN-ACTIVE = 1.
MODIFY SCREEN.
CONTINUE.
ENDIF.
ENDIF.
IF SCREEN-GROUP1 = 'BL2'.
IF STK = 'X'.
SCREEN-ACTIVE = 0.
MODIFY SCREEN.
CONTINUE.
ELSEIF WIP = 'X'.
SCREEN-ACTIVE = 1.
MODIFY SCREEN.
CONTINUE.
ELSEIF PRD = 'X'.
SCREEN-ACTIVE = 0.
MODIFY SCREEN.
CONTINUE.
ELSEIF COM = 'X'.
SCREEN-ACTIVE = 1.
MODIFY SCREEN.
CONTINUE.
ENDIF.
ENDIF.
IF SCREEN-GROUP1 = 'BL3'.
IF STK = 'X'.
SCREEN-ACTIVE = 0.
MODIFY SCREEN.
CONTINUE.
ELSEIF WIP = 'X'.
SCREEN-ACTIVE = 0.
MODIFY SCREEN.
CONTINUE.
ELSEIF PRD = 'X'.
SCREEN-ACTIVE = 0.
MODIFY SCREEN.
CONTINUE.
ELSEIF COM = 'X'.
SCREEN-ACTIVE = 0.
MODIFY SCREEN.
CONTINUE.
ENDIF.
ENDIF.
IF SCREEN-GROUP1 = 'BL4'.
IF STK = 'X'.
SCREEN-ACTIVE = 0.
MODIFY SCREEN.
CONTINUE.
ELSEIF WIP = 'X'.
SCREEN-ACTIVE = 0.
MODIFY SCREEN.
CONTINUE.
ELSEIF PRD = 'X'.
SCREEN-ACTIVE = 1.
MODIFY SCREEN.
CONTINUE.
ELSEIF COM = 'X'.
SCREEN-ACTIVE = 0.
MODIFY SCREEN.
CONTINUE.
ENDIF.
ENDIF.
IF SCREEN-GROUP1 = 'BL5'.
IF STK = 'X'.
SCREEN-ACTIVE = 0.
MODIFY SCREEN.
CONTINUE.
ELSEIF WIP = 'X'.
SCREEN-ACTIVE = 0.
MODIFY SCREEN.
CONTINUE.
ELSEIF PRD = 'X'.
SCREEN-ACTIVE = 0.
MODIFY SCREEN.
CONTINUE.
ELSEIF COM = 'X'.
SCREEN-ACTIVE = 1.
MODIFY SCREEN.
CONTINUE.
ENDIF.
ENDIF.
ENDLOOP.
IF G_FLAG_INITIALIZATION IS INITIAL. "n667256
MOVE 'X' TO G_FLAG_INITIALIZATION. "n667256
ENDIF. "n667256
INITIALIZATION.
************************************************************************
* Main program
************************************************************************
AT SELECTION-SCREEN.
PERFORM. CHECK_AUTHOR .
* IF NOT CHARG[] IS INITIAL.
* XMCHB = 'X'.
* ENDIF. "note 311770
* send a warning if the user starts this report without any "n531604
* restrictions for the database selection "n531604
* only when this report is started "n531604
IF MATNR IS INITIAL AND "n531604
WERKS IS INITIAL AND "n531604
LGORT IS INITIAL AND "n531604
CHARG IS INITIAL. "n531604
IF SY-UCOMM = 'ONLI' OR "n531604
SY-UCOMM = 'PRIN'. "n531604
MESSAGE W689. "The selection was not restricted "n531604
ENDIF. "n531604
ENDIF. "n531604
* go on only if the user wants to launch this report "n667256
* the authorization check should be always processed "n829722
IF SY-UCOMM = 'ONLI' OR "n829722
SY-UCOMM = 'PRIN' OR "n829722
SY-UCOMM = 'SJOB' OR "n829722
SY-UCOMM = SPACE. "n829722
MOVE 'X' TO T_FLAG_LAUNCHED. "n829722
ELSE. "n829722
IF SY-UCOMM <> SPACE. "n829722
CLEAR T_FLAG_LAUNCHED. "n829722
ENDIF. "n829722
ENDIF. "n829722
CHECK T_FLAG_LAUNCHED = 'X'. "n829722
PERFORM. CHECK_ENTRY.
PERFORM. ORGANISATION.
PERFORM. CHECK_AUTHORIZATION.
* save the parameters of this run in database table ESDUS "n531604
*------------------------ Initialisierung -----------------------------*
INITIALIZATION.
* look for the setting of the parameters from the last run "n531604
* set flag when INITILIZATION is processed "n667256
MOVE 'X' TO G_FLAG_INITIALIZATION. "n667256
*-----------------------------------------------------------"n667256
START-OF-SELECTION.
************************************************************************
* Main data selection routine
************************************************************************
IF STK EQ 'X'.
PERFORM. INIT_DATA.
PERFORM. GET_STK.
PERFORM. DATA_SELECTION.
READ TABLE BESTAND INDEX 1 TRANSPORTING NO FIELDS.
IF SY-SUBRC = 0.
PERFORM DISPLAY_GRID.
PERFORM DISPLAY_DATA.
ELSE.
MESSAGE S843.
* Zu den vorgegebenen Daten ist kein Bestand vorhanden
IF NOT SY-CALLD IS INITIAL. "307852
LEAVE. "307852
ELSE. "307852
LEAVE TO TRANSACTION SY-TCODE. "307852
ENDIF. "307852
ENDIF.
ELSEIF WIP EQ 'X'.
PERFORM. GET_WIP.
PERFORM. GET_WIP_GRID_DISPLAY.
PERFORM. GET_WIP_DATA_DISPLAY.
ELSEIF PRD EQ 'X'.
PERFORM. INIT_DATA.
PERFORM. GET_STK.
PERFORM. DATA_SELECTION.
READ TABLE BESTAND INDEX 1 TRANSPORTING NO FIELDS.
IF SY-SUBRC NE 0.
MESSAGE 'No found data,please check!' TYPE 'I'.
STOP.
* ELSE.
* READ TABLE BESTAND WITH KEY AUFNR = SPACE.
* CONCATENATE 'The product:' BESTAND-MATNR 'can not expore,Please check!' INTO CHAR1.
* MESSAGE CHAR1 TYPE 'I'.
* STOP.
ENDIF.
PERFORM. CONSUMPTION_MATERIAL.
PERFORM. CONSUPTION_GRID_DISPLAY.
PERFORM. CONSUPTION_DATA_DISPLAY.
ELSEIF COM EQ 'X'.
IF XMCHB NE SPACE.
MESSAGE '合并报表运行,不可包含批次,请检查!' TYPE 'I'.
STOP.
ENDIF.
PERFORM. INIT_DATA.
PERFORM. GET_STK.
PERFORM. DATA_SELECTION.
READ TABLE BESTAND INDEX 1 TRANSPORTING NO FIELDS.
CHECK SY-SUBRC = 0.
IF BYMATR EQ 'X'.
PERFORM COMBINE_DATA1.
PERFORM COMBINE_DISPLAY_GRID1.
PERFORM COMBINE_DISPLAY_DATA1.
ELSE.
PERFORM COMBINE_DATA.
PERFORM COMBINE_DISPLAY_GRID.
PERFORM COMBINE_DISPLAY_DATA.
ENDIF.
ENDIF.
*&---------------------------------------------------------------------*
*& Form GET_STK
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM. GET_STK .
* it makes no sence to carry out this report
IF G_CNT_VARIANT_ERROR > 0.
IF NOT SY-SLSET IS INITIAL.
MESSAGE E634(DB) WITH SY-SLSET SY-REPID.
ENDIF.
ENDIF.
* does the user restrict the storage locations and want to
* suppress stock objects from plant level ?
CLEAR COLLECTOR-LGORT.
IF COLLECTOR-LGORT IN LGORT.
CLEAR G_FLAG_SUPPRESS_INIT_LGORT.
ELSE.
MOVE 'X' TO G_FLAG_SUPPRESS_INIT_LGORT.
ENDIF.
ENDFORM. " GET_STK
*-------------------------- Datenausgabe-------------------------------*
END-OF-SELECTION.
************************************************************************
* Read organisation
************************************************************************
FORM. ORGANISATION.
* get all existing storage bins of the required plants
REFRESH : G_T_T001L, G_T_ORGAN.
CLEAR : G_S_T001L, G_S_ORGAN, G_FLAG_T001L.
SELECT WERKS LGORT LGOBE FROM T001L
INTO CORRESPONDING FIELDS OF TABLE G_T_T001L
WHERE WERKS IN WERKS
AND LGORT IN LGORT
AND LGOBE NE SPACE.
IF SY-SUBRC IS INITIAL.
MOVE 'X' TO G_FLAG_T001L.
ENDIF.
SELECT DISTINCT WERKS NAME1 BWKEY
INTO CORRESPONDING FIELDS OF TABLE G_T_ORGAN
FROM T001W
WHERE WERKS IN WERKS.
SORT G_T_ORGAN BY BWKEY.
LOOP AT G_T_ORGAN INTO G_S_ORGAN.
ON CHANGE OF G_S_ORGAN-BWKEY.
CLEAR G_FLAG_OK.
SELECT SINGLE * FROM T001K
WHERE BWKEY EQ G_S_ORGAN-BWKEY.
IF SY-SUBRC IS INITIAL.
SELECT SINGLE * FROM T001
WHERE BUKRS EQ T001K-BUKRS.
IF SY-SUBRC IS INITIAL.
MOVE 'X' TO G_FLAG_OK.
ENDIF.
ENDIF.
ENDON.
IF G_FLAG_OK = 'X'.
MOVE-CORRESPONDING T001 TO G_S_ORGAN.
MODIFY G_T_ORGAN FROM G_S_ORGAN.
ENDIF.
ENDLOOP.
ENDFORM. " ORGANISATION
************************************************************************
* Check authorization on plant level for all selected plants
************************************************************************
FORM. CHECK_AUTHORIZATION.
* define local working areas
DATA : L_S_BUKRS TYPE STYPE_BUFFER,
L_T_BUKRS TYPE STAB_BUFFER.
SORT G_T_ORGAN BY WERKS.
* report displayed stocks for plant although the user has "n591618
* not the required authorization for that plant "n591618
CLEAR G_S_BUFFER. "n591618
LOOP AT G_T_ORGAN INTO G_S_ORGAN.
* check the authority only after the plant has changed "n531604
IF G_S_ORGAN-WERKS NE G_S_BUFFER-WERKS.
MOVE G_S_ORGAN-WERKS TO G_S_BUFFER-WERKS.
AUTHORITY-CHECK OBJECT 'M_MATE_WRK'
ID 'ACTVT' FIELD '03'
ID 'WERKS' FIELD G_S_ORGAN-WERKS.
IF NOT SY-SUBRC IS INITIAL.
SET CURSOR FIELD 'WERKS-LOW'.
MESSAGE E120 WITH G_S_ORGAN-WERKS.
ENDIF.
ENDIF.
IF NOVALUES IS INITIAL. "n531604
* the user wants to see the values
IF G_S_ORGAN-BUKRS NE G_S_BUFFER-BUKRS.
* check the authority after the company code changed
AUTHORITY-CHECK OBJECT 'F_BKPF_BUK'
* parameters for AUTHORITY-CHECK command fixed "n546707
ID 'BUKRS' FIELD G_S_ORGAN-BUKRS "n546707
ID 'ACTVT' FIELD '03'. "n546707
MOVE : G_S_ORGAN-BUKRS TO G_S_BUFFER-BUKRS, "n667256
SY-SUBRC TO G_S_BUFFER-SUBRC. "n667256
IF SY-SUBRC <> 0.
* no authorization -> save the company code
MOVE : 'X' TO G_FLAG_MESS_333,
G_S_ORGAN-BUKRS TO L_S_BUKRS-BUKRS.
COLLECT L_S_BUKRS INTO L_T_BUKRS.
ENDIF.
ENDIF.
* use the result from the buffer
IF G_S_BUFFER-SUBRC <> 0.
CLEAR G_S_ORGAN-WAERS.
MODIFY G_T_ORGAN FROM G_S_ORGAN
TRANSPORTING WAERS.
ENDIF.
ENDIF.
ENDLOOP.
* send the info for each missing autority
IF G_FLAG_MESS_333 = 'X'.
SORT L_T_BUKRS.
SET CURSOR FIELD 'WERKS-LOW'.
LOOP AT L_T_BUKRS INTO L_S_BUKRS.
* No authorization to display data for company code &
MESSAGE I862(M3) WITH L_S_BUKRS-BUKRS.
ENDLOOP.
ENDIF.
ENDFORM. "check_authorization
************************************************************************
* Check data on selection screen
************************************************************************
FORM. CHECK_ENTRY.
* Check some entered data for consistency
CALL FUNCTION 'MMIM_ENTRYCHECK_MAIN'
TABLES
IT_MATNR = MATNR
IT_WERKS = WERKS
IT_LGORT = LGORT
IT_EKGRP = EKGRUP
IT_SOBKZ = SO_SOBKZ.
* Material type
IF NOT MATART-LOW IS INITIAL OR NOT MATART-HIGH IS INITIAL.
SELECT SINGLE * FROM T134M WHERE MTART IN MATART.
IF NOT SY-SUBRC IS INITIAL.
MESSAGE E104(M3) WITH MATART-LOW.
ENDIF.
ENDIF.
* Material class
IF NOT MATKLA-LOW IS INITIAL OR NOT MATART-HIGH IS INITIAL.
SELECT SINGLE * FROM T023 WHERE MATKL IN MATKLA.
IF NOT SY-SUBRC IS INITIAL.
MESSAGE E883 WITH MATKLA-LOW.
ENDIF.
ENDIF.
ENDFORM. "check_entry
************************************************************************
* Main data selection routine
************************************************************************
FORM. DATA_SELECTION.
* Materials to be processed
TYPES: BEGIN OF TY_MAT,
MATNR LIKE MARA-MATNR,
WERKS LIKE MARC-WERKS,
XCHAR LIKE MARC-XCHAR,
MTART LIKE MARA-MTART,
MATKL LIKE MARA-MATKL,
MEINS LIKE MARA-MEINS,
AUSME LIKE MARC-AUSME,
TRAME LIKE MARC-TRAME,
UMLMC LIKE MARC-UMLMC,
LVORM_MARA LIKE MARA-LVORM,
LVORM_MARC LIKE MARC-LVORM,
END OF TY_MAT.
DATA: T_MAT TYPE TY_MAT OCCURS 0 WITH HEADER LINE,
T_BATCH TYPE TY_MAT OCCURS 0 WITH HEADER LINE,
T_NOBATCH TYPE TY_MAT OCCURS 0 WITH HEADER LINE.
* buffer for reading working tables
DATA : L_S_MAT TYPE TY_MAT,
L_F_MATNR LIKE MAKT-MATNR.
RANGES: R_SOBKZ FOR MKOL-SOBKZ.
DATA: L_CNT_MATNR_I_EQ TYPE I. "n759412
DATA: L_CNT_MATNR_TOTAL TYPE I. "n759412
************************************************************************
* Read material master data (MARA and MARC)
************************************************************************
REFRESH COLLECTOR.
CLEAR : L_CNT_MATNR_TOTAL, L_CNT_MATNR_I_EQ.
LOOP AT MATNR.
ADD 1 TO L_CNT_MATNR_TOTAL.
IF NOT MATNR-LOW IS INITIAL AND
MATNR-SIGN = 'I' AND
MATNR-OPTION = 'EQ' AND
MATNR-HIGH IS INITIAL.
* the table contains single a material number
ADD 1 TO L_CNT_MATNR_I_EQ.
ELSE.
EXIT.
ENDIF.
ENDLOOP.
* process SELECT command depending on the
* required material selection
IF L_CNT_MATNR_TOTAL > 0 AND
L_CNT_MATNR_TOTAL = L_CNT_MATNR_I_EQ.
SELECT MARA~MATNR WERKS XCHAR MTART MATKL MEINS AUSME TRAME UMLMC
MARA~LVORM AS LVORM_MARA
MARC~LVORM AS LVORM_MARC
INTO CORRESPONDING FIELDS OF TABLE T_MAT
FROM MARA INNER JOIN MARC
ON MARA~MATNR = MARC~MATNR
FOR ALL ENTRIES IN MATNR
WHERE MARA~MATNR = MATNR-LOW
AND WERKS IN WERKS
AND MTART IN MATART
AND MATKL IN MATKLA
AND EKGRP IN EKGRUP.
ELSE.
* END INSERT n_759412
SELECT MARA~MATNR WERKS XCHAR MTART MATKL MEINS AUSME TRAME UMLMC
MARA~LVORM AS LVORM_MARA
MARC~LVORM AS LVORM_MARC
INTO CORRESPONDING FIELDS OF TABLE T_MAT
FROM MARA INNER JOIN MARC
ON MARA~MATNR = MARC~MATNR
WHERE MARA~MATNR IN MATNR
AND WERKS IN WERKS
AND MTART IN MATART
AND MATKL IN MATKLA
AND EKGRP IN EKGRUP.
ENDIF. "n759412
************************************************************************
* Get "normal" stocks.
* If no detailed batch display is required,
* all data come from MARD. Otherwise, materials with batch
* management are extracted from MCHB, the rest from MARD.
* Dum-dibe-dum-dibe-dum. Dum.
************************************************************************
REFRESH: T_BATCH, T_NOBATCH.
* Split the worklist into the parts for each table...
IF XMCHB IS INITIAL.
T_NOBATCH[] = T_MAT[].
ELSE.
LOOP AT T_MAT.
IF T_MAT-XCHAR IS INITIAL.
APPEND T_MAT TO T_NOBATCH.
ELSE.
APPEND T_MAT TO T_BATCH.
ENDIF.
ENDLOOP.
ENDIF.
* Access MARD
* I you think that instead of SELECT-APPEND we could have used
* an array fetch, please wait for the table names to become different
* from the internal fields. B.T.W.: The DB-interface also buffers.
CLEAR COLLECTOR.
READ TABLE T_NOBATCH INDEX 1 TRANSPORTING NO FIELDS.
IF SY-SUBRC = 0.
SELECT MATNR WERKS LGORT
LABST UMLME INSME EINME SPEME RETME LVORM
INTO (COLLECTOR-MATNR, COLLECTOR-WERKS, COLLECTOR-LGORT,
COLLECTOR-LABST, COLLECTOR-UMLME, COLLECTOR-INSME,
COLLECTOR-EINME, COLLECTOR-SPEME, COLLECTOR-RETME,
COLLECTOR-LVORM)
FROM MARD
FOR ALL ENTRIES IN T_NOBATCH
WHERE MATNR = T_NOBATCH-MATNR
AND WERKS = T_NOBATCH-WERKS
AND LGORT IN LGORT.
* save the MARD Key and deletion indicator for later
* in table G_T_MARD_LV for use with special stocks
IF NOT PA_SOND IS INITIAL AND
NOT COLLECTOR-LVORM IS INITIAL.
MOVE-CORRESPONDING COLLECTOR
TO G_S_MARD_LV.
INSERT G_S_MARD_LV INTO TABLE G_T_MARD_LV.
ENDIF.
PERFORM F2000_COLLECT_COLLECTOR.
ENDSELECT.
ENDIF.
* Access MCHB
CLEAR COLLECTOR.
READ TABLE T_BATCH INDEX 1 TRANSPORTING NO FIELDS.
IF SY-SUBRC = 0.
SELECT MATNR WERKS LGORT CHARG
CLABS CUMLM CINSM CEINM CSPEM CRETM LVORM
INTO (COLLECTOR-MATNR, COLLECTOR-WERKS, COLLECTOR-LGORT,
COLLECTOR-CHARG,
COLLECTOR-LABST, COLLECTOR-UMLME, COLLECTOR-INSME,
COLLECTOR-EINME, COLLECTOR-SPEME, COLLECTOR-RETME,
COLLECTOR-LVORM)
FROM MCHB
FOR ALL ENTRIES IN T_BATCH
WHERE MATNR = T_BATCH-MATNR
AND WERKS = T_BATCH-WERKS
AND LGORT IN LGORT
AND CHARG IN CHARG.
PERFORM F2000_COLLECT_COLLECTOR.
ENDSELECT.
ENDIF.
************************************************************************
* Transfer stocks from MARC (TRAME and UMLMC)
************************************************************************
CLEAR COLLECTOR.
LOOP AT T_MAT WHERE UMLMC <> 0 OR TRAME <> 0.
* there are no lines with stock = zero
* take the stocks from plant level only when the user "n577268
* does not restrict the storage location; "n577268
CHECK : G_FLAG_SUPPRESS_INIT_LGORT IS INITIAL. "n577268
IF NEGATIV = 'X'.
* ignore entry if all stocks are zero or greater
IF T_MAT-TRAME >= 0 AND
T_MAT-UMLMC >= 0.
CONTINUE. "take the next entry
ENDIF.
ENDIF.
COLLECTOR-MATNR = T_MAT-MATNR.
COLLECTOR-WERKS = T_MAT-WERKS.
COLLECTOR-UMLME = T_MAT-TRAME + T_MAT-UMLMC.
COLLECTOR-LVORM = T_MAT-LVORM_MARC.
APPEND COLLECTOR.
ENDLOOP.
************************************************************************
* Consignment from vendor (MKOL)
* Read only if requested by one of the
* flags on the selection screen. Absolutely inconsistent, but
* due to compatibility...
* MKOL has a flag for deletion
************************************************************************
IF NOT PA_SOND IS INITIAL AND
NOT T_MAT[] IS INITIAL.
IF 'K' IN SO_SOBKZ OR
'M' IN SO_SOBKZ.
CLEAR COLLECTOR.
SELECT MATNR WERKS LGORT CHARG SOBKZ LIFNR
SLABS SINSM SEINM SSPEM LVORM
INTO (COLLECTOR-MATNR, COLLECTOR-WERKS, COLLECTOR-LGORT,
COLLECTOR-CHARG, COLLECTOR-SOBKZ, COLLECTOR-LIFNR,
COLLECTOR-LABST, COLLECTOR-INSME, COLLECTOR-EINME,
COLLECTOR-SPEME, COLLECTOR-LVORM)
FROM MKOL
FOR ALL ENTRIES IN T_MAT
WHERE MATNR = T_MAT-MATNR
AND WERKS = T_MAT-WERKS
AND LGORT IN LGORT
AND CHARG IN CHARG
AND SOBKZ IN SO_SOBKZ.
PERFORM F2000_COLLECT_COLLECTOR.
ENDSELECT.
ENDIF.
ENDIF.
************************************************************************
* Special stocks at customer side (MSKU)
* MSKU has no flag for deletion
************************************************************************
IF NOT PA_SOND IS INITIAL AND
NOT T_MAT[] IS INITIAL.
IF 'V' IN SO_SOBKZ OR
'W' IN SO_SOBKZ.
CLEAR COLLECTOR.
SELECT MATNR WERKS CHARG SOBKZ KUNNR
KULAB KUINS KUEIN
INTO (COLLECTOR-MATNR, COLLECTOR-WERKS, COLLECTOR-CHARG,
COLLECTOR-SOBKZ, COLLECTOR-KUNNR,
COLLECTOR-LABST, COLLECTOR-INSME, COLLECTOR-EINME)
FROM MSKU
FOR ALL ENTRIES IN T_MAT
WHERE MATNR = T_MAT-MATNR
AND WERKS = T_MAT-WERKS
AND CHARG IN CHARG
AND SOBKZ IN SO_SOBKZ.
PERFORM F2000_COLLECT_COLLECTOR.
ENDSELECT.
ENDIF.
ENDIF.
************************************************************************
* Special stocks at vendor provision (MSLB)
* MSLB has no flag for deletion
************************************************************************
IF NOT PA_SOND IS INITIAL AND
NOT T_MAT[] IS INITIAL AND
'O' IN SO_SOBKZ.
CLEAR COLLECTOR.
SELECT MATNR WERKS CHARG SOBKZ LIFNR
LBLAB LBINS LBEIN
INTO (COLLECTOR-MATNR, COLLECTOR-WERKS, COLLECTOR-CHARG,
COLLECTOR-SOBKZ, COLLECTOR-LIFNR,
COLLECTOR-LABST, COLLECTOR-INSME,
COLLECTOR-EINME)
FROM MSLB
FOR ALL ENTRIES IN T_MAT
WHERE MATNR = T_MAT-MATNR
AND WERKS = T_MAT-WERKS
AND CHARG IN CHARG
AND SOBKZ IN SO_SOBKZ.
PERFORM F2000_COLLECT_COLLECTOR.
ENDSELECT.
ENDIF.
************************************************************************
* Customer order stock (MSKA) and sum segment (MSSA) for valuation.
* Sum on the database and FOR ALL ENTRIES is not allowed from
* release 4.5 onwards, so the summation has to be done
* on the application server (here!).
* MSKA has no flag for deletion
************************************************************************
IF NOT PA_SOND IS INITIAL AND
NOT T_MAT[] IS INITIAL AND
'E' IN SO_SOBKZ.
CLEAR COLLECTOR.
SELECT MSKA~MATNR MSKA~WERKS LGORT CHARG MSKA~SOBKZ
MSKA~VBELN MSKA~POSNR
KALAB KAINS KASPE KAEIN KZBWS
INTO (COLLECTOR-MATNR, COLLECTOR-WERKS, COLLECTOR-LGORT,
COLLECTOR-CHARG, COLLECTOR-SOBKZ,
COLLECTOR-VBELN, COLLECTOR-POSNR,
COLLECTOR-LABST, COLLECTOR-INSME, COLLECTOR-SPEME,
COLLECTOR-EINME, COLLECTOR-KZBWS)
FROM MSKA INNER JOIN MSSA
ON MSKA~MATNR = MSSA~MATNR
AND MSKA~WERKS = MSSA~WERKS
AND MSKA~SOBKZ = MSSA~SOBKZ
AND MSKA~VBELN = MSSA~VBELN
AND MSKA~POSNR = MSSA~POSNR
FOR ALL ENTRIES IN T_MAT
WHERE MSKA~MATNR = T_MAT-MATNR
AND MSKA~WERKS = T_MAT-WERKS
AND MSKA~LGORT IN LGORT
AND MSKA~CHARG IN CHARG.
PERFORM F2000_COLLECT_COLLECTOR.
ENDSELECT.
* Transfer stocks for customer order (SATRA in MSSA)
CLEAR COLLECTOR.
SELECT MATNR WERKS SOBKZ VBELN POSNR KZBWS SATRA
INTO (COLLECTOR-MATNR, COLLECTOR-WERKS, COLLECTOR-SOBKZ,
COLLECTOR-VBELN, COLLECTOR-POSNR,
COLLECTOR-KZBWS, COLLECTOR-UMLME)
FROM MSSA
FOR ALL ENTRIES IN T_MAT
WHERE MATNR = T_MAT-MATNR
AND WERKS = T_MAT-WERKS
AND SOBKZ IN SO_SOBKZ
AND SATRA <> 0.
PERFORM F2000_COLLECT_COLLECTOR.
ENDSELECT.
ENDIF.
************************************************************************
* The same game for project stocks (MSPR/MSSQ).
* MSPR has no flag for deletion
************************************************************************
IF NOT PA_SOND IS INITIAL AND
NOT T_MAT[] IS INITIAL AND
'Q' IN SO_SOBKZ.
CLEAR COLLECTOR.
SELECT MSPR~MATNR MSPR~WERKS LGORT CHARG MSPR~SOBKZ MSPR~PSPNR
PRLAB PRINS PRSPE PREIN KZBWS
INTO (COLLECTOR-MATNR, COLLECTOR-WERKS, COLLECTOR-LGORT,
COLLECTOR-CHARG, COLLECTOR-SOBKZ,
COLLECTOR-PSPNR,
COLLECTOR-LABST, COLLECTOR-INSME, COLLECTOR-SPEME,
COLLECTOR-EINME, COLLECTOR-KZBWS)
FROM MSPR INNER JOIN MSSQ
ON MSPR~MATNR = MSSQ~MATNR
AND MSPR~WERKS = MSSQ~WERKS
AND MSPR~SOBKZ = MSSQ~SOBKZ
AND MSPR~PSPNR = MSSQ~PSPNR
FOR ALL ENTRIES IN T_MAT
WHERE MSPR~MATNR = T_MAT-MATNR
AND MSPR~WERKS = T_MAT-WERKS
AND MSPR~LGORT IN LGORT
AND MSPR~CHARG IN CHARG.
PERFORM F2000_COLLECT_COLLECTOR.
ENDSELECT.
* Transfer stocks for projects (SQTRA in MSSQ)
CLEAR COLLECTOR.
SELECT MATNR WERKS SOBKZ PSPNR KZBWS SQTRA
INTO (COLLECTOR-MATNR, COLLECTOR-WERKS, COLLECTOR-SOBKZ,
COLLECTOR-PSPNR,
COLLECTOR-KZBWS, COLLECTOR-UMLME)
FROM MSSQ
FOR ALL ENTRIES IN T_MAT
WHERE MATNR = T_MAT-MATNR
AND WERKS = T_MAT-WERKS
AND SOBKZ IN SO_SOBKZ
AND SQTRA <> 0.
PERFORM F2000_COLLECT_COLLECTOR.
ENDSELECT.
ENDIF.
************************************************************************
* Extract key-data for other tables.
************************************************************************
DATA: BEGIN OF T_MAKTKEY OCCURS 0,
MATNR LIKE MAKT-MATNR,
END OF T_MAKTKEY,
* working area for the material description
BEGIN OF L_S_MAKT,
MATNR LIKE MAKT-MATNR,
MAKTX LIKE MAKT-MAKTX,
END OF L_S_MAKT,
BEGIN OF T_MAKT OCCURS 0,
MATNR LIKE MAKT-MATNR,
MAKTX LIKE MAKT-MAKTX,
END OF T_MAKT,
BEGIN OF T_MCHAKEY OCCURS 0,
MATNR LIKE MCHA-MATNR,
WERKS LIKE MCHA-WERKS,
CHARG LIKE MCHA-CHARG,
END OF T_MCHAKEY,
BEGIN OF T_MCHA OCCURS 0,
MATNR LIKE MCHA-MATNR,
WERKS LIKE MCHA-WERKS,
CHARG LIKE MCHA-CHARG,
BWTAR LIKE MCHA-BWTAR,
END OF T_MCHA.
REFRESH: T_MAKTKEY, T_MCHAKEY, BESTAND.
* remove all items in bestand with wrong batch number. If we would
* not remove this, report will e.g. show materials which has
* only MARD entries, too.
LOOP AT COLLECTOR WHERE CHARG IN CHARG. "note 311770
MOVE-CORRESPONDING COLLECTOR TO BESTAND.
* fill the key of the special stocks into the field
* assigment
CASE COLLECTOR-SOBKZ.
WHEN 'E'.
MOVE : 'X' TO G_FLAG_SOBKZ-VBELN.
WRITE : COLLECTOR-VBELN TO BESTAND-SSNUM.
MOVE : '/' TO BESTAND-SSNUM+10(01).
WRITE : COLLECTOR-POSNR TO BESTAND-SSNUM+12(08)
NO-ZERO.
CONDENSE BESTAND-SSNUM.
WHEN 'K'.
MOVE : 'X' TO G_FLAG_SOBKZ-LIFNR.
WRITE : COLLECTOR-LIFNR TO BESTAND-SSNUM.
WHEN 'M'.
MOVE : 'X' TO G_FLAG_SOBKZ-LIFNR.
WRITE : COLLECTOR-LIFNR TO BESTAND-SSNUM.
WHEN 'O'.
MOVE : 'X' TO G_FLAG_SOBKZ-LIFNR.
WRITE : COLLECTOR-LIFNR TO BESTAND-SSNUM.
WHEN 'Q'.
MOVE : 'X' TO G_FLAG_SOBKZ-PSPNR.
WRITE : COLLECTOR-PSPNR TO BESTAND-SSNUM.
WHEN 'V'.
MOVE : 'X' TO G_FLAG_SOBKZ-KUNNR.
WRITE : COLLECTOR-KUNNR TO BESTAND-SSNUM.
WHEN 'W'.
MOVE : 'X' TO G_FLAG_SOBKZ-KUNNR.
WRITE : COLLECTOR-KUNNR TO BESTAND-SSNUM.
WHEN OTHERS.
CLEAR BESTAND-SSNUM.
ENDCASE.
APPEND BESTAND.
T_MAKTKEY-MATNR = BESTAND-MATNR.
COLLECT T_MAKTKEY.
IF BESTAND-CHARG <> SPACE.
T_MCHAKEY-MATNR = BESTAND-MATNR.
T_MCHAKEY-WERKS = BESTAND-WERKS.
T_MCHAKEY-CHARG = BESTAND-CHARG.
COLLECT T_MCHAKEY.
ENDIF.
ENDLOOP.
FREE COLLECTOR.
************************************************************************
* Read additional tables
************************************************************************
READ TABLE T_MAKTKEY INDEX 1 TRANSPORTING NO FIELDS.
IF SY-SUBRC = 0.
SELECT MATNR MAKTX INTO CORRESPONDING FIELDS OF TABLE T_MAKT
FROM MAKT
FOR ALL ENTRIES IN T_MAKTKEY
WHERE MATNR = T_MAKTKEY-MATNR
AND SPRAS = SY-LANGU.
SORT T_MAKT BY MATNR.
ENDIF.
* Read batch data only if values are requested
READ TABLE T_MCHAKEY INDEX 1 TRANSPORTING NO FIELDS.
IF SY-SUBRC = 0 AND NOVALUES IS INITIAL.
SELECT MATNR WERKS CHARG BWTAR
INTO CORRESPONDING FIELDS OF TABLE T_MCHA
FROM MCHA
FOR ALL ENTRIES IN T_MCHAKEY
WHERE MATNR = T_MCHAKEY-MATNR
AND WERKS = T_MCHAKEY-WERKS
AND CHARG = T_MCHAKEY-CHARG.
SORT T_MCHA BY MATNR WERKS CHARG.
ENDIF.
************************************************************************
* Data definitions for the valuation extraction
************************************************************************
DATA: BEGIN OF T_MBEWKEY OCCURS 0,
MATNR LIKE MBEW-MATNR,
BWKEY LIKE MBEW-BWKEY,
BWTAR LIKE MBEW-BWTAR,
END OF T_MBEWKEY,
* workin table for the material stock valuation
BEGIN OF T_MBEW OCCURS 0,
MATNR LIKE MBEW-MATNR,
BWKEY LIKE MBEW-BWKEY,
BWTAR LIKE MBEW-BWTAR,
* consider the valuation of the special stocks E, Q "n531604
SOBKZ LIKE EBEW-SOBKZ, "n531604
VBELN LIKE EBEW-VBELN, "n531604
POSNR LIKE EBEW-POSNR, "n531604
PSPNR LIKE QBEW-PSPNR, "n531604
LBKUM(12) TYPE P DECIMALS 3, "407810
SALK3(12) TYPE P DECIMALS 2, "388735
VPRSV LIKE MBEW-VPRSV, "353428
VERPR LIKE MBEW-VERPR, "353428
STPRS LIKE MBEW-STPRS, "353428
PEINH LIKE MBEW-PEINH, "353428
END OF T_MBEW.
DATA: T_EBEWKEY LIKE T_MBEWKEY OCCURS 0 WITH HEADER LINE.
DATA: T_QBEWKEY LIKE T_MBEWKEY OCCURS 0 WITH HEADER LINE.
DATA: T_EBEW LIKE T_MBEW OCCURS 0 WITH HEADER LINE.
DATA: T_QBEW LIKE T_MBEW OCCURS 0 WITH HEADER LINE.
DATA: V_MEINS LIKE ZLJGB-MEINS. "GMT工厂商品单位
DATA: V_MENGE TYPE EKPO-MENGE, "SAP单位转换为GMT工厂商品单位数量!
V_NTGEW LIKE ZLJGB-NTGEW,
V_RATE LIKE ZLJGB-RATE.
DATA: BEGIN OF T_T134MKEY OCCURS 0,
BWKEY LIKE T134M-BWKEY,
MTART LIKE T134M-MTART,
END OF T_T134MKEY,
BEGIN OF T_T134M OCCURS 0,
BWKEY LIKE T134M-BWKEY,
MTART LIKE T134M-MTART,
WERTU LIKE T134M-WERTU,
END OF T_T134M.
************************************************************************
* Fill in additional data (first round) and extract the data
* for the access to the valuation tables.
************************************************************************
SORT T_MAT BY MATNR WERKS.
SORT G_T_ORGAN BY WERKS.
CLEAR : G_S_T001L, G_S_ORGAN, BESTAND.
LOOP AT BESTAND.
* get the information per plant and storage location
* with buffer
IF G_FLAG_T001L = 'X'.
IF BESTAND-WERKS = G_S_T001L-WERKS AND
BESTAND-LGORT = G_S_T001L-LGORT.
ELSE.
* read with plant and storage location
READ TABLE G_T_T001L INTO G_S_T001L
WITH TABLE KEY WERKS = BESTAND-WERKS
LGORT = BESTAND-LGORT.
MOVE : BESTAND-WERKS TO G_S_T001L-WERKS,
BESTAND-LGORT TO G_S_T001L-LGORT.
IF SY-SUBRC <> 0.
CLEAR G_S_T001L-LGOBE.
ENDIF.
ENDIF.
ENDIF.
* take the storage bin from the buffer
MOVE : G_S_T001L-LGOBE TO BESTAND-LGOBE.
* get the information per plant with buffer
IF BESTAND-WERKS NE G_S_ORGAN-WERKS.
READ TABLE G_T_ORGAN INTO G_S_ORGAN
WITH KEY WERKS = BESTAND-WERKS
BINARY SEARCH.
IF SY-SUBRC <> 0.
* sorry nothing found
CLEAR G_S_ORGAN.
MOVE : BESTAND-WERKS TO G_S_ORGAN-WERKS.
ENDIF.
ENDIF.
* take the following fields from the buffer
MOVE : G_S_ORGAN-NAME1 TO BESTAND-NAME1,
G_S_ORGAN-WAERS TO BESTAND-WAERS,
G_S_ORGAN-BWKEY TO BESTAND-BWKEY.
* get the information from the material master MARC
* with buffer
IF BESTAND-MATNR = L_S_MAT-MATNR AND
BESTAND-WERKS = L_S_MAT-WERKS.
* results are in the buffer
ELSE.
CLEAR L_S_MAT.
MOVE : BESTAND-MATNR TO L_S_MAT-MATNR,
BESTAND-WERKS TO L_S_MAT-WERKS.
READ TABLE T_MAT INTO L_S_MAT
WITH KEY MATNR = BESTAND-MATNR
WERKS = BESTAND-WERKS
BINARY SEARCH.
IF SY-SUBRC <> 0.
* sorry nothing found
CLEAR L_S_MAT.
MOVE : BESTAND-MATNR TO L_S_MAT-MATNR,
BESTAND-WERKS TO L_S_MAT-WERKS.
ENDIF.
ENDIF.
* take the results the buffer
MOVE : L_S_MAT-MTART TO BESTAND-MTART,
L_S_MAT-MATKL TO BESTAND-MATKL,
L_S_MAT-MEINS TO BESTAND-MEINS,
L_S_MAT-AUSME TO BESTAND-AUSME."add by rzwei
* if this entry has no deletion flag, take the
* deletion flag from a higher level like MARA, MARC,
* or MARDA
IF BESTAND-LVORM IS INITIAL.
IF NOT L_S_MAT-LVORM_MARC IS INITIAL.
MOVE L_S_MAT-LVORM_MARC
TO BESTAND-LVORM.
ELSEIF NOT L_S_MAT-LVORM_MARA IS INITIAL.
MOVE L_S_MAT-LVORM_MARA
TO BESTAND-LVORM.
ELSEIF NOT G_T_MARD_LV[] IS INITIAL AND
NOT BESTAND-LGORT IS INITIAL AND
NOT BESTAND-SOBKZ IS INITIAL.
* look for deletion flag in working table
* g_t_mard_lv for a line with special stock
IF BESTAND-MATNR = G_S_MARD_LV-MATNR AND
BESTAND-WERKS = G_S_MARD_LV-WERKS AND
BESTAND-LGORT = G_S_MARD_LV-LGORT.
ELSE.
* read table only after the key has changed
READ TABLE G_T_MARD_LV INTO G_S_MARD_LV
WITH TABLE KEY MATNR = BESTAND-MATNR
WERKS = BESTAND-WERKS
LGORT = BESTAND-LGORT.
IF SY-SUBRC <> 0.
* fill the buffer in case the entry does not exist
MOVE : BESTAND-MATNR TO G_S_MARD_LV-MATNR,
BESTAND-WERKS TO G_S_MARD_LV-WERKS,
BESTAND-LGORT TO G_S_MARD_LV-LGORT.
CLEAR G_S_MARD_LV-LVORM.
ENDIF.
* take the result from the buffer
MOVE G_S_MARD_LV-LVORM TO BESTAND-LVORM.
ENDIF.
ENDIF.
ENDIF.
* read the material short description after the material
* number has changed
IF BESTAND-MATNR NE L_S_MAKT-MATNR.
READ TABLE T_MAKT INTO L_S_MAKT
WITH KEY MATNR = BESTAND-MATNR
BINARY SEARCH.
IF SY-SUBRC <> 0.
* sorry nothing found
CLEAR L_S_MAKT-MAKTX.
MOVE BESTAND-MATNR TO L_S_MAKT-MATNR.
ENDIF.
ENDIF.
* take the results the buffer
MOVE : L_S_MAKT-MAKTX TO BESTAND-MAKTX.
IF BESTAND-VBELN IS NOT INITIAL.
SELECT SINGLE BSTKD
INTO BESTAND-BSTKD
FROM VBKD
WHERE VBELN = BESTAND-VBELN AND POSNR = BESTAND-POSNR.
IF SY-SUBRC NE 0.
SELECT SINGLE BSTKD
INTO BESTAND-BSTKD
FROM VBKD
WHERE VBELN = BESTAND-VBELN AND POSNR = '000000'.
ENDIF.
ENDIF.
IF BESTAND-CHARG <> SPACE AND NOVALUES IS INITIAL.
READ TABLE T_MCHA WITH KEY MATNR = BESTAND-MATNR
WERKS = BESTAND-WERKS
CHARG = BESTAND-CHARG
BINARY SEARCH.
IF SY-SUBRC = 0.
BESTAND-BWTAR = T_MCHA-BWTAR.
ENDIF.
ENDIF.
SELECT SINGLE UMREZ UMREN INTO (TEMP-UMREZ,TEMP-UMREN)
FROM MARM
WHERE MATNR = BESTAND-MATNR AND MEINH = BESTAND-AUSME.
BESTAND-LABOX = BESTAND-LABST * TEMP-UMREN / TEMP-UMREZ. "add field by rzwei
* Valuation keys
IF NOVALUES IS INITIAL.
IF BESTAND-SOBKZ = ' ' OR BESTAND-SOBKZ = 'O' OR
BESTAND-SOBKZ = 'W' OR BESTAND-SOBKZ = 'V' OR
BESTAND-KZBWS = 'A'.
T_MBEWKEY-MATNR = BESTAND-MATNR.
T_MBEWKEY-BWKEY = BESTAND-BWKEY.
T_MBEWKEY-BWTAR = BESTAND-BWTAR.
COLLECT T_MBEWKEY.
ELSEIF BESTAND-SOBKZ = 'E' AND BESTAND-KZBWS = 'M'.
T_EBEWKEY-MATNR = BESTAND-MATNR.
T_EBEWKEY-BWKEY = BESTAND-BWKEY.
T_EBEWKEY-BWTAR = BESTAND-BWTAR.
COLLECT T_EBEWKEY.
ELSEIF BESTAND-SOBKZ = 'Q' AND BESTAND-KZBWS = 'M'.
T_QBEWKEY-MATNR = BESTAND-MATNR.
T_QBEWKEY-BWKEY = BESTAND-BWKEY.
T_QBEWKEY-BWTAR = BESTAND-BWTAR.
COLLECT T_QBEWKEY.
ENDIF.
T_T134MKEY-BWKEY = BESTAND-BWKEY.
T_T134MKEY-MTART = BESTAND-MTART.
COLLECT T_T134MKEY.
ENDIF. " novalues is initial
MODIFY BESTAND.
ENDLOOP.
* release the space of global working tables after use
FREE : G_T_MARD_LV, G_T_T001L, G_T_ORGAN.
************************************************************************
* Read the valuation tables
************************************************************************
IF NOVALUES IS INITIAL.
READ TABLE T_MBEWKEY INDEX 1 TRANSPORTING NO FIELDS.
IF SY-SUBRC = 0.
SELECT MATNR BWKEY BWTAR LBKUM SALK3
VPRSV VERPR STPRS PEINH "353428
INTO CORRESPONDING FIELDS OF TABLE T_MBEW
FROM MBEW
FOR ALL ENTRIES IN T_MBEWKEY
WHERE MATNR = T_MBEWKEY-MATNR
AND BWKEY = T_MBEWKEY-BWKEY
AND BWTAR = T_MBEWKEY-BWTAR.
SORT T_MBEW BY MATNR BWKEY BWTAR.
ENDIF.
READ TABLE T_EBEWKEY INDEX 1 TRANSPORTING NO FIELDS.
IF SY-SUBRC = 0.
* "Unfortunately", EBEW and QBEW do not have sum segments over
* the valuation types. Therefore, without batch data, another
* SELECT-statement is needed.
IF XMCHB = 'X'.
SELECT MATNR BWKEY BWTAR SOBKZ VBELN POSNR LBKUM SALK3
VPRSV VERPR STPRS PEINH
INTO (T_EBEW-MATNR, T_EBEW-BWKEY, T_EBEW-BWTAR,
T_EBEW-SOBKZ, T_EBEW-VBELN, T_EBEW-POSNR,
T_EBEW-LBKUM, T_EBEW-SALK3,
T_EBEW-VPRSV, T_EBEW-VERPR,
T_EBEW-STPRS, T_EBEW-PEINH)
FROM EBEW
FOR ALL ENTRIES IN T_EBEWKEY
WHERE MATNR = T_EBEWKEY-MATNR
AND BWKEY = T_EBEWKEY-BWKEY
AND BWTAR = T_EBEWKEY-BWTAR.
COLLECT T_EBEW.
ENDSELECT.
ELSE.
SELECT MATNR BWKEY BWTAR SOBKZ VBELN POSNR LBKUM SALK3
VPRSV VERPR STPRS PEINH
INTO (T_EBEW-MATNR, T_EBEW-BWKEY, T_EBEW-BWTAR,
T_EBEW-SOBKZ, T_EBEW-VBELN, T_EBEW-POSNR,
T_EBEW-LBKUM, T_EBEW-SALK3,
T_EBEW-VPRSV, T_EBEW-VERPR,
T_EBEW-STPRS, T_EBEW-PEINH)
FROM EBEW
FOR ALL ENTRIES IN T_EBEWKEY
WHERE MATNR = T_EBEWKEY-MATNR
AND BWKEY = T_EBEWKEY-BWKEY.
COLLECT T_EBEW.
ENDSELECT.
ENDIF.
SORT T_EBEW BY MATNR BWKEY BWTAR SOBKZ VBELN POSNR.
ENDIF.
READ TABLE T_QBEWKEY INDEX 1 TRANSPORTING NO FIELDS.
IF SY-SUBRC = 0.
IF XMCHB = 'X'.
SELECT MATNR BWKEY BWTAR SOBKZ PSPNR LBKUM SALK3
VPRSV VERPR STPRS PEINH
INTO (T_QBEW-MATNR, T_QBEW-BWKEY, T_QBEW-BWTAR,
T_QBEW-SOBKZ, T_QBEW-PSPNR,
T_QBEW-LBKUM, T_QBEW-SALK3,
T_QBEW-VPRSV, T_QBEW-VERPR,
T_QBEW-STPRS, T_QBEW-PEINH)
FROM QBEW
FOR ALL ENTRIES IN T_QBEWKEY
WHERE MATNR = T_QBEWKEY-MATNR
AND BWKEY = T_QBEWKEY-BWKEY
AND BWTAR = T_QBEWKEY-BWTAR.
COLLECT T_QBEW.
ENDSELECT.
ELSE.
SELECT MATNR BWKEY BWTAR SOBKZ PSPNR LBKUM SALK3
VPRSV VERPR STPRS PEINH
INTO (T_QBEW-MATNR, T_QBEW-BWKEY, T_QBEW-BWTAR,
T_QBEW-SOBKZ, T_QBEW-PSPNR,
T_QBEW-LBKUM, T_QBEW-SALK3,
T_QBEW-VPRSV, T_QBEW-VERPR,
T_QBEW-STPRS, T_QBEW-PEINH)
FROM QBEW
FOR ALL ENTRIES IN T_QBEWKEY
WHERE MATNR = T_QBEWKEY-MATNR
AND BWKEY = T_QBEWKEY-BWKEY.
COLLECT T_QBEW.
ENDSELECT.
ENDIF.
SORT T_QBEW BY MATNR BWKEY BWTAR SOBKZ PSPNR.
ENDIF.
READ TABLE T_T134MKEY INDEX 1 TRANSPORTING NO FIELDS.
IF SY-SUBRC = 0.
SELECT BWKEY MTART WERTU
INTO CORRESPONDING FIELDS OF TABLE T_T134M
FROM T134M
FOR ALL ENTRIES IN T_T134MKEY
WHERE BWKEY = T_T134MKEY-BWKEY
AND MTART = T_T134MKEY-MTART.
SORT T_T134M BY BWKEY MTART.
ENDIF.
************************************************************************
* Fill the valuation data
************************************************************************
DATA: FACTOR TYPE F.
CLEAR:BESTAND.
LOOP AT BESTAND.
CHECK BESTAND-WAERS <> SPACE. "Do nothing for failed Auth-Checks
READ TABLE T_T134M WITH KEY BWKEY = BESTAND-BWKEY
MTART = BESTAND-MTART
BINARY SEARCH.
CHECK SY-SUBRC = 0 AND T_T134M-WERTU = 'X'.
SY-SUBRC = 4.
IF BESTAND-SOBKZ = ' ' OR BESTAND-SOBKZ = 'O' OR
BESTAND-SOBKZ = 'W' OR BESTAND-SOBKZ = 'V' OR
BESTAND-KZBWS = 'A'.
READ TABLE T_MBEW WITH KEY MATNR = BESTAND-MATNR
BWKEY = BESTAND-BWKEY
BWTAR = BESTAND-BWTAR
BINARY SEARCH.
ELSEIF BESTAND-SOBKZ = 'E' AND BESTAND-KZBWS = 'M'.
READ TABLE T_EBEW WITH KEY MATNR = BESTAND-MATNR
BWKEY = BESTAND-BWKEY
BWTAR = BESTAND-BWTAR
SOBKZ = BESTAND-SOBKZ
VBELN = BESTAND-VBELN "n531604
POSNR = BESTAND-POSNR "n531604
BINARY SEARCH.
MOVE-CORRESPONDING T_EBEW TO T_MBEW.
ELSEIF BESTAND-SOBKZ = 'Q' AND BESTAND-KZBWS = 'M'.
READ TABLE T_QBEW WITH KEY MATNR = BESTAND-MATNR
BWKEY = BESTAND-BWKEY
BWTAR = BESTAND-BWTAR
SOBKZ = BESTAND-SOBKZ
PSPNR = BESTAND-PSPNR
BINARY SEARCH.
MOVE-CORRESPONDING T_QBEW TO T_MBEW.
ENDIF.
IF SY-SUBRC = 0.
IF T_MBEW-LBKUM = 0.
* Cannot happen, but in R/3 this does not hold in all cases...
IF T_MBEW-PEINH = 0. "353428
T_MBEW-PEINH = 1. "353428
ENDIF. "353428
* Calculation of value in case of LBKUM = 0 only possible
* for MBEW. EBEW and QBEW are collected over all subitems
* (VBELN...), so the data are not available.
IF BESTAND-SOBKZ = 'E' OR BESTAND-SOBKZ = 'Q'. "388735
FACTOR = 0. "388735
CLEAR BESTAND-WAERS. "388735
ELSE. "388735
CASE T_MBEW-VPRSV.
WHEN 'V'. FACTOR = T_MBEW-VERPR / T_MBEW-PEINH.
WHEN 'S'. FACTOR = T_MBEW-STPRS / T_MBEW-PEINH.
ENDCASE.
ENDIF. "388735
ELSE.
FACTOR = T_MBEW-SALK3 / T_MBEW-LBKUM.
ENDIF.
BESTAND-WLABS = BESTAND-LABST * FACTOR.
BESTAND-WINSM = BESTAND-INSME * FACTOR.
BESTAND-WSPEM = BESTAND-SPEME * FACTOR.
BESTAND-WEINM = BESTAND-EINME * FACTOR.
BESTAND-WUMLM = BESTAND-UMLME * FACTOR.
MODIFY BESTAND.
ENDIF.
ENDLOOP.
ENDIF. "novalues is initial
LOOP AT BESTAND.
SELECT SINGLE BRGEW NTGEW GEWEI FROM MARA
INTO (BESTAND-BRGEW,BESTAND-NTGEW,BESTAND-GEWEI)
WHERE MATNR = BESTAND-MATNR.
IF BESTAND-MTART = 'ZRAW' OR BESTAND-MTART = 'ZIMM'.
CLEAR EORD.
SELECT SINGLE MATNR WERKS LIFNR INTO
(EORD-MATNR,EORD-WERKS,EORD-LIFNR)
FROM EORD
WHERE MATNR = BESTAND-MATNR
AND WERKS = BESTAND-WERKS
AND FLIFN = 'X'.
IF SY-SUBRC NE 0.
SELECT SINGLE MATNR WERKS LIFNR INTO
(EORD-MATNR,EORD-WERKS,EORD-LIFNR)
FROM EORD
WHERE MATNR = BESTAND-MATNR
AND WERKS = BESTAND-WERKS.
ENDIF.
SELECT SINGLE INCO1 INTO BESTAND-INCO1
FROM EINE JOIN EINA ON EINA~INFNR = EINE~INFNR
WHERE MATNR = EORD-MATNR
AND WERKS = EORD-WERKS
AND LIFNR = EORD-LIFNR.
ELSE.
SELECT SINGLE BKLAS INCO1 AUFNR
INTO (BESTAND-BKLAS,BESTAND-INCO1,BESTAND-AUFNR)
FROM ZM065
WHERE CHARG = BESTAND-CHARG.
ENDIF.
SELECT SINGLE BKBEZ INTO BESTAND-BKBEZ
FROM T025T
WHERE BKLAS = BESTAND-BKLAS
AND SPRAS = SY-LANGU.
BESTAND-TOTAL = BESTAND-LABST + BESTAND-INSME + BESTAND-SPEME
+ BESTAND-EINME + BESTAND-UMLME.
IF BESTAND-GEWEI = 'G'.
V_NTGEW = BESTAND-NTGEW / 1000.
ELSEIF BESTAND-GEWEI = 'MG'.
V_NTGEW = BESTAND-NTGEW / 1000000.
ENDIF.
BESTAND-BRGEW = BESTAND-NTGEW * BESTAND-TOTAL.
SELECT SINGLE MEINS NTGEW MEINS_GMT RATE SERIA CUSTN CUSTX MEINS_GMT1
MEINS_ZH MEINS_GMT_ZH
INTO (BESTAND-MEINS_GC,BESTAND-NTGEW_GMT,BESTAND-MEINS_GMT,V_RATE,
BESTAND-SERIA,BESTAND-CUSTN,BESTAND-CUSTX,BESTAND-MEINS_GMT1,
BESTAND-MEINS_ZH,BESTAND-MEINS_GMT_ZH)
FROM ZLJGB
WHERE MATNR = BESTAND-MATNR.
IF SY-SUBRC = 0.
* CALL FUNCTION 'UNIT_CONVERSION_SIMPLE'
* EXPORTING
* INPUT = BESTAND-NTGEW
* ROUND_SIGN = 'X'
* UNIT_IN = BESTAND-GEWEI
* UNIT_OUT = 'KG'
* IMPORTING
* OUTPUT = V_NTGEW
* EXCEPTIONS
* CONVERSION_NOT_FOUND = 01
* DIVISION_BY_ZERO = 02
* INPUT_INVALID = 03
* OUTPUT_INVALID = 04
* OVERFLOW = 05
* UNITS_MISSING = 06
* UNIT_IN_NOT_FOUND = 07
* UNIT_OUT_NOT_FOUND = 08.
* IF SY-SUBRC <> 0.
** MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
** WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
* ENDIF.
*重量以KG单位进行比较,SAP重量仍然以物料主数据中重量,单位输出
BESTAND-VARIA = BESTAND-NTGEW_GMT - V_NTGEW.
CLEAR V_MEINS.
V_MEINS = BESTAND-MEINS_GC.
SELECT SINGLE MSEH3 INTO V_MEINS
FROM ZT006A WHERE MSEHI = CONSUME-MEINS_GC.
IF BESTAND-MEINS <> V_MEINS AND V_MEINS NE SPACE.
CALL FUNCTION 'MD_CONVERT_MATERIAL_UNIT'
EXPORTING
I_MATNR = BESTAND-MATNR
I_IN_ME = BESTAND-MEINS
I_OUT_ME = V_MEINS
I_MENGE = BESTAND-TOTAL
IMPORTING
E_MENGE = V_MENGE
EXCEPTIONS
ERROR_IN_APPLICATION = 1
ERROR = 2
OTHERS = 3.
BESTAND-SBMNG = V_MENGE * V_RATE.
ELSE.
BESTAND-SBMNG = BESTAND-TOTAL * V_RATE.
ENDIF.
*&工厂单位,申报单位相应GMT中单位描述
* SELECT SINGLE ZMSEH6 INTO BESTAND-MEINS_GC
* FROM ZT006A WHERE MSEHI = BESTAND-MEINS_GC.
*
* SELECT SINGLE ZMSEH6 INTO BESTAND-MEINS_GMT
* FROM ZT006A WHERE MSEHI = BESTAND-MEINS_GMT.
ENDIF.
MODIFY BESTAND.
ENDLOOP.
*
IF P_UPD EQ 'X'.
LOOP AT BESTAND.
SELECT SINGLE * FROM ZM065 INTO I_ZM065
WHERE CHARG = BESTAND-CHARG.
CLEAR I_ZM065.
IF SY-SUBRC >= 0.
CALL FUNCTION 'WLF_READ_BKLAS'
EXPORTING
I_WERKS = BESTAND-WERKS
I_MATNR = BESTAND-MATNR
IMPORTING
E_BKLAS = BESTAND-BKLAS
EXCEPTIONS
MATERIAL_READ = 1
NO_WERKS = 2
OTHERS = 3.
IF BESTAND-CHARG NE SPACE AND BESTAND-MTART = 'ZRAW'
OR BESTAND-MTART = 'ZIMM'.
CLEAR TA_EKKO.
SELECT SINGLE EKPO~INCO1 EKKO~LIFNR EKPO~MATNR
EKKO~EKORG EKPO~WERKS
INTO (BESTAND-INCO1,TA_EKKO-LIFNR,TA_EKKO-MATNR,
TA_EKKO-EKORG,TA_EKKO-WERKS)
FROM EKPO
JOIN EKKO ON EKKO~EBELN = EKPO~EBELN
JOIN EKBE ON EKBE~EBELN = EKPO~EBELN
AND EKBE~EBELP = EKPO~EBELP
WHERE EKBE~WERKS = BESTAND-WERKS
AND EKBE~MATNR = BESTAND-MATNR
AND EKBE~CHARG = BESTAND-CHARG
AND EKBE~VGABE = '1'.
IF BESTAND-CHARG NE SPACE AND BESTAND-INCO1 IS INITIAL.
SELECT SINGLE EINE~INCO1 INTO BESTAND-INCO1
FROM EINE
JOIN EINA ON EINA~INFNR = EINE~INFNR
WHERE EINE~EKORG = TA_EKKO-EKORG
AND EINE~WERKS = TA_EKKO-WERKS
AND EINA~MATNR = TA_EKKO-MATNR
AND EINA~LIFNR = TA_EKKO-LIFNR.
ENDIF.
ELSEIF BESTAND-CHARG NE SPACE AND BESTAND-BKLAS BETWEEN '7900' AND '7920'.
SELECT SINGLE AUFNR INTO BESTAND-AUFNR
FROM AUFM "UP TO 1 ROWS
WHERE WERKS = BESTAND-WERKS
AND MATNR = BESTAND-MATNR
AND CHARG = BESTAND-CHARG
AND BWART = '101'.
ENDIF.
I_ZM065-CHARG = BESTAND-CHARG.
I_ZM065-MATNR = BESTAND-MATNR.
I_ZM065-BKLAS = BESTAND-BKLAS.
I_ZM065-INCO1 = BESTAND-INCO1.
I_ZM065-AUFNR = BESTAND-AUFNR.
MODIFY ZM065 FROM I_ZM065. "INSERT INTO ZM065 VALUES ZM065[].
ENDIF.
ENDLOOP.
ENDIF.
ENDFORM. "data_selection
*----------------------------------------------------------------------*
* f2000_COLLECT_collector.
*----------------------------------------------------------------------*
FORM. F2000_COLLECT_COLLECTOR.
* does the user want to suppress stock objects from plant "n577268
* level ? "n577268
IF G_FLAG_SUPPRESS_INIT_LGORT = 'X'. "n577268
IF COLLECTOR-LGORT IS INITIAL. "n577268
* ignore stock objects without storage location "n577268
EXIT. "--> go to exit "n577268
ENDIF. "n577268
ENDIF. "n577268
************************************************************************
* process the functions "No zero stocks",
* "Negative stocks only", "Without batches" here
************************************************************************
IF NEGATIV = 'X'.
* ignore entry if all stocks are zero or greater
IF COLLECTOR-LABST >= 0 AND COLLECTOR-EINME >= 0 AND
COLLECTOR-INSME >= 0 AND COLLECTOR-RETME >= 0 AND
COLLECTOR-SPEME >= 0 AND COLLECTOR-UMLME >= 0.
EXIT. "--> go to exit
ENDIF.
ENDIF.
IF NOZERO = 'X'.
* ignore all entries without stock
IF COLLECTOR-LABST = 0 AND COLLECTOR-EINME = 0 AND
COLLECTOR-INSME = 0 AND COLLECTOR-RETME = 0 AND
COLLECTOR-SPEME = 0 AND COLLECTOR-UMLME = 0.
EXIT. "--> go to exit
ENDIF.
ENDIF.
IF XMCHB IS INITIAL.
CLEAR COLLECTOR-CHARG.
ENDIF.
COLLECT COLLECTOR.
ENDFORM. "f2000_COLLECT_collector.
*&---------------------------------------------------------------------*
*& Form check_author
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM. CHECK_AUTHOR .
* AUTHORITY-CHECK OBJECT 'Y_WRK_LAG'
* ID 'WERKS' FIELD WERKS-LOW
* ID 'ACTVT' FIELD '03'.
* IF SY-SUBRC NE 0.
* MESSAGE I902 WITH '你没有工厂' WERKS-LOW '的权限,请检查!'.
* STOP.
* ENDIF.
*
* AUTHORITY-CHECK OBJECT 'Y_WRK_LAG'
* ID 'LGORT' FIELD LGORT-LOW
* ID 'ACTVT' FIELD '03'.
* IF SY-SUBRC NE 0.
* MESSAGE I903 WITH '你没有库存地点' LGORT-LOW '的权限,请检查!'.
* STOP.
* ENDIF.
ENDFORM. " check_author
*&---------------------------------------------------------------------*
*& Form DISPLAY_GRID
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM. DISPLAY_GRID .
G_REPID = SY-REPID.
LAYOUT-BOX_FIELDNAME = 'SET'.
LAYOUT-ZEBRA = 'X'.
LAYOUT-COLWIDTH_OPTIMIZE = 'X'.
ADDFIELD 'WERKS' '工厂' '10' 'X' '' '' ''.
ADDFIELD 'MTART' '物料类型' '5' 'X' '' '' ''.
ADDFIELD 'MATNR' '物料编码' '5' 'X' '' '' ''.
ADDFIELD 'LGORT' '库位' '10' 'X' '' '' ''.
ADDFIELD 'LGOBE' '库位描述' '10' 'X' 'X' '' ''.
ADDFIELD 'SOBKZ' '库存标示' '10' 'X' '' '' ''.
ADDFIELD 'SSNUM' '特殊库存编号' '10' 'X' '' '' ''.
ADDFIELD 'PSPNR' 'WBS 元素' '10' 'X' '' '' ''.
ADDFIELD 'VBELN' '销售订单号' '10' 'X' '' '' 'X'.
ADDFIELD 'POSNR' '订单行号' '10' 'X' '' '' 'X'.
ADDFIELD 'BSTKD' '客户订单号' '10' 'X' '' '' 'X'.
ADDFIELD 'LIFNR' '供应商代码' '10' 'X' '' '' ''.
ADDFIELD 'KUNNR' '客户代码' '10' 'X' '' '' 'X'.
ADDFIELD 'KZBWS' '特别库存' '10' 'X' '' '' 'X'.
ADDFIELD 'CHARG' '批次号' '10' 'X' '' '' ''.
ADDFIELD 'MAKTX' '物料描述' '10' 'X' '' '' ''.
ADDFIELD 'BWKEY' '评估范围' '10' 'X' '' '' ''.
ADDFIELD 'MATKL' '物料组' '10' 'X' '' '' ''.
ADDFIELD 'BWTTY' '评估类别' '10' 'X' '' '' 'X'.
ADDFIELD 'XCHAR' '批量管理标识' '10' 'X' '' '' 'X'.
ADDFIELD 'BWTAR' '评估类型' '10' 'X' '' '' 'X'.
ADDFIELD 'WAERS' '货币码' '10' 'X' '' '' 'X'.
ADDFIELD 'NAME1' '名称' '10' 'X' '' '' 'X'.
ADDFIELD 'LABST' '非限制使用库存' '10' 'X' '' '' 'X'.
ADDFIELD 'INSME' '待检的库存' '10' 'X' '' '' 'X'.
ADDFIELD 'WINSM' '待检的库存价值' '10' 'X' '' '' 'X'.
ADDFIELD 'SPEME' '冻结的库存' '10' 'X' '' '' 'X'.
ADDFIELD 'WSPEM' '冻结的库存价值' '10' 'X' '' '' 'X'.
ADDFIELD 'EINME' '批次的总计库存' '10' 'X' '' '' 'X'.
ADDFIELD 'WEINM' '批次的总计库存价值' '10' 'X' '' '' 'X'.
ADDFIELD 'MEINS' '基本单位' '10' 'X' '' '' ''.
ADDFIELD 'TOTAL' '总库存' '10' 'X' '' '' ''.
ADDFIELD 'WLABS' '总库存价值' '10' 'X' '' '' ''.
ADDFIELD 'RETME' '返回冻结的库存金额' '10' 'X' '' '' 'X'.
ADDFIELD 'WRETM' '返回冻结的库存金额' '10' 'X' '' '' 'X'.
ADDFIELD 'UMLME' '在途库存' '10' 'X' '' '' 'X'.
ADDFIELD 'WUMLM' '在途库存金额' '10' 'X' '' '' 'X'.
ADDFIELD 'LVORM' '物料输出标示' '10' 'X' '' '' 'X'.
ADDFIELD 'BKLAS' '评估类' '10' 'X' '' '' 'X'.
ADDFIELD 'BKBEZ' '评估类描述' '10' 'X' '' '' 'X'.
ADDFIELD 'NTGEW' '净重' '10' 'X' '' '' ''.
ADDFIELD 'BRGEW' '总净重' '10' 'X' '' '' ''.
ADDFIELD 'GEWEI' '重量单位' '10' 'X' '' '' ''.
ADDFIELD 'INCO1' '采购方式' '10' 'X' '' '' ''.
ADDFIELD 'AUFNR' '工单号' '10' 'X' '' '' ''.
ADDFIELD 'MEINS_GC' 'GMT工厂单位' '10' 'X' '' '' 'X'.
ADDFIELD 'MEINS_ZH' 'GMT工厂单位' '10' 'X' '' '' ''.
ADDFIELD 'NTGEW_GMT' 'GMT备案重量KG' '10' 'X' '' '' ''.
ADDFIELD 'VARIA' 'G-S差异' '10' 'X' '' '' ''.
ADDFIELD 'SERIA' '海关序号' '10' 'X' '' '' ''.
ADDFIELD 'CUSTN' '海关编码' '10' 'X' '' '' ''.
ADDFIELD 'CUSTX' '备案名称' '10' 'X' '' '' ''.
ADDFIELD 'MEINS_GMT' '申报单位' '10' 'X' '' '' 'X'.
ADDFIELD 'MEINS_GMT_ZH' '申报单位' '10' 'X' '' '' ''.
ADDFIELD 'SBMNG' '申报数量' '10' 'X' '' '' ''.
ENDFORM. " DISPLAY_GRID
*&---------------------------------------------------------------------*
*& Form DISPLAY_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM. DISPLAY_DATA .
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = G_REPID
IS_LAYOUT = LAYOUT
* I_CALLBACK_HTML_TOP_OF_PAGE = 'ALV_TOP_OF_PAGE'
* I_CALLBACK_USER_COMMAND = SUB_CALLBACK_USER
* I_CALLBACK_PF_STATUS_SET = 'PF_STATUS_SET'
IT_FIELDCAT = L_ALV_FILEDCAT
I_GRID_TITLE = ''
I_SAVE = 'X'
TABLES
T_OUTTAB = BESTAND.
FREE BESTAND.
ENDFORM. " DISPLAY_DATA
*&---------------------------------------------------------------------*
*& Form GET_WIP
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM. GET_WIP .
* CASE WERKS.
* WHEN '3020' OR '3021' OR '3022' OR
* '3026' OR '3027' OR '3028' OR '3012'."For eagle team order WIP
PERFORM. GET_WIP_LEVELONE.
* WHEN OTHERS.
* PERFORM. GET_WIP_LEVELEND.
* ENDCASE.
ENDFORM. " GET_WIP
*&---------------------------------------------------------------------*
*& Form GET_WIP_LEVELONE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM. GET_WIP_LEVELONE .
DATA:BEGIN OF H_ORDER,
AUFNR TYPE AFKO-AUFNR, "Order Number
RSNUM TYPE AFKO-RSNUM,
* WERKS TYPE AUFK-WERKS,
PROJN TYPE AFPO-PROJN,
DISPO TYPE AFKO-DISPO, "MRP controller for the order
LEAD_AUFNR TYPE AFKO-LEAD_AUFNR,
ZVBELN TYPE AUFK-ZVBELN,
STAT TYPE PORDARCH-STAT,"Product Order Status
STATUS(10) TYPE C, "Status Description
MATNR TYPE AFPO-MATNR, "Material Number for Order
MEINS TYPE AFPO-MEINS, "Base unit of measure
GSTRP TYPE AFKO-GSTRP, "Basic start date
GLTRP TYPE AFKO-GLTRP, "Basic finish date
LEAD_PSMNG LIKE AFPO-PSMNG, "leading order Production qty
LEAD_WEMNG LIKE AFPO-WEMNG, "leading order delivery qty
PSMNG TYPE AFPO-PSMNG, "Order quantity
WEMNG TYPE AFPO-WEMNG, "Qty of goods received on order unit
UMREZ TYPE AFPO-UMREZ, "Numerator of conv ot base unit
UMREN TYPE AFPO-UMREN, "Denominator of conv ot base unit.
ISTAT TYPE TJ02T-ISTAT,
END OF H_ORDER.
DATA H_ORDER01 LIKE H_ORDER OCCURS 10 WITH HEADER LINE.
DATA H_ORDER02 LIKE H_ORDER OCCURS 10 WITH HEADER LINE.
TYPES: BEGIN OF ST_RESB,
RSNUM TYPE RESB-RSNUM,
RSPOS TYPE RESB-RSPOS,
WERKS TYPE RESB-WERKS,
LGORT TYPE RESB-LGORT,
AUFNR TYPE RESB-AUFNR,
POSNR TYPE RESB-POSNR,
MATNR TYPE RESB-MATNR,
MEINS TYPE RESB-MEINS,
BDMNG TYPE RESB-BDMNG,
ENMNG TYPE RESB-ENMNG,
AUSCH TYPE RESB-AUSCH,
AVOAU TYPE RESB-AVOAU,
END OF ST_RESB.
DATA WA_RESB TYPE ST_RESB.
DATA IT_RESB TYPE TABLE OF ST_RESB WITH KEY RSNUM RSPOS." AUFNR MATNR.
DATA: BEGIN OF HEAD OCCURS 0,
WERKS LIKE MSEG-WERKS,
MATNR LIKE MSEG-MATNR,
XBLNR LIKE MKPF-XBLNR,
AUFNR LIKE MSEG-AUFNR,
END OF HEAD.
DATA: BEGIN OF XMSEG OCCURS 0,
MBLNR LIKE MSEG-MBLNR,
MJAHR LIKE MSEG-MJAHR,
ZEILE LIKE MSEG-ZEILE,
XBLNR LIKE MKPF-XBLNR,
MATNR LIKE MSEG-MATNR,
SHKZG LIKE MSEG-SHKZG,
MENGE LIKE MSEG-MENGE,
MEINS LIKE MSEG-MEINS,
END OF XMSEG.
DATA: BEGIN OF TA_MSEG OCCURS 0,
AUFNR LIKE MSEG-AUFNR,
MATNR LIKE MSEG-MATNR,
MENGE LIKE MSEG-MENGE,
MEINS LIKE MSEG-MEINS,
END OF TA_MSEG.
DATA: V_DMBTR LIKE MSEG-DMBTR,
V_MENGE LIKE MSEG-MENGE.
DATA CUTOFF TYPE SY-DATUM.
IF CUTOFF NE SY-DATUM.
CUTOFF = SY-DATUM.
ENDIF.
DATA UNIT_RATE LIKE EKPO-MENGE.
DATA: V_MEINS LIKE ZLJGB-MEINS. "GMT工厂商品单位
DATA: V_NTGEW LIKE ZLJGB-NTGEW,
V_RATE LIKE ZLJGB-RATE.
DATA: V_MATNR TYPE MARC-MATNR.
**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**
**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**
SELECT K~RSNUM K~AUFNR K~LEAD_AUFNR MATNR GSTRP PSMNG WEMNG MEINS
DISPO UMREZ UMREN PROJN
INTO CORRESPONDING FIELDS OF TABLE H_ORDER02
FROM AFKO AS K INNER JOIN AFPO AS P ON K~AUFNR = P~AUFNR
WHERE P~DWERK IN WERKS
AND K~AUFNR IN S_AUFNR
AND P~PROJN IN S_PROJN
* AND K~AUFNR = A~LEAD_AUFNR
AND P~DAUTY = '10' "PP PRODCTION ORDER
AND K~FTRMI <= CUTOFF
AND K~AUFNR NOT IN
( SELECT AUFNR FROM PORDARCH
WHERE ( STAT = 'I0013'
OR STAT = 'I0076'
OR ( STAT = 'I0045' AND AEDAT <= CUTOFF )
OR ( STAT = 'I0046' AND AEDAT <= CUTOFF ) )
AND INACT = SPACE ).
IF H_ORDER02[] IS INITIAL.
IF WIP EQ 'X'.
MESSAGE '没有符合条件的数据,请检查!' TYPE 'I'.
STOP.
ELSE.
EXIT.
ENDIF.
ENDIF.
**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**
**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**
*==============================================================
*READ RESB INTO INTERNAL TABLE IT_RESB
*==============================================================
CLEAR IT_RESB.
REFRESH IT_RESB.
SELECT RSNUM RSPOS WERKS LGORT AUFNR POSNR MATNR MEINS
BDMNG ENMNG AUSCH AVOAU
INTO TABLE IT_RESB
FROM RESB
FOR ALL ENTRIES IN H_ORDER02
WHERE RSNUM = H_ORDER02-RSNUM
AND DUMPS <> 'X' "Phantom item
AND XLOEK <> 'X'. "Deleted item
LOOP AT IT_RESB INTO WA_RESB.
MOVE WA_RESB-WERKS TO HEAD-WERKS.
MOVE WA_RESB-MATNR TO HEAD-MATNR.
MOVE WA_RESB-AUFNR TO HEAD-AUFNR.
MOVE WA_RESB-AUFNR TO HEAD-XBLNR.
COLLECT HEAD.
ENDLOOP.
IF HEAD[] IS NOT INITIAL.
SELECT MSEG~MBLNR MSEG~MJAHR MSEG~ZEILE MKPF~XBLNR MSEG~MATNR
MSEG~SHKZG MSEG~MENGE MSEG~MEINS
INTO TABLE XMSEG
FROM MSEG
JOIN MKPF ON MKPF~MBLNR = MSEG~MBLNR
FOR ALL ENTRIES IN HEAD
WHERE MSEG~WERKS = HEAD-WERKS
AND MSEG~MATNR = HEAD-MATNR
AND MKPF~XBLNR = HEAD-XBLNR
AND BWART IN ('501','502').
LOOP AT XMSEG.
MOVE XMSEG-XBLNR TO TA_MSEG-AUFNR.
CASE XMSEG-SHKZG.
WHEN 'H'.
XMSEG-MENGE = - XMSEG-MENGE.
WHEN OTHERS.
ENDCASE.
MOVE-CORRESPONDING XMSEG TO TA_MSEG.
COLLECT TA_MSEG.
ENDLOOP.
ENDIF.
LOOP AT H_ORDER02 INTO H_ORDER.
SELECT SINGLE STAT INTO H_ORDER-STAT
FROM PORDARCH
WHERE AUFNR = H_ORDER-AUFNR
AND WERKS IN WERKS
AND MATNR = H_ORDER-MATNR
AND STAT = 'I0002'.
IF SY-SUBRC <> 0.
CONTINUE.
ENDIF.
* Convert order unit qty to base unit qty
H_ORDER-PSMNG = H_ORDER-PSMNG * H_ORDER-UMREZ / H_ORDER-UMREN.
H_ORDER-WEMNG = H_ORDER-WEMNG * H_ORDER-UMREZ / H_ORDER-UMREN.
* Select Product Order Status
CLEAR H_ORDER-STATUS.
CLEAR H_ORDER-STAT.
SELECT SINGLE STAT INTO H_ORDER-STAT
FROM PORDARCH
WHERE AUFNR = H_ORDER-AUFNR
AND WERKS = WERKS
AND MATNR = H_ORDER-MATNR
AND STAT = 'I0046'.
IF SY-SUBRC = 0.
H_ORDER-STATUS = 'Closed'.
ELSE.
CLEAR H_ORDER-STAT.
SELECT SINGLE STAT INTO H_ORDER-STAT
FROM PORDARCH
WHERE AUFNR = H_ORDER-AUFNR
AND WERKS = WERKS
AND MATNR = H_ORDER-MATNR
AND STAT = 'I0045'.
IF SY-SUBRC = 0.
H_ORDER-STATUS = 'TEL.Completed'.
ELSE.
CLEAR H_ORDER-STAT.
SELECT SINGLE STAT INTO H_ORDER-STAT
FROM PORDARCH
WHERE AUFNR = H_ORDER-AUFNR
AND WERKS = WERKS
AND MATNR = H_ORDER-MATNR
AND STAT = 'I0012'.
IF SY-SUBRC = 0.
H_ORDER-STATUS = 'Delivered'.
ELSE.
H_ORDER-STATUS = 'Released'.
ENDIF.
ENDIF.
ENDIF.
IF H_ORDER-LEAD_AUFNR IS NOT INITIAL
AND H_ORDER-LEAD_AUFNR <> H_ORDER-AUFNR.
SELECT SINGLE PSMNG WEMNG INTO
(H_ORDER-PSMNG,H_ORDER-WEMNG)
FROM AFPO
WHERE AUFNR = H_ORDER-LEAD_AUFNR.
ENDIF.
APPEND H_ORDER TO H_ORDER01.
ENDLOOP.
SORT H_ORDER01 BY AUFNR MATNR.
CLEAR ITAB.REFRESH ITAB.
LOOP AT H_ORDER01 INTO H_ORDER.
ITAB-AUFNR = H_ORDER-LEAD_AUFNR.
ITAB-SUB_AUFNR = H_ORDER-AUFNR.
ITAB-MODEL = H_ORDER-MATNR.
ITAB-PROJN = H_ORDER-PROJN.
ITAB-MEINS = H_ORDER-MEINS.
ITAB-PSMNG = H_ORDER-PSMNG.
IF H_ORDER-LEAD_AUFNR IS NOT INITIAL
AND H_ORDER-LEAD_AUFNR <> H_ORDER-AUFNR
AND H_ORDER-LEAD_PSMNG <> 0.
ITAB-WEMNG = H_ORDER-LEAD_WEMNG / H_ORDER-LEAD_PSMNG * H_ORDER-WEMNG.
ELSE.
ITAB-WEMNG = H_ORDER-WEMNG.
ENDIF.
LOOP AT IT_RESB INTO WA_RESB WHERE RSNUM = H_ORDER-RSNUM.
* MOVE-CORRESPONDING IT_RESB TO ITAB.
ITAB-WERKS = WA_RESB-WERKS.
ITAB-LGORT = WA_RESB-LGORT.
ITAB-MATNR = WA_RESB-MATNR.
ITAB-GMEIN = WA_RESB-MEINS.
ITAB-BDMNG = WA_RESB-BDMNG.
ITAB-ENMNG = WA_RESB-ENMNG.
IF ITAB-GMEIN = 'EA' OR ITAB-GMEIN = 'KEA'.
P1 = WA_RESB-BDMNG / ( 1 + WA_RESB-AUSCH / 100 ) / ( 1 + WA_RESB-AVOAU / 100 ).
ITAB-BDMNG = P1.
IF H_ORDER-PSMNG NE 0.
CLEAR P1.
P1 = ( ITAB-BDMNG / H_ORDER-PSMNG ) * H_ORDER-WEMNG.
ITAB-COMNG = P1.
ENDIF.
ELSE.
ITAB-BDMNG = WA_RESB-BDMNG / ( 1 + WA_RESB-AUSCH / 100 ) / ( 1 + WA_RESB-AVOAU / 100 ).
IF H_ORDER-PSMNG NE 0.
ITAB-COMNG = ( ITAB-BDMNG / H_ORDER-PSMNG ) * H_ORDER-WEMNG.
ENDIF.
ENDIF.
CLEAR TA_MSEG.
READ TABLE TA_MSEG WITH KEY AUFNR = WA_RESB-AUFNR
MATNR = WA_RESB-MATNR.
MOVE TA_MSEG-MENGE TO ITAB-BADQTY.
ITAB-WIPQTY = ITAB-ENMNG - ITAB-COMNG - ITAB-BADQTY.
CLEAR V_DMBTR. CLEAR V_MENGE.
SELECT SUM( DMBTR ) SUM( MENGE ) INTO (V_DMBTR,V_MENGE)
FROM MSEG
WHERE RSNUM = WA_RESB-RSNUM
AND RSPOS = WA_RESB-RSPOS
AND MATNR = WA_RESB-MATNR
AND BWART = '261'.
IF V_MENGE NE 0.
ITAB-DMBTR = ITAB-WIPQTY * V_DMBTR / V_MENGE.
ENDIF.
SELECT SINGLE MAKTX INTO ITAB-MAKTX FROM MAKT
WHERE MATNR = ITAB-MATNR
AND SPRAS = SY-LANGU.
SELECT SINGLE MAKTX INTO ITAB-MODTX FROM MAKT
WHERE MATNR = ITAB-MODEL
AND SPRAS = SY-LANGU.
SELECT SINGLE MTART BRGEW NTGEW GEWEI FROM MARA
INTO (ITAB-MTART,ITAB-BRGEW,ITAB-NTGEW,ITAB-GEWEI)
WHERE MATNR = ITAB-MATNR.
IF BESTAND-MTART = 'ZRAW' OR BESTAND-MTART = 'ZIMM'.
CLEAR EORD.
SELECT SINGLE MATNR WERKS LIFNR INTO
(EORD-MATNR,EORD-WERKS,EORD-LIFNR)
FROM EORD
WHERE MATNR = ITAB-MATNR
AND WERKS = ITAB-WERKS
AND FLIFN = 'X'.
IF SY-SUBRC NE 0.
SELECT SINGLE MATNR WERKS LIFNR INTO
(EORD-MATNR,EORD-WERKS,EORD-LIFNR)
FROM EORD
WHERE MATNR = ITAB-MATNR
AND WERKS = ITAB-WERKS.
ENDIF.
SELECT SINGLE INCO1 INTO ITAB-INCO1
FROM EINE JOIN EINA ON EINA~INFNR = EINE~INFNR
WHERE MATNR = EORD-MATNR
AND WERKS = EORD-WERKS
AND LIFNR = EORD-LIFNR.
ELSE.
ENDIF.
SELECT SINGLE MEINS NTGEW MEINS_GMT RATE SERIA CUSTN
CUSTX MEINS_GMT1 MEINS_ZH MEINS_GMT_ZH
INTO (ITAB-MEINS_GC,ITAB-NTGEW_GMT,ITAB-MEINS_GMT,V_RATE,
ITAB-SERIA,ITAB-CUSTN,ITAB-CUSTX,ITAB-MEINS_GMT1,
ITAB-MEINS_ZH,ITAB-MEINS_GMT_ZH)
FROM ZLJGB
WHERE MATNR = ITAB-MATNR.
IF SY-SUBRC = 0.
ITAB-VARIA = ITAB-NTGEW_GMT - V_NTGEW.
IF ITAB-MEINS <> ITAB-MEINS_GC AND ITAB-MEINS_GC NE SPACE.
CALL FUNCTION 'MD_CONVERT_MATERIAL_UNIT'
EXPORTING
I_MATNR = ITAB-MATNR
I_IN_ME = ITAB-MEINS
I_OUT_ME = ITAB-MEINS_GC
I_MENGE = ITAB-WIPQTY
IMPORTING
E_MENGE = V_MENGE
EXCEPTIONS
ERROR_IN_APPLICATION = 1
ERROR = 2
OTHERS = 3.
ITAB-SBMNG = V_MENGE * V_RATE.
ELSE.
ITAB-SBMNG = ITAB-WIPQTY * V_RATE.
ENDIF.
ENDIF.
APPEND ITAB TO ITAB.
CLEAR ITAB.
ENDLOOP.
ENDLOOP.
ENDFORM. " GET_WIP_LEVELONE
*&---------------------------------------------------------------------*
*& Form GET_WIP_LEVELEND
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM. GET_WIP_LEVELEND.
DATA:BEGIN OF H_ORDER,
AUFNR TYPE AFKO-AUFNR, "Order Number
RSNUM TYPE AFKO-RSNUM,
WERKS TYPE AUFK-WERKS,
MODEL LIKE AFPO-MATNR,
PROJN TYPE AFPO-PROJN,
DISPO TYPE AFKO-DISPO, "MRP controller for the order
LEAD_AUFNR TYPE AFKO-LEAD_AUFNR,
ZVBELN TYPE AUFK-ZVBELN,
STAT TYPE PORDARCH-STAT,"Product Order Status
STATUS(10) TYPE C, "Status Description
MATNR TYPE AFPO-MATNR, "Material Number for Order
MEINS TYPE AFPO-MEINS, "Base unit of measure
GSTRP TYPE AFKO-GSTRP, "Basic start date
GLTRP TYPE AFKO-GLTRP, "Basic finish date
LEAD_PSMNG LIKE AFPO-PSMNG, "leading order Production qty
LEAD_WEMNG LIKE AFPO-WEMNG, "leading order delivery qty
PSMNG TYPE AFPO-PSMNG, "Order quantity
WEMNG TYPE AFPO-WEMNG, "Qty of goods received on order unit
UMREZ TYPE AFPO-UMREZ, "Numerator of conv ot base unit
UMREN TYPE AFPO-UMREN, "Denominator of conv ot base unit.
ISTAT TYPE TJ02T-ISTAT,
END OF H_ORDER.
DATA H_ORDER01 LIKE H_ORDER OCCURS 10 WITH HEADER LINE.
DATA H_ORDER02 LIKE H_ORDER OCCURS 10 WITH HEADER LINE.
DATA CUTOFF TYPE SY-DATUM.
IF CUTOFF NE SY-DATUM.
CUTOFF = SY-DATUM.
ENDIF.
DATA : LS_ORDER_OBJECTS TYPE BAPI_PP_ORDER_OBJECTS,
LS_BAPIRET2 TYPE BAPIRET2,
LS_HEADER TYPE STANDARD TABLE OF BAPI_ORDER_HEADER1,
LS_COMPONENT TYPE STANDARD TABLE OF BAPI_ORDER_COMPONENT.
DATA : WA LIKE LINE OF LS_COMPONENT.
DATA UNIT_RATE LIKE EKPO-MENGE.
DATA: V_MEINS LIKE ZLJGB-MEINS. "GMT工厂商品单位
DATA: V_MENGE TYPE EKPO-MENGE, "SAP单位转换为GMT工厂商品单位数量!
V_NTGEW LIKE ZLJGB-NTGEW,
V_RATE LIKE ZLJGB-RATE.
**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**
**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**
SELECT K~RSNUM K~AUFNR K~LEAD_AUFNR P~MATNR AS MODEL K~GSTRP P~PSMNG
P~WEMNG P~MEINS K~DISPO P~UMREZ P~UMREN P~PROJN
INTO CORRESPONDING FIELDS OF TABLE H_ORDER02
FROM AFKO AS K
INNER JOIN AFPO AS P ON K~AUFNR = P~AUFNR
INNER JOIN AUFK AS Q ON K~AUFNR = Q~AUFNR
WHERE P~DWERK IN WERKS
AND K~AUFNR IN S_AUFNR
AND P~PROJN IN S_PROJN
AND K~AUFNR = K~LEAD_AUFNR
AND P~DAUTY = '10' "PP PRODCTION ORDER
AND K~FTRMI <= CUTOFF
AND K~AUFNR NOT IN
( SELECT AUFNR FROM PORDARCH
WHERE ( STAT = 'I0013'
OR STAT = 'I0076'
OR ( STAT = 'I0045' AND AEDAT <= CUTOFF )
OR ( STAT = 'I0046' AND AEDAT <= CUTOFF ) )
AND INACT = SPACE ).
IF H_ORDER02[] IS INITIAL.
MESSAGE '没有符合条件的数据,请检查!' TYPE 'I'.
STOP.
ENDIF.
CLEAR:H_ORDER02,ITAB.REFRESH:ITAB.
LOOP AT H_ORDER02.
LS_ORDER_OBJECTS-COMPONENTS = 'X'.
LS_ORDER_OBJECTS-HEADER = 'X'.
CALL FUNCTION 'BAPI_PRODORD_GET_DETAIL'
EXPORTING
NUMBER = H_ORDER02-AUFNR
COLLECTIVE_ORDER = 'X'
ORDER_OBJECTS = LS_ORDER_OBJECTS
IMPORTING
RETURN = LS_BAPIRET2
TABLES
HEADER = LS_HEADER
* POSITION =
* SEQUENCE =
* OPERATION =
* TRIGGER_POINT =
COMPONENT = LS_COMPONENT
* PROD_REL_TOOL =
.
LOOP AT LS_COMPONENT INTO WA.
MOVE H_ORDER02-WERKS TO ITAB-WERKS.
MOVE H_ORDER02-MODEL TO ITAB-MODEL.
SELECT SINGLE MAKTX INTO ITAB-MODTX
FROM MAKT WHERE MATNR = ITAB-MODEL
AND SPRAS = SY-LANGU.
MOVE H_ORDER02-PROJN TO ITAB-PROJN.
MOVE H_ORDER02-LEAD_AUFNR TO ITAB-AUFNR.
MOVE H_ORDER02-PSMNG TO ITAB-PSMNG.
MOVE H_ORDER02-WEMNG TO ITAB-WEMNG.
MOVE H_ORDER02-MEINS TO ITAB-MEINS.
MOVE WA-ORDER_NUMBER TO ITAB-SUB_AUFNR.
MOVE WA-RESERVATION_NUMBER TO ITAB-RSNUM.
MOVE WA-MATERIAL TO ITAB-MATNR.
MOVE WA-STORAGE_LOCATION TO ITAB-LGORT.
MOVE WA-MATERIAL_DESCRIPTION TO ITAB-MAKTX.
MOVE WA-ITEM_NUMBER TO ITAB-POSNR.
MOVE WA-BASE_UOM TO ITAB-GMEIN.
MOVE WA-WITHDRAWN_QUANTITY TO ITAB-ENMNG.
MOVE WA-REQ_QUAN TO ITAB-BDMNG.
ITAB-COMNG = ITAB-BDMNG / ITAB-PSMNG * ITAB-WEMNG.
ITAB-WIPQTY = ITAB-ENMNG - ITAB-COMNG.
SELECT SINGLE NTGEW GEWEI INTO (ITAB-NTGEW,ITAB-GEWEI)
FROM MARA WHERE MATNR = ITAB-MATNR.
ITAB-BRGEW = ITAB-NTGEW * ITAB-WIPQTY.
IF ITAB-GEWEI = 'G'.
ITAB-BRGEW = ITAB-BRGEW / 1000.
ELSEIF ITAB-GEWEI = 'MG'.
ITAB-BRGEW = ITAB-BRGEW / 10000000.
ENDIF.
* CALL FUNCTION 'UNIT_CONVERSION_SIMPLE'
* EXPORTING
* INPUT = ITAB-BRGEW
* ROUND_SIGN = 'X'
* UNIT_IN = ITAB-GEWEI
* UNIT_OUT = 'KG'
* IMPORTING
* OUTPUT = ITAB-BRGEW
* EXCEPTIONS
* CONVERSION_NOT_FOUND = 01
* DIVISION_BY_ZERO = 02
* INPUT_INVALID = 03
* OUTPUT_INVALID = 04
* OVERFLOW = 05
* UNITS_MISSING = 06
* UNIT_IN_NOT_FOUND = 07
* UNIT_OUT_NOT_FOUND = 08.
* 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 V_MEINS.
SELECT SINGLE MEINS NTGEW MEINS_GMT RATE SERIA CUSTN CUSTX MEINS_GMT
INTO (ITAB-MEINS_GC,ITAB-NTGEW_GMT,ITAB-MEINS_GMT,V_RATE,ITAB-SERIA,
ITAB-CUSTN,ITAB-CUSTX,ITAB-MEINS_GMT)
FROM ZLJGB
WHERE MATNR = ITAB-MATNR.
CALL FUNCTION 'UNIT_CONVERSION_SIMPLE'
EXPORTING
INPUT = ITAB-NTGEW
ROUND_SIGN = 'X'
UNIT_IN = ITAB-GEWEI
UNIT_OUT = 'KG'
IMPORTING
OUTPUT = V_NTGEW
EXCEPTIONS
CONVERSION_NOT_FOUND = 01
DIVISION_BY_ZERO = 02
INPUT_INVALID = 03
OUTPUT_INVALID = 04
OVERFLOW = 05
UNITS_MISSING = 06
UNIT_IN_NOT_FOUND = 07
UNIT_OUT_NOT_FOUND = 08.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ITAB-VARIA = ITAB-NTGEW_GMT - V_NTGEW.
IF ITAB-MEINS <> ITAB-MEINS_GC AND ITAB-MEINS_GC NE SPACE.
CALL FUNCTION 'MD_CONVERT_MATERIAL_UNIT'
EXPORTING
I_MATNR = ITAB-MATNR
I_IN_ME = ITAB-MEINS
I_OUT_ME = ITAB-MEINS_GC
I_MENGE = ITAB-COMNG
IMPORTING
E_MENGE = V_MENGE
EXCEPTIONS
ERROR_IN_APPLICATION = 1
ERROR = 2
OTHERS = 3.
ITAB-SBMNG = V_MENGE * V_RATE.
ELSE.
ITAB-SBMNG = ITAB-COMNG * V_RATE.
ENDIF.
ITAB-WERKS = WERKS-LOW.
APPEND ITAB.
CLEAR ITAB.
ENDLOOP.
ENDLOOP.
ENDFORM. " GET_WIP_LEVELEND
*&---------------------------------------------------------------------*
*& Form GET_GRID_WIP_DISPLAY
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM. GET_WIP_GRID_DISPLAY.
G_REPID = SY-REPID.
LAYOUT-BOX_FIELDNAME = 'SET'.
LAYOUT-ZEBRA = 'X'.
LAYOUT-COLWIDTH_OPTIMIZE = 'X'.
ADDFIELD 'WERKS' '工厂' '10' 'X' '' '' ''.
ADDFIELD 'MODEL' '产品编码' '10' 'X' '' '' ''.
ADDFIELD 'MODTX' '产品描述' '10' 'X' '' '' ''.
ADDFIELD 'PROJN' 'WBS元素' '10' 'X' '' '' ''.
ADDFIELD 'AUFNR' 'Order' '10' 'X' '' '' ''.
ADDFIELD 'MEINS' '单位' '10' 'X' '' '' ''.
ADDFIELD 'PSMNG' '订单数量' '10' 'X' '' '' ''.
ADDFIELD 'WEMNG' '成品收仓' '10' 'X' '' '' ''.
" ADDFIELD 'AUFNR' 'Order' '10' 'X' '' '' ''.
ADDFIELD 'MATNR' '物料' '10' 'X' '' '' ''.
ADDFIELD 'MAKTX' '物料描述' '10' 'X' '' '' ''.
ADDFIELD 'LGORT' '仓位' '10' 'X' '' '' ''.
ADDFIELD 'GMEIN' '物料单位' '10' 'X' '' '' ''.
ADDFIELD 'COMNG' '成品折算材料' '10' 'X' '' '' ''.
ADDFIELD 'ENMNG' '已发数量' '10' 'X' '' '' ''.
"ADDFIELD 'BDMNG' '需求数量' '10' 'X' '' '' ''.
ADDFIELD 'WIPQTY' 'WIP数量' '10' 'X' '' '' ''.
ADDFIELD 'INCO1' '采购方式' '10' 'X' '' '' ''.
ADDFIELD 'NTGEW' 'SAP单重' '10' 'X' '' '' ''.
ADDFIELD 'GEWEI' '重量单位' '10' 'X' '' '' ''.
ADDFIELD 'BRGEW' '总重KG' '10' 'X' '' '' ''.
ADDFIELD 'MEINS_GC' 'GMT工厂单位' '10' 'X' '' 'X' ''.
ADDFIELD 'MEINS_GMT_ZH' 'GMT工厂单位' '10' 'X' '' '' ''.
ADDFIELD 'NTGEW_GMT' 'GMT单重KG' '10' 'X' '' '' ''.
ADDFIELD 'VARIA' 'G-S差异' '10' 'X' '' '' ''.
ADDFIELD 'SERIA' '海关序号' '10' 'X' '' '' ''.
ADDFIELD 'CUSTN' '海关编码' '10' 'X' '' '' ''.
ADDFIELD 'CUSTX' '备案名称' '10' 'X' '' '' ''.
ADDFIELD 'MEINS_GMT' '申报单位' '10' 'X' '' '' 'X'.
ADDFIELD 'MEINS_GMT_ZH' '申报单位' '10' 'X' '' '' ''.
ADDFIELD 'SBMNG' '申报数量' '10' 'X' '' '' ''.
ENDFORM. " DISPLAY_GRID_WIP
*&---------------------------------------------------------------------*
*& Form GET_WIP_DATA_DISPLAY
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM. GET_WIP_DATA_DISPLAY .
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = G_REPID
IS_LAYOUT = LAYOUT
* I_CALLBACK_HTML_TOP_OF_PAGE = 'ALV_TOP_OF_PAGE'
* I_CALLBACK_USER_COMMAND = SUB_CALLBACK_USER
* I_CALLBACK_PF_STATUS_SET = 'PF_STATUS_SET'
IT_FIELDCAT = L_ALV_FILEDCAT
I_GRID_TITLE = ''
I_SAVE = 'X'
TABLES
T_OUTTAB = ITAB.
FREE ITAB.
ENDFORM. " DISPLAY_DATA_WIP
*&---------------------------------------------------------------------*
*& Form CONSUMPTION_MATERIAL
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM. CONSUMPTION_MATERIAL .
CLEAR CONSUME. REFRESH CONSUME.
DATA: PM_CAPID LIKE TC04-CAPID VALUE 'PP01'.
DATA: P_STLAL LIKE MAST-STLAL VALUE '01'.
DATA: PM_DATUV LIKE STPO-DATUV.
DATA: BEGIN OF GT_MAST.
INCLUDE STRUCTURE MAST.
DATA:BMENG LIKE STKO-BMENG,
BMEIN LIKE STKO-BMEIN,
* STLAL LIKE STKO-STLAL,
STLST LIKE STKO-STLST.
DATA: END OF GT_MAST.
DATA: BEGIN OF STB OCCURS 0."这个是分解BOM得到的数据
INCLUDE STRUCTURE STPOX.
DATA: END OF STB.
RANGES:RS_MTART FOR MARA-MTART.
DATA: WA LIKE STB.
DATA: MATCAT LIKE TABLE OF CSCMAT WITH HEADER LINE.
DATA V_STLAL TYPE STKO-STLAL."BOM的版本号
DATA UNIT_RATE LIKE EKPO-MENGE.
DATA: V_MEINS LIKE ZLJGB-MEINS. "GMT工厂商品单位
DATA: V_MENGE TYPE EKPO-MENGE, "SAP单位转换为GMT工厂商品单位数量!
V_NTGEW LIKE ZLJGB-NTGEW,
V_RATE LIKE ZLJGB-RATE.
DATA: V_MATNR TYPE MARC-MATNR.
RS_MTART-LOW = 'ZRAW'.
RS_MTART-OPTION = 'EQ'.
RS_MTART-SIGN = 'I'.
APPEND RS_MTART.
RS_MTART-LOW = 'ZIMM'.
RS_MTART-OPTION = 'EQ'.
RS_MTART-SIGN = 'I'.
APPEND RS_MTART.
CLEAR:V_MATNR, BESTAND.
LOOP AT BESTAND.
IF BESTAND-MATNR <> V_MATNR.
V_MATNR = BESTAND-MATNR.
CLEAR:GT_MAST,STB.
SELECT SINGLE * INTO GT_MAST
FROM MAST WHERE MATNR EQ BESTAND-MATNR
AND WERKS EQ BESTAND-WERKS
AND STLAL EQ P_STLAL.
SELECT SINGLE STLST INTO GT_MAST-STLST
FROM STKO WHERE STLNR = GT_MAST-STLNR
AND STLAL = GT_MAST-STLAL.
IF GT_MAST-STLST = '05'.
PM_CAPID = 'PPSA'.
ENDIF.
ENDIF.
PM_DATUV = SY-DATUM.
CALL FUNCTION 'CS_BOM_EXPL_MAT_V2'
EXPORTING
STLAL = GT_MAST-STLAL
CAPID = PM_CAPID
DATUV = PM_DATUV
MTNRV = V_MATNR
WERKS = BESTAND-WERKS
MEHRS = 'X'
EMENG = 10000000
TABLES
STB = STB
MATCAT = MATCAT
EXCEPTIONS
ALT_NOT_FOUND = 4
CALL_INVALID = 8
OBJECT_NOT_FOUND = 12
MISSING_AUTHORIZATION = 16
NO_BOM_FOUND = 20
NO_PLANT_DATA = 24
*d no_suitable_bom_found = 28. "HGD059252
NO_SUITABLE_BOM_FOUND = 28 "HGD059252
CONVERSION_ERROR = 32.
IF SY-SUBRC <> 0.
"WRITE: / WA_MAST-MATNR, ' BOM EXPLODED EXCEPTION FOR THIS ITEM.'.
ENDIF.
LOOP AT STB INTO WA.
IF WA-MTART NOT IN RS_MTART.
DELETE STB.
CONTINUE.
ENDIF.
MOVE BESTAND-WERKS TO CONSUME-WERKS.
MOVE BESTAND-MATNR TO CONSUME-MODEL.
SELECT SINGLE MAKTX INTO CONSUME-MODTX
FROM MAKT WHERE MATNR = CONSUME-MODEL
AND SPRAS = SY-LANGU.
MOVE BESTAND-PSPNR TO CONSUME-PSPNR.
MOVE BESTAND-LGORT TO CONSUME-LGORT.
MOVE BESTAND-LGOBE TO CONSUME-LGOBE.
MOVE BESTAND-CHARG TO CONSUME-CHARG.
MOVE BESTAND-MEINS TO CONSUME-MEINS.
MOVE BESTAND-LABST TO CONSUME-LABST.
MOVE BESTAND-INSME TO CONSUME-INSME.
MOVE BESTAND-SPEME TO CONSUME-SPEME.
MOVE BESTAND-TOTAL TO CONSUME-TOTAL.
MOVE BESTAND-WLABS TO CONSUME-WLABS.
MOVE BESTAND-WAERS TO CONSUME-WAERS.
MOVE BESTAND-AUFNR TO CONSUME-AUFNR.
SELECT SINGLE PSMNG WEMNG MEINS
INTO (CONSUME-PSMNG,CONSUME-WEMNG,CONSUME-MEINS)
FROM AFPO WHERE AUFNR = CONSUME-AUFNR.
MOVE WA-LGORT TO CONSUME-DLGORT.
MOVE WA-POSNR TO CONSUME-POSNR.
MOVE WA-MTART TO CONSUME-MTART.
MOVE WA-IDNRK TO CONSUME-MATNR.
SELECT SINGLE MAKTX INTO CONSUME-MAKTX
FROM MAKT WHERE MATNR = CONSUME-MATNR
AND SPRAS = '1'.
SELECT SINGLE MAKTX INTO CONSUME-MAKTZ
FROM MAKT WHERE MATNR = CONSUME-MATNR
AND SPRAS = 'E'.
MOVE WA-MENGE TO CONSUME-MENGE. "单位组件数量
MOVE WA-MEINS TO CONSUME-GMEIN.
MOVE WA-MMEIN TO CONSUME-MMEIN.
CONSUME-COMNG = WA-MNGLG / 10000000 * CONSUME-TOTAL. "基本单位用量
SELECT SINGLE MTART NTGEW GEWEI
INTO (CONSUME-MTART,CONSUME-NTGEW,CONSUME-GEWEI)
FROM MARA WHERE MATNR = CONSUME-MATNR.
IF CONSUME-MTART = 'ZRAW' OR CONSUME-MTART = 'ZIMM'.
CLEAR EORD.
SELECT SINGLE MATNR WERKS LIFNR INTO
(EORD-MATNR,EORD-WERKS,EORD-LIFNR)
FROM EORD
WHERE MATNR = CONSUME-MATNR
AND WERKS = CONSUME-WERKS
AND FLIFN = 'X'.
IF SY-SUBRC NE 0.
SELECT SINGLE MATNR WERKS LIFNR INTO
(EORD-MATNR,EORD-WERKS,EORD-LIFNR)
FROM EORD
WHERE MATNR = CONSUME-MATNR
AND WERKS = CONSUME-WERKS.
ENDIF.
SELECT SINGLE INCO1 INTO CONSUME-INCO1
FROM EINE JOIN EINA ON EINA~INFNR = EINE~INFNR
WHERE MATNR = EORD-MATNR
AND WERKS = EORD-WERKS
AND LIFNR = EORD-LIFNR.
ENDIF.
CONSUME-BRGEW = CONSUME-NTGEW * CONSUME-COMNG.
IF CONSUME-GEWEI = 'G'.
CONSUME-BRGEW = CONSUME-BRGEW / 1000.
V_NTGEW = CONSUME-NTGEW / 1000.
ELSEIF CONSUME-GEWEI = 'MG'.
CONSUME-BRGEW = CONSUME-BRGEW / 1000000.
V_NTGEW = CONSUME-NTGEW / 1000000.
ENDIF.
* CALL FUNCTION 'UNIT_CONVERSION_SIMPLE'
* EXPORTING
* INPUT = CONSUME-BRGEW
* ROUND_SIGN = 'X'
* UNIT_IN = CONSUME-GEWEI
* UNIT_OUT = 'KG'
* IMPORTING
* OUTPUT = CONSUME-BRGEW
* EXCEPTIONS
* CONVERSION_NOT_FOUND = 01
* DIVISION_BY_ZERO = 02
* INPUT_INVALID = 03
* OUTPUT_INVALID = 04
* OVERFLOW = 05
* UNITS_MISSING = 06
* UNIT_IN_NOT_FOUND = 07
* UNIT_OUT_NOT_FOUND = 08.
* IF SY-SUBRC <> 0.
** MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
** WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
* ENDIF.
* CALL FUNCTION 'MD_CONVERT_MATERIAL_UNIT'
* EXPORTING
* I_MATNR = CONSUME-MATNR
* I_IN_ME = CONSUME-GEWEI
* I_OUT_ME = 'KG'
* I_MENGE = 1
* IMPORTING
* E_MENGE = UNIT_RATE
* EXCEPTIONS
* ERROR_IN_APPLICATION = 1
* ERROR = 2
* OTHERS = 3.
CLEAR V_MEINS.
SELECT SINGLE MEINS NTGEW MEINS_GMT RATE
SERIA CUSTN CUSTX MEINS_GMT1 MEINS_ZH MEINS_GMT_ZH
INTO (CONSUME-MEINS_GC,CONSUME-NTGEW_GMT,CONSUME-MEINS_GMT,V_RATE,
CONSUME-SERIA,CONSUME-CUSTN,CONSUME-CUSTX,CONSUME-MEINS_GMT1,
CONSUME-MEINS_ZH,CONSUME-MEINS_GMT_ZH)
FROM ZLJGB
WHERE MATNR = CONSUME-MATNR.
IF SY-SUBRC = 0.
CONSUME-VARIA = CONSUME-NTGEW_GMT - V_NTGEW.
IF CONSUME-MMEIN <> CONSUME-MEINS_GC AND CONSUME-MEINS_GC NE SPACE.
SELECT SINGLE MSEH3 INTO CONSUME-MEINS_GC
FROM ZT006A WHERE MSEHI = CONSUME-MEINS_GC.
CALL FUNCTION 'MD_CONVERT_MATERIAL_UNIT'
EXPORTING
I_MATNR = CONSUME-MATNR
I_IN_ME = CONSUME-GMEIN
I_OUT_ME = CONSUME-MEINS_GC
I_MENGE = CONSUME-COMNG
IMPORTING
E_MENGE = V_MENGE
EXCEPTIONS
ERROR_IN_APPLICATION = 1
ERROR = 2
OTHERS = 3.
CONSUME-SBMNG = V_MENGE * V_RATE.
ELSE.
CONSUME-SBMNG = CONSUME-COMNG * V_RATE.
ENDIF.
ENDIF.
APPEND CONSUME.
CLEAR: CONSUME,WA.
ENDLOOP.
ENDLOOP.
SORT CONSUME BY WERKS MTART MODEL MATNR DESCENDING.
ENDFORM. " CONSUMPTION_MATERIAL
*&---------------------------------------------------------------------*
*& Form CONSUPTION_GRID_DISPLAY
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM. CONSUPTION_GRID_DISPLAY.
G_REPID = SY-REPID.
LAYOUT-BOX_FIELDNAME = 'SET'.
LAYOUT-ZEBRA = 'X'.
LAYOUT-COLWIDTH_OPTIMIZE = 'X'.
* ADDFIELD 'WERKS' 'Plant' '10' 'X' '' '' ''.
ADDFIELD 'MODEL' '成品' '10' 'X' '' '' ''.
ADDFIELD 'MODTX' '成品描述' '10' 'X' '' '' ''.
ADDFIELD 'PSPNR' 'WBS元素' '10' 'X' '' '' ''.
ADDFIELD 'LGORT' '仓位' '10' 'X' '' '' ''.
ADDFIELD 'CHARG' '批次' '10' 'X' '' '' ''.
ADDFIELD 'LABST' '库存数量' '10' 'X' '' '' ''.
ADDFIELD 'AUFNR' '生产订单' '10' 'X' '' '' ''.
ADDFIELD 'MEINS' '单位' '10' 'X' '' '' ''.
ADDFIELD 'PSMNG' 'Order Qty' '10' 'X' '' '' ''.
ADDFIELD 'WEMNG' 'Delivery Qty' '10' 'X' '' '' ''.
ADDFIELD 'WERKS' '工厂' '10' 'X' '' '' ''.
ADDFIELD 'DLGORT' '材料仓位' '10' 'X' '' '' ''.
ADDFIELD 'POSNR' '行号' '10' 'X' '' '' ''.
ADDFIELD 'MATNR' '物料编码' '10' 'X' '' '' ''.
ADDFIELD 'MAKTX' '物料描述' '10' 'X' '' '' ''.
ADDFIELD 'MMEIN' '物料单位' '10' 'X' '' '' ''.
ADDFIELD 'COMNG' '折算为材料' '10' 'X' '' '' ''.
ADDFIELD 'INCO1' '采购方式' '10' 'X' '' '' ''.
ADDFIELD 'NTGEW' 'SAP单重' '10' 'X' '' '' ''.
ADDFIELD 'GEWEI' '重量单位' '10' 'X' '' '' ''.
ADDFIELD 'BRGEW' '总重KG' '10' 'X' '' '' ''.
ADDFIELD 'MEINS_GC' 'GMT工厂单位' '10' 'X' '' '' 'X'.
ADDFIELD 'MEINS_ZH' 'GMT工厂单位' '10' 'X' '' '' ''.
ADDFIELD 'NTGEW_GMT' 'GMT单重' '10' 'X' '' '' ''.
ADDFIELD 'VARIA' 'G-S差异' '10' 'X' '' '' ''.
ADDFIELD 'SERIA' '海关序号' '10' 'X' '' '' ''.
ADDFIELD 'CUSTN' '海关编码' '10' 'X' '' '' ''.
ADDFIELD 'CUSTX' '备案名称' '10' 'X' '' '' ''.
ADDFIELD 'MEINS_GMT' '申报单位' '10' 'X' '' '' 'X'.
ADDFIELD 'MEINS_GMT_ZH' '申报单位' '10' 'X' '' '' ''.
ADDFIELD 'SBMNG' '申报数量' '10' 'X' '' '' ''.
ENDFORM. " DISPLAY_GRID_WIP
*&---------------------------------------------------------------------*
*& Form CONSUPTION_DATA_DISPLAY
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM. CONSUPTION_DATA_DISPLAY.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = G_REPID
IS_LAYOUT = LAYOUT
* I_CALLBACK_HTML_TOP_OF_PAGE = 'ALV_TOP_OF_PAGE'
* I_CALLBACK_USER_COMMAND = SUB_CALLBACK_USER
* I_CALLBACK_PF_STATUS_SET = 'PF_STATUS_SET'
IT_FIELDCAT = L_ALV_FILEDCAT
I_GRID_TITLE = ''
I_SAVE = 'X'
TABLES
T_OUTTAB = CONSUME.
ENDFORM. " DISPLAY_DATA_WIP
*&---------------------------------------------------------------------*
*& Form INIT_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM. INIT_DATA .
IF COM = 'X'.
MATART-LOW = 'ZIMM'.
MATART-SIGN = 'I'.
MATART-OPTION = 'EQ'.
APPEND MATART.
MATART-LOW = 'ZRAW'.
MATART-SIGN = 'I'.
MATART-OPTION = 'EQ'.
APPEND MATART.
MATART-LOW = 'ZASM1'.
MATART-SIGN = 'I'.
MATART-OPTION = 'EQ'.
APPEND MATART.
MATART-LOW = 'ZCMS'.
MATART-SIGN = 'I'.
MATART-OPTION = 'EQ'.
APPEND MATART.
MATART-LOW = 'ZFPC'.
MATART-SIGN = 'I'.
MATART-OPTION = 'EQ'.
APPEND MATART.
MATART-LOW = 'ZFPW'.
MATART-SIGN = 'I'.
MATART-OPTION = 'EQ'.
APPEND MATART.
MATART-LOW = 'ZJFG'.
MATART-SIGN = 'I'.
MATART-OPTION = 'EQ'.
APPEND MATART.
MATART-LOW = 'ZMPN'.
MATART-SIGN = 'I'.
MATART-OPTION = 'EQ'.
APPEND MATART.
MATART-LOW = 'ZNFG'.
MATART-SIGN = 'I'.
MATART-OPTION = 'EQ'.
APPEND MATART.
MATART-LOW = 'ZPRT'.
MATART-SIGN = 'I'.
MATART-OPTION = 'EQ'.
APPEND MATART.
MATART-LOW = 'ZZFG'.
MATART-SIGN = 'I'.
MATART-OPTION = 'EQ'.
APPEND MATART.
ELSEIF PRD = 'X'.
MATART-LOW = 'ZASM1'.
MATART-SIGN = 'I'.
MATART-OPTION = 'EQ'.
APPEND MATART.
MATART-LOW = 'ZCMS'.
MATART-SIGN = 'I'.
MATART-OPTION = 'EQ'.
APPEND MATART.
MATART-LOW = 'ZFPC'.
MATART-SIGN = 'I'.
MATART-OPTION = 'EQ'.
APPEND MATART.
MATART-LOW = 'ZFPW'.
MATART-SIGN = 'I'.
MATART-OPTION = 'EQ'.
APPEND MATART.
MATART-LOW = 'ZJFG'.
MATART-SIGN = 'I'.
MATART-OPTION = 'EQ'.
APPEND MATART.
MATART-LOW = 'ZMPN'.
MATART-SIGN = 'I'.
MATART-OPTION = 'EQ'.
APPEND MATART.
MATART-LOW = 'ZNFG'.
MATART-SIGN = 'I'.
MATART-OPTION = 'EQ'.
APPEND MATART.
MATART-LOW = 'ZPRT'.
MATART-SIGN = 'I'.
MATART-OPTION = 'EQ'.
APPEND MATART.
MATART-LOW = 'ZZFG'.
MATART-SIGN = 'I'.
MATART-OPTION = 'EQ'.
APPEND MATART.
ENDIF.
ENDFORM. " INIT_DATA
*&---------------------------------------------------------------------*
*& Form COMBINE_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM. COMBINE_DATA.
SORT BESTAND BY WERKS MTART MATNR IDNRK.
CLEAR:COMBINE.REFRESH:COMBINE.
LOOP AT BESTAND.
CASE BESTAND-MTART.
WHEN 'ZRAW' OR 'ZIMM'.
MOVE: 'RAW' TO COMBINE-FLAG, "RAW stock
BESTAND-WERKS TO COMBINE-WERKS,
BESTAND-MTART TO COMBINE-MTART,
BESTAND-MATNR TO COMBINE-MATNR,
BESTAND-MAKTX TO COMBINE-MAKTX,
BESTAND-LGORT TO COMBINE-LGORT,
BESTAND-LGOBE TO COMBINE-LGOBE,
BESTAND-PSPNR TO COMBINE-PSPNR,
BESTAND-CHARG TO COMBINE-CHARG,
BESTAND-MEINS TO COMBINE-MEINS,
BESTAND-LABST TO COMBINE-LABST,
BESTAND-INSME TO COMBINE-INSME,
BESTAND-SPEME TO COMBINE-SPEME,
BESTAND-TOTAL TO COMBINE-TOTAL.
IF BESTAND-LABST <> 0.
BESTAND-WLABS = BESTAND-WLABS / BESTAND-LABST.
ENDIF.
MOVE: BESTAND-WAERS TO COMBINE-WAERS,
BESTAND-INCO1 TO COMBINE-INCO1,
BESTAND-NTGEW TO COMBINE-NTGEW,
BESTAND-GEWEI TO COMBINE-GEWEI,
BESTAND-BRGEW TO COMBINE-BRGEW,
BESTAND-MEINS_GC TO COMBINE-MEINS_GC,
BESTAND-NTGEW_GMT TO COMBINE-NTGEW_GMT,
BESTAND-MEINS_GMT TO COMBINE-MEINS_GMT,
BESTAND-VARIA TO COMBINE-VARIA,
BESTAND-CUSTN TO COMBINE-CUSTN,
BESTAND-CUSTX TO COMBINE-CUSTX,
BESTAND-MEINS_GMT1 TO COMBINE-MEINS_GMT1,
BESTAND-SBMNG TO COMBINE-SBMNG.
APPEND COMBINE.
DELETE BESTAND.
CLEAR BESTAND.
WHEN OTHERS.
ENDCASE.
ENDLOOP.
PERFORM. CONSUMPTION_MATERIAL.
FREE BESTAND.
CLEAR COMBINE.
LOOP AT CONSUME.
MOVE: 'PRD' TO COMBINE-FLAG, "成品折算原材料
CONSUME-WERKS TO COMBINE-WERKS,
CONSUME-MTART TO COMBINE-MTART,
CONSUME-MODEL TO COMBINE-MODEL,
CONSUME-MATNR TO COMBINE-MATNR,
CONSUME-MAKTX TO COMBINE-MAKTX,
CONSUME-LGORT TO COMBINE-LGORT,
CONSUME-LGOBE TO COMBINE-LGOBE,
CONSUME-PSPNR TO COMBINE-PSPNR,
CONSUME-CHARG TO COMBINE-CHARG,
CONSUME-MEINS TO COMBINE-MEINS,
CONSUME-LABST TO COMBINE-LABST,
CONSUME-INSME TO COMBINE-INSME,
CONSUME-SPEME TO COMBINE-SPEME,
CONSUME-TOTAL TO COMBINE-TOTAL,
CONSUME-WLABS TO COMBINE-WLABS,
CONSUME-WAERS TO COMBINE-WAERS.
IF CONSUME-LABST <> 0.
CONSUME-WLABS = CONSUME-WLABS / CONSUME-LABST.
ENDIF.
MOVE: CONSUME-COMNG TO COMBINE-COMNG,
CONSUME-AUFNR TO COMBINE-AUFNR,
CONSUME-WAERS TO COMBINE-WAERS,
CONSUME-INCO1 TO COMBINE-INCO1,
CONSUME-NTGEW TO COMBINE-NTGEW,
CONSUME-GEWEI TO COMBINE-GEWEI,
CONSUME-BRGEW TO COMBINE-BRGEW,
CONSUME-MEINS_GC TO COMBINE-MEINS_GC,
CONSUME-NTGEW_GMT TO COMBINE-NTGEW_GMT,
CONSUME-MEINS_GMT TO COMBINE-MEINS_GMT,
CONSUME-VARIA TO COMBINE-VARIA,
CONSUME-CUSTN TO COMBINE-CUSTN,
CONSUME-CUSTX TO COMBINE-CUSTX,
CONSUME-MEINS_GMT1 TO COMBINE-MEINS_GMT1,
CONSUME-SBMNG TO COMBINE-SBMNG.
APPEND COMBINE.
ENDLOOP.
FREE CONSUME.
PERFORM. GET_WIP.
CHECK ITAB[] IS NOT INITIAL.
CLEAR:ITAB,COMBINE.
LOOP AT ITAB.
MOVE: 'WIP' TO COMBINE-FLAG. "WIP stock
COMBINE-WERKS = ITAB-WERKS.
COMBINE-MTART = ITAB-MTART.
COMBINE-MATNR = ITAB-MATNR.
COMBINE-MAKTX = ITAB-MAKTX.
COMBINE-MODEL = ITAB-MODEL.
COMBINE-MODTX = ITAB-MODTX.
COMBINE-LGORT = ITAB-LGORT.
COMBINE-PSPNR = ITAB-PROJN.
COMBINE-WIPQTY = ITAB-WIPQTY.
COMBINE-TOTAL = ITAB-WIPQTY.
COMBINE-WLABS = ITAB-DMBTR.
COMBINE-WAERS = 'RMB'.
COMBINE-MEINS = ITAB-MEINS.
COMBINE-AUFNR = ITAB-AUFNR.
COMBINE-INCO1 = ITAB-INCO1.
COMBINE-NTGEW = ITAB-NTGEW.
COMBINE-GEWEI = ITAB-GEWEI.
COMBINE-BRGEW = ITAB-BRGEW.
COMBINE-MEINS_GC = ITAB-MEINS_GC.
COMBINE-MEINS_GMT = ITAB-MEINS_GMT.
COMBINE-VARIA = ITAB-VARIA.
COMBINE-SERIA = ITAB-SERIA.
COMBINE-CUSTN = ITAB-CUSTN.
COMBINE-CUSTX = ITAB-CUSTX.
COMBINE-MEINS_GMT = ITAB-MEINS_GMT.
COMBINE-SBMNG = ITAB-SBMNG.
APPEND COMBINE TO COMBINE.
ENDLOOP.
SORT COMBINE BY FLAG WERKS MTART MODEL MATNR DESCENDING.
ENDFORM. " COMBINE_EXPORE_MODEL
*&---------------------------------------------------------------------*
*& Form. COMBINE_DISPLAY_GRID
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM. COMBINE_DISPLAY_GRID.
G_REPID = SY-REPID.
LAYOUT-BOX_FIELDNAME = 'SET'.
LAYOUT-ZEBRA = 'X'.
LAYOUT-COLWIDTH_OPTIMIZE = 'X'.
ADDFIELD 'FLAG' '标示' '10' 'X' '' '' ''.
ADDFIELD 'WERKS' '工厂' '10' 'X' '' '' ''.
ADDFIELD 'MODEL' '成品编码' '5' 'X' '' '' ''.
ADDFIELD 'MTART' '物料类型' '5' 'X' '' '' ''.
ADDFIELD 'MATNR' '物料编码' '5' 'X' '' '' ''.
ADDFIELD 'LGORT' '库位' '10' 'X' '' '' ''.
ADDFIELD 'LGOBE' '库位描述' '10' 'X' 'X' '' ''.
ADDFIELD 'PSPNR' 'WBS 元素' '10' 'X' '' '' ''.
ADDFIELD 'CHARG' '批次号' '10' 'X' '' '' ''.
ADDFIELD 'MAKTX' '物料描述' '10' 'X' '' '' ''.
ADDFIELD 'LABST' '非限制使用库存' '10' 'X' '' '' 'X'.
ADDFIELD 'INSME' '待检的库存' '10' 'X' '' '' 'X'.
ADDFIELD 'SPEME' '冻结的库存' '10' 'X' '' '' 'X'.
ADDFIELD 'MEINS' '基本单位' '10' 'X' '' '' ''.
ADDFIELD 'WIPQTY' 'WIP数量' '10' 'X' '' '' ''.
ADDFIELD 'TOTAL' '总库存' '10' 'X' '' '' ''.
ADDFIELD 'WAERS' '货币码' '10' 'X' '' '' ''.
ADDFIELD 'WLABS' '总库存价值' '10' 'X' '' '' ''.
ADDFIELD 'AUFNR' '工单号' '10' 'X' '' '' ''.
ADDFIELD 'COMNG' '折算为材料' '10' 'X' '' '' ''.
ADDFIELD 'INCO1' '采购方式' '10' 'X' '' '' ''.
ADDFIELD 'NTGEW' 'SAP单重' '10' 'X' '' '' ''.
ADDFIELD 'GEWEI' '重量单位' '10' 'X' '' '' ''.
ADDFIELD 'BRGEW' '总重KG' '10' 'X' '' '' ''.
ADDFIELD 'MEINS_GC' 'GMT工厂单位' '10' 'X' '' '' ''.
ADDFIELD 'NTGEW_GMT' 'GMT备案重量KG' '10' 'X' '' '' ''.
ADDFIELD 'VARIA' 'G-S差异' '10' 'X' '' '' ''.
ADDFIELD 'SERIA' '海关序号' '10' 'X' '' '' ''.
ADDFIELD 'CUSTN' '海关编码' '10' 'X' '' '' ''.
ADDFIELD 'CUSTX' '备案名称' '10' 'X' '' '' ''.
ADDFIELD 'MEINS_GMT' '申报单位' '10' 'X' '' '' ''.
ADDFIELD 'SBMNG' '申报数量' '10' 'X' '' '' ''.
ENDFORM. " DISPLAY_GRID
*&---------------------------------------------------------------------*
*& Form COMBINE_DISPLAY_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM. COMBINE_DISPLAY_DATA.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = G_REPID
IS_LAYOUT = LAYOUT
* I_CALLBACK_HTML_TOP_OF_PAGE = 'ALV_TOP_OF_PAGE'
* I_CALLBACK_USER_COMMAND = SUB_CALLBACK_USER
* I_CALLBACK_PF_STATUS_SET = 'PF_STATUS_SET'
IT_FIELDCAT = L_ALV_FILEDCAT
I_GRID_TITLE = ''
I_SAVE = 'X'
TABLES
T_OUTTAB = COMBINE.
ENDFORM. " DISPLAY_DATA
*&---------------------------------------------------------------------*
*& Form COMBINE_DATA1
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM. COMBINE_DATA1.
SORT BESTAND BY WERKS MTART MATNR IDNRK.
CLEAR:COMBINE.REFRESH:COMBINE.
DATA TABINDEX TYPE SY-TABIX.
DATA V_MATNR TYPE MATNR.
CLEAR BESTAND.
LOOP AT BESTAND.
IF V_MATNR <> BESTAND-MATNR.
V_MATNR = BESTAND-MATNR.
CASE BESTAND-MTART.
WHEN 'ZRAW' OR 'ZIMM'.
MOVE: BESTAND-WERKS TO COMBINE-WERKS,
BESTAND-MTART TO COMBINE-MTART,
BESTAND-MATNR TO COMBINE-MATNR,
BESTAND-MAKTX TO COMBINE-MAKTX,
BESTAND-LGORT TO COMBINE-LGORT,
BESTAND-LGOBE TO COMBINE-LGOBE,
BESTAND-PSPNR TO COMBINE-PSPNR,
BESTAND-CHARG TO COMBINE-CHARG,
BESTAND-MEINS TO COMBINE-MEINS,
BESTAND-LABST TO COMBINE-LABST,
BESTAND-INSME TO COMBINE-INSME,
BESTAND-SPEME TO COMBINE-SPEME,
BESTAND-TOTAL TO COMBINE-TOTAL.
IF BESTAND-LABST <> 0.
BESTAND-WLABS = BESTAND-WLABS / BESTAND-LABST.
ENDIF.
MOVE: BESTAND-WAERS TO COMBINE-WAERS,
BESTAND-INCO1 TO COMBINE-INCO1,
BESTAND-NTGEW TO COMBINE-NTGEW,
BESTAND-GEWEI TO COMBINE-GEWEI,
BESTAND-BRGEW TO COMBINE-BRGEW,
BESTAND-MEINS_GC TO COMBINE-MEINS_GC,
BESTAND-NTGEW_GMT TO COMBINE-NTGEW_GMT,
BESTAND-MEINS_GMT TO COMBINE-MEINS_GMT,
BESTAND-VARIA TO COMBINE-VARIA,
BESTAND-CUSTN TO COMBINE-CUSTN,
BESTAND-CUSTX TO COMBINE-CUSTX,
BESTAND-MEINS_GMT1 TO COMBINE-MEINS_GMT1,
BESTAND-SBMNG TO COMBINE-SBMNG.
APPEND COMBINE.
DELETE BESTAND.
CLEAR BESTAND.
WHEN OTHERS.
ENDCASE.
ELSE.
READ TABLE COMBINE WITH KEY MATNR = BESTAND-MATNR
WERKS = BESTAND-WERKS.
IF SY-SUBRC = 0.
TABINDEX = SY-TABIX.
ADD BESTAND-BRGEW TO COMBINE-BRGEW.
ADD BESTAND-TOTAL TO COMBINE-TOTAL.
ADD BESTAND-SBMNG TO COMBINE-SBMNG.
MODIFY COMBINE INDEX TABINDEX TRANSPORTING BRGEW TOTAL SBMNG.
ENDIF.
ENDIF.
ENDLOOP.
PERFORM. CONSUMPTION_MATERIAL.
FREE BESTAND.
CLEAR CONSUME.
LOOP AT CONSUME.
CLEAR COMBINE.
READ TABLE COMBINE WITH KEY MATNR = CONSUME-MATNR
WERKS = CONSUME-WERKS.
IF SY-SUBRC = 0.
TABINDEX = SY-TABIX.
MOVE: CONSUME-COMNG TO COMBINE-COMNG,
CONSUME-SBMNG TO COMBINE-SBMNG.
MODIFY COMBINE INDEX TABINDEX FROM COMBINE TRANSPORTING COMNG SBMNG.
ELSE.
MOVE: CONSUME-WERKS TO COMBINE-WERKS,
CONSUME-MTART TO COMBINE-MTART,
CONSUME-MATNR TO COMBINE-MATNR,
CONSUME-MAKTX TO COMBINE-MAKTX,
CONSUME-LGORT TO COMBINE-LGORT,
CONSUME-LGOBE TO COMBINE-LGOBE,
CONSUME-PSPNR TO COMBINE-PSPNR,
CONSUME-CHARG TO COMBINE-CHARG,
CONSUME-MEINS TO COMBINE-MEINS,
CONSUME-LABST TO COMBINE-LABST,
CONSUME-INSME TO COMBINE-INSME,
CONSUME-SPEME TO COMBINE-SPEME,
CONSUME-TOTAL TO COMBINE-TOTAL,
CONSUME-WLABS TO COMBINE-WLABS,
CONSUME-WAERS TO COMBINE-WAERS.
IF CONSUME-LABST <> 0.
CONSUME-WLABS = CONSUME-WLABS / CONSUME-LABST.
ENDIF.
MOVE: CONSUME-COMNG TO COMBINE-COMNG,
CONSUME-WAERS TO COMBINE-WAERS,
CONSUME-INCO1 TO COMBINE-INCO1,
CONSUME-NTGEW TO COMBINE-NTGEW,
CONSUME-GEWEI TO COMBINE-GEWEI,
CONSUME-BRGEW TO COMBINE-BRGEW,
CONSUME-MEINS_GC TO COMBINE-MEINS_GC,
CONSUME-NTGEW_GMT TO COMBINE-NTGEW_GMT,
CONSUME-MEINS_GMT TO COMBINE-MEINS_GMT,
CONSUME-VARIA TO COMBINE-VARIA,
CONSUME-CUSTN TO COMBINE-CUSTN,
CONSUME-CUSTX TO COMBINE-CUSTX,
CONSUME-MEINS_GMT1 TO COMBINE-MEINS_GMT1,
CONSUME-SBMNG TO COMBINE-SBMNG.
APPEND COMBINE.
ENDIF.
ENDLOOP.
FREE CONSUME.
PERFORM. GET_WIP.
CHECK ITAB[] IS NOT INITIAL.
CLEAR:ITAB,COMBINE.
LOOP AT ITAB.
READ TABLE COMBINE WITH KEY MATNR = ITAB-MATNR
WERKS = ITAB-WERKS.
IF SY-SUBRC = 0.
TABINDEX = SY-TABIX.
COMBINE-WIPQTY = ITAB-WIPQTY.
MODIFY COMBINE INDEX TABINDEX TRANSPORTING WIPQTY.
ELSE.
COMBINE-WERKS = ITAB-WERKS.
COMBINE-MTART = ITAB-MTART.
COMBINE-MATNR = ITAB-MATNR.
COMBINE-MAKTX = ITAB-MAKTX.
COMBINE-LGORT = ITAB-LGORT.
COMBINE-PSPNR = ITAB-PROJN.
COMBINE-WIPQTY = ITAB-WIPQTY.
COMBINE-TOTAL = ITAB-WIPQTY.
COMBINE-WLABS = ITAB-DMBTR.
COMBINE-WAERS = 'RMB'.
COMBINE-MEINS = ITAB-GMEIN.
COMBINE-INCO1 = ITAB-INCO1.
COMBINE-NTGEW = ITAB-NTGEW.
COMBINE-GEWEI = ITAB-GEWEI.
COMBINE-BRGEW = ITAB-BRGEW.
COMBINE-MEINS_GC = ITAB-MEINS_GC.
COMBINE-MEINS_GMT = ITAB-MEINS_GMT.
COMBINE-VARIA = ITAB-VARIA.
COMBINE-SERIA = ITAB-SERIA.
COMBINE-CUSTN = ITAB-CUSTN.
COMBINE-CUSTX = ITAB-CUSTX.
COMBINE-MEINS_GMT = ITAB-MEINS_GMT.
COMBINE-SBMNG = ITAB-SBMNG.
APPEND COMBINE TO COMBINE.
ENDIF.
ENDLOOP.
SORT COMBINE BY WERKS MTART MODEL MATNR DESCENDING.
ENDFORM. " COMBINE_EXPORE_MODEL1
*&---------------------------------------------------------------------*
*& Form. COMBINE_DISPLAY_GRID
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM. COMBINE_DISPLAY_GRID1.
G_REPID = SY-REPID.
LAYOUT-BOX_FIELDNAME = 'SET'.
LAYOUT-ZEBRA = 'X'.
LAYOUT-COLWIDTH_OPTIMIZE = 'X'.
ADDFIELD 'WERKS' '工厂' '10' 'X' '' '' ''.
ADDFIELD 'MTART' '物料类型' '5' 'X' '' '' ''.
ADDFIELD 'MATNR' '物料编码' '5' 'X' '' '' ''.
ADDFIELD 'LGORT' '库位' '10' 'X' '' '' ''.
ADDFIELD 'LGOBE' '库位描述' '10' 'X' 'X' '' ''.
ADDFIELD 'PSPNR' 'WBS 元素' '10' 'X' '' '' ''.
ADDFIELD 'MAKTX' '物料描述' '10' 'X' '' '' ''.
ADDFIELD 'LABST' '非限制使用库存' '10' 'X' '' '' 'X'.
ADDFIELD 'INSME' '待检的库存' '10' 'X' '' '' 'X'.
ADDFIELD 'SPEME' '冻结的库存' '10' 'X' '' '' 'X'.
ADDFIELD 'MEINS' '基本单位' '10' 'X' '' '' ''.
ADDFIELD 'COMNG' '折算为材料' '10' 'X' '' '' ''.
ADDFIELD 'WIPQTY' 'WIP数量' '10' 'X' '' '' ''.
ADDFIELD 'TOTAL' '总库存' '10' 'X' '' '' ''.
ADDFIELD 'WAERS' '货币码' '10' 'X' '' '' ''.
ADDFIELD 'WLABS' '总库存价值' '10' 'X' '' '' ''.
ADDFIELD 'INCO1' '采购方式' '10' 'X' '' '' ''.
ADDFIELD 'NTGEW' 'SAP单重' '10' 'X' '' '' ''.
ADDFIELD 'GEWEI' '重量单位' '10' 'X' '' '' ''.
ADDFIELD 'BRGEW' '总重KG' '10' 'X' '' '' ''.
ADDFIELD 'MEINS_GC' 'GMT工厂单位' '10' 'X' '' '' ''.
ADDFIELD 'NTGEW_GMT' 'GMT备案重量KG' '10' 'X' '' '' ''.
ADDFIELD 'VARIA' 'G-S差异' '10' 'X' '' '' ''.
ADDFIELD 'SERIA' '海关序号' '10' 'X' '' '' ''.
ADDFIELD 'CUSTN' '海关编码' '10' 'X' '' '' ''.
ADDFIELD 'CUSTX' '备案名称' '10' 'X' '' '' ''.
ADDFIELD 'MEINS_GMT' '申报单位' '10' 'X' '' '' ''.
ADDFIELD 'SBMNG' '申报数量' '10' 'X' '' '' ''.
ENDFORM. " DISPLAY_GRID
*&---------------------------------------------------------------------*
*& Form COMBINE_DISPLAY_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM. COMBINE_DISPLAY_DATA1.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = G_REPID
IS_LAYOUT = LAYOUT
* I_CALLBACK_HTML_TOP_OF_PAGE = 'ALV_TOP_OF_PAGE'
* I_CALLBACK_USER_COMMAND = SUB_CALLBACK_USER
* I_CALLBACK_PF_STATUS_SET = 'PF_STATUS_SET'
IT_FIELDCAT = L_ALV_FILEDCAT
I_GRID_TITLE = ''
I_SAVE = 'X'
TABLES
T_OUTTAB = COMBINE.
ENDFORM. " DISPLAY_DATA
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/16181884/viewspace-735628/ ,如需转载,请注明出处,否则将追究法律责任。