Bapi For Fb70
Bapi For Fb70
*-----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, col2(30) TYPE c, col3(30) TYPE c, col4(30) TYPE c, col5(30) TYPE c, col6(30) TYPE c, col7(30) TYPE c, col8(30) TYPE c, col9(30) TYPE c, END OF ty_header, BEGIN OF ty_lineitem, col10(30) TYPE c, col11(30) TYPE c, col12(50) TYPE c, col13(50) TYPE c, col14(50) TYPE c, col15(50) TYPE c, END OF ty_lineitem.
"Serial No "Customer No "Company Code "Reference Document No "Document date "Posting Date "Text "Amount "Currency
"G/L Account "Company Code "Amount in Doc.Currency "Currency "Profit center "Item text
*-----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, 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 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 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. 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. 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 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. *-----Generating errors (if any) IF sy-subrc = 0. WRITE : text-003, x_header-col1. 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.
"Serial No :
*-----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