REPORT ZPPPDR001A NO STANDARD PAGE HEADING MESSAGE-ID MG .
*----------------------------------------------------------------------*
* *
* Program : ZPPPDR001A *
* Author : Patrick Song *
* Date : Feb 16, 2009 *
* Code type : REPORT *
* (interface/conversion/on-line transaction/report) *
* *
* Security : *
* Auth.Group : N/A *
* Built In : *
* *
* Description : List of shortage raw materials in production order. *
* *
*----------------------------------------------------------------------*
* Processes : *
* 1. *
* *
*----------------------------------------------------------------------*
* Error handling : *
*----------------------------------------------------------------------*
* 1. *
* *
*----------------------------------------------------------------------*
* Change log : *
*----------------------------------------------------------------------*
* CR# : *
* Corr. no. : *
* Date : *
* Author : *
* Search ID : *
* Change : *
* *
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
* Standard header and time include *
*----------------------------------------------------------------------*
INCLUDE ZBCDWI000.
INCLUDE <ICON>.
TYPE-POOLS: SLIS.
*----------------------------------------------------------------------*
* Data dictionary tables and structures *
*----------------------------------------------------------------------*
TABLES: AFKO. " Order header data PP orders
TABLES: AFPO. " Order item
TABLES: CAUFV. " Production order table
TABLES: EKKO. " Purchasing Document Header
TABLES: EKPO. " Purchasing Document Item
TABLES: JEST. " Individual Object Status
TABLES: MARA. " General Material Data
TABLES: MARC. " Plant Data for Material
TABLES: MARD. " Storage Location Data for Material
TABLES: MAKT. " Material Descriptions
TABLES: MAST. " Material to BOM Link
TABLES: MBEW. " Material Valuation
TABLES: MKOL. " Special Stocks from Vendor
TABLES: MSKA. " Sales Order Stock
TABLES: MSLB. " Special Stocks with Vendor
TABLES: PLAF. " Planned order
TABLES: RESB. " Reservation/dependent requirements
TABLES: T001L. " Storage Locations
TABLES: T001W. " Plants/Branches
TABLES: TJ02T. " System status texts
TABLES: T001. " Company Codes
TABLES: T001K. " Valuation area
TABLES: T024W. " Valid Purchasing Organizations for Plant
TABLES: T399D. " Control Parameters for MRP
TABLES: T438A. " MRP Type
TABLES: T438M. " Control Parameter for MRP -Material Level
TABLES: T450N. " Transaction Control MRP With Object
TABLES: VBEP . " Sales Document: Schedule Line Data
*----------------------------------------------------------------------*
* Select options and parameters *
*----------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-B01.
SELECT-OPTIONS: S_BDART FOR RESB-BDART MEMORY ID BDA.
SELECT-OPTIONS: S_SOBKZ FOR RESB-SOBKZ DEFAULT 'E' OBLIGATORY .
SELECT-OPTIONS: S_WERKS FOR RESB-WERKS DEFAULT '2001' OBLIGATORY.
SELECT-OPTIONS: S_BDTER FOR RESB-BDTER DEFAULT SY-DATUM.
SELECTION-SCREEN SKIP.
SELECT-OPTIONS: S_AUFNR FOR RESB-AUFNR MEMORY ID ANR.
SELECTION-SCREEN SKIP.
SELECT-OPTIONS: S_KDAUF FOR RESB-KDAUF MEMORY ID AUN.
SELECT-OPTIONS: S_KDPOS FOR RESB-KDPOS MEMORY ID KPO.
SELECTION-SCREEN SKIP.
SELECT-OPTIONS: S_EBELN FOR EKPO-EBELN MEMORY ID BES.
SELECT-OPTIONS: S_EBELP FOR EKPO-EBELP MEMORY ID BSP.
SELECTION-SCREEN SKIP.
SELECT-OPTIONS: S_MATNR FOR RESB-MATNR MEMORY ID MAT.
SELECT-OPTIONS: S_MATKL FOR MARA-MATKL MEMORY ID MKL.
SELECT-OPTIONS: S_DISPO FOR MARC-DISPO MEMORY ID DGR.
SELECT-OPTIONS: S_EKGRP FOR MARC-EKGRP MEMORY ID EKG.
SELECTION-SCREEN END OF BLOCK B1.
*--------------------------------------------------------------------*
* Constants *
*--------------------------------------------------------------------*
*----------------------------------------------------------------------*
* Internal tables and field strings *
*----------------------------------------------------------------------*
* define internal table to store reservation data
DATA: BEGIN OF I_RESB OCCURS 0 .
INCLUDE STRUCTURE RESB .
DATA: MAKTX LIKE MAKT-MAKTX .
DATA: OPNQTY LIKE RESB-BDMNG. " Qty Open
DATA: SHORTAGE LIKE RESB-ENMNG. " Material Shortage
DATA: KALAB LIKE MSKA-KALAB. " Valuated Unrestricted-Use Stock
DATA: KAINS LIKE MSKA-KAINS. " Stock in Quality Inspection
DATA: AVASTK LIKE MARD-LABST. " Available Stock
DATA: XMENG LIKE RESB-ENMNG. " Outstanding PO
DATA: LABST LIKE MARD-LABST. " Standard Stock
DATA: INSME LIKE MARD-INSME. " Stock in Quality Inspection
DATA: SLABS LIKE MKOL-SLABS . " Consignment Stock
DATA: SINSM LIKE MKOL-SINSM . " Consignment Stock
DATA: SELK(001). " Selected Fields
DATA: ICON(004).
DATA: END OF I_RESB .
*--> Tabelle der offenen Bestellungen
DATA: BEGIN OF XTAB OCCURS 10,
WERKS LIKE EKPO-WERKS,
LGORT LIKE EKPO-LGORT,
MATNR LIKE EKPO-MATNR,
MENGE LIKE EKPO-MENGE,
MENGK LIKE EKPO-MENGE,
END OF XTAB.
*--> Define internal table to store available stock for reservation check
DATA: BEGIN OF MTAB OCCURS 0.
DATA: MATNR LIKE MARA-MATNR.
DATA: WERKS LIKE MARC-WERKS.
DATA: LGORT LIKE MSKA-LGORT.
DATA: SOBKZ LIKE MSKA-SOBKZ.
DATA: VBELN LIKE MSKA-VBELN.
DATA: POSNR LIKE MSKA-POSNR.
DATA: KALAB LIKE MSKA-KALAB.
DATA: KAINS LIKE MSKA-KAINS.
DATA: END OF MTAB.
*--> Define internal table to store available stock for reservation check
DATA: BEGIN OF ORD_STK OCCURS 0.
DATA: MATNR LIKE MARA-MATNR.
DATA: WERKS LIKE MARC-WERKS.
DATA: SOBKZ LIKE MSKA-SOBKZ.
DATA: VBELN LIKE MSKA-VBELN.
DATA: POSNR LIKE MSKA-POSNR.
DATA: KALAB LIKE MSKA-KALAB.
DATA: KAINS LIKE MSKA-KAINS.
DATA: AVASTK LIKE MARD-LABST. " Available Stock
DATA: END OF ORD_STK.
* define data for cusor determination
DATA: IDX TYPE SY-TABIX.
DATA: MTAB_WA LIKE ORD_STK.
* define internal table to store Sales Order Stock
DATA: BEGIN OF ITAB OCCURS 0.
DATA: MATNR LIKE RESB-MATNR.
DATA: WERKS LIKE RESB-WERKS.
DATA: END OF ITAB .
*----------------------------------------------------------------------*
* Global program variables *
*----------------------------------------------------------------------*
*-> define internal table for ALV-Output
DATA: S_REPID LIKE SY-REPID,
ST_LIST_TOP_OF_PAGE TYPE SLIS_T_LISTHEADER."page header
DATA: ST_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV, "table col name
ST_LAYOUT TYPE SLIS_LAYOUT_ALV, "layoutsetting
ST_SP_GROUP TYPE SLIS_T_SP_GROUP_ALV, "Globale Typen
ST_EVENTS TYPE SLIS_T_EVENT, "event header
CODE LIKE DISVARIANT-HANDLE, "Mgt. ID for repeated calls
S_VARIANT LIKE DISVARIANT, "Layout (External Use)
S_STATUS_ST01 TYPE SLIS_FORMNAME VALUE 'STANDARD_ST01',
S_USER_COMMAND TYPE SLIS_FORMNAME VALUE 'USER_COMMAND-ALV'.
DATA: BEGIN OF EXTAB OCCURS 0,
FCODE LIKE RSMPE-FUNC.
DATA: END OF EXTAB.
DATA: TAB TYPE SLIS_T_EXTAB.
*-> Global variables for handling ALV functionality
DATA: ALV_DEFAULT_VARIANT TYPE DISVARIANT-VARIANT.
DATA: ALV_KEYINFO TYPE SLIS_KEYINFO_ALV.
DATA: ALV_VARIANT TYPE DISVARIANT.
DATA: ALV_LAYOUT TYPE SLIS_LAYOUT_ALV.
DATA: ALV_REPID LIKE SY-REPID.
DATA: ALV_PRINT TYPE SLIS_PRINT_ALV.
DATA: ALV_DETAIL_FUNC(030).
DATA: ALV_COLOURIZE_FIELDS LIKE MMIM_REP_PRINT-COLOR. "n555893
*----------------------------------------------------------------------*
* initialization .
*----------------------------------------------------------------------*
INITIALIZATION .
REFRESH: I_RESB .
CLEAR : I_RESB .
*----------------------------------------------------------------------*
* At Selection-screen *
*----------------------------------------------------------------------*
AT SELECTION-SCREEN.
*----------------------------------------------------------------------*
* Start-of-selection *
*----------------------------------------------------------------------*
START-OF-SELECTION.
PERFORM EXTRACT_RESERVATION_DATA .
*----------------------------------------------------------------------*
* End-of-selection *
*----------------------------------------------------------------------*
END-OF-SELECTION.
*&---------------------------------------------------------------------*
*& Form EXTRACT_RESERVATION_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM EXTRACT_RESERVATION_DATA .
REFRESH: I_RESB, ITAB, ORD_STK. CLEAR: I_RESB, ITAB, ORD_STK .
SELECT * INTO CORRESPONDING FIELDS OF TABLE I_RESB
FROM RESB INNER JOIN MARC ON RESB~MANDT = MARC~MANDT
AND RESB~MATNR = MARC~MATNR
AND RESB~WERKS = MARC~WERKS
INNER JOIN MARA ON MARA~MANDT = RESB~MANDT
AND MARA~MATNR = RESB~MATNR
INNER JOIN MAKT ON MAKT~MANDT = RESB~MANDT
AND MAKT~MATNR = RESB~MATNR
CLIENT SPECIFIED
WHERE RESB~MANDT EQ SY-MANDT AND RESB~BDART IN S_BDART
AND RESB~AUFNR IN S_AUFNR AND RESB~EBELN IN S_EBELN
AND RESB~KDAUF IN S_KDAUF AND RESB~KDPOS IN S_KDPOS
AND RESB~MATNR IN S_MATNR AND RESB~BDTER IN S_BDTER
AND RESB~SOBKZ IN S_SOBKZ AND RESB~XLOEK EQ SPACE
AND RESB~KZEAR EQ SPACE AND RESB~WERKS IN S_WERKS
AND RESB~BDMNG GT 0 AND MAKT~SPRAS EQ '1'
AND MARC~EKGRP IN S_EKGRP AND MARC~DISPO IN S_DISPO
AND MARA~MATKL IN S_MATKL
ORDER BY RESB~MATNR RESB~WERKS RESB~BDTER .
LOOP AT I_RESB .
MOVE I_RESB-MATNR TO ITAB-MATNR.
MOVE I_RESB-WERKS TO ITAB-WERKS.
COLLECT ITAB .
CLEAR ITAB .
ENDLOOP .
CLEAR: MSKA, T001L.
SELECT * INTO CORRESPONDING FIELDS OF TABLE MTAB
FROM MSKA INNER JOIN T001L
ON MSKA~MANDT = T001L~MANDT
AND MSKA~WERKS = T001L~WERKS
AND MSKA~LGORT = T001L~LGORT
FOR ALL ENTRIES IN ITAB
WHERE MSKA~MANDT EQ SY-MANDT
AND MSKA~MATNR EQ ITAB-MATNR
AND MSKA~WERKS EQ ITAB-WERKS
AND ( MSKA~KALAB GT 0
OR MSKA~KAINS GT 0 )
AND T001L~DISKZ EQ SPACE.
LOOP AT MTAB .
MOVE-CORRESPONDING MTAB TO ORD_STK.
ORD_STK-AVASTK = ORD_STK-KALAB + ORD_STK-KAINS .
COLLECT ORD_STK.
CLEAR ORD_STK .
ENDLOOP .
LOOP AT I_RESB .
I_RESB-OPNQTY = I_RESB-BDMNG - I_RESB-ENMNG .
CLEAR: MSKA.
SELECT SUM( KALAB ) INTO I_RESB-KALAB FROM MSKA CLIENT SPECIFIED
WHERE MANDT EQ SY-MANDT
AND MATNR EQ I_RESB-MATNR
AND WERKS EQ I_RESB-WERKS
AND SOBKZ EQ I_RESB-SOBKZ
AND VBELN EQ I_RESB-KDAUF
AND POSNR EQ I_RESB-KDPOS.
CLEAR XTAB. REFRESH XTAB.
CALL FUNCTION 'MB_ADD_PURCHASE_ORDER_QUANTITY'
EXPORTING
X_MATNR = I_RESB-MATNR
X_MEINS = I_RESB-MEINS
X_ELIKZ = SPACE
X_LOEKZ = SPACE
TABLES
XTAB = XTAB
XWERKS = S_WERKS.
READ TABLE XTAB WITH KEY MATNR = I_RESB-MATNR
WERKS = I_RESB-WERKS BINARY SEARCH.
IF SY-SUBRC = 0 .
I_RESB-XMENG = XTAB-MENGE + XTAB-MENGK.
ENDIF .
I_RESB-SHORTAGE = I_RESB-KALAB - I_RESB-OPNQTY .
CLEAR: MARD.
SELECT SUM( LABST ) SUM( INSME ) INTO (I_RESB-LABST, I_RESB-INSME ) FROM MARD CLIENT SPECIFIED
WHERE MANDT EQ SY-MANDT
AND MATNR EQ I_RESB-MATNR
AND WERKS EQ I_RESB-WERKS.
CLEAR: MKOL.
SELECT SUM( SLABS ) SUM( SINSM ) INTO (I_RESB-SLABS, I_RESB-SINSM ) FROM MKOL CLIENT SPECIFIED
WHERE MANDT EQ SY-MANDT
AND MATNR EQ I_RESB-MATNR
AND WERKS EQ I_RESB-WERKS.
READ TABLE ORD_STK WITH KEY MATNR = I_RESB-MATNR
WERKS = I_RESB-WERKS
SOBKZ = I_RESB-SOBKZ
VBELN = I_RESB-KDAUF
POSNR = I_RESB-KDPOS.
IF SY-SUBRC = 0 .
IDX = SY-TABIX.
MOVE ORD_STK-AVASTK TO I_RESB-AVASTK.
MOVE-CORRESPONDING ORD_STK TO MTAB_WA .
MTAB_WA-AVASTK = MTAB_WA-AVASTK - I_RESB-OPNQTY .
IF MTAB_WA-AVASTK LT 0 .
MTAB_WA-AVASTK = 0.
ENDIF .
MODIFY ORD_STK INDEX IDX FROM MTAB_WA TRANSPORTING AVASTK.
ENDIF .
MODIFY I_RESB .
ENDLOOP .
CLEAR: G_ALV_FIELDCAT .
PERFORM SET_ALV_FIELDS_SP USING 'MATNR' 'I_RESB' '' TEXT-C01 ' '.
PERFORM SET_ALV_FIELDS_SP USING 'MAKTX' 'I_RESB' '' TEXT-C02 ' '.
PERFORM SET_ALV_FIELDS_SP USING 'EKGRP' 'I_RESB' '' TEXT-C03 ' '.
PERFORM SET_ALV_FIELDS_SP USING 'BDART' 'I_RESB' '' TEXT-C04 ' '.
PERFORM SET_ALV_FIELDS_SP USING 'AUFNR' 'I_RESB' '' TEXT-C05 ' '.
PERFORM SET_ALV_FIELDS_SP USING 'EBELN' 'I_RESB' '' TEXT-C06 ' '.
PERFORM SET_ALV_FIELDS_SP USING 'EBELP' 'I_RESB' '' TEXT-C07 ' '.
* PERFORM SET_ALV_FIELDS_SP USING 'EBELE' 'I_RESB' '' TEXT-C08 ' '.
PERFORM SET_ALV_FIELDS_SP USING 'SOBKZ' 'I_RESB' '' TEXT-C09 ' '.
PERFORM SET_ALV_FIELDS_SP USING 'KDAUF' 'I_RESB' '' TEXT-C10 ' '.
PERFORM SET_ALV_FIELDS_SP USING 'KDPOS' 'I_RESB' '' TEXT-C11 ' '.
PERFORM SET_ALV_FIELDS_SP USING 'BAUGR' 'I_RESB' '' TEXT-C12 ' '.
PERFORM SET_ALV_FIELDS_SP USING 'BDTER' 'I_RESB' '' TEXT-C13 ' '.
PERFORM SET_ALV_FIELDS_SP USING 'WERKS' 'I_RESB' '' TEXT-C14 ' '.
PERFORM SET_ALV_FIELDS_SP USING 'BDMNG' 'I_RESB' '' TEXT-C15 ' '.
PERFORM SET_ALV_FIELDS_SP USING 'ENMNG' 'I_RESB' '' TEXT-C16 ' '.
PERFORM SET_ALV_FIELDS_SP USING 'OPNQTY' 'I_RESB' '' TEXT-C17 ' '.
PERFORM SET_ALV_FIELDS_SP USING 'SHORTAGE' 'I_RESB' '' TEXT-C18 'X'.
PERFORM SET_ALV_FIELDS_SP USING 'KALAB' 'I_RESB' '' TEXT-C24 'X'.
PERFORM SET_ALV_FIELDS_SP USING 'KAINS' 'I_RESB' '' TEXT-C25 'X'.
PERFORM SET_ALV_FIELDS_SP USING 'AVASTK' 'I_RESB' '' TEXT-C26 'X'.
PERFORM SET_ALV_FIELDS_SP USING 'XMENG' 'I_RESB' '' TEXT-C27 'X'.
PERFORM SET_ALV_FIELDS_SP USING 'MEINS' 'I_RESB' '' TEXT-C19 ' '.
PERFORM SET_ALV_FIELDS_SP USING 'LABST' 'I_RESB' '' TEXT-C20 'X'.
PERFORM SET_ALV_FIELDS_SP USING 'SLABS' 'I_RESB' '' TEXT-C21 'X'.
PERFORM SET_ALV_FIELDS_SP USING 'INSME' 'I_RESB' '' TEXT-C22 'X'.
PERFORM SET_ALV_FIELDS_SP USING 'SINSM' 'I_RESB' '' TEXT-C23 'X'.
PERFORM LAYOUT_BUILD USING G_ALV_LAYOUT .
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = SY-CPROG
IS_LAYOUT = G_ALV_LAYOUT
* i_callback_html_top_of_page = 'ALV_TOP_OF_PAGE'
I_CALLBACK_PF_STATUS_SET = S_STATUS_ST01
I_DEFAULT = 'X'
I_SAVE = 'X'
I_CALLBACK_USER_COMMAND = S_USER_COMMAND
IT_FIELDCAT = G_ALV_FIELDCAT[]
IT_EVENTS = G_ALV_EVENT
TABLES
T_OUTTAB = I_RESB[].
ENDFORM. " EXTRACT_RESERVATION_DATA
*&---------------------------------------------------------------------*
*& Form STANDARD_ST01
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->EXTAB text
*----------------------------------------------------------------------*
FORM STANDARD_ST01 USING EXTAB TYPE SLIS_T_EXTAB.
* contain all fcode from ALV *
DELETE EXTAB WHERE FCODE = '&RNT_PREV'.
DELETE EXTAB WHERE FCODE = '&LFO'.
DELETE EXTAB WHERE FCODE = '&NFO'.
DELETE EXTAB WHERE FCODE = '&RNT'.
SET PF-STATUS 'ST01'.
SET TITLEBAR 'ST01'.
ENDFORM. "standard_st01
*&---------------------------------------------------------------------*
*& Form USER_COMMAND-ALV
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->R_UCOMM text
* -->RS_SELFIELD text
*----------------------------------------------------------------------*
FORM USER_COMMAND-ALV USING R_UCOMM LIKE SY-UCOMM
RS_SELFIELD TYPE SLIS_SELFIELD.
DATA: FELD(10) TYPE C.
* table rs_selfield store the information of cursor and table index.
RS_SELFIELD-REFRESH = 'X'.
CASE R_UCOMM.
WHEN 'PICK'.
READ TABLE I_RESB INDEX RS_SELFIELD-TABINDEX.
IF SY-SUBRC = 0.
CASE RS_SELFIELD-FIELDNAME.
WHEN 'AUFNR'.
IF NOT I_RESB-AUFNR IS INITIAL .
CLEAR: R_UCOMM .
SET PARAMETER ID 'ANR' FIELD I_RESB-AUFNR .
CALL TRANSACTION 'CO03' AND SKIP FIRST SCREEN.
ENDIF .
WHEN 'MATNR' OR 'MAKTX'.
CLEAR: R_UCOMM .
SET PARAMETER ID 'MAT' FIELD I_RESB-MATNR .
SET PARAMETER ID 'WRK' FIELD I_RESB-WERKS .
CALL TRANSACTION 'MM03' AND SKIP FIRST SCREEN.
WHEN 'BAUGR'.
CLEAR: R_UCOMM .
SET PARAMETER ID 'MAT' FIELD I_RESB-BAUGR .
SET PARAMETER ID 'WRK' FIELD I_RESB-WERKS .
CALL TRANSACTION 'MM03' AND SKIP FIRST SCREEN.
WHEN 'EBELN' OR 'EBELP'.
IF NOT I_RESB-EBELN IS INITIAL .
CLEAR: R_UCOMM .
SET PARAMETER ID 'BES' FIELD I_RESB-EBELN.
CALL TRANSACTION 'ME23N' AND SKIP FIRST SCREEN.
ENDIF .
WHEN 'KDAUF' OR 'KDPOS'.
SET PARAMETER ID 'AUN' FIELD I_RESB-KDAUF .
CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.
WHEN 'BDTER' OR 'BDMNG' OR 'ENMNG' OR 'OPNQTY' OR 'SHORTAGE'.
SET PARAMETER ID 'MAT' FIELD I_RESB-MATNR .
SET PARAMETER ID 'WRK' FIELD I_RESB-WERKS .
CALL TRANSACTION 'MD04' AND SKIP FIRST SCREEN.
WHEN OTHERS .
SET PARAMETER ID 'MAT' FIELD I_RESB-MATNR .
CALL TRANSACTION 'MMBE' AND SKIP FIRST SCREEN.
ENDCASE .
ENDIF .
WHEN 'DISPL'.
ENDCASE .
ENDFORM. "USER_COMMAND-ALV
*----------------------------------------------------------------------*
* *
* Program : ZPPPDR001A *
* Author : Patrick Song *
* Date : Feb 16, 2009 *
* Code type : REPORT *
* (interface/conversion/on-line transaction/report) *
* *
* Security : *
* Auth.Group : N/A *
* Built In : *
* *
* Description : List of shortage raw materials in production order. *
* *
*----------------------------------------------------------------------*
* Processes : *
* 1. *
* *
*----------------------------------------------------------------------*
* Error handling : *
*----------------------------------------------------------------------*
* 1. *
* *
*----------------------------------------------------------------------*
* Change log : *
*----------------------------------------------------------------------*
* CR# : *
* Corr. no. : *
* Date : *
* Author : *
* Search ID : *
* Change : *
* *
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
* Standard header and time include *
*----------------------------------------------------------------------*
INCLUDE ZBCDWI000.
INCLUDE <ICON>.
TYPE-POOLS: SLIS.
*----------------------------------------------------------------------*
* Data dictionary tables and structures *
*----------------------------------------------------------------------*
TABLES: AFKO. " Order header data PP orders
TABLES: AFPO. " Order item
TABLES: CAUFV. " Production order table
TABLES: EKKO. " Purchasing Document Header
TABLES: EKPO. " Purchasing Document Item
TABLES: JEST. " Individual Object Status
TABLES: MARA. " General Material Data
TABLES: MARC. " Plant Data for Material
TABLES: MARD. " Storage Location Data for Material
TABLES: MAKT. " Material Descriptions
TABLES: MAST. " Material to BOM Link
TABLES: MBEW. " Material Valuation
TABLES: MKOL. " Special Stocks from Vendor
TABLES: MSKA. " Sales Order Stock
TABLES: MSLB. " Special Stocks with Vendor
TABLES: PLAF. " Planned order
TABLES: RESB. " Reservation/dependent requirements
TABLES: T001L. " Storage Locations
TABLES: T001W. " Plants/Branches
TABLES: TJ02T. " System status texts
TABLES: T001. " Company Codes
TABLES: T001K. " Valuation area
TABLES: T024W. " Valid Purchasing Organizations for Plant
TABLES: T399D. " Control Parameters for MRP
TABLES: T438A. " MRP Type
TABLES: T438M. " Control Parameter for MRP -Material Level
TABLES: T450N. " Transaction Control MRP With Object
TABLES: VBEP . " Sales Document: Schedule Line Data
*----------------------------------------------------------------------*
* Select options and parameters *
*----------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-B01.
SELECT-OPTIONS: S_BDART FOR RESB-BDART MEMORY ID BDA.
SELECT-OPTIONS: S_SOBKZ FOR RESB-SOBKZ DEFAULT 'E' OBLIGATORY .
SELECT-OPTIONS: S_WERKS FOR RESB-WERKS DEFAULT '2001' OBLIGATORY.
SELECT-OPTIONS: S_BDTER FOR RESB-BDTER DEFAULT SY-DATUM.
SELECTION-SCREEN SKIP.
SELECT-OPTIONS: S_AUFNR FOR RESB-AUFNR MEMORY ID ANR.
SELECTION-SCREEN SKIP.
SELECT-OPTIONS: S_KDAUF FOR RESB-KDAUF MEMORY ID AUN.
SELECT-OPTIONS: S_KDPOS FOR RESB-KDPOS MEMORY ID KPO.
SELECTION-SCREEN SKIP.
SELECT-OPTIONS: S_EBELN FOR EKPO-EBELN MEMORY ID BES.
SELECT-OPTIONS: S_EBELP FOR EKPO-EBELP MEMORY ID BSP.
SELECTION-SCREEN SKIP.
SELECT-OPTIONS: S_MATNR FOR RESB-MATNR MEMORY ID MAT.
SELECT-OPTIONS: S_MATKL FOR MARA-MATKL MEMORY ID MKL.
SELECT-OPTIONS: S_DISPO FOR MARC-DISPO MEMORY ID DGR.
SELECT-OPTIONS: S_EKGRP FOR MARC-EKGRP MEMORY ID EKG.
SELECTION-SCREEN END OF BLOCK B1.
*--------------------------------------------------------------------*
* Constants *
*--------------------------------------------------------------------*
*----------------------------------------------------------------------*
* Internal tables and field strings *
*----------------------------------------------------------------------*
* define internal table to store reservation data
DATA: BEGIN OF I_RESB OCCURS 0 .
INCLUDE STRUCTURE RESB .
DATA: MAKTX LIKE MAKT-MAKTX .
DATA: OPNQTY LIKE RESB-BDMNG. " Qty Open
DATA: SHORTAGE LIKE RESB-ENMNG. " Material Shortage
DATA: KALAB LIKE MSKA-KALAB. " Valuated Unrestricted-Use Stock
DATA: KAINS LIKE MSKA-KAINS. " Stock in Quality Inspection
DATA: AVASTK LIKE MARD-LABST. " Available Stock
DATA: XMENG LIKE RESB-ENMNG. " Outstanding PO
DATA: LABST LIKE MARD-LABST. " Standard Stock
DATA: INSME LIKE MARD-INSME. " Stock in Quality Inspection
DATA: SLABS LIKE MKOL-SLABS . " Consignment Stock
DATA: SINSM LIKE MKOL-SINSM . " Consignment Stock
DATA: SELK(001). " Selected Fields
DATA: ICON(004).
DATA: END OF I_RESB .
*--> Tabelle der offenen Bestellungen
DATA: BEGIN OF XTAB OCCURS 10,
WERKS LIKE EKPO-WERKS,
LGORT LIKE EKPO-LGORT,
MATNR LIKE EKPO-MATNR,
MENGE LIKE EKPO-MENGE,
MENGK LIKE EKPO-MENGE,
END OF XTAB.
*--> Define internal table to store available stock for reservation check
DATA: BEGIN OF MTAB OCCURS 0.
DATA: MATNR LIKE MARA-MATNR.
DATA: WERKS LIKE MARC-WERKS.
DATA: LGORT LIKE MSKA-LGORT.
DATA: SOBKZ LIKE MSKA-SOBKZ.
DATA: VBELN LIKE MSKA-VBELN.
DATA: POSNR LIKE MSKA-POSNR.
DATA: KALAB LIKE MSKA-KALAB.
DATA: KAINS LIKE MSKA-KAINS.
DATA: END OF MTAB.
*--> Define internal table to store available stock for reservation check
DATA: BEGIN OF ORD_STK OCCURS 0.
DATA: MATNR LIKE MARA-MATNR.
DATA: WERKS LIKE MARC-WERKS.
DATA: SOBKZ LIKE MSKA-SOBKZ.
DATA: VBELN LIKE MSKA-VBELN.
DATA: POSNR LIKE MSKA-POSNR.
DATA: KALAB LIKE MSKA-KALAB.
DATA: KAINS LIKE MSKA-KAINS.
DATA: AVASTK LIKE MARD-LABST. " Available Stock
DATA: END OF ORD_STK.
* define data for cusor determination
DATA: IDX TYPE SY-TABIX.
DATA: MTAB_WA LIKE ORD_STK.
* define internal table to store Sales Order Stock
DATA: BEGIN OF ITAB OCCURS 0.
DATA: MATNR LIKE RESB-MATNR.
DATA: WERKS LIKE RESB-WERKS.
DATA: END OF ITAB .
*----------------------------------------------------------------------*
* Global program variables *
*----------------------------------------------------------------------*
*-> define internal table for ALV-Output
DATA: S_REPID LIKE SY-REPID,
ST_LIST_TOP_OF_PAGE TYPE SLIS_T_LISTHEADER."page header
DATA: ST_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV, "table col name
ST_LAYOUT TYPE SLIS_LAYOUT_ALV, "layoutsetting
ST_SP_GROUP TYPE SLIS_T_SP_GROUP_ALV, "Globale Typen
ST_EVENTS TYPE SLIS_T_EVENT, "event header
CODE LIKE DISVARIANT-HANDLE, "Mgt. ID for repeated calls
S_VARIANT LIKE DISVARIANT, "Layout (External Use)
S_STATUS_ST01 TYPE SLIS_FORMNAME VALUE 'STANDARD_ST01',
S_USER_COMMAND TYPE SLIS_FORMNAME VALUE 'USER_COMMAND-ALV'.
DATA: BEGIN OF EXTAB OCCURS 0,
FCODE LIKE RSMPE-FUNC.
DATA: END OF EXTAB.
DATA: TAB TYPE SLIS_T_EXTAB.
*-> Global variables for handling ALV functionality
DATA: ALV_DEFAULT_VARIANT TYPE DISVARIANT-VARIANT.
DATA: ALV_KEYINFO TYPE SLIS_KEYINFO_ALV.
DATA: ALV_VARIANT TYPE DISVARIANT.
DATA: ALV_LAYOUT TYPE SLIS_LAYOUT_ALV.
DATA: ALV_REPID LIKE SY-REPID.
DATA: ALV_PRINT TYPE SLIS_PRINT_ALV.
DATA: ALV_DETAIL_FUNC(030).
DATA: ALV_COLOURIZE_FIELDS LIKE MMIM_REP_PRINT-COLOR. "n555893
*----------------------------------------------------------------------*
* initialization .
*----------------------------------------------------------------------*
INITIALIZATION .
REFRESH: I_RESB .
CLEAR : I_RESB .
*----------------------------------------------------------------------*
* At Selection-screen *
*----------------------------------------------------------------------*
AT SELECTION-SCREEN.
*----------------------------------------------------------------------*
* Start-of-selection *
*----------------------------------------------------------------------*
START-OF-SELECTION.
PERFORM EXTRACT_RESERVATION_DATA .
*----------------------------------------------------------------------*
* End-of-selection *
*----------------------------------------------------------------------*
END-OF-SELECTION.
*&---------------------------------------------------------------------*
*& Form EXTRACT_RESERVATION_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM EXTRACT_RESERVATION_DATA .
REFRESH: I_RESB, ITAB, ORD_STK. CLEAR: I_RESB, ITAB, ORD_STK .
SELECT * INTO CORRESPONDING FIELDS OF TABLE I_RESB
FROM RESB INNER JOIN MARC ON RESB~MANDT = MARC~MANDT
AND RESB~MATNR = MARC~MATNR
AND RESB~WERKS = MARC~WERKS
INNER JOIN MARA ON MARA~MANDT = RESB~MANDT
AND MARA~MATNR = RESB~MATNR
INNER JOIN MAKT ON MAKT~MANDT = RESB~MANDT
AND MAKT~MATNR = RESB~MATNR
CLIENT SPECIFIED
WHERE RESB~MANDT EQ SY-MANDT AND RESB~BDART IN S_BDART
AND RESB~AUFNR IN S_AUFNR AND RESB~EBELN IN S_EBELN
AND RESB~KDAUF IN S_KDAUF AND RESB~KDPOS IN S_KDPOS
AND RESB~MATNR IN S_MATNR AND RESB~BDTER IN S_BDTER
AND RESB~SOBKZ IN S_SOBKZ AND RESB~XLOEK EQ SPACE
AND RESB~KZEAR EQ SPACE AND RESB~WERKS IN S_WERKS
AND RESB~BDMNG GT 0 AND MAKT~SPRAS EQ '1'
AND MARC~EKGRP IN S_EKGRP AND MARC~DISPO IN S_DISPO
AND MARA~MATKL IN S_MATKL
ORDER BY RESB~MATNR RESB~WERKS RESB~BDTER .
LOOP AT I_RESB .
MOVE I_RESB-MATNR TO ITAB-MATNR.
MOVE I_RESB-WERKS TO ITAB-WERKS.
COLLECT ITAB .
CLEAR ITAB .
ENDLOOP .
CLEAR: MSKA, T001L.
SELECT * INTO CORRESPONDING FIELDS OF TABLE MTAB
FROM MSKA INNER JOIN T001L
ON MSKA~MANDT = T001L~MANDT
AND MSKA~WERKS = T001L~WERKS
AND MSKA~LGORT = T001L~LGORT
FOR ALL ENTRIES IN ITAB
WHERE MSKA~MANDT EQ SY-MANDT
AND MSKA~MATNR EQ ITAB-MATNR
AND MSKA~WERKS EQ ITAB-WERKS
AND ( MSKA~KALAB GT 0
OR MSKA~KAINS GT 0 )
AND T001L~DISKZ EQ SPACE.
LOOP AT MTAB .
MOVE-CORRESPONDING MTAB TO ORD_STK.
ORD_STK-AVASTK = ORD_STK-KALAB + ORD_STK-KAINS .
COLLECT ORD_STK.
CLEAR ORD_STK .
ENDLOOP .
LOOP AT I_RESB .
I_RESB-OPNQTY = I_RESB-BDMNG - I_RESB-ENMNG .
CLEAR: MSKA.
SELECT SUM( KALAB ) INTO I_RESB-KALAB FROM MSKA CLIENT SPECIFIED
WHERE MANDT EQ SY-MANDT
AND MATNR EQ I_RESB-MATNR
AND WERKS EQ I_RESB-WERKS
AND SOBKZ EQ I_RESB-SOBKZ
AND VBELN EQ I_RESB-KDAUF
AND POSNR EQ I_RESB-KDPOS.
CLEAR XTAB. REFRESH XTAB.
CALL FUNCTION 'MB_ADD_PURCHASE_ORDER_QUANTITY'
EXPORTING
X_MATNR = I_RESB-MATNR
X_MEINS = I_RESB-MEINS
X_ELIKZ = SPACE
X_LOEKZ = SPACE
TABLES
XTAB = XTAB
XWERKS = S_WERKS.
READ TABLE XTAB WITH KEY MATNR = I_RESB-MATNR
WERKS = I_RESB-WERKS BINARY SEARCH.
IF SY-SUBRC = 0 .
I_RESB-XMENG = XTAB-MENGE + XTAB-MENGK.
ENDIF .
I_RESB-SHORTAGE = I_RESB-KALAB - I_RESB-OPNQTY .
CLEAR: MARD.
SELECT SUM( LABST ) SUM( INSME ) INTO (I_RESB-LABST, I_RESB-INSME ) FROM MARD CLIENT SPECIFIED
WHERE MANDT EQ SY-MANDT
AND MATNR EQ I_RESB-MATNR
AND WERKS EQ I_RESB-WERKS.
CLEAR: MKOL.
SELECT SUM( SLABS ) SUM( SINSM ) INTO (I_RESB-SLABS, I_RESB-SINSM ) FROM MKOL CLIENT SPECIFIED
WHERE MANDT EQ SY-MANDT
AND MATNR EQ I_RESB-MATNR
AND WERKS EQ I_RESB-WERKS.
READ TABLE ORD_STK WITH KEY MATNR = I_RESB-MATNR
WERKS = I_RESB-WERKS
SOBKZ = I_RESB-SOBKZ
VBELN = I_RESB-KDAUF
POSNR = I_RESB-KDPOS.
IF SY-SUBRC = 0 .
IDX = SY-TABIX.
MOVE ORD_STK-AVASTK TO I_RESB-AVASTK.
MOVE-CORRESPONDING ORD_STK TO MTAB_WA .
MTAB_WA-AVASTK = MTAB_WA-AVASTK - I_RESB-OPNQTY .
IF MTAB_WA-AVASTK LT 0 .
MTAB_WA-AVASTK = 0.
ENDIF .
MODIFY ORD_STK INDEX IDX FROM MTAB_WA TRANSPORTING AVASTK.
ENDIF .
MODIFY I_RESB .
ENDLOOP .
CLEAR: G_ALV_FIELDCAT .
PERFORM SET_ALV_FIELDS_SP USING 'MATNR' 'I_RESB' '' TEXT-C01 ' '.
PERFORM SET_ALV_FIELDS_SP USING 'MAKTX' 'I_RESB' '' TEXT-C02 ' '.
PERFORM SET_ALV_FIELDS_SP USING 'EKGRP' 'I_RESB' '' TEXT-C03 ' '.
PERFORM SET_ALV_FIELDS_SP USING 'BDART' 'I_RESB' '' TEXT-C04 ' '.
PERFORM SET_ALV_FIELDS_SP USING 'AUFNR' 'I_RESB' '' TEXT-C05 ' '.
PERFORM SET_ALV_FIELDS_SP USING 'EBELN' 'I_RESB' '' TEXT-C06 ' '.
PERFORM SET_ALV_FIELDS_SP USING 'EBELP' 'I_RESB' '' TEXT-C07 ' '.
* PERFORM SET_ALV_FIELDS_SP USING 'EBELE' 'I_RESB' '' TEXT-C08 ' '.
PERFORM SET_ALV_FIELDS_SP USING 'SOBKZ' 'I_RESB' '' TEXT-C09 ' '.
PERFORM SET_ALV_FIELDS_SP USING 'KDAUF' 'I_RESB' '' TEXT-C10 ' '.
PERFORM SET_ALV_FIELDS_SP USING 'KDPOS' 'I_RESB' '' TEXT-C11 ' '.
PERFORM SET_ALV_FIELDS_SP USING 'BAUGR' 'I_RESB' '' TEXT-C12 ' '.
PERFORM SET_ALV_FIELDS_SP USING 'BDTER' 'I_RESB' '' TEXT-C13 ' '.
PERFORM SET_ALV_FIELDS_SP USING 'WERKS' 'I_RESB' '' TEXT-C14 ' '.
PERFORM SET_ALV_FIELDS_SP USING 'BDMNG' 'I_RESB' '' TEXT-C15 ' '.
PERFORM SET_ALV_FIELDS_SP USING 'ENMNG' 'I_RESB' '' TEXT-C16 ' '.
PERFORM SET_ALV_FIELDS_SP USING 'OPNQTY' 'I_RESB' '' TEXT-C17 ' '.
PERFORM SET_ALV_FIELDS_SP USING 'SHORTAGE' 'I_RESB' '' TEXT-C18 'X'.
PERFORM SET_ALV_FIELDS_SP USING 'KALAB' 'I_RESB' '' TEXT-C24 'X'.
PERFORM SET_ALV_FIELDS_SP USING 'KAINS' 'I_RESB' '' TEXT-C25 'X'.
PERFORM SET_ALV_FIELDS_SP USING 'AVASTK' 'I_RESB' '' TEXT-C26 'X'.
PERFORM SET_ALV_FIELDS_SP USING 'XMENG' 'I_RESB' '' TEXT-C27 'X'.
PERFORM SET_ALV_FIELDS_SP USING 'MEINS' 'I_RESB' '' TEXT-C19 ' '.
PERFORM SET_ALV_FIELDS_SP USING 'LABST' 'I_RESB' '' TEXT-C20 'X'.
PERFORM SET_ALV_FIELDS_SP USING 'SLABS' 'I_RESB' '' TEXT-C21 'X'.
PERFORM SET_ALV_FIELDS_SP USING 'INSME' 'I_RESB' '' TEXT-C22 'X'.
PERFORM SET_ALV_FIELDS_SP USING 'SINSM' 'I_RESB' '' TEXT-C23 'X'.
PERFORM LAYOUT_BUILD USING G_ALV_LAYOUT .
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = SY-CPROG
IS_LAYOUT = G_ALV_LAYOUT
* i_callback_html_top_of_page = 'ALV_TOP_OF_PAGE'
I_CALLBACK_PF_STATUS_SET = S_STATUS_ST01
I_DEFAULT = 'X'
I_SAVE = 'X'
I_CALLBACK_USER_COMMAND = S_USER_COMMAND
IT_FIELDCAT = G_ALV_FIELDCAT[]
IT_EVENTS = G_ALV_EVENT
TABLES
T_OUTTAB = I_RESB[].
ENDFORM. " EXTRACT_RESERVATION_DATA
*&---------------------------------------------------------------------*
*& Form STANDARD_ST01
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->EXTAB text
*----------------------------------------------------------------------*
FORM STANDARD_ST01 USING EXTAB TYPE SLIS_T_EXTAB.
* contain all fcode from ALV *
DELETE EXTAB WHERE FCODE = '&RNT_PREV'.
DELETE EXTAB WHERE FCODE = '&LFO'.
DELETE EXTAB WHERE FCODE = '&NFO'.
DELETE EXTAB WHERE FCODE = '&RNT'.
SET PF-STATUS 'ST01'.
SET TITLEBAR 'ST01'.
ENDFORM. "standard_st01
*&---------------------------------------------------------------------*
*& Form USER_COMMAND-ALV
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->R_UCOMM text
* -->RS_SELFIELD text
*----------------------------------------------------------------------*
FORM USER_COMMAND-ALV USING R_UCOMM LIKE SY-UCOMM
RS_SELFIELD TYPE SLIS_SELFIELD.
DATA: FELD(10) TYPE C.
* table rs_selfield store the information of cursor and table index.
RS_SELFIELD-REFRESH = 'X'.
CASE R_UCOMM.
WHEN 'PICK'.
READ TABLE I_RESB INDEX RS_SELFIELD-TABINDEX.
IF SY-SUBRC = 0.
CASE RS_SELFIELD-FIELDNAME.
WHEN 'AUFNR'.
IF NOT I_RESB-AUFNR IS INITIAL .
CLEAR: R_UCOMM .
SET PARAMETER ID 'ANR' FIELD I_RESB-AUFNR .
CALL TRANSACTION 'CO03' AND SKIP FIRST SCREEN.
ENDIF .
WHEN 'MATNR' OR 'MAKTX'.
CLEAR: R_UCOMM .
SET PARAMETER ID 'MAT' FIELD I_RESB-MATNR .
SET PARAMETER ID 'WRK' FIELD I_RESB-WERKS .
CALL TRANSACTION 'MM03' AND SKIP FIRST SCREEN.
WHEN 'BAUGR'.
CLEAR: R_UCOMM .
SET PARAMETER ID 'MAT' FIELD I_RESB-BAUGR .
SET PARAMETER ID 'WRK' FIELD I_RESB-WERKS .
CALL TRANSACTION 'MM03' AND SKIP FIRST SCREEN.
WHEN 'EBELN' OR 'EBELP'.
IF NOT I_RESB-EBELN IS INITIAL .
CLEAR: R_UCOMM .
SET PARAMETER ID 'BES' FIELD I_RESB-EBELN.
CALL TRANSACTION 'ME23N' AND SKIP FIRST SCREEN.
ENDIF .
WHEN 'KDAUF' OR 'KDPOS'.
SET PARAMETER ID 'AUN' FIELD I_RESB-KDAUF .
CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.
WHEN 'BDTER' OR 'BDMNG' OR 'ENMNG' OR 'OPNQTY' OR 'SHORTAGE'.
SET PARAMETER ID 'MAT' FIELD I_RESB-MATNR .
SET PARAMETER ID 'WRK' FIELD I_RESB-WERKS .
CALL TRANSACTION 'MD04' AND SKIP FIRST SCREEN.
WHEN OTHERS .
SET PARAMETER ID 'MAT' FIELD I_RESB-MATNR .
CALL TRANSACTION 'MMBE' AND SKIP FIRST SCREEN.
ENDCASE .
ENDIF .
WHEN 'DISPL'.
ENDCASE .
ENDFORM. "USER_COMMAND-ALV