103

*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

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
*---------------------------------------------------------------------*
*      --&gtP_VBELN    text
*      --&gtP_POSNR    text
*      --&gtP_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/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值