Quantcast
Channel: SCN : All Content - All Communities
Viewing all articles
Browse latest Browse all 9057

BAPI_PO_CHANGE

$
0
0

Hello

 

I am trying to update the NETPR field of PO with the help of mentioned BAPI  "BAPI_PO_CHANGE". The  changes in the Netprices are not talking place

 

The Code flow is as below, also i want to restrict the changes for the person who is not having authorisation to change the price

 

Please help

 

   REPORT  zpo_update MESSAGE-ID 00.
TYPE-POOLS: abap.

*&---------------------------------------------------------------------*
*& TYPES
*&---------------------------------------------------------------------*
TYPES: BEGIN OF ty_data,
        ebeln TYPE ekpo-ebeln,
        ebelp TYPE ekpo-ebelp,
        netpr TYPE ekpo-netpr,
      END OF ty_data.

TYPES: BEGIN OF ty_ekpo,
        ebeln TYPE ekpo-ebeln,
        ebelp TYPE ekpo-ebelp,
        END OF ty_ekpo.

TYPES: BEGIN OF ty_ekko,
       ebeln TYPE ekko-ebeln,
       END OF ty_ekko.


TYPES: BEGIN OF ty_error,
       ebeln TYPE ebeln,
       ebelp TYPE ebelp,
       error TYPE string,
      END OF ty_error.
*&---------------------------------------------------------------------*
*& DATA
*&---------------------------------------------------------------------*

DATA: gtb_data TYPE TABLE OF  ty_data     INITIAL SIZE 0 WITH HEADER LINE,
      gtb_ekpo TYPE TABLE OF  ty_ekpo     INITIAL SIZE 0 WITH HEADER LINE,
      gtb_ekko TYPE TABLE OF  ty_ekko     INITIAL SIZE 0 WITH HEADER LINE,
      gtb_error TYPE TABLE OF ty_error    INITIAL SIZE 0 WITH HEADER LINE.



DATA : gwa_po_header   TYPE bapimepoheader,
       gwa_po_headerx  TYPE bapimepoheaderx,
       gwa_po_item     TYPE bapimepoitem    OCCURS 0 WITH HEADER LINE,
       gwa_po_itemx    TYPE bapimepoitemx   OCCURS 0 WITH HEADER LINE,
       gwa_bapi_return TYPE bapiret2        OCCURS 0 WITH HEADER LINE.

*&---------------------------------------------------------------------*
*& CONSTANT
*&---------------------------------------------------------------------*

CONSTANTS : gco_mask(20) TYPE c VALUE ',*.txt  ,*.txt.'.
*----------------------------------------------------------------------*
* SELECTION SCREEN
*----------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK blck WITH FRAME TITLE text-001.

PARAMETERS:p_file TYPE ibipparms-path OBLIGATORY.

SELECTION-SCREEN END OF BLOCK blck.

*----------------------------------------------------------------------*
* AT SELECTION SCREEN ON VALUE REQUEST
*----------------------------------------------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
*** Get the file from which data needs to be uploaded
  PERFORM sub_read_data_file.

*----------------------------------------------------------------------*
* AT SELECTION SCREEN
*----------------------------------------------------------------------*
AT SELECTION-SCREEN.
* Subroutine to check for text file
  PERFORM sub_check_file_type.
* Subroutine to check for correct file
  PERFORM sub_validate_file.

*----------------------------------------------------------------------*
* START OF SELECTION
*----------------------------------------------------------------------*
START-OF-SELECTION.
* Subroutine to upload the data file
  PERFORM sub_upload_file.

* Subroutine to check uploaded data.
  PERFORM sub_check_upload_data.

* populate data and call bapi
  PERFORM sub_update_mm.

*&---------------------------------------------------------------------*
*&       ROUTINES                                                      *
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Form  SUB_READ_DATA_FILE
*&---------------------------------------------------------------------*

FORM sub_read_data_file .
  DATA : lva_file(128) TYPE c.

  lva_file = p_file.

  CALL FUNCTION 'WS_FILENAME_GET'
    EXPORTING
      def_filename     = ''
      def_path         = lva_file
      mask             = gco_mask
      mode             = 'O'
      title            = 'PO Price Update'                  "#EC *
    IMPORTING
      filename         = lva_file
    EXCEPTIONS
      inv_winsys       = 01
      no_batch         = 02
      selection_cancel = 03
      selection_error  = 04.
  IF sy-subrc NE 0.
*    MESSAGE e001(00) WITH 'File Cannot Be Opened'.
  ELSE.
    p_file = lva_file.
  ENDIF.

ENDFORM.                    " SUB_READ_DATA_FILE
*&---------------------------------------------------------------------*
*&      Form  SUB_CHECK_FILE_TYPE
*&---------------------------------------------------------------------*

FORM sub_check_file_type .

  DATA: lva_length TYPE i.
  DATA: lva_ext(4).


  lva_length = STRLEN( p_file ).
  lva_length = lva_length - 4.

  lva_ext = p_file+lva_length(4).
  TRANSLATE lva_ext TO UPPER CASE.

  IF lva_ext NE '.TXT'.
    MESSAGE e001 WITH 'Please choose a text file'.          "#EC *
  ENDIF.

ENDFORM.                    " SUB_CHECK_FILE_TYPE

*&---------------------------------------------------------------------*
*&      Form  SUB_VALIDATE_FILE
*&---------------------------------------------------------------------*

FORM sub_validate_file .

  DATA : lva_result  TYPE abap_bool.
  DATA : lva_file    TYPE string.

  lva_file = p_file.
  CALL METHOD cl_gui_frontend_services=>file_exist
    EXPORTING
      file                 = lva_file
    RECEIVING
      result               = lva_result
    EXCEPTIONS
      cntl_error           = 1
      error_no_gui         = 2
      wrong_parameter      = 3
      not_supported_by_gui = 4
      OTHERS               = 5.
  IF sy-subrc NE 0.
    MESSAGE e001 WITH 'Invalid file name'.                  "#EC *
  ELSE.
    CHECK lva_result EQ abap_false.
    MESSAGE e001 WITH 'Invalid file name'.                  "#EC *
  ENDIF.

ENDFORM.                    " SUB_VALIDATE_FILE
*&---------------------------------------------------------------------*
*&      Form  SUB_UPLOAD_FILE
*&---------------------------------------------------------------------*

FORM sub_upload_file .
  DATA : lwa_ekko TYPE ty_ekko.
  DATA : lva_file TYPE string.
  FIELD-SYMBOLS: <fs_mat> TYPE ty_data.

  lva_file = p_file.

  CALL FUNCTION 'GUI_UPLOAD'
    EXPORTING
      filename                = lva_file
      filetype                = 'ASC'
      has_field_separator     = 'X'
    TABLES
      data_tab                = gtb_data
    EXCEPTIONS
      file_open_error         = 1
      file_read_error         = 2
      no_batch                = 3
      gui_refuse_filetransfer = 4
      invalid_type            = 5
      no_authority            = 6
      unknown_error           = 7
      bad_data_format         = 8
      header_not_allowed      = 9
      separator_not_allowed   = 10
      header_too_long         = 11
      unknown_dp_error        = 12
      access_denied           = 13
      dp_out_of_memory        = 14
      disk_full               = 15
      dp_timeout              = 16
      OTHERS                  = 17.
  IF sy-subrc NE 0.

    MESSAGE i001 WITH 'Error in uploading file'.            "#EC *
    LEAVE LIST-PROCESSING.

  ELSE.

    MESSAGE s001 WITH 'File uploaded successfully'.         "#EC *


* Check For Data Conversion, i.e to match the data format of the
* incomming material from the file with SAP.

    LOOP AT gtb_data ASSIGNING <fs_mat>.

      CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
        EXPORTING
          input        = <fs_mat>-ebeln
        IMPORTING
          output       = <fs_mat>-ebeln
        EXCEPTIONS
          length_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.
    ENDLOOP.
  ENDIF.

ENDFORM.                    " SUB_UPLOAD_FILE


*&---------------------------------------------------------------------*
*&      Form  SUB_CHECK_UPLOAD_DATA
*&---------------------------------------------------------------------*

FORM sub_check_upload_data .

  SELECT ebeln
    FROM ekko
    INTO TABLE gtb_ekko
    FOR ALL ENTRIES IN gtb_data
    WHERE ebeln = gtb_data-ebeln.
  IF sy-subrc NE 0.
    MESSAGE i001 WITH 'No valid PO Number is uploaded'.     "#EC *
    LEAVE LIST-PROCESSING.
  ELSE.
    SORT gtb_ekko BY ebeln.
  ENDIF.


  SELECT ebeln
         ebelp
    FROM ekpo
    INTO TABLE gtb_ekpo
    FOR ALL ENTRIES IN gtb_data
    WHERE ebeln gtb_data-ebeln
    AND ebelp = gtb_data-ebelp.
  IF sy-subrc NE 0.
    MESSAGE i001 WITH 'No valid PO Number and postion number is uploaded'. "#EC *
    LEAVE LIST-PROCESSING.
  ELSE.
    SORT gtb_ekpo BY ebeln ebelp.
  ENDIF.

ENDFORM.                    "SUB_CHECK_UPLOAD_DATA
*&---------------------------------------------------------------------*
*&      Form  SUB_UPDATE_MM
*&---------------------------------------------------------------------*

FORM sub_update_mm .
*  BREAK-POINT.

  DATA : lwa_data  TYPE ty_data.
  DATA : lwa_ekko  TYPE ty_ekko.
  DATA : lwa_ekpo  TYPE ty_ekpo.
  DATA : lwa_error TYPE ty_error.
  FIELD-SYMBOLS  <lfs_data>  TYPE ty_data.

  LOOP AT gtb_data ASSIGNING <lfs_data> .

    gwa_po_header-po_number   = <lfs_data>-ebeln.
    gwa_po_item-po_item       = <lfs_data>-ebelp.
    gwa_po_item-net_price     = <lfs_data>-netpr.
    gwa_po_headerx-po_number  = 'X'.
    gwa_po_itemx-po_item      = 'X'.
    gwa_po_itemx-net_price    = 'X'.

    CALL FUNCTION 'BAPI_PO_CHANGE'
      EXPORTING
        purchaseorder                 = gwa_po_header-po_number
        poheader                      = gwa_po_header
        poheaderx                     = gwa_po_headerx
*       POADDRVENDOR                 =
*       TESTRUN                      =
*       MEMORY_UNCOMPLETE            =
*       MEMORY_COMPLETE              =
*       POEXPIMPHEADER               =
*       POEXPIMPHEADERX              =
*       VERSIONS                     =
*       NO_MESSAGING                 =
*       NO_MESSAGE_REQ               =
*       NO_AUTHORITY                 =
*       NO_PRICE_FROM_PO             =
*       PARK_UNCOMPLETE              =
*       PARK_COMPLETE                =
*     IMPORTING
*       EXPHEADER                    =
*       EXPPOEXPIMPHEADER            =
     TABLES
       return                        = gwa_bapi_return
       poitem                        = gwa_po_item
       poitemx                       = gwa_po_itemx
*       POADDRDELIVERY               =
*       POSCHEDULE                   =
*       POSCHEDULEX                  =
*       POACCOUNT                    =
*       POACCOUNTPROFITSEGMENT       =
*       POACCOUNTX                   =
*       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               =
*       SERIALNUMBER                 =
*       SERIALNUMBERX                =
*       INVPLANHEADER                =
*       INVPLANHEADERX               =
*       INVPLANITEM                  =
*       INVPLANITEMX                 =
*       POHISTORY_MA                 =
              .

    IF gwa_bapi_return-type = 'E' OR gwa_bapi_return-type = 'X' OR
         gwa_bapi_return-type = 'A'.

      WRITE:'Error Posting Data' , gwa_po_header-po_number , gwa_po_item-po_item , gwa_bapi_return-message. "#EC *
      ULINE.


    ELSE.

      CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' .
      WRITE:'Data Posted For :' ,gwa_po_header-po_number ,gwa_po_item-po_item gwa_bapi_return-message. "#EC *

    ENDIF.
    ULINE.


  ENDLOOP.



ENDFORM.                    " SUB_UPDATE_MM


Viewing all articles
Browse latest Browse all 9057

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>