You are on page 1of 3

*& 

Report  ZGM_PO_TEST
*& developed by Gaurav Maheshwari
*  Date: 27th dec 2010
*  Changes: 1. select option for ebeln and logic to change business a
rea added 28th dec2010
*
*&---------------------------------------------------------------------
----------------------*
*& Desc. : Test to change cost center of purchase orders.
*&
*&---------------------------------------------------------------------
----------------------*

REPORT  ZGM_PO_TEST.

TABLES: EKKO, CSKS.
*PARAMETERS: GT_EBELN TYPE EKKO-EBELN OBLIGATORY.
*DATA: GT_EBELN TYPE EKKO-EBELN.

SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS : GT_EBELN FOR EKKO-EBELN.
PARAMETERS: GT_KOSTL TYPE CSKS-KOSTL.
PARAMETERS: GT_GSBER TYPE CSKS-GSBER.
SELECTION-SCREEN END OF BLOCK B1.

*PARAMETERS: GT_KOSTL TYPE CSKS-KOSTL.
*PARAMETERS: GT_GSBER TYPE CSKS-GSBER.

DATA: GT_ACCOUNT TYPE TABLE OF BAPIMEPOACCOUNT WITH HEADER LINE,
      GS_ACCOUNT TYPE BAPIMEPOACCOUNT,
       GT_RETURN     TYPE TABLE OF BAPIRET2,
       GS_RETURN     TYPE BAPIRET2.
*DATA : PONUM LIKE BAPIMEPOHEADER-PO_NUMBER.
DATA: GT_ACCOUNTX TYPE TABLE OF BAPIMEPOACCOUNTX WITH HEADER LINE,
      GS_ACCOUNTX TYPE BAPIMEPOACCOUNTX.
DATA: GT_ITEM_D TYPE STANDARD TABLE OF BAPIEKPO WITH HEADER LINE,
      GS_ITEM_D TYPE BAPIEKPO,
      GT_ACCOUNT_D TYPE STANDARD TABLE OF BAPIEKKN WITH HEADER LINE,
      GS_ACCOUNT_D TYPE BAPIEKKN,
      GT_POITEM TYPE STANDARD TABLE OF BAPIMEPOITEM WITH HEADER LINE,
      GS_ITEM TYPE BAPIMEPOITEM,
      GT_POITEMX TYPE STANDARD TABLE OF BAPIMEPOITEMX WITH HEADER LINE,
      GS_ITEMX TYPE BAPIMEPOITEMX.
DATA: GT_EKKO       TYPE TABLE OF EKKO,
      GS_EKKO       TYPE EKKO.
CONSTANTS : GC_TRUE TYPE C VALUE 'X'.
*PARAMETERS  : GT_KOSTL TYPE CSKS-KOSTL OBLIGATORY.

START-OF-SELECTION.
* Select data matching selection criteria
  SELECT * FROM EKKO
          INTO TABLE GT_EKKO
          WHERE EBELN IN GT_EBELN.

  IF GT_EKKO IS NOT INITIAL.

    LOOP AT GT_EKKO INTO GS_EKKO.
CALL FUNCTION 'BAPI_PO_GETDETAIL'
        EXPORTING
          PURCHASEORDER                    = GS_EKKO-EBELN
         ITEMS                            = 'X'
         ACCOUNT_ASSIGNMENT               = 'X'
*     SCHEDULES                        = ' '
*     HISTORY                          = ' '
*     ITEM_TEXTS                       = ' '
*     HEADER_TEXTS                     = ' '
*     SERVICES                         = ' '
*     CONFIRMATIONS                    = ' '
*     SERVICE_TEXTS                    = ' '
*     EXTENSIONS                       = ' '
*   IMPORTING
*     PO_HEADER                        =
*     PO_ADDRESS                       =
       TABLES
*     PO_HEADER_TEXTS                  =
         PO_ITEMS                         = GT_ITEM_D
         PO_ITEM_ACCOUNT_ASSIGNMENT       = GT_ACCOUNT_D
*     PO_ITEM_SCHEDULES                =
*     PO_ITEM_CONFIRMATIONS            =
*     PO_ITEM_TEXTS                    =
*     PO_ITEM_HISTORY                  =
*     PO_ITEM_HISTORY_TOTALS           =
*     PO_ITEM_LIMITS                   =
*     PO_ITEM_CONTRACT_LIMITS          =
*     PO_ITEM_SERVICES                 =
*     PO_ITEM_SRV_ACCASS_VALUES        =
*     RETURN                           =
*     PO_SERVICES_TEXTS                =
*     EXTENSIONOUT                     =
                .
LOOP AT GT_ITEM_D INTO GS_ITEM_D.
        CLEAR GS_ITEM.
        MOVE-CORRESPONDING GS_ITEM_D TO GS_ITEM.
        APPEND GS_ITEM TO GT_POITEM.
        GS_ITEMX-PO_ITEM = GS_ITEM-PO_ITEM.
        APPEND GS_ITEMX TO GT_POITEMX.
      ENDLOOP.

      LOOP AT GT_ACCOUNT_D INTO GS_ACCOUNT_D.
        CLEAR GS_ACCOUNT.
        MOVE-CORRESPONDING GS_ACCOUNT_D TO GS_ACCOUNT.
        GS_ACCOUNT-COSTCENTER = GT_KOSTL.
        GS_ACCOUNT-BUS_AREA = GT_GSBER.
        APPEND GS_ACCOUNT TO GT_ACCOUNT.
        GS_ACCOUNTX-PO_ITEM = GS_ACCOUNT-PO_ITEM.
        GS_ACCOUNTX-SERIAL_NO = GS_ACCOUNT-SERIAL_NO.
        GS_ACCOUNTX-COSTCENTER = 'X'.
        GS_ACCOUNTX-BUS_AREA = 'X'.
*        GS_ACCOUNTX-PO_ITEMX = 'X'.
*    APPEND GS_ACCOUNT TO GT_ACCOUNT.
        APPEND GS_ACCOUNTX TO GT_ACCOUNTX.
      ENDLOOP.
CALL FUNCTION 'BAPI_PO_CHANGE'
 EXPORTING
        PURCHASEORDER                = GS_EKKO-EBELN

       TABLES
         RETURN                       = GT_RETURN
       POITEM                       = GT_POITEM
       POITEMX                      = GT_POITEMX
*   POADDRDELIVERY               =
*   POSCHEDULE                   =
*   POSCHEDULEX                  =
         POACCOUNT                    = GT_ACCOUNT
*   POACCOUNTPROFITSEGMENT       =
         POACCOUNTX                   = GT_ACCOUNTX
*   POCONDHEADER                 =
*   POCONDHEADERX                =
*   POCOND                       =
*   POCONDX                      =
*   POLIMITS                     =
*   POCONTRACTLIMITS             =
*   POSERVICES                   =
*   POSRVACCESSVALUES            =
*   POSERVICESTEXT               =
*   EXTENSIONIN                  =
*   EXTENSIONOUT                 =
*   POEXPIMPITEM                 =
*   POEXPIMPITEMX                =
*   POTEXTHEADER                 =
*   POTEXTITEM                   =
*   ALLVERSIONS                  =
*   POPARTNER                    =
*   POCOMPONENTS                 =
*   POCOMPONENTSX                =
*   POSHIPPING                   =
*   POSHIPPINGX                  =
*   POSHIPPINGEXP                =
*   POHISTORY                    =
*   POHISTORY_TOTALS             =
*   POCONFIRMATION               =
                .
      READ TABLE GT_RETURN INTO GS_RETURN WITH KEY TYPE = 'E'.
      IF SY-SUBRC = 0.
        WRITE :/ GS_EKKO-EBELN, ': Error'.

      ELSE.
        CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
          EXPORTING
            WAIT = GC_TRUE.

        WRITE :/ GS_EKKO-EBELN, 'was changed successfully'.
      ENDIF.

    ENDLOOP.
  ENDIF.

You might also like