PO Vendor Update (ME22N) Using BAPI

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

*& Report ZMM_PO_VENDOR_UPDATE
*&---------------------------------------------------------------------*
************************************************************************
*      Program        : ZMM_PO_VENDOR_UPDATE
*      Author         : King Of ABAP'r
*      Created on     : 2024
*      Requested By   : Functional Consultant
*      Project        : client
*      Transport-No   : 1234927260
*----------------------------------------------------------------------*
*      Description    : Cutover Object
*      Assumption     :
*      Called from    :
*      Called to      : N/A
*      Includes       : N/A
*      Logical DB     : N/A
*----------------------------------------------------------------------*
REPORT zmm_po_vendor_update.

INCLUDE zmm_po_vendor_update_top.
INCLUDE zmm_po_vendor_update_sel.
INCLUDE zmm_po_vendor_update_f01.

START-OF-SELECTION.

  PERFORM get_file_data.
  PERFORM update_ztable.

  PERFORM bapi_po_change.
  PERFORM display_data.

*&---------------------------------------------------------------------*
*& Include          ZMM_PO_VENDOR_UPDATE_TOP
*&---------------------------------------------------------------------*
TABLESsscrfields.
TYPE-POOLSicon.
TYPESBEGIN OF ty_final,
         po_no(10)   TYPE c,
         item(5)     TYPE c,
         cond_typ(4TYPE c,
         vendor(10)  TYPE c,
         amount(11)  TYPE c,   
         currency(5TYPE c,   
       END OF ty_final.

##NEEDED
DATA:gt_final TYPE TABLE OF ty_final.

TYPESBEGIN OF ty_alv,
         type       TYPE char10"bapi_mtype,
         ebeln      TYPE ebeln,
         ebelp      TYPE ebelp,
         vendor(10TYPE c,
         message    TYPE bapi_msg,
       END  OF ty_alv.
##NEEDED
DATA:gt_alv TYPE STANDARD TABLE OF ty_alv,
     ##NEEDED
     gs_alv TYPE ty_alv.
##NEEDED
DATAgv_excel TYPE ole2_object" Excel object
      ##NEEDED
      gv_mapl  TYPE ole2_object" list of workbooks
      ##NEEDED
      gv_map   TYPE ole2_object" workbook
      ##NEEDED
      gv_zl    TYPE ole2_object" cell
      ##NEEDED
      gv_f     TYPE ole2_object" font


CONSTANTSgc_e TYPE char1 VALUE 'E',
           gc_s TYPE char1 VALUE 'S'.


DATA:gt_zven TYPE TABLE OF zmm_ven,
     gs_zven TYPE zmm_ven.

*&---------------------------------------------------------------------*
*& Include          ZMM_PO_VENDOR_UPDATE_SEL
*&---------------------------------------------------------------------*

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

SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE TEXT-002. "Download Excel File Template
  SELECTION-SCREENPUSHBUTTON 2(60cmdgen USER-COMMAND a_gen VISIBLE LENGTH 20.
SELECTION-SCREEN END OF BLOCK b2.

INITIALIZATION.
  CALL FUNCTION 'ICON_CREATE'
    EXPORTING
      name   icon_xxl
      text   TEXT-019 "'Generate Template'
      info   TEXT-020 "'Generate Excel File Template'
    IMPORTING
      result cmdgen
    EXCEPTIONS
      OTHERS 0.

AT SELECTION-SCREEN.
  CASE sscrfields.
    WHEN 'A_GEN'.                                       "#EC CI_CONV_OK
      PERFORM generate_template.
  ENDCASE.

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

*&---------------------------------------------------------------------*
*& Include          ZMM_PO_VENDOR_UPDATE_F01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form file_upload
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM file_upload .
* F4 Functionality
  CALL FUNCTION 'F4_FILENAME'
    EXPORTING
      program_name  syst-cprog
      dynpro_number syst-dynnr
      field_name    TEXT-022
    IMPORTING
      file_name     p_file.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form get_file_data
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM get_file_data .
  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 gt_final
    EXCEPTIONS
      conversion_failed    1
      OTHERS               2.
  IF sy-subrc <> 0.
    CASE sy-subrc.
      WHEN 1.
        MESSAGE TEXT-021 TYPE gc_e DISPLAY LIKE gc_s.
    ENDCASE.
  ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form update_ztable
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
FORM update_ztable .

  LOOP AT gt_final ASSIGNING FIELD-SYMBOL(<gs_final>).

    gs_zven-mandt      sy-mandt.
    gs_zven-po_no      <gs_final>-po_no.
    gs_zven-item_no    <gs_final>-item.
    gs_zven-cond_typ   <gs_final>-cond_typ.
    SELECT SINGLE knumv FROM ekko INTO @DATA(ls_knumv)
      WHERE ebeln EQ @<gs_final>-po_no.
    IF ls_knumv IS NOT INITIAL.
      SELECT SINGLE lifnr FROM prcd_elements
        INTO @DATA(ls_lifnrWHERE knumv EQ @ls_knumv
        AND kposn EQ @<gs_final>-item
        AND kschl EQ @<gs_final>-cond_typ.
    ENDIF.
    gs_zven-exit_ven ls_lifnr.
    gs_zven-upd_vendor |{ <gs_final>-vendor ALPHA IN }|.
    gs_zven-updated_on sy-datum.
    gs_zven-ztime      sy-uzeit.

    gs_zven-currency     <gs_final>-currency.         

    APPEND gs_zven TO gt_zven.

    CLEAR:gs_zven,ls_lifnr,ls_knumv.

  ENDLOOP.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form insert_data
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
FORM insert_data .

  CALL FUNCTION 'ENQUEUE_E_TABLE'
    EXPORTING
*     MODE_RSTABLE   = 'E'
      tabname        'ZMM_VEN'
    EXCEPTIONS
      foreign_lock   1
      system_failure 2
      OTHERS         3.
* if condition satisfy modify the ztable.
  IF sy-subrc 0.

    LOOP AT gt_zven INTO DATA(ls_data).
      IF sy-subrc 0.
        MODIFY zmm_ven FROM ls_data.
        COMMIT WORK.
      ENDIF.
    ENDLOOP.
  ENDIF.

* TO unlock the table.
  CALL FUNCTION 'DEQUEUE_E_TABLE'
    EXPORTING
      tabname 'ZMM_VEN'.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form bapi_po_change
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM bapi_po_change .
  DATAlv_po_no TYPE bapimepoheader-po_number.
* Internal Table Declaration
  DATA:
    lt_cond   TYPE TABLE OF bapimepocond,
    lt_condx  TYPE TABLE OF bapimepocondx,
    lt_return TYPE TABLE OF bapiret2.
* Work Area Declaration
  DATAls_header  TYPE bapimepoheader,
        ls_headerx TYPE bapimepoheaderx,
        ls_cond    TYPE bapimepocond,
        ls_condx   TYPE bapimepocondx,
        ls_return  TYPE bapiret2.

*** COnstant Value Declarations
  CONSTANTSlc_doctyp(3TYPE VALUE 'ZIM'.

  LOOP AT gt_final ASSIGNING FIELD-SYMBOL(<ls_final>).
**** Header Data Fill
    lv_po_no               <ls_final>-po_no.
    ls_header-po_number    lv_po_no.
    ls_header-doc_type     lc_doctyp.

*** Set the Flag
    ls_headerx-po_number   abap_true.
    ls_headerx-doc_type    abap_true.

    IF <ls_final>-cond_typ IS NOT INITIAL.
      ls_cond-itm_number  |{ <ls_final>-item ALPHA IN }|.
      ls_cond-cond_type   <ls_final>-cond_typ.
      ls_cond-change_id   'U'.
      ls_cond-vendor_no   |{ <ls_final>-vendor ALPHA IN }|.
      ls_cond-cond_value  <ls_final>-amount.  
      ls_cond-currency    <ls_final>-currency
      APPENDls_cond TO lt_cond.
*** Set Flag
      ls_condx-cond_type  abap_true.
      ls_condx-itm_number |{ <ls_final>-item ALPHA IN }|.
      ls_condx-change_id  abap_true.
      ls_condx-vendor_no  abap_true.
      ls_condx-cond_value abap_true.  
      ls_condx-currency   abap_true.  
      APPENDls_condx TO lt_condx.
    ENDIF.

*** Call the BAPI PO Change
    AT END OF po_no.
      CALL FUNCTION 'BAPI_PO_CHANGE'   "#EC CI_USAGE_OK[2438131]
        EXPORTING
          purchaseorder lv_po_no
          poheader      ls_header
          poheaderx     ls_headerx
        TABLES
          return        lt_return
          pocond        lt_cond
          pocondx       lt_condx.

      READ TABLE lt_return INTO ls_return WITH KEY type gc_e"#EC CI_STDSEQ
      IF sy-subrc 0.
                                                         "#EC CI_NESTED
        LOOP AT lt_return INTO ls_return.                "#EC CI_NESTED
          gs_alv-ebeln   lv_po_no.
          gs_alv-ebelp  <ls_final>-item.
          gs_alv-vendor <ls_final>-vendor.
          gs_alv-type    icon_led_red.   "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-ebelp  <ls_final>-item.
        gs_alv-vendor <ls_final>-vendor.
        gs_alv-type   icon_led_green."gc_s.
        gs_alv-message TEXT-003.
        APPEND gs_alv TO gt_alv.
        CLEARgs_alv.

        PERFORM insert_data.

      ENDIF.
      CLEARls_header,ls_cond,ls_headerx,ls_condx,ls_return,lv_po_no,lt_return.
    ENDAT.
  ENDLOOP.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form display_data
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        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      TEXT-007."'TYPE'.
  ls_fieldcat-tabname        TEXT-005. "GT_ALV
  ls_fieldcat-seltext_m      TEXT-008."'STATUS'.
  APPEND ls_fieldcat TO lt_fieldcat.

  CLEAR ls_fieldcat.
  ls_fieldcat-fieldname      TEXT-004. "EBELN
  ls_fieldcat-tabname        TEXT-005. "GT_ALV
  ls_fieldcat-seltext_m      TEXT-006. "Po Number
  APPEND ls_fieldcat TO lt_fieldcat.

  CLEAR ls_fieldcat.
  ls_fieldcat-fieldname      TEXT-023. "EBELP
  ls_fieldcat-tabname        TEXT-005. "GT_ALV
  ls_fieldcat-seltext_m      TEXT-024. "Item Number
  APPEND ls_fieldcat TO lt_fieldcat.

  CLEAR ls_fieldcat.
  ls_fieldcat-fieldname      TEXT-025. "VENDOR
  ls_fieldcat-tabname        TEXT-005. "GT_ALV
  ls_fieldcat-seltext_m      TEXT-026. "Vendor Number
  APPEND ls_fieldcat TO lt_fieldcat.

  CLEAR ls_fieldcat.
  ls_fieldcat-fieldname      TEXT-009.
  ls_fieldcat-tabname        TEXT-005. "GT_ALV
  ls_fieldcat-seltext_m      TEXT-010.
  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.
*&---------------------------------------------------------------------*
*& Form generate_template
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM generate_template .

* start Excel
  CREATE OBJECT gv_excel 'EXCEL.APPLICATION'.

  SET PROPERTY OF gv_excel 'Visible' 1.               "#EC CI_CONV_OK

* get list of workbooks, initially empty
  CALL METHOD OF
    gv_excel
      'Workbooks' gv_mapl.

*** Error handle File
  PERFORM err_hdl.

* add a new workbook
  CALL METHOD OF
    gv_mapl
      'Add' gv_mapl.

*** Error handle File
  PERFORM err_hdl.

  PERFORM fill_cell USING:   TEXT-006,            "'Po Number',
                             TEXT-011,            "'Item',
                             TEXT-012,            "'Condition Type',
                             TEXT-013,            "'Vendor',
                             TEXT-027,            
                             TEXT-028.            

ENDFORM.


FORM err_hdl .
  IF sy-subrc <> 0.
    CALL METHOD OF
      gv_excel
      'QUIT'.
    FREE OBJECT gv_excel.
    gv_excel-handle -1.
    MESSAGE TEXT-014 TYPE gc_e."'E'.
  ENDIF.
ENDFORM.
                                                        "#EC CI_CONV_OK
FORM fill_cell USING p_i p_j p_bold p_val.
                                                        "#EC CI_CONV_OK
  CALL METHOD OF                                        "#EC CI_CONV_OK
       gv_excel
      'Cells' gv_zl                                   "#EC CI_CONV_OK
    EXPORTING
      #1      p_i
      #2      p_j.
  PERFORM err_hdl.                                      "#EC CI_CONV_OK
  SET PROPERTY OF gv_zl TEXT-015 p_val .              "#EC CI_CONV_OK
  PERFORM err_hdl.                                      "#EC CI_CONV_OK
  GET PROPERTY OF gv_zl TEXT-016 gv_f.                "#EC CI_CONV_OK
  PERFORM err_hdl.                                      "#EC CI_CONV_OK
  SET PROPERTY OF gv_f TEXT-017 p_bold .              "#EC CI_CONV_OK
  PERFORM err_hdl.                                      "#EC CI_CONV_OK

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)