AUTO PO CHANGE(ME22N) USING BAPI

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

*& Report ZMM_PO_CHANGES
*&---------------------------------------------------------------------*
************************************************************************
*      Program        : ZMM_PO_CHANGES
*      Author         : 
*      Created on     : 03.01.2023
*      Requested By   : Functional Consultant
*      Transport-No   : 1234567890
*----------------------------------------------------------------------*
*      Description    : Cutover Object
*      Assumption     :
*      Called from    :
*      Called to      : N/A
*      Includes       : N/A
*      Logical DB     : N/A
*----------------------------------------------------------------------*
REPORT zmm_po_changes.

INCLUDE zmm_po_changes_top.
INCLUDE zmm_po_changes_sel.
INCLUDE zmm_po_changes_f01.

START-OF-SELECTION.

***Get File Data
  PERFORM get_file.
*** Procees the Data
  PERFORM process_data.
***Call the BAPI PO Change
  PERFORM bapi_po_change.
*** Display The Error/Success Message
  PERFORM display_data.

*&---------------------------------------------------------------------*
*& Include          ZMM_PO_CHANGES_TOP
*&---------------------------------------------------------------------*


TYPESBEGIN OF ty_final,
         po_no(10)    TYPE c,
         item(5)      TYPE c,
         del_date(10TYPE c,
         ind_status   TYPE c,
         reason(4)    TYPE c,
         text(60)     TYPE c,
         req_by(12)   TYPE c,
       END OF ty_final.

TYPESBEGIN OF ty_hdr,
         ebeln     TYPE ebeln,        " PO Number
         ebelp     TYPE ebelp,        " PO Item Number
         eindt(10TYPE c,        "eindt,        " Delivery Date
         revok     TYPE dcm_revok,    " Status "version completed"
         rscod     TYPE rscod,        " Reason for change
         txz01     TYPE txz01_dcm,    " Description of version
         crnam     TYPE dcm_afnam,    " Person requesting change
       END OF ty_hdr.

TYPESBEGIN OF ty_alv,
         ebeln   TYPE   ebeln,
         type    TYPE   bapi_mtype,
         message TYPE   bapi_msg,
       END  OF ty_alv.

DATAlt_final TYPE TABLE OF ty_final,
      ls_final TYPE ty_final.
DATAlt_hdr TYPE TABLE OF ty_hdr,
      ls_hdr TYPE ty_hdr.
DATA:gt_alv TYPE STANDARD TABLE OF ty_alv,
     gs_alv TYPE ty_alv.

CONSTANTSlc_e TYPE char1 VALUE 'E',
           lc_s TYPE char1 VALUE 'S'.

*&---------------------------------------------------------------------*
*& Include          ZMM_PO_CHANGES_SEL
*&---------------------------------------------------------------------*


* Selection Screen Design
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001.
  PARAMETERS:p_file  LIKE rlgrap-filename OBLIGATORY.
SELECTION-SCREEN END  OF BLOCK b1.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
* File Upload
  PERFORM file_upload.

*&---------------------------------------------------------------------*
*& Include          ZMM_PO_CHANGES_F01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form file_upload
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
FORM file_upload .
* F4 Functionality
  CALL FUNCTION 'F4_FILENAME'
    EXPORTING
      program_name  syst-cprog
      dynpro_number syst-dynnr
      field_name    'P_FILE'
    IMPORTING
      file_name     p_file.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form get_file
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
FORM get_file .
  DATA:  lt_raw TYPE   truxs_t_text_data.
* Convert the XL file to Internal Table
  CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
    EXPORTING
*     I_FIELD_SEPERATOR    =
      i_line_header        abap_true
      i_tab_raw_data       lt_raw
      i_filename           p_file
    TABLES
      i_tab_converted_data lt_final
    EXCEPTIONS
      conversion_failed    1
      OTHERS               2.
  IF sy-subrc <> 0.
    CASE sy-subrc.
      WHEN 1.
        MESSAGE 'File Conversion Error' TYPE 'E' DISPLAY LIKE 'S'.
    ENDCASE.
  ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form process_data
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
FORM process_data .
  LOOP AT lt_final INTO ls_final.
    DATA(ls_final1ls_final.
    ls_hdr-ebeln ls_final1-po_no.
    ls_hdr-ebelp ls_final1-item.
    ls_hdr-eindt ls_final1-del_date.
    ls_hdr-revok ls_final1-ind_status.
    ls_hdr-rscod ls_final1-reason.
    ls_hdr-txz01 ls_final1-text.
    ls_hdr-crnam ls_final1-req_by.
    APPEND ls_hdr TO lt_hdr.
    CLEARls_hdr,ls_final1,ls_final.
  ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form bapi_po_change
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
FORM bapi_po_change .

  DATAlv_po_no TYPE bapimepoheader-po_number.
  DATAls_version TYPE bapimedcm.

* Internal Table Declaration
  DATA:
    lt_del    TYPE TABLE OF bapimeposchedule,
    lt_delx   TYPE TABLE OF bapimeposchedulx,
    lt_return TYPE TABLE OF bapiret2.
* Work Area Declaration
  DATAls_header  TYPE bapimepoheader,
        ls_headerx TYPE bapimepoheaderx,
        ls_del     TYPE bapimeposchedule,
        ls_delx    TYPE bapimeposchedulx,
        ls_return  TYPE bapiret2.


* Fill the Internal table data to Bapi structure
  SORT lt_hdr BY ebeln.
  LOOP  AT lt_hdr INTO ls_hdr.
    DATA(ls_hdr1ls_hdr.
*** Header Data Fill
    lv_po_no               ls_hdr1-ebeln.
    ls_header-po_number    ls_hdr1-ebeln.
*** Set the Flag
    ls_headerx-po_number   abap_true.

    ls_version-completed   ls_hdr1-revok.
    ls_version-reason      ls_hdr1-rscod.
    ls_version-description ls_hdr1-txz01.
    ls_version-req_by      ls_hdr1-crnam.

*** Item Data Fill
    ls_del-po_item       ls_hdr1-ebelp.
    ls_del-delivery_date ls_hdr1-eindt.
    APPEND ls_del TO lt_del.
*** Set the Flag
    ls_delx-po_item       ls_hdr1-ebelp.
    ls_delx-po_itemx      abap_true.
    ls_delx-delivery_date abap_true.
    APPEND ls_delx TO lt_delx.

*** Call the BAPI PO Change
    AT END OF ebeln.
      CALL FUNCTION 'BAPI_PO_CHANGE'
        EXPORTING
          purchaseorder lv_po_no
          poheader      ls_header
          poheaderx     ls_headerx
          versions      ls_version
        TABLES
          return        lt_return
          poschedule    lt_del
          poschedulex   lt_delx.

      READ TABLE lt_return INTO ls_return WITH KEY type lc_e.
      IF sy-subrc 0.
        LOOP AT lt_return INTO ls_return.
          gs_alv-ebeln  lv_po_no.
          gs_alv-type   ls_return-type.
          gs_alv-message ls_return-message.
          APPEND gs_alv TO gt_alv.
          CLEARgs_alv.
        ENDLOOP.
        CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
      ELSE.
        CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
          EXPORTING
            wait abap_true.

        gs_alv-ebeln  lv_po_no.
        gs_alv-type   lc_s.
        gs_alv-message TEXT-002.
        APPEND gs_alv TO gt_alv.
        CLEARgs_alv.
      ENDIF.
      CLEARls_header,ls_version,ls_del,ls_headerx,ls_delx,ls_return,lv_po_no.
    ENDAT.
  ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form display_data
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
FORM display_data .
  TYPE-POOLS:
      slis.
  DATA:
    ls_fieldcat TYPE slis_fieldcat_alv,
    ls_layout   TYPE slis_layout_alv.
  DATA:
     lt_fieldcat TYPE slis_t_fieldcat_alv.

  DATA:
      lv_program TYPE sy-repid.

  CLEAR ls_fieldcat.
  ls_fieldcat-fieldname      'EBELN'.
  ls_fieldcat-tabname        'GT_ALV'.
  ls_fieldcat-seltext_m      'Po Number'.
  APPEND ls_fieldcat TO lt_fieldcat.

  CLEAR ls_fieldcat.
  ls_fieldcat-fieldname      'TYPE'.
  ls_fieldcat-tabname        'GT_ALV'.
  ls_fieldcat-seltext_m      'STATUS'.
  APPEND ls_fieldcat TO lt_fieldcat.

  CLEAR ls_fieldcat.
  ls_fieldcat-fieldname      'MESSAGE'.
  ls_fieldcat-tabname        'GT_ALV'.
  ls_fieldcat-seltext_m      'Message'.
  APPEND ls_fieldcat TO lt_fieldcat.


  CLEAR ls_layout.
  ls_layout-colwidth_optimize abap_true.
  ls_layout-zebra             abap_true.

  lv_program sy-repid.

* Display The Final Display
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_callback_program lv_program
      is_layout          ls_layout
      it_fieldcat        lt_fieldcat
    TABLES
      t_outtab           gt_alv
    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.

Comments

Popular posts from this blog

PO rejection notification & rejection comments for Fiori

FB60 Vendor Invoice Post using BAPI

Service Invoice Upload For FB70 (BAPI)