Non-Stock Service PO Upload (ME21N) Using BAPI

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

*& Report ZMM_NON_STOCK_SER_PO_UPL
*&---------------------------------------------------------------------*
*& Program        : ZMM_NON_STOCK_SER_PO_UPL
*& Author         : King Of ABAP'r
*& Created on     : 2024
*& Requested By   : Functional Consultant
*& Tcode          : ZPO_SERVICE_CREATE
*& Transport-No   : 1234567890
*&---------------------------------------------------------------------*
REPORT zmm_non_stock_ser_po_upl.

INCLUDE zmm_non_stock_ser_po_upl_top.
INCLUDE zmm_non_stock_ser_po_upl_sel.
INCLUDE zmm_non_stock_ser_po_upl_f01.

**** Start of Selection
START-OF-SELECTION.

*** File Upload
  PERFORM file_upload.
*** Split Data into Header & Item
  PERFORM po_create.
*** Display Data
  PERFORM display_data.

*&---------------------------------------------------------------------*
*& Include          ZMM_NON_STOCK_SER_PO_UPL_TOP
*&---------------------------------------------------------------------*
TABLESsscrfields.

TYPES:BEGIN OF ty_data,
        sno              TYPE i,
        doc_typ          TYPE esart,
        vendor           TYPE elifn,
        incoterms1       TYPE inco1,
        incoterms2       TYPE inco2,
        pymnt_terms      TYPE dzterm,
*        currency      TYPE waers,
        pur_group        TYPE bkgrp,
        scn_no           TYPE zzscnum,
        zzprgm_code      TYPE zdeprgm_code,
        reason           TYPE zldreason,
        liquidate_change TYPE zdeliqtxt,
*** Item Data
        po_item          TYPE ebelp,
        pr_no            TYPE banfn,
        pr_item          TYPE bnfpo,
        short_text       TYPE txz01,
        po_qty           TYPE bstmg,
        po_net_price     TYPE bapicurext,
        del_date         TYPE eeind,
        cntrl_code       TYPE j_1bnbmco1,
        tax_code         TYPE mwskz,
***  Service Po
        ser_line_no      TYPE extrow,
        ser_net_price    TYPE bapigrprice,

      END OF ty_data.

DATA:it_data TYPE TABLE OF ty_data,
     wa_data TYPE ty_data.

*** Error Log
TYPESBEGIN OF ty_alv,
         sno     TYPE   i,
         ebeln   TYPE   ekko-ebeln,
         type    TYPE   bapi_mtype,
         message TYPE   bapi_msg,
       END  OF ty_alv.

DATA:it_alv TYPE STANDARD TABLE OF ty_alv,
     wa_alv TYPE ty_alv.

*** Constant Values Declarations
CONSTANTSlc_e  TYPE char1 VALUE 'E',
           lc_s  TYPE char1 VALUE 'S',
           lc_id TYPE char2 VALUE 'M3'.

***Excel File Dowload Button
DATAh_excel TYPE ole2_object" Excel object
      h_mapl  TYPE ole2_object" list of workbooks
      h_map   TYPE ole2_object" workbook
      h_zl    TYPE ole2_object" cell
      h_f     TYPE ole2_object" font

*&---------------------------------------------------------------------*
*& Include          ZMM_NON_STOCK_SER_PO_UPL_SEL
*&---------------------------------------------------------------------*

SELECTION-SCREEN:BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-000.
  PARAMETERS:p_file TYPE rlgrap-filename  .
SELECTION-SCREEN:END OF BLOCK b1.

SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE TEXT-001.
  SELECTION-SCREENPUSHBUTTON 2(60cmdgen USER-COMMAND a_gen VISIBLE LENGTH 20.
SELECTION-SCREEN END OF BLOCK b2.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
**** File F4 Functioality.
  PERFORM f4_function.

INITIALIZATION.

  CALL FUNCTION 'ICON_CREATE'
    EXPORTING
      name   icon_xxl
      text   'Generate Template'
      info   'Generate Excel File Template'
    IMPORTING
      result cmdgen
    EXCEPTIONS
      OTHERS 0.

AT SELECTION-SCREEN.
  CASE sscrfields.
    WHEN 'A_GEN'.
      PERFORM generate_template.
  ENDCASE.

*&---------------------------------------------------------------------*
*& Include          ZMM_NON_STOCK_SER_PO_UPL_F01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form f4_function
*&---------------------------------------------------------------------*
FORM f4_function .

  CALL FUNCTION 'F4_FILENAME'
    EXPORTING
      program_name sy-repid
      field_name   'P_FILE '
    IMPORTING
      file_name    p_file.


ENDFORM.
*&---------------------------------------------------------------------*
*& Form file_upload
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
FORM file_upload .
  DATA:lt_raw TYPE  truxs_t_text_data.

  CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
    EXPORTING
      i_line_header        abap_true
      i_tab_raw_data       lt_raw
      i_filename           p_file
    TABLES
      i_tab_converted_data it_data
    EXCEPTIONS
      conversion_failed    1
      OTHERS               2.
  IF sy-subrc <> 0.
    MESSAGE 'No Data File Uploaded' TYPE 'E'.
  ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form get_data
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
FORM po_create .

  DATA:lv_po_no TYPE bapimepoheader-po_number.
  DATA:lv_ebelp TYPE ebelp.

  DATA:wa_pohead  TYPE bapimepoheader,
       wa_poheadx TYPE bapimepoheaderx.

  DATA:it_poitem TYPE TABLE OF bapimepoitem,
       wa_poitem TYPE bapimepoitem.

  DATA:it_poitemx TYPE TABLE OF bapimepoitemx,
       wa_poitemx TYPE bapimepoitemx.

  DATA:it_poschl TYPE TABLE OF bapimeposchedule,
       wa_poschl TYPE bapimeposchedule.

  DATA:it_poschlx TYPE TABLE OF bapimeposchedulx,
       wa_poschlx TYPE bapimeposchedulx.

  DATA:it_poaccunt TYPE TABLE OF bapimepoaccount,
       wa_poaccnt  TYPE bapimepoaccount.

  DATA:it_poaccuntx  TYPE TABLE OF  bapimepoaccountx,
       wa_poaccntx  TYPE bapimepoaccountx.

  DATA:it_poservices TYPE TABLE OF bapiesllc,
       wa_poservices TYPE bapiesllc.

  DATA:it_poservalue TYPE TABLE OF bapiesklc,
       wa_poservalue TYPE bapiesklc.

  DATA:it_return TYPE TABLE OF bapiret2,
       wa_return TYPE bapiret2.

*** Added custom fields in Bapi Extention
  DATAbapi_te_po    TYPE  bapi_te_mepoheader,  "extension tables
        bapi_te_pox   TYPE bapi_te_mepoheaderx,  "extension tables
        ext_container TYPE TABLE OF  bapiparex WITH HEADER LINE"extension Container

  DATA:lv_pack TYPE packno.
  DATA:lv_line_no TYPE introw.

  DATA(it_serit_data.

  SORT it_ser BY po_item.
  SORT it_data BY sno.
  DELETE it_data WHERE pr_no IS INITIAL.

  LOOP AT it_data INTO DATA(ls_data).
    wa_data ls_data.

    wa_data-pr_no |{ wa_data-pr_no ALPHA IN }|.

    SELECT SINGLE FROM eban INTO @DATA(ls_eban)
      WHERE banfn EQ @wa_data-pr_no
        AND bnfpo EQ @wa_data-pr_item.
*** Filling Header data
    AT NEW sno.
      wa_pohead-doc_type wa_data-doc_typ.
      wa_pohead-vendor     |{ wa_data-vendor ALPHA IN }|.
      wa_pohead-currency   ls_eban-waers.
      wa_pohead-pmnttrms   wa_data-pymnt_terms.
      wa_pohead-incoterms1 wa_data-incoterms1.
      wa_pohead-incoterms2 wa_data-incoterms2.

      IF wa_data-pur_group IS NOT INITIAL.
        wa_pohead-pur_group wa_data-pur_group.
      ENDIF.

**** Set Flag (Header)
      wa_poheadx-doc_type   abap_true.
      wa_poheadx-vendor     abap_true.
      wa_poheadx-currency   abap_true.
      wa_poheadx-pmnttrms   abap_true.
      wa_poheadx-incoterms1 abap_true.
      wa_poheadx-incoterms2 abap_true.

      IF wa_data-pur_group IS NOT INITIAL.
        wa_poheadx-pur_group abap_true.
      ENDIF.

*** Prepare the extension TABLES
      bapi_te_po-po_number   lv_po_no.   " Key Field
      bapi_te_po-zzprgm_code wa_data-zzprgm_code.
      bapi_te_po-zzscnum     wa_data-scn_no.
      bapi_te_po-zldreason   wa_data-reason.
      bapi_te_po-zzliqtxt    wa_data-liquidate_change.

*** Mark for fields updation
      bapi_te_pox-po_number   lv_po_no.   " Key Field
      bapi_te_pox-zzscnum     abap_true.
      bapi_te_pox-zzprgm_code abap_true.
      bapi_te_pox-zldreason   abap_true.
      bapi_te_pox-zzliqtxt    abap_true.

*** Prepare the extension Container
      ext_container-structure  'BAPI_TE_MEPOHEADER'.
      ext_container-valuepart1 bapi_te_po.
      APPEND ext_container.
      CLEAR  ext_container.

*** Prepare the extension container
      ext_container-structure 'BAPI_TE_MEPOHEADERX'.
      ext_container-valuepart1 bapi_te_pox.
      APPEND ext_container.
    ENDAT.

**** Non-Stock PO

    IF ls_eban-pstyp 0.
*** Item Data
      lv_ebelp lv_ebelp + 10.
      wa_poitem-po_item    lv_ebelp.
      wa_poitem-preq_no    wa_data-pr_no.
      wa_poitem-preq_no    wa_data-pr_no.
      wa_poitem-preq_item  wa_data-pr_item.
      wa_poitem-short_text wa_data-short_text.
      wa_poitem-quantity   wa_data-po_qty.
      wa_poitem-bras_nbm   wa_data-cntrl_code.
      wa_poitem-tax_code   wa_data-tax_code.
      wa_poitem-net_price  wa_data-po_net_price.
      APPEND wa_poitem TO it_poitem.
      CLEAR:wa_poitem.
*** Set Flag
      wa_poitemx-po_item    lv_ebelp.
      wa_poitemx-po_itemx   abap_true.
      wa_poitemx-preq_no    abap_true.
      wa_poitemx-preq_item  abap_true.
      wa_poitemx-short_text abap_true.
      wa_poitemx-quantity   abap_true.
      wa_poitemx-net_price  abap_true.
      wa_poitemx-bras_nbm   abap_true.
      wa_poitemx-tax_code   abap_true.
      APPEND wa_poitemx TO it_poitemx.
      CLEAR:wa_poitemx.

*** Delivey Date Line Item
      wa_poschl-po_item       lv_ebelp.
      wa_poschl-delivery_date wa_data-del_date.
      APPEND wa_poschl TO it_poschl.
      CLEAR:wa_poschl.
*** Set Flag
      wa_poschlx-po_item       lv_ebelp.
      wa_poschlx-po_itemx      abap_true.
      wa_poschlx-delivery_date wa_data-del_date.
      APPEND wa_poschlx TO it_poschlx.
      CLEAR:wa_poschlx.

      AT END OF sno.
        CALL FUNCTION 'BAPI_PO_CREATE1'
          EXPORTING
            poheader         wa_pohead
            poheaderx        wa_poheadx
          IMPORTING
            exppurchaseorder lv_po_no
          TABLES
            return           it_return
            poitem           it_poitem
            poitemx          it_poitemx
            poschedule       it_poschl
            poschedulex      it_poschlx
            extensionin      ext_container.

        IF it_return IS NOT INITIAL.
          READ TABLE it_return INTO wa_return WITH KEY type lc_e.
          IF sy-subrc 0.
            DELETE it_return WHERE type 'W'.
            LOOP AT it_return INTO wa_return.
              wa_alv-sno     wa_data-sno.
              wa_alv-ebeln  lv_po_no.
              wa_alv-type   wa_return-type.
              wa_alv-message wa_return-message.
              APPEND wa_alv TO it_alv.
              CLEARwa_alv.
            ENDLOOP.
            CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
          ELSE.

            CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
              EXPORTING
                wait abap_true.

            READ TABLE it_return INTO wa_return WITH KEY type lc_s.
            IF sy-subrc 0.
              wa_alv-sno     wa_data-sno.
              wa_alv-ebeln   lv_po_no.
              wa_alv-type    lc_s.
              wa_alv-message wa_return-message.
              APPEND wa_alv TO it_alv.
              CLEARwa_alv.
            ENDIF.
          ENDIF.
          CLEAR:wa_return.

          CLEAR:wa_pohead,wa_poheadx,lv_po_no.
          REFRESH:it_poitem,it_poitemx,it_poschl,it_poschlx,it_return.
        ENDIF.
      ENDAT.

***** Service Po
    ELSEIF ls_eban-pstyp 9.

*** Item Data Filling
      lv_pack    lv_pack + 1.
      lv_pack    |{ lv_pack ALPHA IN }|.

      lv_ebelp lv_ebelp + 10.
      wa_poitem-po_item    lv_ebelp.
      wa_poitem-preq_no    |{ wa_data-pr_no ALPHA IN }|.
      wa_poitem-preq_item  wa_data-pr_item.
      wa_poitem-short_text wa_data-short_text.
      wa_poitem-tax_code   wa_data-tax_code.
      wa_poitem-pckg_no    lv_pack.
      wa_poitem-item_cat   ls_eban-pstyp.
      wa_poitem-acctasscat ls_eban-knttp.
      APPEND wa_poitem TO it_poitem.
      CLEAR:wa_poitem.
*** Set Flag
      wa_poitemx-po_item    lv_ebelp.
      wa_poitemx-po_itemx   abap_true.
      wa_poitemx-preq_no    abap_true.
      wa_poitemx-preq_item  abap_true.
      wa_poitemx-short_text abap_true.
      wa_poitemx-tax_code   abap_true.
      wa_poitemx-pckg_no    abap_true.
      wa_poitemx-item_cat   abap_true.
      wa_poitemx-acctasscat abap_true.

      APPEND wa_poitemx TO it_poitemx.
      CLEAR:wa_poitemx.

*** Delivey Date Line Item
      wa_poschl-po_item       lv_ebelp.
      wa_poschl-delivery_date wa_data-del_date.
      APPEND wa_poschl TO it_poschl.
      CLEAR:wa_poschl.
*** Set Flag
      wa_poschlx-po_item       lv_ebelp.
      wa_poschlx-po_itemx      abap_true.
      wa_poschlx-delivery_date wa_data-del_date.
      APPEND wa_poschlx TO it_poschlx.
      CLEAR:wa_poschlx.

**** Account Data
      SELECT SINGLE kostl INTO @DATA(lv_kostl)
             FROM ebkn
             WHERE banfn EQ @wa_data-pr_no.

      wa_poaccnt-po_item     lv_ebelp.
      wa_poaccnt-costcenter  lv_kostl.
      APPEND wa_poaccnt TO it_poaccunt.
      CLEAR:wa_poaccnt.
*** Set Flag
      wa_poaccntx-po_item     lv_ebelp.
      wa_poaccntx-po_itemx    abap_true.
      wa_poaccntx-costcenter abap_true.
      APPEND wa_poaccntx TO it_poaccuntx.
      CLEAR:wa_poaccntx.

**** Service Line Items Filling
      ls_eban-packno ls_eban-packno + 1.
      LOOP AT it_ser INTO DATA(ls_serWHERE po_item lv_ebelp.

        SELECT SINGLE srvpos INTO @DATA(lv_servpo)
          FROM esll WHERE packno EQ @ls_eban-packno
           AND extrow EQ @ls_ser-ser_line_no.

        SELECT SINGLE menge INTO @DATA(lv_menge)
        FROM esll WHERE packno EQ @ls_eban-packno
        AND extrow EQ @ls_ser-ser_line_no.

        SELECT SINGLE meins INTO @DATA(lv_meins)
        FROM esll WHERE packno EQ @ls_eban-packno
        AND extrow EQ @ls_ser-ser_line_no.

        lv_line_no  lv_line_no + 1.
        wa_poservices-pckg_no    lv_pack.
        wa_poservices-line_no    lv_line_no.
        wa_poservices-subpckg_no lv_pack + 1.
        APPEND wa_poservices TO it_poservices.
        CLEAR:wa_poservices.

        lv_line_no lv_line_no + 1.

        wa_poservices-pckg_no    lv_pack + 1.
        wa_poservices-line_no    lv_line_no.
        wa_poservices-ext_line   |{ ls_ser-ser_line_no ALPHA IN }|..
        wa_poservices-service    lv_servpo.
        wa_poservices-quantity   lv_menge.
        wa_poservices-gr_price   wa_data-ser_net_price.
        wa_poservices-base_uom   lv_meins.
        APPEND wa_poservices TO it_poservices.
        CLEAR:wa_poservices.

        wa_poservalue-pckg_no   lv_pack + 1.
        wa_poservalue-line_no   lv_line_no.
        wa_poservalue-serial_no '01'.
        APPEND wa_poservalue TO it_poservalue.
        CLEAR:wa_poservalue.

        CLEAR:ls_ser,lv_servpo,lv_menge,lv_meins.
      ENDLOOP.

      AT END OF sno.
        CALL FUNCTION 'BAPI_PO_CREATE1'
          EXPORTING
            poheader          wa_pohead
            poheaderx         wa_poheadx
          IMPORTING
            exppurchaseorder  lv_po_no
          TABLES
            return            it_return
            poitem            it_poitem
            poitemx           it_poitemx
            poschedule        it_poschl
            poschedulex       it_poschlx
            poaccount         it_poaccunt
            poaccountx        it_poaccuntx
            poservices        it_poservices
            posrvaccessvalues it_poservalue
            extensionin       ext_container.

        IF it_return IS NOT INITIAL.
          READ TABLE it_return INTO wa_return WITH KEY type lc_e.
          IF sy-subrc 0.
            DELETE it_return WHERE type 'W'.
            LOOP AT it_return INTO wa_return.
              wa_alv-sno     wa_data-sno.
              wa_alv-ebeln   lv_po_no.
              wa_alv-type    wa_return-type.
              wa_alv-message wa_return-message.
              APPEND wa_alv TO it_alv.
              CLEARwa_alv.
            ENDLOOP.
            CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
          ELSE.

            CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
              EXPORTING
                wait abap_true.

            READ TABLE it_return INTO wa_return WITH KEY type lc_s.
            IF sy-subrc 0.
              wa_alv-sno     wa_data-sno.
              wa_alv-ebeln   lv_po_no.
              wa_alv-type    lc_s.
              wa_alv-message wa_return-message.
              APPEND wa_alv TO it_alv.
              CLEARwa_alv.
            ENDIF.
          ENDIF.
          CLEAR:wa_return.

          CLEAR:wa_pohead,wa_poheadx,lv_po_no.
          REFRESH:it_poitem,it_poitemx,it_return,
                  it_poschl,it_poschlx,
                  it_poaccunt,it_poaccuntx,
                  it_poservices,it_poservalue,
                  ext_container.
        ENDIF.
      ENDAT.

    ENDIF.

    CLEAR:wa_data,ls_data,lv_servpo,lv_kostl,lv_pack,lv_line_no.

  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      'SNO'.
  ls_fieldcat-tabname        'IT_ALV'.
  ls_fieldcat-seltext_m      'Serial No.'.
  APPEND ls_fieldcat TO lt_fieldcat.

  CLEAR ls_fieldcat.
  ls_fieldcat-fieldname      'EBELN'.
  ls_fieldcat-tabname        'IT_ALV'.
  ls_fieldcat-seltext_m      'PO Number'.
  APPEND ls_fieldcat TO lt_fieldcat.

  CLEAR ls_fieldcat.
  ls_fieldcat-fieldname      'TYPE'.
  ls_fieldcat-tabname        'IT_ALV'.
  ls_fieldcat-seltext_m      'Status'.
  APPEND ls_fieldcat TO lt_fieldcat.

  CLEAR ls_fieldcat.
  ls_fieldcat-fieldname      'MESSAGE'.
  ls_fieldcat-tabname        'IT_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           it_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
*&---------------------------------------------------------------------*
FORM generate_template .

* start Excel
  CREATE OBJECT h_excel 'EXCEL.APPLICATION'.
  SET PROPERTY OF h_excel 'Visible' 1.

* get list of workbooks, initially empty
  CALL METHOD OF
    h_excel
      'Workbooks' h_mapl.
*** Error handle File
  PERFORM err_hdl.

* add a new workbook
  CALL METHOD OF
    h_mapl
      'Add' h_map.

*** Error handle File
  PERFORM err_hdl.

  PERFORM fill_cell USING:1  'Sno',
                          2  'Doc Type',
                          3  'Vendor',
                          4  'Inco Terms',
                          5  'Inco Terms1',
                          6  'Payment Terms',
                          7  'Purchase Grp',  "'Currency Key',
                          8  'SCN No.',
                          9  'Program Code',
                          10 'Reason',
                          11 'Liquid Damages',
                          12 'PO Item',
                          13 'PR No.',
                          14 'PR Item',
                          15 'PO Line Item Text',
                          16 'PO Line QTY',
                          17 'PO Net Price',
                          18 'Delivery Date',
                          19 'Control Code',
                          20 'Tax Code',
                          21 'Service Line Item',
                          22 'Service Net Price'.

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

  IF sy-subrc <> 0.
    CALL METHOD OF
      h_excel
      'QUIT'.
    FREE OBJECT h_excel.
    h_excel-handle -1.
    MESSAGE'Failed to generate template.' TYPE 'E'.
  ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form fill_cell
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
FORM fill_cell  USING j bold val..

  CALL METHOD OF
      h_excel
      'Cells' h_zl
    EXPORTING
      #1      i
      #2      j.
  PERFORM err_hdl.
  SET PROPERTY OF h_zl 'Value' val .
  PERFORM err_hdl.
  GET PROPERTY OF h_zl 'Font' h_f.
  PERFORM err_hdl.
  SET PROPERTY OF h_f 'Bold' bold .
  PERFORM err_hdl.

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)