Upload Tool For Vendor Credit Invoice (FB65) BAPI

 Input : 


Code : 

*&----------------------------------------------------------------------*
*& Report ZFI_VEN_INV_CREDIT_CREATE
*&----------------------------------------------------------------------*
*& Program        : ZFI_VEN_INV_CREDIT_CREATE
*& Author         : King Of ABAP
*& Created on     : 01.01.2024
*& Requested By   : FI Functional Consultant
*& Project        : ?
*& Transport-No   : ?
*& Description    : Vendor Credit Memo/Invoice Creation For FB65
*& T-Code         : ?
*&----------------------------------------------------------------------*
REPORT zfi_ven_inv_credit_create.

INCLUDE zfi_ven_inv_credit_create_top.
INCLUDE zfi_ven_inv_credit_create_sel.
INCLUDE zfi_ven_inv_credit_create_f01.

START-OF-SELECTION.

*** Get File Data
  PERFORM get_file_data.
*** Call Bapi
  PERFORM create_bapi.
*** Display Error/Success LOG
  PERFORM display_log.

*&---------------------------------------------------------------------*
*& Include          ZFI_VEN_INV_CREDIT_CREATE_TOP
*&---------------------------------------------------------------------*
TABLESsscrfields.

TYPES:BEGIN OF ty_final,
        sno         TYPE i,
        transaction TYPE buscase,
        vend_no     TYPE lifnr,    "newko,
        inv_date    TYPE bldat,        " Document Date
        post_date   TYPE budat,        " Posting Date
        xblnr       TYPE xblnr,
        currency    TYPE waers,
        bupla       TYPE bupla,
        hdr_txt     TYPE sgtxt,
        gl_acc      TYPE hkont,
        gl_amt      TYPE bapidoccur,
        taxcode     TYPE bseg-mwskz,    " Tax Code bseg-mwskz,
        assinment   TYPE dzuonr,
        item_text   TYPE sgtxt,
        cost_center TYPE kostl,
        profit_ctr  TYPE prctr,
        wt_withcd   TYPE wt_withcd,
        plant       TYPE werks_d,
      END OF ty_final.

DATA:
  gt_data  TYPE TABLE OF ty_final,
  gt_data1 TYPE TABLE OF ty_final,
  ls_data  TYPE  ty_final.

TYPES BEGIN OF ty_msg,
          sno    TYPE i,
          type   TYPE char10,"bapi_mtype,
          doc_no TYPE belnr_d,
          gjahr  TYPE gjahr,
          msg    TYPE bapi_msg,
*          number TYPE symsgno,
        END OF ty_msg.
DATA:
  gt_msg TYPE TABLE OF ty_msg,
  gs_msg TYPE ty_msg.

DATA:
      lv_mseg TYPE string.

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
      h       TYPE i.

*&---------------------------------------------------------------------*
*& Include          ZFI_VEN_INV_CREDIT_CREATE_SEL
*&---------------------------------------------------------------------*

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001.
  PARAMETERS p_file TYPE rlgrap-filename OBLIGATORY.
  PARAMETERSp_check AS CHECKBOX DEFAULT 'X'.
SELECTION-SCREEN END OF BLOCK b1.

INITIALIZATION.

SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE TEXT-002.
  SELECTION-SCREEN PUSHBUTTON 1(60cmdgen USER-COMMAND a_gen VISIBLE LENGTH 20.
SELECTION-SCREEN END OF BLOCK b2.

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.

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

*&---------------------------------------------------------------------*
*& Include          ZFI_VEN_INV_CREDIT_CREATE_F01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form file_upload
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM file_upload .
**** file upload data
  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_data
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM get_file_data .
  DATA:t_raw   TYPE truxs_t_text_data.
  CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
    EXPORTING
*     i_field_seperator    =
      i_line_header        'X'
      i_tab_raw_data       t_raw
      i_filename           p_file
    TABLES
      i_tab_converted_data gt_data.

  IF gt_data IS INITIAL.
    MESSAGE 'No data uploaded' TYPE 'E'.
  ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form create_bapi
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM create_bapi .
  DATA:
    lt_header    TYPE TABLE OF bapiache09,
    ls_header    TYPE bapiache09,
    lt_gl_acc    TYPE TABLE OF bapiacgl09,
    ls_gl_acc    TYPE bapiacgl09,
    lt_acc_pay   TYPE TABLE OF bapiacap09,
    ls_acc_pay   TYPE bapiacap09,
    lt_curr      TYPE TABLE OF bapiaccr09,
    ls_curr      TYPE bapiaccr09,
    lt_tax       TYPE TABLE OF bapiactx09,
    ls_tax       TYPE bapiactx09,
    lt_accountwt TYPE TABLE OF bapiacwt09,
    ls_accountwt TYPE bapiacwt09,
    lt_return    TYPE TABLE OF bapiret2,
    ls_return    TYPE bapiret2,
    lt_criteria  TYPE bapiackec9_tab.

  DATAlv_obj_typ LIKE  bapiache09-obj_type,
        lv_obj_key LIKE  bapiache09-obj_key,
        lv_obj_sys LIKE  bapiache09-obj_sys.
*** variable declarations
  DATAlv_item_no TYPE posnr_acc.

*** calculation tax code decalrations
  DATA lv_taxtot TYPE bset-fwste,
         lv_taxded TYPE bset-fwste.
  DATA lt_mwdat TYPE TABLE OF rtax1u15.
*** extension fill for posting key
  DATAlt_extension2 TYPE TABLE OF  bapiparex,
        ls_extension2 TYPE bapiparex.

  DATA:lt_extension1 TYPE TABLE OF bapiacextc,
       ls_extension1 TYPE bapiacextc.

  DATA:lv_amt  TYPE wrbtr.
  DATA:lv_fiscal_year TYPE gjahr.

*** Constant Declaration
  CONSTANTSc_cc    TYPE bukrs VALUE '****'.



  REFRESH:  gt_data1.
  gt_data1[] gt_data[].

  SORT gt_data BY sno.
  DELETE ADJACENT DUPLICATES FROM gt_data COMPARING sno.

  LOOP AT gt_data INTO ls_data.

*** header DATA declarations
    DATA(lv_count)         ls_data-sno.

    CLEAR:ls_header.
    ls_header-username     sy-uname.
    ls_header-header_txt   ls_data-hdr_txt.
    ls_header-comp_code    c_cc.
    ls_header-doc_date     ls_data-inv_date .

    PERFORM convert_date USING ls_header-doc_date.
    ls_header-pstng_date   ls_data-post_date.
    PERFORM convert_date USING ls_header-pstng_date.

    IF ls_data-transaction 'G'.     " Vendor Credit Memo
      ls_header-doc_type   'KG'.
    ELSEIF ls_data-transaction 'R'" Vendor Invoice Normal Document
      ls_header-doc_type   'KR'.
    ENDIF.

    ls_header-ref_doc_no ls_data-xblnr.

    "Get Fiscal Year
    CALL FUNCTION 'GET_CURRENT_YEAR'
      EXPORTING
        bukrs c_cc
        date  ls_data-post_date
      IMPORTING
        curry lv_fiscal_year.

    SELECT SINGLE FROM bkpf INTO @DATA(ls_bkpf)
         WHERE xblnr EQ @ls_header-ref_doc_no
           AND bukrs EQ @c_cc.

    IF sy-subrc EQ 0.
      gs_msg-sno   ls_data-sno.
      gs_msg-type  icon_led_red.
      gs_msg-msg   |Duplicate record found for Reference#{ ls_bkpf-bukrs }/{ ls_bkpf-belnr }/{ ls_bkpf-gjahr }|.
      gs_msg-gjahr lv_fiscal_year.
      APPENDgs_msg TO gt_msg.
      CLEARgs_msg.
      CONTINUE.
    ENDIF.

    "items declarations
    LOOP AT gt_data1 ASSIGNING FIELD-SYMBOL(<gs_data>WHERE sno ls_data-sno.
      " Fill GL Account Details
      IF <gs_data>-gl_acc IS NOT INITIAL.
        APPEND INITIAL LINE TO lt_gl_acc ASSIGNING FIELD-SYMBOL(<ls_gl_acc>).
        <ls_gl_acc>-itemno_acc     lv_item_no lv_item_no + 1.
        <ls_gl_acc>-gl_account     |{ <gs_data>-gl_acc ALPHA IN }|.
        <ls_gl_acc>-item_text      <gs_data>-item_text.
        <ls_gl_acc>-comp_code      c_cc.
        <ls_gl_acc>-profit_ctr     |{ <gs_data>-profit_ctr ALPHA IN }|.
        <ls_gl_acc>-tax_code       <gs_data>-taxcode.
        <ls_gl_acc>-businessplace  <gs_data>-bupla.
        <ls_gl_acc>-itemno_tax     lv_item_no.
        <ls_gl_acc>-alloc_nmbr     <gs_data>-assinment.

        APPEND INITIAL LINE TO lt_curr ASSIGNING FIELD-SYMBOL(<ls_curr>).
        <ls_curr>-itemno_acc lv_item_no.
        <ls_curr>-currency   <gs_data>-currency.
        <ls_curr>-amt_doccur <gs_data>-gl_amt.
        IF ls_data-transaction 'G'.
          MULTIPLY <ls_curr>-amt_doccur BY -1.
        ENDIF.
      ENDIF.

      SELECT SINGLE *
         FROM ska1
         INTO @DATA(ls_ska1)
        WHERE saknr @<ls_gl_acc>-gl_account
          AND ktopl @c_cc.

      SELECT SINGLE *
                FROM cskb
                INTO @DATA(ls_cskb)
               WHERE kstar @<ls_gl_acc>-gl_account
                 AND kokrs @c_cc.
      IF ls_ska1-xbilk abap_false.
        IF ls_cskb-katyp '11'.
          APPEND INITIAL LINE TO lt_criteria ASSIGNING FIELD-SYMBOL(<ls_criteria>).
          <ls_criteria>-itemno_acc lv_item_no.
          <ls_criteria>-fieldname  'WERKS'.
*          <ls_criteria>-character  = |{ <gs_data>-profit_ctr ALPHA = IN }|.
          <ls_criteria>-character  =  <gs_data>-profit_ctr.
        ELSEIF ls_cskb-katyp '01'.
          <ls_gl_acc>-costcenter |{ <gs_data>-cost_center ALPHA IN }|.
        ENDIF.
      ENDIF.

      "Fill Vendor Details into Account payable
      IF <gs_data>-vend_no IS NOT INITIAL.
        ls_acc_pay-itemno_acc    =  lv_item_no lv_item_no + 1.
        ls_acc_pay-vendor_no     |{ <gs_data>-vend_no ALPHA IN }|.
        ls_acc_pay-alloc_nmbr    <gs_data>-assinment.
        ls_acc_pay-item_text     <gs_data>-item_text.
        ls_acc_pay-businessplace <gs_data>-bupla.
        ls_acc_pay-sectioncode   c_cc.
        ls_acc_pay-tax_code      <gs_data>-taxcode.
        ls_acc_pay-profit_ctr    |{ <gs_data>-profit_ctr ALPHA IN }|.
        APPENDls_acc_pay TO lt_acc_pay.

        IF <gs_data>-wt_withcd IS NOT INITIAL.
          "With Holding Tax Data
          APPEND INITIAL LINE TO lt_accountwt ASSIGNING FIELD-SYMBOL(<ls_accountwt>).
          <ls_accountwt>-itemno_acc lv_item_no.
          <ls_accountwt>-wt_type    <gs_data>-wt_withcd.
          <ls_accountwt>-wt_code    <gs_data>-wt_withcd.
          <ls_accountwt>-bas_amt_tc <gs_data>-gl_amt.
        ENDIF.

        CLEARlv_taxtot,lv_taxded.
        REFRESH:lt_mwdat.

        IF <gs_data>-taxcode IS NOT INITIAL.

          lv_amt <gs_data>-gl_amt.

          EXPORT lv_bupla FROM <gs_data>-bupla TO MEMORY ID 'BUPLA'.                

          CALL FUNCTION 'CALCULATE_TAX_FROM_NET_AMOUNT'
            EXPORTING
              i_bukrs           '1983'
              i_mwskz           <gs_data>-taxcode
              i_waers           'INR'
              i_wrbtr           lv_amt
            IMPORTING
              e_fwste           lv_taxtot
              e_fwast           lv_taxded
            TABLES
              t_mwdat           lt_mwdat
            EXCEPTIONS
              bukrs_not_found   1
              country_not_found 2
              mwskz_not_defined 3
              mwskz_not_valid   4
              ktosl_not_found   5
              kalsm_not_found   6
              parameter_error   7
              knumh_not_found   8
              kschl_not_found   9
              unknown_error     10
              account_not_found 11
              txjcd_not_valid   12
              tdt_error         13
              txa_error         14
              OTHERS            15.
          IF sy-subrc <> 0.
            MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
          ENDIF.
        ENDIF.

        "Fill Vendor Line Amount
        ls_curr-itemno_acc lv_item_no.
        ls_curr-currency   <gs_data>-currency.
        ls_curr-amt_doccur <gs_data>-gl_amt + lv_taxtot.

        IF ls_data-transaction 'R'.
          MULTIPLY ls_curr-amt_doccur BY -1.
        ENDIF.

        APPENDls_curr TO lt_curr.
        CLEAR ls_curr.

        CLEAR lv_amt.
        LOOP AT lt_mwdat ASSIGNING FIELD-SYMBOL(<ls_mwdat>).
          CHECK <ls_mwdat>-wmwst NE 0.
          lv_item_no lv_item_no + 1.
          APPEND INITIAL LINE TO lt_tax ASSIGNING  FIELD-SYMBOL(<ls_acctax>).
          IF <ls_acctax> IS ASSIGNED.
            <ls_acctax>-itemno_acc lv_item_no.
            <ls_acctax>-gl_account <ls_mwdat>-hkont.
            <ls_acctax>-tax_code   <gs_data>-taxcode.
            <ls_acctax>-tax_rate   <ls_mwdat>-msatz.
            <ls_acctax>-cond_key   <ls_mwdat>-kschl.
            <ls_acctax>-acct_key   <ls_mwdat>-ktosl.
            <ls_acctax>-direct_tax abap_true.
            <ls_acctax>-itemno_tax lv_item_no.

            APPEND INITIAL LINE TO lt_curr ASSIGNING FIELD-SYMBOL(<ls_curr_amt>).
            IF <ls_curr_amt> IS ASSIGNED.
              <ls_curr_amt>-itemno_acc      lv_item_no.
              <ls_curr_amt>-curr_type       '00'.
              <ls_curr_amt>-currency        <gs_data>-currency.
              <ls_curr_amt>-amt_doccur      <ls_mwdat>-wmwst.
              <ls_curr_amt>-amt_base        <ls_mwdat>-wmwst.
              IF ls_data-transaction 'G'.
                MULTIPLY <ls_curr_amt>-amt_doccur BY -1.
                MULTIPLY <ls_curr_amt>-amt_base BY -1.
              ENDIF.
            ENDIF.
          ENDIF.
        ENDLOOP.
      ENDIF.
    ENDLOOP.

    CALL FUNCTION 'BAPI_ACC_DOCUMENT_CHECK'
      EXPORTING
        documentheader ls_header
      TABLES
        accountgl      lt_gl_acc
        accountpayable lt_acc_pay
        accounttax     lt_tax
        currencyamount lt_curr
        criteria       lt_criteria
        return         lt_return
        accountwt      lt_accountwt.

    LOOP AT lt_return INTO ls_return WHERE type 'E'.
      gs_msg-sno     lv_count.
      gs_msg-msg     ls_return-message.
      gs_msg-type    'E'.
      APPENDgs_msg TO gt_msg.
      CLEARgs_msg.
    ENDLOOP.
    READ TABLE lt_return TRANSPORTING NO FIELDS WITH KEY type 'E'.
    IF sy-subrc NE AND p_check abap_false.
      CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'
        EXPORTING
          documentheader ls_header
        IMPORTING
          obj_type       lv_obj_typ
          obj_key        lv_obj_key
          obj_sys        lv_obj_sys
        TABLES
          accountgl      lt_gl_acc
          accountpayable lt_acc_pay
          accounttax     lt_tax
          currencyamount lt_curr
          criteria       lt_criteria
          return         lt_return
          accountwt      lt_accountwt.

      READ TABLE lt_return  INTO ls_return WITH KEY type 'E'.
      IF sy-subrc NE 0.
        CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
          EXPORTING
            wait abap_true.
        WAIT UP TO SECONDS.
        gs_msg-sno     lv_count.
        gs_msg-doc_no  lv_obj_key(10).
        gs_msg-gjahr   lv_obj_key+14(4).
        gs_msg-type    icon_green_light.
        gs_msg-msg     |Document posted successfully:{ lv_obj_key }|.
        APPEND gs_msg TO gt_msg.
        CLEARgs_msg.
      ELSE.
        CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
        LOOP AT lt_return INTO ls_return WHERE type 'E'.
          gs_msg-sno     lv_count.
          gs_msg-msg     ls_return-message.
          gs_msg-type    icon_red_light.
          APPENDgs_msg TO gt_msg.
          CLEARgs_msg.
        ENDLOOP.
      ENDIF.
    ENDIF.

    CLEARls_header,
           lt_curr,
           lt_tax,
           lt_extension2,
           lt_gl_acc,
           lt_acc_pay,
           lt_return,
           lt_accountwt,
           lt_criteria,
           lv_item_no.
  ENDLOOP.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form display_log
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM display_log .
  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.

  IF gt_msg IS NOT INITIAL.

    APPEND VALUE #fieldname    'SNO'
                    col_pos      1
                    ref_tabname  'GT_ALV'
                    seltext_m    'Serial Number' TO lt_fieldcat.

    APPEND VALUE #fieldname    'TYPE'
                    col_pos      2
                    ref_tabname  'GT_ALV'
                    seltext_m    'Status' TO lt_fieldcat.

    APPEND VALUE #fieldname   'DOC_NO'
                    col_pos     3
                    ref_tabname 'GT_ALV'
                    seltext_m   'Document No' TO lt_fieldcat.

    APPEND VALUE #fieldname    'GJAHR'
                    col_pos      4
                    ref_tabname  'GT_ALV'
                    seltext_m    'Year' TO lt_fieldcat.

    APPEND VALUE #fieldname    'MSG'
                    col_pos      5
                    ref_tabname  'GT_ALV'
                    seltext_m    'Message' TO lt_fieldcat.


    CLEAR ls_layout.
    ls_layout-colwidth_optimize 'X'.
    ls_layout-zebra             'X'.

    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_msg
      EXCEPTIONS
        program_error      1
        OTHERS             2.
  ELSE.
    MESSAGE 'No errors found' TYPE 'I'.
  ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form convert_date
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*&      --> LS_HEADER_DOC_DATE
*&---------------------------------------------------------------------*
FORM convert_date USING p_gs_date.
  CALL FUNCTION 'CONVERT_DATE_TO_INTERN_FORMAT'
    EXPORTING
      datum p_gs_date
      dtype 'DATS'
    IMPORTING
      idate p_gs_date.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form generate_template
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        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  'TRANSACTION',
                             3  'VENDOR',
                             4  'INVOICE DATE',
                             5  'POSTING DATE',
                             6  'REF DOC NO',
                             7  'CURRENCY',
                             8  'BUSINESS PLACE',
                             9  'HEDER TEXT',
                             10 'GL ACCOUNT',
                             11 'GL AMOUNT',
                             12 'TAXCODE',
                             13 'ASSIGNMENT NUMBER',
                             14 'ITEM TEXT',
                             15 'COST CENTER',
                             16 'PROFIT CENTER',
                             17 'WITH HOLDING TAX',
                             18 'PLANT'.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form err_hdl
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        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
*&---------------------------------------------------------------------*
*&      --> P_1
*&      --> P_1
*&      --> P_0
*&      --> P_
*&---------------------------------------------------------------------*
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)