*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT 102.
TABLES: VBAP,MSKA,MAKT,VBAK.
DATA: BEGIN OF ITAB OCCURS 0,
POSNR LIKE VBAP-POSNR,
MATNR LIKE VBAP-MATNR,
KWMENG LIKE VBAP-KWMENG,
VBELN LIKE VBAP-VBELN,
WERKS LIKE VBAP-WERKS,
LGORT LIKE MARD-LGORT,
MAKTX LIKE MAKT-MAKTX,
OPENQ LIKE VBAP-KWMENG,
SHIPQ LIKE VBAP-KWMENG,
ZMENG LIKE VBAP-ZMENG,
MTPOS LIKE MVKE-MTPOS,
BMENG LIKE VBEP-BMENG,
EDATU LIKE VBEP-EDATU,
WEBAZ LIKE MARC-WEBAZ,
PLIFZ LIKE MARC-PLIFZ,
LABST LIKE MARD-LABST,
END OF ITAB.
DATA: L_SHIPPED TYPE P DECIMALS 2,
L_OPEN TYPE P DECIMALS 2.
DATA: BEGIN OF ITAB_PO OCCURS 0,
EBELN LIKE EKPO-EBELN,
EBELP LIKE EKPO-EBELP,
MENGE LIKE EKET-MENGE,
WEMNG LIKE EKET-WEMNG,
OPEN_QTY LIKE EKET-MENGE,
MATNR LIKE EKPO-MATNR,
END OF ITAB_PO.
DATA : ITAB_EKET LIKE ITAB_PO OCCURS 0 WITH HEADER LINE .
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME. TITLE TEXT-001.
PARAMETERS: P_WERKS LIKE MSKA-WERKS.
SELECT-OPTIONS:S_MATNR FOR MSKA-MATNR MEMORY ID UD.
SELECTION-SCREEN END OF BLOCK B1.
SELECTION-SCREEN BEGIN OF BLOCK CONSN WITH FRAME. TITLE TEXT-013.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(5) TEXT-022.
PARAMETERS: P_SO RADIOBUTTON GROUP R1.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(5) TEXT-018.
PARAMETERS: P_PO RADIOBUTTON GROUP R1.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK CONSN.
START-OF-SELECTION.
IF P_SO <> ''.
PERFORM. GET_DATA.
ELSEIF P_PO <> ''.
PERFORM. GET_DATA_PO.
ENDIF.
END-OF-SELECTION.
PERFORM. OUTPUT.
*&--------------------------------------------------------------------*
*& Form GET_DATA
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
FORM. GET_DATA.
SELECT VBAP~VBELN VBAP~MATNR VBAP~KWMENG VBAP~WERKS VBUP~LFSTA VBAP~ZMENG
VBAP~POSNR FROM VBAP INNER JOIN VBUP
ON VBAP~VBELN = VBUP~VBELN
AND VBAP~POSNR = VBUP~POSNR
INTO CORRESPONDING FIELDS OF TABLE ITAB
WHERE MATNR IN S_MATNR
AND WERKS = P_WERKS
AND LFSTA <> 'C'.
LOOP AT ITAB.
PERFORM. ORDER_QTY USING ITAB-VBELN ITAB-POSNR
CHANGING L_SHIPPED.
IF ITAB-KWMENG <> 0.
L_OPEN = ITAB-KWMENG.
ELSE.
L_OPEN = ITAB-ZMENG.
ITAB-KWMENG = ITAB-ZMENG.
ENDIF.
SUBTRACT L_SHIPPED FROM L_OPEN.
IF L_OPEN <= 0.
DELETE ITAB. CONTINUE.
ENDIF.
ITAB-SHIPQ = L_SHIPPED.
ITAB-OPENQ = L_OPEN.
SELECT SINGLE MAKTX FROM MAKT INTO ITAB-MAKTX
WHERE MATNR = ITAB-MATNR.
SELECT SINGLE MTPOS FROM MVKE INTO ITAB-MTPOS
WHERE MATNR = ITAB-MATNR.
SELECT SINGLE BMENG FROM VBEP INTO ITAB-BMENG
WHERE VBELN = ITAB-VBELN
AND POSNR = ITAB-POSNR.
IF ITAB-BMENG = ITAB-KWMENG.
SELECT MAX( EDATU ) FROM VBEP INTO ITAB-EDATU
WHERE VBELN = ITAB-VBELN
AND POSNR = ITAB-POSNR.
ELSEIF ITAB-KWMENG > ITAB-BMENG .
SELECT SINGLE WEBAZ PLIFZ FROM MARC INTO (ITAB-WEBAZ,ITAB-PLIFZ)
WHERE MATNR = ITAB-MATNR.
ITAB-EDATU = ITAB-EDATU + ITAB-WEBAZ + ITAB-PLIFZ.
ENDIF.
SELECT SINGLE LGORT LABST FROM MARD INTO (ITAB-LGORT,ITAB-LABST)
WHERE MATNR = ITAB-MATNR.
MODIFY ITAB .
CLEAR ITAB .
ENDLOOP.
ENDFORM. "GET_DATA
*&--------------------------------------------------------------------*
*& Form GET_DATA_PO
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
FORM. GET_DATA_PO.
SELECT MATNR EBELN EBELP FROM EKPO INTO CORRESPONDING FIELDS OF TABLE ITAB_PO
WHERE MATNR IN S_MATNR
AND WERKS = P_WERKS.
SELECT EBELN EBELP MENGE WEMNG INTO TABLE ITAB_EKET FROM EKET
FOR ALL ENTRIES IN ITAB_PO
WHERE EBELN = ITAB_PO-EBELN
AND EBELP = ITAB_PO-EBELP.
LOOP AT ITAB_EKET.
ITAB_EKET-OPEN_QTY = ITAB_EKET-MENGE - ITAB_EKET-WEMNG.
MODIFY ITAB_EKET.
CLEAR ITAB_EKET.
ENDLOOP .
ENDFORM. "GET_DATA_PO
*&--------------------------------------------------------------------*
*& Form get_order_quantity
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
* -->P_VBELN text
* -->P_POSNR text
* -->P_TOTAL_SHItext
*---------------------------------------------------------------------*
FORM. ORDER_QTY USING P_VBELN P_POSNR
CHANGING P_TOTAL_SHIPINV.
DATA: IT_VBFA LIKE VBFAVB OCCURS 0 WITH HEADER LINE.
DATA: L_SHIPP_TOT LIKE VBAP-KWMENG,
L_TOTAL_INVOICED LIKE VBAP-KWMENG.
CLEAR: P_TOTAL_SHIPINV.
SELECT RFMNG VBTYP_N FROM VBFA
INTO CORRESPONDING FIELDS OF TABLE IT_VBFA
WHERE VBELV = P_VBELN
AND POSNV = P_POSNR.
LOOP AT IT_VBFA WHERE RFMNG <> 0 AND
( VBTYP_N = 'R' OR VBTYP_N = 'H' OR
VBTYP_N = 'M' OR VBTYP_N = 'N' ).
IF IT_VBFA-VBTYP_N = 'R' .
ADD IT_VBFA-RFMNG TO L_SHIPP_TOT.
ELSEIF IT_VBFA-VBTYP_N = 'H' .
SUBTRACT IT_VBFA-RFMNG FROM L_SHIPP_TOT.
ELSEIF IT_VBFA-VBTYP_N = 'M'.
ADD IT_VBFA-RFMNG TO L_TOTAL_INVOICED.
ELSEIF IT_VBFA-VBTYP_N = 'N'.
SUBTRACT IT_VBFA-RFMNG FROM L_TOTAL_INVOICED.
ENDIF.
ENDLOOP.
IF L_SHIPP_TOT <> 0.
P_TOTAL_SHIPINV = L_SHIPP_TOT.
ELSE.
P_TOTAL_SHIPINV = L_TOTAL_INVOICED.
ENDIF.
ENDFORM. "ORDER_QTY
*&--------------------------------------------------------------------*
*& Form OUTPUT
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
FORM. OUTPUT.
TYPE-POOLS: SLIS.
DATA:GS_LAYOUT TYPE SLIS_LAYOUT_ALV,
FIELDCAT TYPE SLIS_T_FIELDCAT_ALV,
FIELDCAT_LN LIKE LINE OF FIELDCAT,
COL_POS TYPE I VALUE 0.
GS_LAYOUT-COLWIDTH_OPTIMIZE = 'X'.
IF P_SO <> ''.
ADD 1 TO COL_POS.
FIELDCAT_LN-TABNAME = 'ITAB'.
FIELDCAT_LN-FIELDNAME = 'MATNR'.
FIELDCAT_LN-SELTEXT_L = 'Material'.
APPEND FIELDCAT_LN TO FIELDCAT.
CLEAR FIELDCAT_LN.
ADD 1 TO COL_POS.
FIELDCAT_LN-TABNAME = 'ITAB'.
FIELDCAT_LN-FIELDNAME = 'MAKTX'.
FIELDCAT_LN-SELTEXT_L = 'Material Des'.
APPEND FIELDCAT_LN TO FIELDCAT.
CLEAR FIELDCAT_LN.
ADD 1 TO COL_POS.
FIELDCAT_LN-TABNAME = 'ITAB'.
FIELDCAT_LN-FIELDNAME = 'MTPOS'.
FIELDCAT_LN-SELTEXT_L = 'MTPOS'.
APPEND FIELDCAT_LN TO FIELDCAT.
CLEAR FIELDCAT_LN.
ADD 1 TO COL_POS.
FIELDCAT_LN-TABNAME = 'ITAB'.
FIELDCAT_LN-FIELDNAME = 'POSNR'.
FIELDCAT_LN-SELTEXT_L = 'Item of SO'.
APPEND FIELDCAT_LN TO FIELDCAT.
CLEAR FIELDCAT_LN.
ADD 1 TO COL_POS.
FIELDCAT_LN-TABNAME = 'ITAB'.
FIELDCAT_LN-FIELDNAME = 'VBELN'.
FIELDCAT_LN-SELTEXT_L = 'SO'.
APPEND FIELDCAT_LN TO FIELDCAT.
CLEAR FIELDCAT_LN.
ADD 1 TO COL_POS.
FIELDCAT_LN-TABNAME = 'ITAB'.
FIELDCAT_LN-FIELDNAME = 'KWMENG'.
FIELDCAT_LN-SELTEXT_L = 'SO Qty'.
APPEND FIELDCAT_LN TO FIELDCAT.
CLEAR FIELDCAT_LN.
ADD 1 TO COL_POS.
FIELDCAT_LN-TABNAME = 'ITAB'.
FIELDCAT_LN-FIELDNAME = 'OPENQ'.
FIELDCAT_LN-SELTEXT_L = 'Have not receipt SO Qty'.
APPEND FIELDCAT_LN TO FIELDCAT.
CLEAR FIELDCAT_LN.
ADD 1 TO COL_POS.
FIELDCAT_LN-TABNAME = 'ITAB'.
FIELDCAT_LN-FIELDNAME = 'EDATU'.
FIELDCAT_LN-SELTEXT_L = 'SO confirm date'.
APPEND FIELDCAT_LN TO FIELDCAT.
CLEAR FIELDCAT_LN.
ADD 1 TO COL_POS.
FIELDCAT_LN-TABNAME = 'ITAB'.
FIELDCAT_LN-FIELDNAME = 'LGORT'.
FIELDCAT_LN-SELTEXT_L = 'Locator'.
APPEND FIELDCAT_LN TO FIELDCAT.
CLEAR FIELDCAT_LN.
ADD 1 TO COL_POS.
FIELDCAT_LN-TABNAME = 'ITAB'.
FIELDCAT_LN-FIELDNAME = 'LABST'.
FIELDCAT_LN-SELTEXT_L = 'Material Stock'.
APPEND FIELDCAT_LN TO FIELDCAT.
CLEAR FIELDCAT_LN.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_BACKGROUND_ID = 'ALV_BACKGROUND'
IS_LAYOUT = GS_LAYOUT
IT_FIELDCAT = FIELDCAT
TABLES
T_OUTTAB = ITAB.
ELSEIF P_PO <> ''.
ADD 1 TO COL_POS.
FIELDCAT_LN-TABNAME = 'ITAB_EKET'.
FIELDCAT_LN-FIELDNAME = 'EBELP'.
FIELDCAT_LN-SELTEXT_L = 'Item of PO'.
APPEND FIELDCAT_LN TO FIELDCAT.
CLEAR FIELDCAT_LN.
ADD 1 TO COL_POS.
FIELDCAT_LN-TABNAME = 'ITAB_EKET'.
FIELDCAT_LN-FIELDNAME = 'EBELN'.
FIELDCAT_LN-SELTEXT_L = 'PO'.
APPEND FIELDCAT_LN TO FIELDCAT.
CLEAR FIELDCAT_LN.
ADD 1 TO COL_POS.
FIELDCAT_LN-TABNAME = 'ITAB_EKET'.
FIELDCAT_LN-FIELDNAME = 'OPEN_QTY'.
FIELDCAT_LN-SELTEXT_L = 'Have not receipt PO Qty'.
APPEND FIELDCAT_LN TO FIELDCAT.
CLEAR FIELDCAT_LN.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_BACKGROUND_ID = 'ALV_BACKGROUND'
IS_LAYOUT = GS_LAYOUT
IT_FIELDCAT = FIELDCAT
TABLES
T_OUTTAB = ITAB_EKET.
ENDIF.
ENDFORM. "OUTPUT
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9309631/viewspace-624619/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/9309631/viewspace-624619/