SAP: Get Open PR & PO Qty

44 篇文章 0 订阅

 

*&---------------------------------------------------------------------*
*& Progarm      :  ZMM_OSPO_MONTH                 Author : Jimmy Wong
*& Created      :  18 Jan 2013                    App    : MM
*& Title        :  Open PO Monthly
*& Description  :  Open PO Monthly
*&---------------------------------------------------------------------*
*&  Version       Author      Date        description
*&                Jimmy       18 Jan 2013 the first version
*&  the last update time  2013.01.18  18:00
*&---------------------------------------------------------------------*


REPORT  ZMM_OSPO_MONTH NO STANDARD PAGE HEADING .

***********************************************************************
*                              TYPE-POOLS
***********************************************************************
TYPE-POOLS : SLIS.
************************************************************************
* T A B L E S
************************************************************************
TABLES: EKKO,
        EKPO,
        EKET,
        EKES,
        LFA1,
        EBAN.

************************************************************************
* D A T A
************************************************************************
DATA: BEGIN OF PO_ITAB OCCURS 0,
        WERKS TYPE EKPO-WERKS,
        EBELN TYPE EKKO-EBELN,
        EBELP TYPE EKPO-EBELP,
        ETENR TYPE EKET-ETENR,
        MATNR TYPE EKPO-MATNR,
        MENGE TYPE EKPO-MENGE,
        WEMNG TYPE EKET-WEMNG,
        MEINS TYPE EKPO-MEINS,
        EINDT TYPE EKET-EINDT,
        WAERS LIKE EKKO-WAERS,
        NETPR LIKE EKPO-NETPR,
        PEINH LIKE EKPO-NETPR,
        WKURS LIKE EKKO-WKURS,
     END OF PO_ITAB.

DATA: BEGIN OF OA_ITAB OCCURS 0,
        EBTYP TYPE EKES-EBTYP,
        EBELN TYPE EKES-EBELN,
        EBELP TYPE EKES-EBELP,
        ETENS TYPE EKES-ETENS,
        EINDT TYPE EKES-EINDT,
        MENGE TYPE EKES-MENGE,
        DABMG TYPE EKES-DABMG,
        ERDAT TYPE EKES-ERDAT,
        XBLNR TYPE EKES-XBLNR,
     END OF OA_ITAB.

DATA: BEGIN OF VC_ITAB OCCURS 0,
        EBTYP TYPE EKES-EBTYP,
        EBELN TYPE EKES-EBELN,
        EBELP TYPE EKES-EBELP,
        ETENS TYPE EKES-ETENS,
        EINDT TYPE EKES-EINDT,
        MENGE TYPE EKES-MENGE,
        DABMG TYPE EKES-DABMG,
        ERDAT TYPE EKES-ERDAT,
        XBLNR TYPE EKES-XBLNR,
     END OF VC_ITAB.

DATA: BEGIN OF PO_RECORD OCCURS 0,
        WERKS TYPE EKPO-WERKS,
        EBELN TYPE EKKO-EBELN,
        EBELP TYPE EKPO-EBELP,
        ETENR TYPE EKET-ETENR,
        MATNR TYPE EKPO-MATNR,
        MENGE TYPE EKPO-MENGE,
        WEMNG TYPE EKET-WEMNG,
        MEINS TYPE EKPO-MEINS,
        EINDT TYPE EKET-EINDT,
        OAENS TYPE EKES-ETENS,
        OADAT TYPE EKES-EINDT,
        OAQTY TYPE EKES-MENGE,
        OAREF TYPE EKES-XBLNR,
        VCENS TYPE EKES-ETENS,
        VCDAT TYPE EKES-EINDT,
        VCQTY TYPE EKES-MENGE,
        VCREF TYPE EKES-XBLNR,
        WAERS LIKE EKKO-WAERS,
        NETPR LIKE EKPO-NETPR,
        PEINH LIKE EKPO-NETPR,
        WKURS LIKE EKKO-WKURS,
END OF PO_RECORD.
DATA:BEGIN OF IT_DEL OCCURS 50,
     LFGJA LIKE ZPOOPEN-LFGJA,
     LFMON LIKE ZPOOPEN-LFMON,
     WERKS LIKE ZPOOPEN-WERKS,
    END OF IT_DEL.
DATA: WA_RECORD LIKE PO_RECORD.
DATA:IT_ZPOOPEN LIKE ZPOOPEN OCCURS 0  WITH HEADER LINE .
DATA:IT_ZPROPEN LIKE ZPROPEN OCCURS WITH HEADER LINE.
DATA:IT_ZPROPEN1 LIKE ZPROPEN OCCURS WITH HEADER LINE.
DATA:BEGIN OF IT_MBEW OCCURS 0,
    MATNR LIKE MBEW-MATNR,
    BWKEY LIKE MBEW-BWKEY ,
    VPRSV LIKE MBEW-VPRSV,
    VERPR LIKE MBEW-VERPR ,
    STPRS LIKE MBEW-STPRS ,
    PEINH LIKE MBEW-PEINH ,
    END OF IT_MBEW.

DATA: FIELDCATALOG TYPE SLIS_T_FIELDCAT_ALV WITH HEADER LINE,
      GD_LAYOUT    TYPE SLIS_LAYOUT_ALV,
      GD_REPID     LIKE SY-REPID,
      G_SAVE TYPE VALUE 'X',
      G_VARIANT TYPE DISVARIANT,
      GX_VARIANT TYPE DISVARIANT,
      G_EXIT TYPE C,
     LV_LFGJA LIKE BAPI0002_4-FISCAL_YEAR,
     LV_LFMON LIKE BAPI0002_4-FISCAL_PERIOD .
DATA:LV_TOTAL_LINE TYPE I,
      LV_LINE TYPE DECIMALS 3.
DATA:LV_SUBRC LIKE SY-SUBRC.
************************************************************************
* S E L E C T O P T I O N S
************************************************************************
SELECTION-SCREEN BEGIN OF BLOCK SEL1 WITH FRAME TITLE TEXT-001.
PARAMETERS  : P_BUDAT LIKE MKPF-BUDAT  OBLIGATORY .
SELECT-OPTIONS : S_WERKS FOR EKPO-WERKS ,            "Plant
                S_MATNR FOR EKPO-MATNR.
SELECTION-SCREEN END OF BLOCK SEL1.

SELECTION-SCREEN BEGIN OF BLOCK SEL2 WITH FRAME TITLE TEXT-002.
SELECT-OPTIONS : S_EKGRP FOR EKKO-EKGRP ,             "Pur Group
                 S_LIFNR FOR EKKO-LIFNR ,             "Vendor
                 S_EBELN FOR EKKO-EBELN .             "PO Number
SELECTION-SCREEN END OF BLOCK SEL2.

SELECTION-SCREEN BEGIN OF BLOCK SEL5 WITH FRAME TITLE TEXT-005.
SELECT-OPTIONS : S_BANFN FOR EBAN-BANFN .             "Pur Group
SELECTION-SCREEN END OF BLOCK SEL5.

SELECTION-SCREEN BEGIN OF BLOCK SEL3 WITH FRAME TITLE TEXT-003.
PARAMETERS : P_SAVE AS CHECKBOX.
PARAMETERS : P_SAVEPR AS CHECKBOX.
SELECTION-SCREEN END OF BLOCK SEL3.

INITIALIZATION.
  CONCATENATE SY-DATUM+0(4SY-DATUM+4(2'01'  INTO P_BUDAT .
  P_BUDAT  P_BUDAT 1.

************************************************************************
* S T A R T   O F   S E L E C T I O N
************************************************************************
START-OF-SELECTION.
  PERFORM GET_PERIOD CHANGING LV_SUBRC.
  IF LV_SUBRC NE 0.
    MESSAGE 'Get period Error.' TYPE 'I'.
    EXIT.
  ENDIF.
  IF P_SAVE 'X'.
    PERFORM GET_DATA .                                              "Select data
    PERFORM GET_CF_DATA.
    PERFORM GROUP_DATA.
    PERFORM SAVE_DATA.
    FREE: PO_ITAB, OA_ITAB, VC_ITAB, PO_RECORD.
  ENDIF.
  IF P_SAVEPR 'X'.
    PERFORM GET_PR_DATA .
    PERFORM SAVE_PR_DATA.
  ENDIF.

*  perform prepare_alv .                                           "Prepare_ALV
*  perform call_alv .                                              "Print



*&---------------------------------------------------------------------*
*&      Form  GET_DATA
*&---------------------------------------------------------------------*
*       Get Outstanding PO
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM GET_DATA .
  REFRESH:  PO_ITAB, OA_ITAB, VC_ITAB, PO_RECORD.

  CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
    EXPORTING
      TEXT 'Get Data........'.

  SELECT C~WERKS A~EBELN  C~EBELP C~MATNR C~MENGE D~WEMNG
         C~MEINS D~EINDT D~ETENR A~WKURS A~WAERS C~NETPR C~PEINH
     INTO CORRESPONDING FIELDS OF TABLE PO_ITAB
     FROM EKKO AS A
       INNER JOIN EKPO AS ON A~EBELN C~EBELN
       INNER JOIN EKET AS ON C~EBELN D~EBELN AND C~EBELP D~EBELP
         WHERE C~WERKS IN S_WERKS
           AND A~EKGRP IN S_EKGRP
           AND A~LIFNR IN S_LIFNR
           AND A~EBELN IN S_EBELN
           AND C~MATNR IN S_MATNR
           AND C~MENGE > D~WEMNG
           AND C~LOEKZ ''.
ENDFORM.                    " GET_DATA
*&---------------------------------------------------------------------*
*&      Form  get_cf_data
*&---------------------------------------------------------------------*
*       Get Confirmation Record
*----------------------------------------------------------------------*
FORM GET_CF_DATA.

  SELECT EBTYP EBELN EBELP ETENS EINDT MENGE DABMG ERDAT XBLNR
    INTO CORRESPONDING FIELDS OF TABLE OA_ITAB
    FROM EKES
    FOR ALL ENTRIES IN PO_ITAB
    WHERE EBELN PO_ITAB-EBELN AND
          EBELP PO_ITAB-EBELP AND
          EBTYP 'OA'.

  LOOP AT OA_ITAB.
    IF  OA_ITAB-MENGE <= OA_ITAB-DABMG.
      DELETE OA_ITAB.
    ENDIF.
  ENDLOOP.

  SELECT EBTYP EBELN EBELP ETENS EINDT MENGE DABMG ERDAT XBLNR
    INTO CORRESPONDING FIELDS OF TABLE VC_ITAB
    FROM EKES
    FOR ALL ENTRIES IN PO_ITAB
    WHERE EBELN PO_ITAB-EBELN AND
          EBELP PO_ITAB-EBELP AND
          EBTYP 'FI' OR EBTYP 'VC' ).
ENDFORM.                    "get_cf_data

*&---------------------------------------------------------------------*
*&      Form  GROUP_DATA
*&---------------------------------------------------------------------*
*       Combine records
*----------------------------------------------------------------------*
FORM GROUP_DATA.

  DATA : VC_REF TYPE EKES-ETENS.

  SORT PO_ITAB BY WERKS EBELN EBELP.
  SORT OA_ITAB BY EBELN EBELP ETENS.
  SORT VC_ITAB BY EBELN EBELP ETENS.
  CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
    EXPORTING
      TEXT 'Processing Data........'.
  LOOP AT PO_ITAB.
    MOVE-CORRESPONDING PO_ITAB TO WA_RECORD.
    "    wa_record-wemng = wa_record-menge - wa_record-wemng.
    READ TABLE OA_ITAB WITH KEY EBELN WA_RECORD-EBELN EBELP WA_RECORD-EBELP .
    IF SY-SUBRC EQ 0.

      LOOP AT OA_ITAB WHERE EBELN WA_RECORD-EBELN AND EBELP WA_RECORD-EBELP.
        WA_RECORD-OAENS OA_ITAB-ETENS.
        WA_RECORD-OADAT OA_ITAB-EINDT.
        WA_RECORD-OAQTY OA_ITAB-MENGE OA_ITAB-DABMG.
        WA_RECORD-OAREF OA_ITAB-XBLNR.

        LOOP AT VC_ITAB WHERE EBELN WA_RECORD-EBELN AND EBELP WA_RECORD-EBELP.
          VC_REF VC_ITAB-XBLNR+0(4).
          IF VC_REF WA_RECORD-OAENS.
            WA_RECORD-VCENS VC_ITAB-ETENS.
            WA_RECORD-VCDAT VC_ITAB-EINDT.
            WA_RECORD-VCQTY VC_ITAB-MENGE.
            WA_RECORD-VCREF VC_ITAB-XBLNR.
          ENDIF.
        ENDLOOP.

        MOVE-CORRESPONDING WA_RECORD TO PO_RECORD.
        APPEND PO_RECORD.
        CLEAR: PO_RECORD,WA_RECORD-VCENS,WA_RECORD-VCDAT,WA_RECORD-VCQTY,WA_RECORD-VCREF.
      ENDLOOP.

    ELSE.
      READ TABLE VC_ITAB WITH KEY EBELN WA_RECORD-EBELN
                                  EBELP WA_RECORD-EBELP
                                  EBTYP 'FI'.
      IF SY-SUBRC 0.
        WA_RECORD-VCENS VC_ITAB-ETENS.
        WA_RECORD-VCDAT VC_ITAB-EINDT.
        WA_RECORD-VCQTY VC_ITAB-MENGE.
        WA_RECORD-VCREF VC_ITAB-XBLNR.
      ENDIF.
      MOVE-CORRESPONDING WA_RECORD TO PO_RECORD.
      APPEND PO_RECORD.
    ENDIF.
    CLEAR: PO_RECORD,WA_RECORD-OAENS,WA_RECORD-OADAT,WA_RECORD-OAQTY,WA_RECORD-OAREF,
        WA_RECORD-VCENS,WA_RECORD-VCDAT,WA_RECORD-VCQTY,WA_RECORD-VCREF.
  ENDLOOP.

  SORT PO_RECORD BY WERKS EBELN EBELP ETENR OAENS.

ENDFORM.                    "GROUP_DATA

*&---------------------------------------------------------------------*
*&      Form  PREPARE_ALV
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM PREPARE_ALV .
  CLEAR  FIELDCATALOG.
  FIELDCATALOG-FIELDNAME   'WERKS'.
  FIELDCATALOG-SELTEXT_M   'Plant'.
  FIELDCATALOG-COL_POS     1.
  APPEND FIELDCATALOG TO FIELDCATALOG.

  CLEAR  FIELDCATALOG.
  FIELDCATALOG-FIELDNAME   'EBELN'.
  FIELDCATALOG-SELTEXT_M   'PO#'.
  FIELDCATALOG-COL_POS     2.
  APPEND FIELDCATALOG TO FIELDCATALOG.


  CLEAR  FIELDCATALOG.
  FIELDCATALOG-FIELDNAME   'EBELP'.
  FIELDCATALOG-SELTEXT_M   'Line'.
  FIELDCATALOG-COL_POS     3.
  APPEND FIELDCATALOG TO FIELDCATALOG.

  CLEAR  FIELDCATALOG.
  FIELDCATALOG-FIELDNAME   'ETENR'.
  FIELDCATALOG-SELTEXT_M   'Sep No.'.
  FIELDCATALOG-COL_POS     4.
  APPEND FIELDCATALOG TO FIELDCATALOG.

  CLEAR  FIELDCATALOG.
  FIELDCATALOG-FIELDNAME   'MATNR'.
  FIELDCATALOG-SELTEXT_M   'Material'.
  FIELDCATALOG-REF_TABNAME 'MARA'.
  FIELDCATALOG-REF_FIELDNAME 'MATNR'.
  FIELDCATALOG-COL_POS     5.
  APPEND FIELDCATALOG TO FIELDCATALOG.



  CLEAR  FIELDCATALOG.
  FIELDCATALOG-FIELDNAME   'MENGE'.
  FIELDCATALOG-SELTEXT_M   'Order Qty'.
  FIELDCATALOG-COL_POS     6.
  APPEND FIELDCATALOG TO FIELDCATALOG.

  CLEAR  FIELDCATALOG.
  FIELDCATALOG-FIELDNAME   'WEMNG'.
  FIELDCATALOG-SELTEXT_M   'O/S Qty'.
  FIELDCATALOG-COL_POS     7.
  APPEND FIELDCATALOG TO FIELDCATALOG.

  CLEAR  FIELDCATALOG.
  FIELDCATALOG-FIELDNAME   'MEINS'.
  FIELDCATALOG-SELTEXT_M   'U/M'.
  FIELDCATALOG-REF_TABNAME 'EKPO'.
  FIELDCATALOG-REF_FIELDNAME 'MEINS'.
  FIELDCATALOG-COL_POS     8.
  APPEND FIELDCATALOG TO FIELDCATALOG.

  CLEAR  FIELDCATALOG.
  FIELDCATALOG-FIELDNAME   'EINDT'.
  FIELDCATALOG-SELTEXT_M   'Due Date'.
  FIELDCATALOG-COL_POS     9.
  APPEND FIELDCATALOG TO FIELDCATALOG.

  CLEAR  FIELDCATALOG.
  FIELDCATALOG-FIELDNAME   'OAENS'.
  FIELDCATALOG-SELTEXT_M   'OA Line'.
  FIELDCATALOG-COL_POS     10.
  APPEND FIELDCATALOG TO FIELDCATALOG.

  CLEAR  FIELDCATALOG.
  FIELDCATALOG-FIELDNAME   'OADAT'.
  FIELDCATALOG-SELTEXT_M   'OA Date'.
  FIELDCATALOG-COL_POS     11.
  APPEND FIELDCATALOG TO FIELDCATALOG.

  CLEAR  FIELDCATALOG.
  FIELDCATALOG-FIELDNAME   'OAQTY'.
  FIELDCATALOG-SELTEXT_M   'OA Qty'.
  FIELDCATALOG-COL_POS     12.
  APPEND FIELDCATALOG TO FIELDCATALOG.

  CLEAR  FIELDCATALOG.
  FIELDCATALOG-FIELDNAME   'OAREF'.
  FIELDCATALOG-SELTEXT_M   'Org OA Line'.
  FIELDCATALOG-COL_POS     13.
  APPEND FIELDCATALOG TO FIELDCATALOG.

  CLEAR  FIELDCATALOG.
  FIELDCATALOG-FIELDNAME   'VCENS'.
  FIELDCATALOG-SELTEXT_M   'VC Line'.
  FIELDCATALOG-COL_POS     14.
  APPEND FIELDCATALOG TO FIELDCATALOG.

  CLEAR  FIELDCATALOG.
  FIELDCATALOG-FIELDNAME   'VCDAT'.
  FIELDCATALOG-SELTEXT_M   'VC Date'.
  FIELDCATALOG-COL_POS     15.
  APPEND FIELDCATALOG TO FIELDCATALOG.

  CLEAR  FIELDCATALOG.
  FIELDCATALOG-FIELDNAME   'VCQTY'.
  FIELDCATALOG-SELTEXT_M   'VC Qty'.
  FIELDCATALOG-COL_POS     16.
  APPEND FIELDCATALOG TO FIELDCATALOG.


  CLEAR  FIELDCATALOG.
  FIELDCATALOG-FIELDNAME   'VCREF'.
  FIELDCATALOG-SELTEXT_M   'VC Reference'.
  FIELDCATALOG-COL_POS     17.
  APPEND FIELDCATALOG TO FIELDCATALOG.
ENDFORM.                    " PREPARE_ALV
*&---------------------------------------------------------------------*
*&      Form  CALL_ALV
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM CALL_ALV .
  GD_REPID SY-REPID.
  GD_LAYOUT-COLWIDTH_OPTIMIZE 'X'.
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      I_CALLBACK_PROGRAM      GD_REPID
*     I_CALLBACK_TOP_OF_PAGE  = 'TOP-OF-PAGE' "see FORM
*     I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
      IT_FIELDCAT             FIELDCATALOG[]
      I_SAVE                  'X'
      IS_VARIANT              G_VARIANT
      IS_LAYOUT               GD_LAYOUT
    TABLES
      T_OUTTAB                PO_RECORD
    EXCEPTIONS
      PROGRAM_ERROR           1
      OTHERS                  2.

  IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.
ENDFORM.                    " CALL_ALV
*&---------------------------------------------------------------------*
*&      Form  SAVE_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM SAVE_DATA .
  CHECK PO_RECORD[] IS NOT INITIAL.

  PERFORM DELETE_DATA.
  LOOP AT PO_RECORD.
    MOVE-CORRESPONDING PO_RECORD TO IT_ZPOOPEN.
    IT_ZPOOPEN-OMENG  IT_ZPOOPEN-MENGE IT_ZPOOPEN-WEMNG.
    CHECK IT_ZPOOPEN-OMENG > 0.
    IF IT_ZPOOPEN-OAQTY 0.
      IT_ZPOOPEN-OAQTY IT_ZPOOPEN-OMENG .
    ENDIF.
    IF IT_ZPOOPEN-OADAT '00000000'.
      IT_ZPOOPEN-OADAT IT_ZPOOPEN-EINDT.
    ENDIF.
    IT_ZPOOPEN-LFGJA =  LV_LFGJA.
    IT_ZPOOPEN-LFMON LV_LFMON.

    IT_ZPOOPEN-PEINH PO_RECORD-PEINH.
    IT_ZPOOPEN-NETPR PO_RECORD-NETPR.
    IT_ZPOOPEN-WKURS PO_RECORD-WKURS.
    IT_ZPOOPEN-WAERS PO_RECORD-WAERS.
    PERFORM CONVERT_AMOUNT USING  PO_RECORD-WAERS CHANGING IT_ZPOOPEN-NETPR.
    IF PO_RECORD-WAERS 'JPY'.
      IF IT_ZPOOPEN-PEINH NE AND IT_ZPOOPEN-WKURS NE 0.
        IT_ZPOOPEN-NETWR IT_ZPOOPEN-OAQTY * IT_ZPOOPEN-NETPR * IT_ZPOOPEN-WKURS /  IT_ZPOOPEN-PEINH / 100.
      ENDIF.
    ELSE.
      IF IT_ZPOOPEN-PEINH NE AND IT_ZPOOPEN-WKURS NE 0.
        IT_ZPOOPEN-NETWR IT_ZPOOPEN-OAQTY * IT_ZPOOPEN-NETPR * IT_ZPOOPEN-WKURS /  IT_ZPOOPEN-PEINH.
      ENDIF.
    ENDIF.
    APPEND IT_ZPOOPEN.
    CLEAR: IT_ZPOOPEN.
  ENDLOOP.
  IF NOT IT_ZPOOPEN[] IS INITIAL.
    SORT  IT_ZPOOPEN BY EBELN EBELP ETENR OAENS LFGJA LFMON.
    MODIFY ZPOOPEN FROM TABLE IT_ZPOOPEN.
*      write: 'Excute Successed.'.
    REFRESH IT_ZPOOPEN.
    FREE:IT_ZPOOPEN.
  ENDIF.

ENDFORM.                    " SAVE_DATA
*&---------------------------------------------------------------------*
*&      Form  CONVERT_AMOUNT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM CONVERT_AMOUNT  USING  PI_WAERK
                     CHANGING PE_NETWR.
  DATA : LV_NETWR TYPE BAPICURR-BAPICURR.

  CHECK PI_WAERK <> 'HKD'.
  CHECK PI_WAERK <> 'USD'.
  CHECK PI_WAERK <> 'EUR'.
  CHECK PI_WAERK <> 'CNY'.

  CALL FUNCTION 'BAPI_CURRENCY_CONV_TO_EXTERNAL'
    EXPORTING
      CURRENCY        PI_WAERK
      AMOUNT_INTERNAL PE_NETWR
    IMPORTING
      AMOUNT_EXTERNAL LV_NETWR.

  PE_NETWR =  LV_NETWR.
ENDFORM.                    " CONVERT_AMOUNT
*&---------------------------------------------------------------------*
*&      Form  GET_PERIOD
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      <--P_LV_SUBRC  text
*----------------------------------------------------------------------*
FORM GET_PERIOD CHANGING P_SUBRC.
  DATA:LV_DATE  LIKE BAPI0002_4-POSTING_DATE,
       IT_RETURN LIKE BAPIRETURN1.
  LV_DATE  P_BUDAT .
  CALL FUNCTION 'BAPI_COMPANYCODE_GET_PERIOD'
    EXPORTING
      COMPANYCODEID '8000'
      POSTING_DATE  LV_DATE
    IMPORTING
      FISCAL_YEAR   LV_LFGJA
      FISCAL_PERIOD LV_LFMON
      RETURN        IT_RETURN.
  P_SUBRC SY-SUBRC .
ENDFORM.                    " GET_PERIOD
*&---------------------------------------------------------------------*
*&      Form  DELETE_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM DELETE_DATA .
  CLEAR:IT_DEL,IT_DEL[].
  SELECT DISTINCT  LFGJA LFMON WERKS
      INTO  CORRESPONDING FIELDS OF TABLE IT_DEL
      FROM ZPOOPEN
      WHERE LFGJA LV_LFGJA
      AND LFMON LV_LFMON
      AND WERKS IN S_WERKS.
  IF IT_DEL[] IS NOT INITIAL.
    LOOP AT IT_DEL.
      DELETE FROM ZPOOPEN WHERE   LFGJA IT_DEL-LFGJA AND LFMON IT_DEL-LFMON AND WERKS IT_DEL-WERKS .
      COMMIT WORK AND WAIT.
    ENDLOOP.
    FREE:IT_DEL.
  ENDIF.
ENDFORM.                    " DELETE_DATA
*&---------------------------------------------------------------------*
*&      Form  GET_PR_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM GET_PR_DATA .
  SELECT BANFN BNFPO WERKS MATNR MENGE MEINS BSMNG LFDAT
    INTO CORRESPONDING FIELDS OF TABLE IT_ZPROPEN1
    FROM EBAN
    WHERE BANFN IN S_BANFN
      AND MATNR IN S_MATNR
      AND WERKS IN S_WERKS
      AND LOEKZ SPACE.
  IF IT_ZPROPEN1[] IS NOT INITIAL.
    SELECT DISTINCT MATNR  BWKEY VPRSV VERPR STPRS PEINH
        INTO CORRESPONDING FIELDS OF TABLE IT_MBEW
        FROM MBEW
        FOR ALL ENTRIES IN IT_ZPROPEN1
        WHERE MATNR IT_ZPROPEN1-MATNR
          AND BWKEY IT_ZPROPEN1-WERKS.
    SORT IT_MBEW BY MATNR BWKEY.

    LOOP AT IT_ZPROPEN1.
      MOVE-CORRESPONDING IT_ZPROPEN1 TO IT_ZPROPEN.
      IF IT_ZPROPEN-MENGE > IT_ZPROPEN-BSMNG.
        IT_ZPROPEN-OMENG IT_ZPROPEN-MENGE IT_ZPROPEN-BSMNG.
        IT_ZPROPEN-LFGJA =  LV_LFGJA.
        IT_ZPROPEN-LFMON LV_LFMON.

        READ TABLE IT_MBEW WITH  KEY MATNR IT_ZPROPEN-MATNR  BWKEY IT_ZPROPEN-WERKS BINARY SEARCH.
        IF SY-SUBRC EQ 0.
          IT_ZPROPEN-PEINH =  IT_MBEW-PEINH.
          IF IT_MBEW-VPRSV 'V'.
            IT_ZPROPEN-VERPR =  IT_MBEW-VERPR.
          ELSE.
            IT_ZPROPEN-VERPR =  IT_MBEW-STPRS.
          ENDIF.
          IF IT_ZPROPEN-PEINH NE 0.
            IT_ZPROPEN-NETWR IT_ZPROPEN-VERPR * IT_ZPROPEN-OMENG / IT_ZPROPEN-PEINH.
          ENDIF.
        ENDIF.

        APPEND IT_ZPROPEN.
        CLEAR:IT_ZPROPEN.
      ENDIF.
    ENDLOOP.
    FREE:IT_ZPROPEN1.
  ENDIF.

ENDFORM.                    " GET_PR_DATA
*&---------------------------------------------------------------------*
*&      Form  SAVE_PR_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM SAVE_PR_DATA .
  PERFORM DELETE_PR_DATA.
  IF NOT IT_ZPROPEN[] IS INITIAL.
    SORT  IT_ZPROPEN BY BANFN BNFPO LFGJA LFMON.
    MODIFY ZPROPEN FROM TABLE IT_ZPROPEN.
*      write: 'Excute Successed.'.
    REFRESH IT_ZPROPEN.
    FREE:IT_ZPROPEN.
  ENDIF.
ENDFORM.                    " SAVE_PR_DATA
*&---------------------------------------------------------------------*
*&      Form  DELETE_PR_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM DELETE_PR_DATA .
  CLEAR:IT_DEL,IT_DEL[].
  SELECT DISTINCT  LFGJA LFMON WERKS
      INTO  CORRESPONDING FIELDS OF TABLE IT_DEL
      FROM ZPROPEN
      WHERE LFGJA LV_LFGJA
      AND LFMON LV_LFMON
      AND WERKS IN S_WERKS.
  IF IT_DEL[] IS NOT INITIAL.
    LOOP AT IT_DEL.
      DELETE FROM ZPROPEN WHERE   LFGJA IT_DEL-LFGJA AND LFMON IT_DEL-LFMON AND WERKS IT_DEL-WERKS .
      COMMIT WORK AND WAIT.
    ENDLOOP.
  ENDIF.
ENDFORM.                    " DELETE_PR_DATA

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值