7
*-----Type pool declaration TYPE-POOLS: truxs. *-----Structure declaration TYPES : BEGIN OF ty_tab, col1(30) TYPE c, "Serial No col2(30) TYPE c, "Customer No col3(30) TYPE c, "Company Code col4(30) TYPE c, "Reference Document No col5(30) TYPE c, "Document date col6(30) TYPE c, "Posting Date col7(30) TYPE c, "Text col8(30) TYPE c, "Amount col9(30) TYPE c, "Currency col10(30) TYPE c, "G/L Account col11(30) TYPE c, "Company Code col12(50) TYPE c, "Amount in Doc.Currency col13(50) TYPE c, "Currency col14(50) TYPE c, "Profit center col15(50) TYPE c, "Item text END OF ty_tab, BEGIN OF ty_header, col1(30) TYPE c, "Serial No col2(30) TYPE c, "Customer No col3(30) TYPE c, "Company Code col4(30) TYPE c, "Reference Document No col5(30) TYPE c, "Document date col6(30) TYPE c, "Posting Date col7(30) TYPE c, "Text col8(30) TYPE c, "Amount col9(30) TYPE c, "Currency END OF ty_header, BEGIN OF ty_lineitem, col10(30) TYPE c, "G/L Account col11(30) TYPE c, "Company Code col12(50) TYPE c, "Amount in Doc.Currency col13(50) TYPE c, "Currency col14(50) TYPE c, "Profit center col15(50) TYPE c, "Item text END OF ty_lineitem. *-----Internal table declarations DATA : it_tab TYPE STANDARD TABLE OF ty_tab, it_raw TYPE truxs_t_text_data, it_header TYPE STANDARD TABLE OF ty_header, it_lineitem TYPE STANDARD TABLE OF ty_lineitem, it_bapiaccr09 TYPE STANDARD TABLE OF bapiaccr09, it_bapiacgl09 TYPE STANDARD TABLE OF bapiacgl09, it_bapiacar09 TYPE STANDARD TABLE OF bapiacar09,

Bapi

  • Upload
    mrdigo

  • View
    212

  • Download
    0

Embed Size (px)

DESCRIPTION

Bapi

Citation preview

Page 1: Bapi

*-----Type pool declaration

TYPE-POOLS: truxs.

 

*-----Structure declaration

TYPES : BEGIN OF ty_tab,

          col1(30)        TYPE c,  "Serial No

          col2(30)        TYPE c,  "Customer No

          col3(30)        TYPE c,  "Company Code

          col4(30)        TYPE c,  "Reference Document No

          col5(30)        TYPE c,  "Document date

          col6(30)        TYPE c,  "Posting Date

          col7(30)        TYPE c,  "Text

          col8(30)        TYPE c,  "Amount

          col9(30)        TYPE c,  "Currency

          col10(30)       TYPE c,  "G/L Account

          col11(30)       TYPE c,  "Company Code

          col12(50)       TYPE c,  "Amount in Doc.Currency

          col13(50)       TYPE c,  "Currency

          col14(50)       TYPE c,  "Profit center

          col15(50)       TYPE c,  "Item text

        END   OF ty_tab,

 

        BEGIN OF ty_header,

          col1(30)        TYPE c,  "Serial No

          col2(30)        TYPE c,  "Customer No

          col3(30)        TYPE c,  "Company Code

          col4(30)        TYPE c,  "Reference Document No

          col5(30)        TYPE c,  "Document date

          col6(30)        TYPE c,  "Posting Date

          col7(30)        TYPE c,  "Text

          col8(30)        TYPE c,  "Amount

          col9(30)        TYPE c,  "Currency

        END   OF ty_header,

 

        BEGIN OF ty_lineitem,

          col10(30)       TYPE c,  "G/L Account

          col11(30)       TYPE c,  "Company Code

          col12(50)       TYPE c,  "Amount in Doc.Currency

          col13(50)       TYPE c,  "Currency

          col14(50)       TYPE c,  "Profit center

          col15(50)       TYPE c,  "Item text

        END   OF ty_lineitem.

 

*-----Internal table declarations

DATA : it_tab             TYPE STANDARD TABLE OF ty_tab,

       it_raw             TYPE truxs_t_text_data,

       it_header          TYPE STANDARD TABLE OF ty_header,

       it_lineitem        TYPE STANDARD TABLE OF ty_lineitem,

       it_bapiaccr09      TYPE STANDARD TABLE OF bapiaccr09,

       it_bapiacgl09      TYPE STANDARD TABLE OF bapiacgl09,

       it_bapiacar09      TYPE STANDARD TABLE OF bapiacar09,

Page 2: Bapi

       it_bapiaccr09_temp TYPE STANDARD TABLE OF bapiaccr09,"#EC NEEDED

       return             LIKE bapiret2 OCCURS 0 WITH HEADER LINE,"#EC *

       return1            LIKE bapiret2 OCCURS 0 WITH HEADER LINE,"#EC *

*-----Workarea declarations

       x_tab              LIKE LINE OF it_tab,

       x_header           LIKE LINE OF it_header,

       x_lineitem         LIKE LINE OF it_lineitem,

       x_invheader        TYPE bapiache09 OCCURS 0 WITH HEADER LINE,"#EC *

       x_bapiaccr09       LIKE LINE OF it_bapiaccr09,

       x_bapiacgl09       LIKE LINE OF it_bapiacgl09,

       x_bapiacar09       LIKE LINE OF it_bapiacar09,

       x_bapiaccr09_temp  LIKE LINE OF it_bapiaccr09,

*-----Variables declarations

       v_str1(2)          TYPE c,

       v_str2(2)          TYPE c,

       v_str3(4)          TYPE c,

       v_doc_date         LIKE sy-datum,

       v_pstng_date       LIKE sy-datum,

       v_obj_key          TYPE bapiache09-obj_key,

       v_text             TYPE string,

       v_customer         TYPE bapiacar09-customer,

       v_gl_account       TYPE bapiacgl09-gl_account,

       v_itemno           TYPE bapiacgl09-itemno_acc,

       v_itemno_1         TYPE bapiacgl09-itemno_acc,

       v_amount(25)       TYPE c.

 

 

----

  SELECTION-SCREEN declaration                                       *

----

SELECTION-SCREEN BEGIN OF LINE.

SELECTION-SCREEN COMMENT 3(20) text-001 FOR FIELD p_fname.

SELECTION-SCREEN POSITION 25.

PARAMETERS: p_fname(128) TYPE c OBLIGATORY.

SELECTION-SCREEN END OF LINE.

 

----

  AT SELECTION-SCREEN ON VALUE-REQUEST                               *

----

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_fname.

 

*-----Calling function for selecting the local file

  CALL FUNCTION 'F4_FILENAME'

    EXPORTING

      program_name  = syst-cprog

      dynpro_number = syst-dynnr

    IMPORTING

Page 3: Bapi

      file_name     = p_fname.

 

----

                START-OF-SELECTION                                   *

----

START-OF-SELECTION.

 

*-----Uploading excel file into internal table

  CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'

    EXPORTING

      i_line_header        = 'X'

      i_tab_raw_data       = it_raw

      i_filename           = p_fname

    TABLES

      i_tab_converted_data = it_tab[]

    EXCEPTIONS

      conversion_failed    = 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.

 

  LOOP AT it_tab INTO x_tab.

*-----Checking for existing data in it_header

    READ TABLE it_header INTO x_header WITH KEY col1 = x_tab-col1

                                                col2 = x_tab-col2

                                                col3 = x_tab-col3

                                                col4 = x_tab-col4

                                                col5 = x_tab-col5

                                                col6 = x_tab-col6

                                                col7 = x_tab-col7

                                                col8 = x_tab-col8

                                                col9 = x_tab-col9.

    IF sy-subrc NE 0.

      IF x_header IS NOT INITIAL.

*-----calling bapi for creating customer invoice

        PERFORM call_bapi.

        REFRESH : it_header, it_lineitem.

      ENDIF.

*-----making header table

      x_header-col1    = x_tab-col1.

      x_header-col2    = x_tab-col2.

      x_header-col3    = x_tab-col3.

      x_header-col4    = x_tab-col4.

      x_header-col5    = x_tab-col5.

      x_header-col6    = x_tab-col6.

      x_header-col7    = x_tab-col7.

Page 4: Bapi

      x_header-col8    = x_tab-col8.

      x_header-col9    = x_tab-col9.

      x_lineitem-col10 = x_tab-col10.

      x_lineitem-col11 = x_tab-col11.

      x_lineitem-col12 = x_tab-col12.

      x_lineitem-col13 = x_tab-col13.

      x_lineitem-col14 = x_tab-col14.

      x_lineitem-col15 = x_tab-col15.

      APPEND x_header TO it_header.

      APPEND x_lineitem TO it_lineitem.

    ELSE.

      x_lineitem-col10 = x_tab-col10.

      x_lineitem-col11 = x_tab-col11.

      x_lineitem-col12 = x_tab-col12.

      x_lineitem-col13 = x_tab-col13.

      x_lineitem-col14 = x_tab-col14.

      x_lineitem-col15 = x_tab-col15.

      APPEND x_lineitem TO it_lineitem.

    ENDIF.

  ENDLOOP.

 

*-----Calling BAPI for last set of data

  PERFORM call_bapi.

  REFRESH : it_header, it_lineitem.

 

----

                         Form  call_bapi                             *

----

FORM call_bapi.

*-----Formatting invoice date

  SPLIT x_header-col5 AT '.' INTO v_str1 v_str2 v_str3.

  IF STRLEN( v_str1 ) LT 2.

    CONCATENATE '0' v_str1 INTO v_str1.

  ENDIF.

  IF STRLEN( v_str2 ) LT 2.

    CONCATENATE '0' v_str2 INTO v_str2.

  ENDIF.

  IF STRLEN( v_str3 ) LT 4.

    CONCATENATE '20' v_str3 INTO v_str3.

  ENDIF.

 

  CONCATENATE v_str3 v_str1 v_str2 INTO v_doc_date.

  CLEAR : v_str1, v_str2, v_str3.

 

*-----Formatting posting date

  SPLIT x_header-col6 AT '.' INTO v_str1 v_str2 v_str3.

  IF STRLEN( v_str1 ) LT 2.

    CONCATENATE '0' v_str1 INTO v_str1.

  ENDIF.

Page 5: Bapi

  IF STRLEN( v_str2 ) LT 2.

    CONCATENATE '0' v_str2 INTO v_str2.

  ENDIF.

  IF STRLEN( v_str3 ) LT 4.

    CONCATENATE '20' v_str3 INTO v_str3.

  ENDIF.

 

  CONCATENATE v_str3 v_str1 v_str2 INTO v_pstng_date.

  CLEAR : v_str1, v_str2, v_str3.

 

*-----Making the Header

  x_invheader-obj_type   = 'BKPFF'.                  "Reference procedure

  x_invheader-obj_key    = '$'.                      "Object key

  CONCATENATE sy-sysid 'CLNT' sy-mandt INTO

  x_invheader-obj_sys.                               "Logical system of source document

  x_invheader-bus_act    = 'RFBU'.                   "Business Transaction

  x_invheader-username   = sy-uname.                 "User name

  x_invheader-header_txt = x_header-col7.            "Document Header Text

  x_invheader-comp_code  = x_header-col3.            "Company Code

  x_invheader-doc_date   = v_doc_date.               "Document Date in Document

  x_invheader-pstng_date = v_pstng_date.             "Posting Date in the Document

  x_invheader-doc_type   = 'DR'.                     "Reference Document Number

  x_invheader-ref_doc_no = x_header-col4.            "Reference Document Number

 

*-----For ACCOUNTRECEIVABLE

  LOOP AT it_header INTO x_header.

    x_bapiacar09-itemno_acc = '1'.                   "Accounting Document Line Item Number

*-----Filling zeros before Customer No

    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'

      EXPORTING

        input  = x_header-col2

      IMPORTING

        output = v_customer.

    x_bapiacar09-customer   = v_customer.            "Customer Number 1

    x_bapiacar09-comp_code  = x_header-col3.         "Company Code

    APPEND x_bapiacar09 TO it_bapiacar09.

  ENDLOOP.

 

*-----For ACCOUNTGL

  LOOP AT it_lineitem INTO x_lineitem.

    IF it_bapiacgl09 IS INITIAL.

      v_itemno              = 2.

    ELSE.

      v_itemno              = v_itemno + 1.

    ENDIF.

    x_bapiacgl09-itemno_acc = v_itemno.              "Accounting Document Line Item Number

*-----Filling zeros before G/L Account no

    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'

      EXPORTING

        input  = x_lineitem-col10

      IMPORTING

Page 6: Bapi

        output = v_gl_account.

    x_bapiacgl09-gl_account = v_gl_account.          "General Ledger Account

    x_bapiacgl09-comp_code  = x_lineitem-col11.      "Company Code

    x_bapiacgl09-profit_ctr = x_lineitem-col14.      "Profit Center

    x_bapiacgl09-item_text  = x_lineitem-col15.      "Item Text

    APPEND x_bapiacgl09 TO it_bapiacgl09.

  ENDLOOP.

*-----Clearing variable

  CLEAR : v_itemno.

 

*-----For CURRENCYAMOUNT

  LOOP AT it_header INTO x_header.

    x_bapiaccr09-itemno_acc = '0000000001'.          "Accounting Document Line Item Number

    x_bapiaccr09-curr_type  = '00'.                  "Currency type and valuation view

    x_bapiaccr09-amt_doccur = x_header-col8.         "Amount in document currency

    x_bapiaccr09-currency   = x_header-col9.         "Currency Key

    APPEND x_bapiaccr09 TO it_bapiaccr09.

  ENDLOOP.

 

  v_itemno_1 = 1.

 

  LOOP AT it_lineitem INTO x_lineitem.

    v_itemno_1 = v_itemno_1 + 1.

    x_bapiaccr09_temp-itemno_acc = v_itemno_1.       "Accounting Document Line Item Number

    x_bapiaccr09_temp-curr_type  = '00'.             "Currency type and valuation view

    CONCATENATE '-' x_lineitem-col12 INTO v_amount.

    x_bapiaccr09_temp-amt_doccur = v_amount.         "x_lineitem-col12. "Amount in document currency

    x_bapiaccr09_temp-currency   = x_lineitem-col13. "Currency Key

    APPEND x_bapiaccr09_temp TO it_bapiaccr09.

  ENDLOOP.

 

  CLEAR : v_itemno_1.

*-----Calling BAPI for creating Customer Invoice

  CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'

    EXPORTING

      documentheader    = x_invheader

    IMPORTING

      obj_key           = v_obj_key

    TABLES

      accountgl         = it_bapiacgl09

      accountreceivable = it_bapiacar09

      currencyamount    = it_bapiaccr09

      return            = return.

 

*-----Check the return code for error message.

  LOOP AT return

    TRANSPORTING NO FIELDS

    WHERE type = 'E' OR type = 'A'.

    EXIT.

  ENDLOOP.

 

Page 7: Bapi

*-----Generating errors (if any)

  IF sy-subrc = 0.

    WRITE : text-003, x_header-col1.                                                 "Serial No :

    WRITE :/ text-002. "Invoice Not Created Because :

    LOOP AT return.                                         "#EC *

      WRITE:/ "return-type,

              return-message.

    ENDLOOP.

    ULINE :/(150).

  ELSE.

*-----BAPI Commit

    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'

      EXPORTING

        wait   = 'X'

      IMPORTING

        return = return1.

 

*-----Displaying invoice no as Success message

    WRITE : text-003, x_header-col1.                                                 "Serial No :

    CONCATENATE 'Invoice No. ' v_obj_key+0(10) ' Created ' INTO v_text."#EC NOTEXT

    WRITE :/ v_text.

    ULINE :/(150).

  ENDIF.

 

*-----Refreshing internal tables

  REFRESH : it_bapiaccr09, it_bapiacgl09, it_bapiacar09, it_bapiaccr09_temp, return.

ENDFORM.                    " call_bapi