Application Development Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 

Error on bapi_acc_document_post

0 Kudos

Hi experts,

    

     when i executing this bapi_acc_document_post, am getting error  " FI/CO interface: Line item entered several times"  i mention code below  so please give me suggestion.

*&---------------------------------------------------------------------*
*& Report  ZSAMPLE
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  ZSAMPLE.



data: BEGIN OF WA_HEADER,
        ID TYPE I,
        KUNNR TYPE n LENGTH 10,
        INV_DATE TYPE c LENGTH 10,
        PST_DATE TYPE c LENGTH 10,
        REF TYPE invfo-xblnr,
        AMT_DOCCUR TYPE PA2010-BETRG,
        TXT(40),
   END OF WA_HEADER.

DATA : IT_HEADER like WA_HEADER OCCURS WITH HEADER LINE.


data: BEGIN OF WA_ITEM,
        ID TYPE I,
        GL_ACCOUNT TYPE n LENGTH 10,
        ITEM_TEXT TYPE BAPIACGL09-ITEM_TEXT,
        BUS_AREA  TYPE BAPIACGL09-BUS_AREA,
        AMT_DOCCUR TYPE BAPIACCR09-AMT_DOCCUR,
        KOSTL TYPE CSKT-KOSTL,
*       VAT(2),

   END OF WA_ITEM.

DATA : IT_ITEM like WA_ITEM OCCURS WITH HEADER LINE.

*      value of excel-cell
TYPES: ty_d_itabvalue             TYPE alsmex_tabline-value,
*      internal table containing the excel data
        ty_t_itab                  TYPE alsmex_tabline   OCCURS 0,

*      line type of sender table
        BEGIN OF ty_s_senderline,
          line(4096)               TYPE c,
        END OF ty_s_senderline,
*      sender table
        ty_t_sender                TYPE ty_s_senderline  OCCURS 0.

*

CONSTANTSgc_esc              VALUE '"'.
DATA  temp_row TYPE I.
DATA  TEMP(4).
INCLUDE lalsmexf01.

DATA: it_data1 TYPE ty_t_itab.
DATA: it_data2 TYPE ty_t_itab.

DATA: it_data_wa LIKE LINE OF it_data1.
DATA: it_data_wa2 LIKE LINE OF it_data1.

* DATA DECLARATION

data: st_rw_s1 TYPE i VALUE '2'.
data: st_cl_s1 TYPE i VALUE '1'.
data: st_rw_s2 TYPE i VALUE '2'.
data: st_cl_s2 TYPE i VALUE '1'.
data: ed_rw_s1 TYPE i VALUE '3'.
data: ed_cl_s1 TYPE i VALUE '7'.
data: ed_rw_s2 TYPE i VALUE '5'.
data: ed_cl_s2 TYPE i VALUE '8'.

DATA: excel_tab TYPE ty_t_sender,
excel_tab1 TYPE ty_t_sender.

DATA: ld_separator TYPE c.
DATA: application TYPE ole2_object,
workbook TYPE ole2_object,
sheet TYPE ole2_object,
range TYPE ole2_object,
worksheet TYPE ole2_object.
DATA: h_cell TYPE ole2_object,
h_cell1 TYPE ole2_object.
DATA: ld_rc TYPE i.

TYPE-POOLS ole2.

*AT SELECTION-SCREEN.

   PARAMETERS: filename LIKE rlgrap-filename.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR filename.
   PERFORM value_help.


sTART-OF-SELECTION.

*  CASE sy-ucomm .
*    WHEN 'ONLI'.
       PERFORM execute.
       PERFORM bapi.

*  ENDCASE.

* MESSAGE DEFINATION

   DEFINE m_message.
     case sy-subrc.
       when 0.
       when 1.
         message id sy-msgid type sy-msgty number sy-msgno
         with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
       when others. raise upload_ole.
     endcase.
   END-OF-DEFINITION.

*&---------------------------------------------------------------------*
*&      Form  VALUE_HELP
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM VALUE_HELP .

   CALL FUNCTION 'DSVAS_DOC_WS_FILENAME_GET_50'
     EXPORTING
       def_filename     = ' '
       def_path         = ' '
       mask             = ',*.*,*.*.'
       mode             = 'O'
       title            = ' '
     IMPORTING
       filename         = filename
     EXCEPTIONS
       inv_winsys       = 1
       no_batch         = 2
       selection_cancel = 3
       selection_error  = 4
       OTHERS           = 5.
   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.                    " VALUE_HELP
*&---------------------------------------------------------------------*
*&      Form  EXECUTE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM EXECUTE .

* PARAMETER CHECK

   IF st_rw_s1 > ed_rw_s1.
     RAISE inconsistent_parameters.
   ENDIF.

   IF st_cl_s1 > ed_cl_s1.
     RAISE inconsistent_parameters.
   ENDIF.

   IF st_rw_s2 > ed_rw_s2.
     RAISE inconsistent_parameters.
   ENDIF.

   IF st_cl_s2 > ed_cl_s2.
     RAISE inconsistent_parameters.
   ENDIF.


   CLASS cl_abap_char_utilities DEFINITION LOAD.
   ld_separator = cl_abap_char_utilities=>horizontal_tab.

* OPENING EXCEL FILE
   IF application-header = space OR application-handle = -1.
     CREATE OBJECT application 'Excel.Application'.
     m_message.
   ENDIF.
   CALL METHOD OF
       application
       'Workbooks' = workbook.
   m_message.
   CALL METHOD OF
       application
       'Workbooks' = workbook.
   m_message.
   CALL METHOD OF
       workbook
       'Open'

     EXPORTING
       #1       = filename.
   m_message.
   CALL METHOD OF
       application
       'Worksheets' = sheet
     EXPORTING
       #1           = 1.
   m_message.
   CALL METHOD OF
       application
       'Worksheets' = sheet
     EXPORTING
       #1           = 1.
   m_message.
   CALL METHOD OF
       sheet
       'Activate'.
   m_message.
   GET PROPERTY OF application 'ACTIVESHEET' = sheet.
   m_message.

* MARKING OF WHOLE SPREADSHEET
   CALL METHOD OF
       sheet
       'Cells' = h_cell
     EXPORTING
       #1      = st_rw_s1
       #2      = st_cl_s1.
   m_message.
   CALL METHOD OF
       sheet
       'Cells' = h_cell1
     EXPORTING
       #1      = ed_rw_s1
       #2      = ed_cl_s1.
   m_message.

   CALL METHOD OF
       sheet
       'RANGE' = range
     EXPORTING
       #1      = h_cell
       #2      = h_cell1.
   m_message.
   CALL METHOD OF
       range
       'SELECT'.
   m_message.

* Copy marked area (SHEET1) into Clippboard

   CALL METHOD OF
       range
       'COPY'.
   m_message.

* Read clipboard into ABAP

   CALL METHOD cl_gui_frontend_services=>clipboard_import
     IMPORTING
       data                 = excel_tab
     EXCEPTIONS
       cntl_error           = 1
*     ERROR_NO_GUI         = 2
*     NOT_SUPPORTED_BY_GUI = 3
       OTHERS               = 4.
   IF sy-subrc <> 0.
     MESSAGE a037(alsmex).
   ENDIF.

   PERFORM separated_to_intern_convert TABLES excel_tab it_data1
   USING ld_separator.

* Clear the clipboard

   REFRESH excel_tab.
   CALL METHOD cl_gui_frontend_services=>clipboard_export
     IMPORTING
       data                 = excel_tab
     CHANGING
       rc                   = ld_rc
     EXCEPTIONS
       cntl_error           = 1
*     ERROR_NO_GUI         = 2
*     NOT_SUPPORTED_BY_GUI = 3
       OTHERS               = 4.

* Working in Second Excel Work Sheet

   CALL METHOD OF
       application
       'Worksheets' = sheet
     EXPORTING
       #1           = 2.
   m_message.
   CALL METHOD OF
       sheet
       'Activate'.
   m_message.
   GET PROPERTY OF application 'ACTIVESHEET' = sheet.
   m_message.
* Mark Sheet2

   CALL METHOD OF
       sheet
       'Cells' = h_cell
     EXPORTING
       #1      = st_rw_s2
       #2      = st_cl_s2.
   m_message.
   CALL METHOD OF
       sheet
       'Cells' = h_cell1
     EXPORTING
       #1      = ed_rw_s2
       #2      = ed_cl_s2.
   m_message.

   CALL METHOD OF
       sheet
       'RANGE' = range
     EXPORTING
       #1      = h_cell
       #2      = h_cell1.
   m_message.
   CALL METHOD OF
       range
       'SELECT'.
   m_message.

* Copy Marked Area (Sheet2) into Clippboard

   CALL METHOD OF
       range
       'COPY'.
   m_message.

* Read Clipboard into ABAP

   CALL METHOD cl_gui_frontend_services=>clipboard_import
     IMPORTING
       data                 = excel_tab1
     EXCEPTIONS
       cntl_error           = 1
*     ERROR_NO_GUI         = 2
*     NOT_SUPPORTED_BY_GUI = 3
       OTHERS               = 4.
   IF sy-subrc <> 0.
     MESSAGE a037(alsmex).
   ENDIF.

   PERFORM separated_to_intern_convert TABLES excel_tab1 it_data2
   USING ld_separator.

* Clear Clipboard

   REFRESH excel_tab.
   CALL METHOD cl_gui_frontend_services=>clipboard_export
   IMPORTING
   data = excel_tab1
   CHANGING
   rc = ld_rc
   EXCEPTIONS
   cntl_error = 1
* ERROR_NO_GUI = 2
* NOT_SUPPORTED_BY_GUI = 3
   OTHERS = 4
* Leaving Application
   .
   CALL METHOD OF
       application
       'QUIT'.
   m_message.

   FREE OBJECT application.
   m_message.


   LOOP AT it_data1 INTO it_data_wa2.

     IF temp_row ne it_data_wa2-ROW AND temp_row IS NOT INITIAL.

       temp_row = it_data_wa2-ROW.
       APPEND IT_HEADER.
     ELSE.
       temp_row = it_data_wa2-ROW.
     ENDIF.

     CASE it_data_wa2-COL.

       WHEN '0001'.
         IT_HEADER-ID = it_data_wa2-VALUE.
       WHEN '0002'.
         IT_HEADER-KUNNR = it_data_wa2-VALUE.
       WHEN '0003'.
         IT_HEADER-INV_DATE = it_data_wa2-value.
       WHEN '0004'.
         IT_HEADER-PST_DATE = it_data_wa2-VALUE.
       WHEN '0005'.
         IT_HEADER-REF = it_data_wa2-VALUE.
       WHEN '0006'.
         IT_HEADER-AMT_DOCCUR = it_data_wa2-VALUE.
       WHEN '0007'.
         IT_HEADER-TXT = it_data_wa2-VALUE.


     ENDCASE.

   ENDLOOP.
   APPEND IT_HEADER.

   CLEAR:temp_row.

   LOOP AT it_data2 INTO it_data_wa ."WHERE ROW = it_data_wa2-ROW.

     IF temp_row ne it_data_wa-ROW AND temp_row IS NOT INITIAL.

       temp_row = it_data_wa-ROW.
       APPEND IT_ITEM.
     ELSEIF ( temp_row NE it_data_wa-ROW AND temp_row IS  INITIAL ).
       temp_row = it_data_wa-ROW.
*           ELSE
     ENDIF.

     CASE it_data_wa-COL.

       WHEN '0001'.
         IT_ITEM-ID = it_data_wa-VALUE.
       WHEN '0002'.
         IT_ITEM-GL_ACCOUNT = it_data_wa-VALUE.
       WHEN '0003'.
         IT_ITEM-AMT_DOCCUR = it_data_wa-value.
       WHEN '0004'.
         IT_ITEM-ITEM_TEXT = it_data_wa-VALUE.
       WHEN '0005'.
         IT_ITEM-BUS_AREA = it_data_wa-VALUE.
       WHEN '0006'.
         IT_ITEM-KOSTL = it_data_wa-VALUE.
*      WHEN '0007'.
*        IT_ITEM-VAT = it_data_wa-VALUE.

     ENDCASE.
   ENDLOOP.

   APPEND IT_ITEM.
ENDFORM.                    " EXECUTE



*ENDLOOP.
*&---------------------------------------------------------------------*
*&      Form  BAPI
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM BAPI .

   DATA: it_acc_gl LIKE bapiacgl09 OCCURS 0 WITH HEADER LINE,
  it_acc_ap LIKE bapiacap09 OCCURS 0 WITH HEADER LINE,
  it_acc_aR LIKE bapiacaR09 OCCURS 0 WITH HEADER LINE,
  it_return LIKE bapiret2 OCCURS 0 WITH HEADER LINE,
  it_curr_amt LIKE bapiaccr09 OCCURS 0 WITH HEADER LINE,
  it_doc_header LIKE bapiache09 OCCURS 0 WITH HEADER LINE,
  it_acc_tax LIKE bapiactx09 OCCURS 0 WITH HEADER LINE,
  obj_type LIKE bapiache09-obj_type,
  obj_key LIKE bapiache09-obj_key,
  obj_sys LIKE bapiache09-obj_sys,
  pstng_date LIKE it_doc_header-pstng_date,
  doc_date LIKE it_doc_header-doc_date,

  loop_cnt TYPE i VALUE 0,
  gv_vendor(10) TYPE c,
  gv_gl_acc(10) TYPE c.
   DATA  conv_s_amt TYPE BETRG.
   DATA  cur_line TYPE P.
   data item_no type POSNR_ACC.
   data item_no1 type POSNR_ACC.

   CLEAR: obj_type, obj_sys, obj_key, pstng_date, doc_date, gv_vendor, gv_gl_acc.
*  CLEAR: it_doc_header,it_acc_gl,it_curr_amt,IT_ACC_AR,IT_RETURN.




   LOOP AT it_HEADER INTO WA_HEADER .

     REFRESH it_doc_header.

     it_doc_header-bus_act = 'RFBU'.
     it_doc_header-username = sy-uname.
*   it_doc_header = WA_HEADER-KUNNR." Customer Number
     it_doc_header-header_txt = WA_HEADER-TXT." bdc_source-col_h. " Invoice Text
     it_doc_header-comp_code = 'JPOL'."bdc_source-col_a. " Company Code
     CONCATENATE WA_HEADER-INV_DATE+6(4) WA_HEADER-INV_DATE+3(2) WA_HEADER-INV_DATE(2)
     into it_doc_header-doc_date.
     CONCATENATE WA_HEADER-pst_date+6(4) WA_HEADER-pst_date+3(2) WA_HEADER-pst_date(2)
      into it_doc_header-pstng_date.

     it_doc_header-doc_type = 'DR'. " Return Order...?
     it_doc_header-fisc_year = '2013'. " Return Order...?
     it_doc_header-fis_period = '02'. " Return Order...?
     it_doc_header-ref_doc_no = '123'."bdc_source-col_d. " Invoice Number


     APPEND it_doc_header.

     REFRESH it_acc_aR.
     it_acc_aR-itemno_acc = '1'. " Invoice Number
     it_acc_aR-customer = WA_HEADER-KUNNR. " Customer Number
     it_acc_aR-comp_code = 'JPOL'. " Company Code
     it_acc_aR-item_text = WA_HEADER-txt. " Line Item Text

     APPEND it_acc_aR.
*
*    it_acc_aR-itemno_acc = '4'. " Invoice Number
*    it_acc_aR-customer = WA_HEADER-KUNNR. " Customer Number
*    it_acc_aR-comp_code = 'JPOL'. " Company Code
*    it_acc_aR-item_text = WA_HEADER-txt. " Line Item Text
*
*    APPEND it_acc_aR.

     REFRESH it_acc_gl.
     REFRESH IT_CURR_AMT.
*    ITEM_NO = 1.
     "GL Information details collected
*


CLEAR : ITEM_NO,item_no1.

     LOOP AT it_ITEM INTO WA_ITEM where id = wa_header-ID.

       ITEM_NO = ITEM_NO + 1.
       it_acc_gl-itemno_acc = ITEM_NO.
       it_acc_gl-gl_account = WA_ITEM-GL_ACCOUNT."gv_gl_acc. " GL Account
       it_acc_gl-item_text = WA_ITEM-ITEM_TEXT. "bdc_source-col_o. " Line Item Text
       it_acc_gl-doc_type = 'DR'. " Return Order...?
       it_acc_gl-comp_code = 'JPOL'."bdc_source-col_a. " Company Code
       it_acc_gl-bus_area = WA_ITEM-BUS_AREA."bdc_source-col_a. " Company Code
       it_acc_gl-CUSTOMER = WA_HEADER-KUNNR.

       conv_s_amt = WA_ITEM-AMT_DOCCUR."bdc_source-col_f. " Invoice Amount
       IF conv_s_amt < 0.
         it_acc_gl-de_cre_ind = 'H'. " H-Credit
         conv_s_amt = - conv_s_amt.
       ELSE.
         it_acc_gl-de_cre_ind = 'S'. " S-Debit
       ENDIF.
       APPEND it_acc_gl.


       ITEM_NO1 = ITEM_NO1 + 1.
       it_curr_amt-itemno_acc ITEM_NO1 . " Invoice Number
       it_curr_amt-curr_type = '00'.
       it_curr_amt-currency = 'INR'. " Currancy
       it_curr_amt-amt_doccur = conv_s_amt . " Line Item Amount
       APPEND it_curr_amt.

       ITEM_NO1 = ITEM_NO1 + 1.
       it_curr_amt-itemno_acc ITEM_NO1 . " Invoice Number
       it_curr_amt-curr_type = '00'.
       it_curr_amt-currency = 'INR'. " Currancy
       it_curr_amt-amt_doccur = conv_s_amt * -1. " Line Item Amount

              APPEND it_curr_amt.

     ENDLOOP.
*  

     REFRESH it_return.

     "Customer Invoice

* Do the post to GL Account and AP
     CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'
       EXPORTING
         documentheader    = it_doc_header
       IMPORTING
         obj_type          = obj_type
         obj_key           = obj_key
         obj_sys           = obj_sys
       TABLES
         accountgl         = it_acc_gl
         currencyamount    = it_curr_amt
         accountreceivable = it_acc_aR
         return            = it_return.

     CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
       EXPORTING
         wait = 'X'.
* Check for any errors

     WRITE : obj_key.
     LOOP at IT_RETURN WHERE TYPE = 'E'.
       WRITE : / 'Error :', IT_RETURN-MESSAGE .
     endloop.

   ENDLOOP.


ENDFORM.                    " BAPI






Result:



1 ACCEPTED SOLUTION

0 Kudos

Hi

Thank you for your help i did small modification i mention code below


REPORT  ZCUS_INVOICE.


data: BEGIN OF WA_HEADER,
ID TYPE I,
KUNNR
TYPE n LENGTH 10,
INV_DATE
TYPE c LENGTH 10,
PST_DATE
TYPE c LENGTH 10,
REF TYPE invfo-xblnr,
PRD_TEXT
TYPE BAPIACGL09-ITEM_TEXT,
CMP_CODE
TYPE BAPIACGL09-COMP_CODE,
AMT_DOCCUR
TYPE PA2010-BETRG,
TXT
(40),
END OF WA_HEADER.

DATA : IT_HEADER like WA_HEADER OCCURS WITH HEADER LINE.


data: BEGIN OF WA_ITEM,
ID TYPE I,
GL_ACCOUNT
TYPE n LENGTH 10,
ITEM_TEXT
TYPE BAPIACGL09-ITEM_TEXT,
BUS_AREA 
TYPE BAPIACGL09-BUS_AREA,
AMT_DOCCUR
TYPE BAPIACCR09-AMT_DOCCUR,
KOSTL
TYPE CSKT-KOSTL,
*       VAT(2),

END OF WA_ITEM.

DATA : IT_ITEM like WA_ITEM OCCURS WITH HEADER LINE.

*      value of excel-cell
TYPES: ty_d_itabvalue             TYPE alsmex_tabline-value,
*      internal table containing the excel data
ty_t_itab                 
TYPE alsmex_tabline   OCCURS 0,

*      line type of sender table
BEGIN OF ty_s_senderline,
line(4096)               TYPE c,
END OF ty_s_senderline,
*      sender table
ty_t_sender               
TYPE ty_s_senderline  OCCURS 0.

*

CONSTANTSgc_esc              VALUE '"'.
DATA  temp_row TYPE I.
DATA  TEMP(4).
INCLUDE lalsmexf01.

DATA: it_data1 TYPE ty_t_itab.
DATA: it_data2 TYPE ty_t_itab.

DATA: it_data_wa LIKE LINE OF it_data1.
DATA: it_data_wa2 LIKE LINE OF it_data1.

* DATA DECLARATION

data: st_rw_s1 TYPE i value '2'.
data: st_cl_s1 TYPE i value '1'.
data: st_rw_s2 TYPE i value '2'.
data: st_cl_s2 TYPE i value '1'.
data: ed_rw_s1 TYPE i value '50'.
data: ed_cl_s1 TYPE i value '9'.
data: ed_rw_s2 TYPE i value '50'.
data: ed_cl_s2 TYPE i value '6'.

DATA: excel_tab TYPE ty_t_sender,
excel_tab1
TYPE ty_t_sender.

DATA: ld_separator TYPE c.
DATA: application TYPE ole2_object,
workbook
TYPE ole2_object,
sheet
TYPE ole2_object,
range
TYPE ole2_object,
worksheet
TYPE ole2_object.
DATA: h_cell TYPE ole2_object,
h_cell1
TYPE ole2_object.
DATA: ld_rc TYPE i.

TYPE-POOLS ole2.

*AT SELECTION-SCREEN.

PARAMETERS: filename LIKE rlgrap-filename.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR filename.
PERFORM value_help.


sTART-OF-SELECTION.

*  CASE sy-ucomm .
*    WHEN 'ONLI'.
PERFORM execute.
PERFORM bapi.

*  ENDCASE.

* MESSAGE DEFINATION

DEFINE m_message.
case sy-subrc.
when 0.
when 1.
message id sy-msgid type sy-msgty number sy-msgno
with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
when others. raise upload_ole.
endcase.
END-OF-DEFINITION.

*&---------------------------------------------------------------------*
*&      Form  VALUE_HELP
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM VALUE_HELP .

CALL FUNCTION 'DSVAS_DOC_WS_FILENAME_GET_50'
EXPORTING
def_filename    
= ' '
def_path        
= ' '
mask             = ',*.*,*.*.'
mode             = 'O'
title            = ' '
IMPORTING
filename        
= filename
EXCEPTIONS
inv_winsys      
= 1
no_batch        
= 2
selection_cancel
= 3
selection_error 
= 4
OTHERS           = 5.
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.                    " VALUE_HELP
*&---------------------------------------------------------------------*
*&      Form  EXECUTE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM EXECUTE .

* PARAMETER CHECK

IF st_rw_s1 > ed_rw_s1.
RAISE inconsistent_parameters.
ENDIF.

IF st_cl_s1 > ed_cl_s1.
RAISE inconsistent_parameters.
ENDIF.

IF st_rw_s2 > ed_rw_s2.
RAISE inconsistent_parameters.
ENDIF.

IF st_cl_s2 > ed_cl_s2.
RAISE inconsistent_parameters.
ENDIF.


CLASS cl_abap_char_utilities DEFINITION LOAD.
ld_separator
= cl_abap_char_utilities=>horizontal_tab.

* OPENING EXCEL FILE
IF application-header = space OR application-handle = -1.
CREATE OBJECT application 'Excel.Application'.
m_message
.
ENDIF.
CALL METHOD OF
application
'Workbooks' = workbook.
m_message
.
CALL METHOD OF
application
'Workbooks' = workbook.
m_message
.
CALL METHOD OF
workbook
'Open'

EXPORTING
#1      
= filename.
m_message
.
CALL METHOD OF
application
'Worksheets' = sheet
EXPORTING
#1          
= 1.
m_message
.
CALL METHOD OF
application
'Worksheets' = sheet
EXPORTING
#1          
= 1.
m_message
.
CALL METHOD OF
sheet
'Activate'.
m_message
.
GET PROPERTY OF application 'ACTIVESHEET' = sheet.
m_message
.

* MARKING OF WHOLE SPREADSHEET
CALL METHOD OF
sheet
'Cells' = h_cell
EXPORTING
#1     
= st_rw_s1
#2     
= st_cl_s1.
m_message
.
CALL METHOD OF
sheet
'Cells' = h_cell1
EXPORTING
#1     
= ed_rw_s1
#2     
= ed_cl_s1.
m_message
.

CALL METHOD OF
sheet
'RANGE' = range
EXPORTING
#1     
= h_cell
#2     
= h_cell1.
m_message
.
CALL METHOD OF
range
'SELECT'.
m_message
.

* Copy marked area (SHEET1) into Clippboard

CALL METHOD OF
range
'COPY'.
m_message
.

* Read clipboard into ABAP

CALL METHOD cl_gui_frontend_services=>clipboard_import
IMPORTING
data                 = excel_tab
EXCEPTIONS
cntl_error          
= 1
*     ERROR_NO_GUI         = 2
*     NOT_SUPPORTED_BY_GUI = 3
OTHERS               = 4.
IF sy-subrc <> 0.
MESSAGE a037(alsmex).
ENDIF.

PERFORM separated_to_intern_convert TABLES excel_tab it_data1
USING ld_separator.

* Clear the clipboard

REFRESH excel_tab.
CALL METHOD cl_gui_frontend_services=>clipboard_export
IMPORTING
data                 = excel_tab
CHANGING
rc                  
= ld_rc
EXCEPTIONS
cntl_error          
= 1
*     ERROR_NO_GUI         = 2
*     NOT_SUPPORTED_BY_GUI = 3
OTHERS               = 4.

* Working in Second Excel Work Sheet

CALL METHOD OF
application
'Worksheets' = sheet
EXPORTING
#1          
= 2.
m_message
.
CALL METHOD OF
sheet
'Activate'.
m_message
.
GET PROPERTY OF application 'ACTIVESHEET' = sheet.
m_message
.
* Mark Sheet2

CALL METHOD OF
sheet
'Cells' = h_cell
EXPORTING
#1     
= st_rw_s2
#2     
= st_cl_s2.
m_message
.
CALL METHOD OF
sheet
'Cells' = h_cell1
EXPORTING
#1     
= ed_rw_s2
#2     
= ed_cl_s2.
m_message
.

CALL METHOD OF
sheet
'RANGE' = range
EXPORTING
#1     
= h_cell
#2     
= h_cell1.
m_message
.
CALL METHOD OF
range
'SELECT'.
m_message
.

* Copy Marked Area (Sheet2) into Clippboard

CALL METHOD OF
range
'COPY'.
m_message
.

* Read Clipboard into ABAP

CALL METHOD cl_gui_frontend_services=>clipboard_import
IMPORTING
data                 = excel_tab1
EXCEPTIONS
cntl_error          
= 1
*     ERROR_NO_GUI         = 2
*     NOT_SUPPORTED_BY_GUI = 3
OTHERS               = 4.
IF sy-subrc <> 0.
MESSAGE a037(alsmex).
ENDIF.

PERFORM separated_to_intern_convert TABLES excel_tab1 it_data2
USING ld_separator.

* Clear Clipboard

REFRESH excel_tab.
CALL METHOD cl_gui_frontend_services=>clipboard_export
IMPORTING
data = excel_tab1
CHANGING
rc
= ld_rc
EXCEPTIONS
cntl_error
= 1
* ERROR_NO_GUI = 2
* NOT_SUPPORTED_BY_GUI = 3
OTHERS = 4
* Leaving Application
.
CALL METHOD OF
application
'QUIT'.
m_message
.

FREE OBJECT application.
m_message
.


LOOP AT it_data1 INTO it_data_wa2.

IF temp_row ne it_data_wa2-ROW AND temp_row IS NOT INITIAL.

temp_row
= it_data_wa2-ROW.
APPEND IT_HEADER.
ELSE.
temp_row
= it_data_wa2-ROW.
ENDIF.

CASE it_data_wa2-COL.

WHEN '0001'.
IT_HEADER
-ID = it_data_wa2-VALUE.
WHEN '0002'.
IT_HEADER
-KUNNR = it_data_wa2-VALUE.
WHEN '0003'.
IT_HEADER
-INV_DATE = it_data_wa2-value.
WHEN '0004'.
IT_HEADER
-PST_DATE = it_data_wa2-VALUE.
WHEN '0005'.
IT_HEADER
-REF = it_data_wa2-VALUE.
WHEN '0006'.
IT_HEADER
-AMT_DOCCUR = it_data_wa2-VALUE.
WHEN '0007'.
IT_HEADER
-TXT = it_data_wa2-VALUE.
WHEN '0008'.
IT_HEADER
-PRD_TEXT = it_data_wa2-VALUE.
WHEN '0009'.
IT_HEADER
-CMP_CODE = it_data_wa2-VALUE.

ENDCASE.

ENDLOOP.
APPEND IT_HEADER.

CLEAR:temp_row.

LOOP AT it_data2 INTO it_data_wa ."WHERE ROW = it_data_wa2-ROW.

IF temp_row ne it_data_wa-ROW AND temp_row IS NOT INITIAL.

temp_row
= it_data_wa-ROW.
APPEND IT_ITEM.
ELSEIF ( temp_row NE it_data_wa-ROW AND temp_row IS  INITIAL ).
temp_row
= it_data_wa-ROW.
*           ELSE
ENDIF.

CASE it_data_wa-COL.

WHEN '0001'.
IT_ITEM
-ID = it_data_wa-VALUE.
WHEN '0002'.
IT_ITEM
-GL_ACCOUNT = it_data_wa-VALUE.
WHEN '0003'.
IT_ITEM
-AMT_DOCCUR = it_data_wa-value.
WHEN '0004'.
IT_ITEM
-ITEM_TEXT = it_data_wa-VALUE.
WHEN '0005'.
IT_ITEM
-BUS_AREA = it_data_wa-VALUE.
WHEN '0006'.
IT_ITEM
-KOSTL = it_data_wa-VALUE.

ENDCASE.
ENDLOOP.

APPEND IT_ITEM.
ENDFORM.                    " EXECUTE



*ENDLOOP.
*&---------------------------------------------------------------------*
*&      Form  BAPI
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM BAPI .

DATA: it_acc_gl LIKE bapiacgl09 OCCURS 0 WITH HEADER LINE,
it_acc_ap
LIKE bapiacap09 OCCURS 0 WITH HEADER LINE,
it_acc_aR
LIKE bapiacaR09 OCCURS 0 WITH HEADER LINE,
it_return
LIKE bapiret2 OCCURS 0 WITH HEADER LINE,
it_curr_amt
LIKE bapiaccr09 OCCURS 0 WITH HEADER LINE,
it_doc_header
LIKE bapiache09 OCCURS 0 WITH HEADER LINE,
it_acc_tax
LIKE bapiactx09 OCCURS 0 WITH HEADER LINE,
obj_type
LIKE bapiache09-obj_type,
obj_key
LIKE bapiache09-obj_key,
obj_sys
LIKE bapiache09-obj_sys,
pstng_date
LIKE it_doc_header-pstng_date,
doc_date
LIKE it_doc_header-doc_date,

loop_cnt
TYPE i VALUE 0,
gv_vendor
(10) TYPE c,
gv_gl_acc
(10) TYPE c.
DATA  conv_s_amt TYPE BETRG.
DATA  cur_line TYPE P.
data item_no type POSNR_ACC.
data item_no1 type POSNR_ACC.

CLEAR: obj_type, obj_sys, obj_key, pstng_date, doc_date, gv_vendor, gv_gl_acc.


LOOP AT it_HEADER INTO WA_HEADER .

REFRESH it_doc_header.

it_doc_header
-bus_act = 'RFBU'.
it_doc_header
-username = sy-uname.
*   it_doc_header = WA_HEADER-KUNNR." Customer Number
it_doc_header
-header_txt = WA_HEADER-PRD_TEXT." bdc_source-col_h. " Invoice Text
it_doc_header
-comp_code = WA_HEADER-CMP_CODE."bdc_source-col_a. " Company Code
CONCATENATE WA_HEADER-INV_DATE+6(4) WA_HEADER-INV_DATE+3(2) WA_HEADER-INV_DATE(2)
into it_doc_header-doc_date.
CONCATENATE WA_HEADER-pst_date+6(4) WA_HEADER-pst_date+3(2) WA_HEADER-pst_date(2)
into it_doc_header-pstng_date.

it_doc_header
-doc_type = 'DR'. " Return Order...?
*    it_doc_header-fisc_year = '2013'. " Return Order...?
*    it_doc_header-fis_period = '02'. " Return Order...?
it_doc_header
-ref_doc_no = WA_HEADER-ref."bdc_source-col_d. " Invoice Number
*CONDENSE conv_s_amt.
*conv_s_amt = WA_HEADER-AMT_DOCCUR."bdc_source-col_f. " Invoice Amount
*REPLACE ALL OCCURRENCES OF ',' IN conv_s_amt WITH ''.
*IF conv_s_amt < 0.
*it_doc_header-de_cre_ind = 'H'. " H-Credit
*conv_s_amt = - conv_s_amt.
*ELSE.
*it_doc_header-de_cre_ind = 'S'. " S-Debit
*ENDIF.

APPEND it_doc_header.

REFRESH it_acc_aR.
it_acc_aR
-itemno_acc = '1'. " Invoice Number
it_acc_aR
-customer = WA_HEADER-KUNNR. " Customer Number
it_acc_aR
-comp_code = WA_HEADER-CMP_CODE. " Company Code
it_acc_aR
-item_text = WA_HEADER-TXT. " Line Item Text

APPEND it_acc_aR.


REFRESH it_acc_gl.
REFRESH IT_CURR_AMT.

"GL Information details collected

CLEAR : ITEM_NO,item_no1.
item_no
= 1.
LOOP AT it_ITEM INTO WA_ITEM where id = wa_header-ID.

ITEM_NO
= ITEM_NO + 1.
it_acc_gl
-itemno_acc = ITEM_NO.
it_acc_gl
-gl_account = WA_ITEM-GL_ACCOUNT."gv_gl_acc. " GL Account
it_acc_gl
-item_text = WA_ITEM-ITEM_TEXT. "bdc_source-col_o. " Line Item Text
it_acc_gl
-doc_type = 'DR'. " Return Order...?
it_acc_gl
-comp_code = WA_HEADER-CMP_CODE."bdc_source-col_a. " Company Code
it_acc_gl
-bus_area = WA_ITEM-BUS_AREA."bdc_source-col_a. " Company Code
it_acc_gl
-CUSTOMER = WA_HEADER-KUNNR.
it_acc_gl
-costcenter = WA_ITEM-KOSTL."bdc_source-col_k. " Cost Center
*      it_acc_gl-tax_code = 'V6'."WA_ITEM-VAT."bdc_source-col_m. " Tax Code
*it_acc_gl-pstng_date ='20130506'." pstng_date. " Posting Date
*it_acc_gl-vendor_no = '0000050386'. " Vendor Number
*      it_acc_gl-costcenter = WA_ITEM-KOSTL."bdc_source-col_k. " Cost Center
*it_acc_gl-wbs_element = bdc_source-col_q. " WBS Element
*it_acc_gl-network = bdc_source-col_p. " Internal Order
conv_s_amt
= - WA_ITEM-AMT_DOCCUR."bdc_source-col_f. " Invoice Amount

it_acc_gl
-de_cre_ind = 'S'. " S-Debit

APPEND it_acc_gl
.


*      ITEM_NO1 = ITEM_NO1 + 1.
it_curr_amt
-itemno_acc ITEM_NO . " Invoice Number
it_curr_amt
-curr_type = '00'.
it_curr_amt
-currency = 'INR'. " Currancy
it_curr_amt
-amt_doccur = conv_s_amt. " Line Item Amount
APPEND it_curr_amt.

ENDLOOP.
*   this amount details for Customer
conv_s_amt
WA_HEADER-amt_doccur.
*    IF conv_s_amt < 0.
*      conv_s_amt = - conv_s_amt.
*    ENDIF.
it_curr_amt
-itemno_acc = '1'. " Invoice Number
it_curr_amt
-curr_type = '00'.
it_curr_amt
-currency = 'INR'. " Currancy
it_curr_amt
-amt_doccur = conv_s_amt . " Line Item Amount
APPEND it_curr_amt.

REFRESH it_return.

"Customer Invoice

* Do the post to GL Account and AP
CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'
EXPORTING
documentheader   
= it_doc_header
IMPORTING
obj_type         
= obj_type
obj_key          
= obj_key
obj_sys          
= obj_sys
TABLES
accountgl        
= it_acc_gl
currencyamount   
= it_curr_amt
accountreceivable
= it_acc_aR
return            = it_return.

CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
* Check for any errors

WRITE :/ wa_header-id , ' ', obj_key  .
LOOP at IT_RETURN WHERE TYPE = 'E'.
WRITE : / 'Error :', IT_RETURN-MESSAGE .
endloop.

ENDLOOP.
*ENDLOOP.

ENDFORM.                    " BAPI

11 REPLIES 11

former_member491621
Contributor
0 Kudos

Hi Sivashankar,

Before the BAPI is called, try to check the line item numbers(field ITEMNO_ACC) in the structure ACCOUNTGL or whatever you are using in debugging. The item numbers must be incremental.

Also, clear the internal table before posting the next document.

Hope this helps

0 Kudos

thank you for reply aniket , i done increment in ACCOUNTGL i mention debugging screen below check it.

0 Kudos

Hi Sivashankar,

I checked your code completely. It seems you are passing ITEMNO_ACC = 1 for GL Account as well as Customer.

It must be incremental. For eg. in your case, you are giving 1 to customer then the GL line items must start from 2.

REFRESH it_acc_aR.

     it_acc_aR-itemno_acc = '1'. " Invoice Number

     it_acc_aR-customer = WA_HEADER-KUNNR. " Customer Number

     it_acc_aR-comp_code = 'JPOL'. " Company Code

     it_acc_aR-item_text = WA_HEADER-txt. " Line Item Text

     APPEND it_acc_aR.

CLEAR : ITEM_NO,item_no1.

     LOOP AT it_ITEM INTO WA_ITEM where id = wa_header-ID.

       ITEM_NO = ITEM_NO + 1.               "Here it must start from 2

  it_acc_gl-itemno_acc = ITEM_NO.

       it_acc_gl-gl_account = WA_ITEM-GL_ACCOUNT."gv_gl_acc. " GL Account

       it_acc_gl-item_text = WA_ITEM-ITEM_TEXT. "bdc_source-col_o. " Line Item Text

       it_acc_gl-doc_type = 'DR'. " Return Order...?

       it_acc_gl-comp_code = 'JPOL'."bdc_source-col_a. " Company Code

       it_acc_gl-bus_area = WA_ITEM-BUS_AREA."bdc_source-col_a. " Company Code

       it_acc_gl-CUSTOMER = WA_HEADER-KUNNR.

       conv_s_amt = WA_ITEM-AMT_DOCCUR."bdc_source-col_f. " Invoice Amount

       IF conv_s_amt < 0.

         it_acc_gl-de_cre_ind = 'H'. " H-Credit

         conv_s_amt = - conv_s_amt.

       ELSE.

         it_acc_gl-de_cre_ind = 'S'. " S-Debit

       ENDIF.

       APPEND it_acc_gl.

       ITEM_NO1 = ITEM_NO1 + 1.

       it_curr_amt-itemno_acc ITEM_NO1 . " Invoice Number

       it_curr_amt-curr_type = '00'.

       it_curr_amt-currency = 'INR'. " Currancy

       it_curr_amt-amt_doccur = conv_s_amt . " Line Item Amount

       APPEND it_curr_amt.

       ITEM_NO1 = ITEM_NO1 + 1.

       it_curr_amt-itemno_acc ITEM_NO1 . " Invoice Number

       it_curr_amt-curr_type = '00'.

       it_curr_amt-currency = 'INR'. " Currancy

       it_curr_amt-amt_doccur = conv_s_amt * -1. " Line Item Amount

              APPEND it_curr_amt.

     ENDLOOP.

*  

     REFRESH it_return.

0 Kudos

HI Aniket,

i done increment in line item which you mention ,but when i executing i getting Error "Balance in transaction currency" please help me


0 Kudos

Hi,

Please check the values in structure BAPIACCR09. There must be 1 positive and 1 negative amount. For eg. if for customer you entered 100 then it must be -100 for GL Account.

0 Kudos

Hi aniket,

Amount  was  negative and positive  only... check out screen below

.

0 Kudos

The error will come only if the total of amounts is not equal to zero(0). Check the values again and let me know.

It must post the document if the amounts match the weight i.e 100 and -100.

0 Kudos

Hi Sivashankar,

I have modified your code a bit.

Please check.

DATA: BEGIN OF wa_header,

        id TYPE i,

        kunnr TYPE n LENGTH 10,

        inv_date TYPE c LENGTH 10,

        pst_date TYPE c LENGTH 10,

        ref TYPE invfo-xblnr,

        amt_doccur TYPE pa2010-betrg,

        txt(40),

   END OF wa_header.



DATA : it_header LIKE wa_header OCCURS WITH HEADER LINE.





DATA: BEGIN OF wa_item,

        id TYPE i,

        gl_account TYPE n LENGTH 10,

        item_text TYPE bapiacgl09-item_text,

        bus_area  TYPE bapiacgl09-bus_area,

        amt_doccur TYPE bapiaccr09-amt_doccur,

        kostl TYPE cskt-kostl,

*       vat(2),



   END OF wa_item.



DATA : it_item LIKE wa_item OCCURS WITH HEADER LINE.



*      value of excel-cell

TYPES: ty_d_itabvalue             TYPE alsmex_tabline-value,

*      INTERNAL TABLE containing the excel DATA

       ty_t_itab                  TYPE alsmex_tabline   OCCURS 0,



*      line type of sender table

       BEGIN OF ty_s_senderline,

         line(4096)               TYPE c,

       END OF ty_s_senderline,

*      sender TABLE

       ty_t_sender                TYPE ty_s_senderline  OCCURS 0.



*



CONSTANTS:  gc_esc              VALUE '"'.

DATA  temp_row TYPE i.

DATA  temp(4).

INCLUDE lalsmexf01.



DATA: it_data1 TYPE ty_t_itab.

DATA: it_data2 TYPE ty_t_itab.



DATA: it_data_wa LIKE LINE OF it_data1.

DATA: it_data_wa2 LIKE LINE OF it_data1.



* DATA DECLARATION



DATA: st_rw_s1 TYPE i VALUE '2'.

DATA: st_cl_s1 TYPE i VALUE '1'.

DATA: st_rw_s2 TYPE i VALUE '2'.

DATA: st_cl_s2 TYPE i VALUE '1'.

DATA: ed_rw_s1 TYPE i VALUE '3'.

DATA: ed_cl_s1 TYPE i VALUE '7'.

DATA: ed_rw_s2 TYPE i VALUE '5'.

DATA: ed_cl_s2 TYPE i VALUE '8'.



DATA: excel_tab TYPE ty_t_sender,

excel_tab1 TYPE ty_t_sender.



DATA: ld_separator TYPE c.

DATA: application TYPE ole2_object,

workbook TYPE ole2_object,

sheet TYPE ole2_object,

range TYPE ole2_object,

worksheet TYPE ole2_object.

DATA: h_cell TYPE ole2_object,

h_cell1 TYPE ole2_object.

DATA: ld_rc TYPE i.



TYPE-POOLS ole2.



*AT SELECTION-SCREEN.



PARAMETERS: filename LIKE rlgrap-filename.



AT SELECTION-SCREEN ON VALUE-REQUEST FOR filename.

  PERFORM value_help.



START-OF-SELECTION.



*  CASE sy-ucomm .

*    when 'ONLI'.

  PERFORM execute.

  PERFORM bapi.



*  ENDCASE.



* MESSAGE DEFINATION



  DEFINE m_message.

    case sy-subrc.

      when 0.

      when 1.

        message id sy-msgid type sy-msgty number sy-msgno

        with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

      when others. raise upload_ole.

    endcase.

  END-OF-DEFINITION.



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

*&      form  value_help

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

*       text

*----------------------------------------------------------------------*

*  -->  p1        text

*  <--  p2        text

*----------------------------------------------------------------------*

FORM value_help .



  CALL FUNCTION 'DSVAS_DOC_WS_FILENAME_GET_50'

    EXPORTING

      def_filename     = ' '

      def_path         = ' '

      mask             = ',*.*,*.*.'

      mode             = 'O'

      title            = ' '

    IMPORTING

      filename         = filename

    EXCEPTIONS

      inv_winsys       = 1

      no_batch         = 2

      selection_cancel = 3

      selection_error  = 4

      OTHERS           = 5.

  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.                    " VALUE_HELP

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

*&      form  execute

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

*       text

*----------------------------------------------------------------------*

*  -->  p1        text

*  <--  p2        text

*----------------------------------------------------------------------*

FORM execute .



* PARAMETER CHECK



  IF st_rw_s1 > ed_rw_s1.

    RAISE inconsistent_parameters.

  ENDIF.



  IF st_cl_s1 > ed_cl_s1.

    RAISE inconsistent_parameters.

  ENDIF.



  IF st_rw_s2 > ed_rw_s2.

    RAISE inconsistent_parameters.

  ENDIF.



  IF st_cl_s2 > ed_cl_s2.

    RAISE inconsistent_parameters.

  ENDIF.





  CLASS cl_abap_char_utilities DEFINITION LOAD.

  ld_separator = cl_abap_char_utilities=>horizontal_tab.



* OPENING EXCEL FILE

  IF application-header = space OR application-handle = -1.

    CREATE OBJECT application 'Excel.Application'.

    m_message.

  ENDIF.

  CALL METHOD OF

      application

      'Workbooks' = workbook.

  m_message.

  CALL METHOD OF

      application

      'Workbooks' = workbook.

  m_message.

  CALL METHOD OF

      workbook

      'Open'



    EXPORTING

      #1       = filename.

  m_message.

  CALL METHOD OF

      application

      'Worksheets' = sheet

    EXPORTING

      #1           = 1.

  m_message.

  CALL METHOD OF

      application

      'Worksheets' = sheet

    EXPORTING

      #1           = 1.

  m_message.

  CALL METHOD OF

      sheet

      'Activate'.

  m_message.

  GET PROPERTY OF application 'ACTIVESHEET' = sheet.

  m_message.



* MARKING OF WHOLE SPREADSHEET

  CALL METHOD OF

      sheet

      'Cells' = h_cell

    EXPORTING

      #1      = st_rw_s1

      #2      = st_cl_s1.

  m_message.

  CALL METHOD OF

      sheet

      'Cells' = h_cell1

    EXPORTING

      #1      = ed_rw_s1

      #2      = ed_cl_s1.

  m_message.



  CALL METHOD OF

      sheet

      'RANGE' = range

    EXPORTING

      #1      = h_cell

      #2      = h_cell1.

  m_message.

  CALL METHOD OF

      range

      'SELECT'.

  m_message.



* Copy marked area (SHEET1) into Clippboard



  CALL METHOD OF

      range

      'COPY'.

  m_message.



* Read clipboard into ABAP



  CALL METHOD cl_gui_frontend_services=>clipboard_import

    IMPORTING

      data                 = excel_tab

    EXCEPTIONS

      cntl_error           = 1

*     error_no_gui         = 2

*     not_supported_by_gui = 3

      OTHERS               = 4.

  IF sy-subrc <> 0.

    MESSAGE a037(alsmex).

  ENDIF.



  PERFORM separated_to_intern_convert TABLES excel_tab it_data1

  USING ld_separator.



* Clear the clipboard



  REFRESH excel_tab.

  CALL METHOD cl_gui_frontend_services=>clipboard_export

    IMPORTING

      data                 = excel_tab

    CHANGING

      rc                   = ld_rc

    EXCEPTIONS

      cntl_error           = 1

*     error_no_gui         = 2

*     not_supported_by_gui = 3

      OTHERS               = 4.



* Working in Second Excel Work Sheet



  CALL METHOD OF

      application

      'Worksheets' = sheet

    EXPORTING

      #1           = 2.

  m_message.

  CALL METHOD OF

      sheet

      'Activate'.

  m_message.

  GET PROPERTY OF application 'ACTIVESHEET' = sheet.

  m_message.

* mark sheet2



  CALL METHOD OF

      sheet

      'Cells' = h_cell

    EXPORTING

      #1      = st_rw_s2

      #2      = st_cl_s2.

  m_message.

  CALL METHOD OF

      sheet

      'Cells' = h_cell1

    EXPORTING

      #1      = ed_rw_s2

      #2      = ed_cl_s2.

  m_message.



  CALL METHOD OF

      sheet

      'RANGE' = range

    EXPORTING

      #1      = h_cell

      #2      = h_cell1.

  m_message.

  CALL METHOD OF

      range

      'SELECT'.

  m_message.



* Copy Marked Area (Sheet2) into Clippboard



  CALL METHOD OF

      range

      'COPY'.

  m_message.



* Read Clipboard into ABAP



  CALL METHOD cl_gui_frontend_services=>clipboard_import

    IMPORTING

      data                 = excel_tab1

    EXCEPTIONS

      cntl_error           = 1

*     error_no_gui         = 2

*     not_supported_by_gui = 3

      OTHERS               = 4.

  IF sy-subrc <> 0.

    MESSAGE a037(alsmex).

  ENDIF.



  PERFORM separated_to_intern_convert TABLES excel_tab1 it_data2

  USING ld_separator.



* Clear Clipboard



  REFRESH excel_tab.

  CALL METHOD cl_gui_frontend_services=>clipboard_export

  IMPORTING

  data = excel_tab1

  CHANGING

  rc = ld_rc

  EXCEPTIONS

  cntl_error = 1

* error_no_gui = 2

* not_supported_by_gui = 3

  OTHERS = 4

*   * leaving APPLICATION

  .

  CALL METHOD OF

      application

      'QUIT'.

  m_message.



  FREE OBJECT application.

  m_message.





  LOOP AT it_data1 INTO it_data_wa2.



    IF temp_row NE it_data_wa2-row AND temp_row IS NOT INITIAL.



      temp_row = it_data_wa2-row.

      APPEND it_header.

    ELSE.

      temp_row = it_data_wa2-row.

    ENDIF.



    CASE it_data_wa2-col.



      WHEN '0001'.

        it_header-id = it_data_wa2-value.

      WHEN '0002'.

        it_header-kunnr = it_data_wa2-value.

      WHEN '0003'.

        it_header-inv_date = it_data_wa2-value.

      WHEN '0004'.

        it_header-pst_date = it_data_wa2-value.

      WHEN '0005'.

        it_header-ref = it_data_wa2-value.

      WHEN '0006'.

        it_header-amt_doccur = it_data_wa2-value.

      WHEN '0007'.

        it_header-txt = it_data_wa2-value.





    ENDCASE.



  ENDLOOP.

  APPEND it_header.



  CLEAR:temp_row.



  LOOP AT it_data2 INTO it_data_wa ."WHERE ROW = it_data_wa2-ROW.



    IF temp_row NE it_data_wa-row AND temp_row IS NOT INITIAL.



      temp_row = it_data_wa-row.

      APPEND it_item.

    ELSEIF ( temp_row NE it_data_wa-row AND temp_row IS  INITIAL ).

      temp_row = it_data_wa-row.

*           else

    ENDIF.



    CASE it_data_wa-col.



      WHEN '0001'.

        it_item-id = it_data_wa-value.

      WHEN '0002'.

        it_item-gl_account = it_data_wa-value.

      WHEN '0003'.

        it_item-amt_doccur = it_data_wa-value.

      WHEN '0004'.

        it_item-item_text = it_data_wa-value.

      WHEN '0005'.

        it_item-bus_area = it_data_wa-value.

      WHEN '0006'.

        it_item-kostl = it_data_wa-value.

*      when '0007'.

*        it_item-vat = it_data_wa-value.



    ENDCASE.

  ENDLOOP.



  APPEND it_item.

ENDFORM.                    " EXECUTE



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

*&      form  bapi

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

*       text

*----------------------------------------------------------------------*

*  -->  p1        text

*  <--  p2        text

*----------------------------------------------------------------------*

FORM bapi .



  DATA: it_acc_gl LIKE bapiacgl09 OCCURS 0 WITH HEADER LINE,

  it_acc_ap LIKE bapiacap09 OCCURS 0 WITH HEADER LINE,

  it_acc_ar LIKE bapiacar09 OCCURS 0 WITH HEADER LINE,

  it_return LIKE bapiret2 OCCURS 0 WITH HEADER LINE,

  it_curr_amt LIKE bapiaccr09 OCCURS 0 WITH HEADER LINE,

  it_doc_header LIKE bapiache09 OCCURS 0 WITH HEADER LINE,

  it_acc_tax LIKE bapiactx09 OCCURS 0 WITH HEADER LINE,

  obj_type LIKE bapiache09-obj_type,

  obj_key LIKE bapiache09-obj_key,

  obj_sys LIKE bapiache09-obj_sys,

  pstng_date LIKE it_doc_header-pstng_date,

  doc_date LIKE it_doc_header-doc_date,



  loop_cnt TYPE i VALUE 0,

  gv_vendor(10) TYPE c,

  gv_gl_acc(10) TYPE c.

  DATA  conv_s_amt TYPE betrg.

  DATA  cur_line TYPE p.

  DATA item_no TYPE posnr_acc.

  DATA item_no1 TYPE posnr_acc.



  CLEAR: obj_type, obj_sys, obj_key, pstng_date, doc_date, gv_vendor, gv_gl_acc.

*  clear: it_doc_header,it_acc_gl,it_curr_amt,it_acc_ar,it_return.



  DATA : l_new TYPE char1.



  LOOP AT it_header INTO wa_header .



    REFRESH it_doc_header.

    it_doc_header-bus_act = 'RFBU'.

    it_doc_header-username = sy-uname.

    it_doc_header-header_txt = wa_header-txt." bdc_source-col_h. " Invoice Text

    it_doc_header-comp_code = 'JPOL'."bdc_source-col_a. " Company Code

    it_doc_header-doc_type = 'DR'. " Return Order...?

    it_doc_header-fisc_year = '2013'. " Return Order...?

    it_doc_header-fis_period = '02'. " Return Order...?

    it_doc_header-ref_doc_no = '123'."bdc_source-col_d. " Invoice Number

    CONCATENATE wa_header-inv_date+6(4) wa_header-inv_date+3(2) wa_header-inv_date(2)

    INTO it_doc_header-doc_date.

    CONCATENATE wa_header-pst_date+6(4) wa_header-pst_date+3(2) wa_header-pst_date(2)

     INTO it_doc_header-pstng_date.

    APPEND it_doc_header.



    l_new = 'X'.



    REFRESH it_acc_gl.

    REFRESH it_curr_amt.



**-- GL Information details collected

    LOOP AT it_item INTO wa_item WHERE id = wa_header-id.



      IF l_new EQ 'X'.

**-- Customer details

        REFRESH it_acc_ar.

        it_acc_ar-itemno_acc = item_no. " Invoice Number

        it_acc_ar-customer   = wa_header-kunnr. " Customer Number

        it_acc_ar-item_text  = wa_header-txt. " Line Item Text

        APPEND it_acc_ar.



        it_curr_amt-itemno_acc item_no . " Invoice Number

        it_curr_amt-currency   = 'INR'. " Currency

        it_curr_amt-amt_doccur = wa_item-amt_doccur. " Line Item Amount

        APPEND it_curr_amt.

        CLEAR l_new.

      ENDIF.



      ADD 1 TO item_no.



      it_acc_gl-itemno_acc = item_no.

      it_acc_gl-gl_account = wa_item-gl_account."gv_gl_acc. " GL Account

      it_acc_gl-item_text  = wa_item-item_text. "bdc_source-col_o. " Line Item Text

      it_acc_gl-bus_area   = wa_item-bus_area."bdc_source-col_a. " Company Code

      APPEND it_acc_gl.



      it_curr_amt-itemno_acc = item_no . " Invoice Number

      it_curr_amt-currency   = 'INR'. " Currancy

      it_curr_amt-amt_doccur = wa_item-amt_doccur. " Line Item Amount

      APPEND it_curr_amt.

      ADD 1 TO item_no.

    ENDLOOP.



    REFRESH it_return.

* Do the post to GL Account and AP

    CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'

      EXPORTING

        documentheader    = it_doc_header

      IMPORTING

        obj_type          = obj_type

        obj_key           = obj_key

        obj_sys           = obj_sys

      TABLES

        accountgl         = it_acc_gl

        currencyamount    = it_curr_amt

        accountreceivable = it_acc_ar

        return            = it_return.



    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'

      EXPORTING

        wait = 'X'.

* check for any errors



    WRITE : obj_key.

    LOOP AT it_return WHERE type = 'E'.

      WRITE : / 'Error :', it_return-message .

    ENDLOOP.



    item_no = 1.

  ENDLOOP.





ENDFORM.                    " BAPI

0 Kudos

Hi,

the total amount of value is zero only i mention in screen

Amount is

  2000

-2000

  3000

- 3000

0 Kudos

HI

THANK YOU FOR YOUR SUGGESTION ,,, SOLVED MYSELF

0 Kudos

Hi

Thank you for your help i did small modification i mention code below


REPORT  ZCUS_INVOICE.


data: BEGIN OF WA_HEADER,
ID TYPE I,
KUNNR
TYPE n LENGTH 10,
INV_DATE
TYPE c LENGTH 10,
PST_DATE
TYPE c LENGTH 10,
REF TYPE invfo-xblnr,
PRD_TEXT
TYPE BAPIACGL09-ITEM_TEXT,
CMP_CODE
TYPE BAPIACGL09-COMP_CODE,
AMT_DOCCUR
TYPE PA2010-BETRG,
TXT
(40),
END OF WA_HEADER.

DATA : IT_HEADER like WA_HEADER OCCURS WITH HEADER LINE.


data: BEGIN OF WA_ITEM,
ID TYPE I,
GL_ACCOUNT
TYPE n LENGTH 10,
ITEM_TEXT
TYPE BAPIACGL09-ITEM_TEXT,
BUS_AREA 
TYPE BAPIACGL09-BUS_AREA,
AMT_DOCCUR
TYPE BAPIACCR09-AMT_DOCCUR,
KOSTL
TYPE CSKT-KOSTL,
*       VAT(2),

END OF WA_ITEM.

DATA : IT_ITEM like WA_ITEM OCCURS WITH HEADER LINE.

*      value of excel-cell
TYPES: ty_d_itabvalue             TYPE alsmex_tabline-value,
*      internal table containing the excel data
ty_t_itab                 
TYPE alsmex_tabline   OCCURS 0,

*      line type of sender table
BEGIN OF ty_s_senderline,
line(4096)               TYPE c,
END OF ty_s_senderline,
*      sender table
ty_t_sender               
TYPE ty_s_senderline  OCCURS 0.

*

CONSTANTSgc_esc              VALUE '"'.
DATA  temp_row TYPE I.
DATA  TEMP(4).
INCLUDE lalsmexf01.

DATA: it_data1 TYPE ty_t_itab.
DATA: it_data2 TYPE ty_t_itab.

DATA: it_data_wa LIKE LINE OF it_data1.
DATA: it_data_wa2 LIKE LINE OF it_data1.

* DATA DECLARATION

data: st_rw_s1 TYPE i value '2'.
data: st_cl_s1 TYPE i value '1'.
data: st_rw_s2 TYPE i value '2'.
data: st_cl_s2 TYPE i value '1'.
data: ed_rw_s1 TYPE i value '50'.
data: ed_cl_s1 TYPE i value '9'.
data: ed_rw_s2 TYPE i value '50'.
data: ed_cl_s2 TYPE i value '6'.

DATA: excel_tab TYPE ty_t_sender,
excel_tab1
TYPE ty_t_sender.

DATA: ld_separator TYPE c.
DATA: application TYPE ole2_object,
workbook
TYPE ole2_object,
sheet
TYPE ole2_object,
range
TYPE ole2_object,
worksheet
TYPE ole2_object.
DATA: h_cell TYPE ole2_object,
h_cell1
TYPE ole2_object.
DATA: ld_rc TYPE i.

TYPE-POOLS ole2.

*AT SELECTION-SCREEN.

PARAMETERS: filename LIKE rlgrap-filename.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR filename.
PERFORM value_help.


sTART-OF-SELECTION.

*  CASE sy-ucomm .
*    WHEN 'ONLI'.
PERFORM execute.
PERFORM bapi.

*  ENDCASE.

* MESSAGE DEFINATION

DEFINE m_message.
case sy-subrc.
when 0.
when 1.
message id sy-msgid type sy-msgty number sy-msgno
with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
when others. raise upload_ole.
endcase.
END-OF-DEFINITION.

*&---------------------------------------------------------------------*
*&      Form  VALUE_HELP
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM VALUE_HELP .

CALL FUNCTION 'DSVAS_DOC_WS_FILENAME_GET_50'
EXPORTING
def_filename    
= ' '
def_path        
= ' '
mask             = ',*.*,*.*.'
mode             = 'O'
title            = ' '
IMPORTING
filename        
= filename
EXCEPTIONS
inv_winsys      
= 1
no_batch        
= 2
selection_cancel
= 3
selection_error 
= 4
OTHERS           = 5.
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.                    " VALUE_HELP
*&---------------------------------------------------------------------*
*&      Form  EXECUTE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM EXECUTE .

* PARAMETER CHECK

IF st_rw_s1 > ed_rw_s1.
RAISE inconsistent_parameters.
ENDIF.

IF st_cl_s1 > ed_cl_s1.
RAISE inconsistent_parameters.
ENDIF.

IF st_rw_s2 > ed_rw_s2.
RAISE inconsistent_parameters.
ENDIF.

IF st_cl_s2 > ed_cl_s2.
RAISE inconsistent_parameters.
ENDIF.


CLASS cl_abap_char_utilities DEFINITION LOAD.
ld_separator
= cl_abap_char_utilities=>horizontal_tab.

* OPENING EXCEL FILE
IF application-header = space OR application-handle = -1.
CREATE OBJECT application 'Excel.Application'.
m_message
.
ENDIF.
CALL METHOD OF
application
'Workbooks' = workbook.
m_message
.
CALL METHOD OF
application
'Workbooks' = workbook.
m_message
.
CALL METHOD OF
workbook
'Open'

EXPORTING
#1      
= filename.
m_message
.
CALL METHOD OF
application
'Worksheets' = sheet
EXPORTING
#1          
= 1.
m_message
.
CALL METHOD OF
application
'Worksheets' = sheet
EXPORTING
#1          
= 1.
m_message
.
CALL METHOD OF
sheet
'Activate'.
m_message
.
GET PROPERTY OF application 'ACTIVESHEET' = sheet.
m_message
.

* MARKING OF WHOLE SPREADSHEET
CALL METHOD OF
sheet
'Cells' = h_cell
EXPORTING
#1     
= st_rw_s1
#2     
= st_cl_s1.
m_message
.
CALL METHOD OF
sheet
'Cells' = h_cell1
EXPORTING
#1     
= ed_rw_s1
#2     
= ed_cl_s1.
m_message
.

CALL METHOD OF
sheet
'RANGE' = range
EXPORTING
#1     
= h_cell
#2     
= h_cell1.
m_message
.
CALL METHOD OF
range
'SELECT'.
m_message
.

* Copy marked area (SHEET1) into Clippboard

CALL METHOD OF
range
'COPY'.
m_message
.

* Read clipboard into ABAP

CALL METHOD cl_gui_frontend_services=>clipboard_import
IMPORTING
data                 = excel_tab
EXCEPTIONS
cntl_error          
= 1
*     ERROR_NO_GUI         = 2
*     NOT_SUPPORTED_BY_GUI = 3
OTHERS               = 4.
IF sy-subrc <> 0.
MESSAGE a037(alsmex).
ENDIF.

PERFORM separated_to_intern_convert TABLES excel_tab it_data1
USING ld_separator.

* Clear the clipboard

REFRESH excel_tab.
CALL METHOD cl_gui_frontend_services=>clipboard_export
IMPORTING
data                 = excel_tab
CHANGING
rc                  
= ld_rc
EXCEPTIONS
cntl_error          
= 1
*     ERROR_NO_GUI         = 2
*     NOT_SUPPORTED_BY_GUI = 3
OTHERS               = 4.

* Working in Second Excel Work Sheet

CALL METHOD OF
application
'Worksheets' = sheet
EXPORTING
#1          
= 2.
m_message
.
CALL METHOD OF
sheet
'Activate'.
m_message
.
GET PROPERTY OF application 'ACTIVESHEET' = sheet.
m_message
.
* Mark Sheet2

CALL METHOD OF
sheet
'Cells' = h_cell
EXPORTING
#1     
= st_rw_s2
#2     
= st_cl_s2.
m_message
.
CALL METHOD OF
sheet
'Cells' = h_cell1
EXPORTING
#1     
= ed_rw_s2
#2     
= ed_cl_s2.
m_message
.

CALL METHOD OF
sheet
'RANGE' = range
EXPORTING
#1     
= h_cell
#2     
= h_cell1.
m_message
.
CALL METHOD OF
range
'SELECT'.
m_message
.

* Copy Marked Area (Sheet2) into Clippboard

CALL METHOD OF
range
'COPY'.
m_message
.

* Read Clipboard into ABAP

CALL METHOD cl_gui_frontend_services=>clipboard_import
IMPORTING
data                 = excel_tab1
EXCEPTIONS
cntl_error          
= 1
*     ERROR_NO_GUI         = 2
*     NOT_SUPPORTED_BY_GUI = 3
OTHERS               = 4.
IF sy-subrc <> 0.
MESSAGE a037(alsmex).
ENDIF.

PERFORM separated_to_intern_convert TABLES excel_tab1 it_data2
USING ld_separator.

* Clear Clipboard

REFRESH excel_tab.
CALL METHOD cl_gui_frontend_services=>clipboard_export
IMPORTING
data = excel_tab1
CHANGING
rc
= ld_rc
EXCEPTIONS
cntl_error
= 1
* ERROR_NO_GUI = 2
* NOT_SUPPORTED_BY_GUI = 3
OTHERS = 4
* Leaving Application
.
CALL METHOD OF
application
'QUIT'.
m_message
.

FREE OBJECT application.
m_message
.


LOOP AT it_data1 INTO it_data_wa2.

IF temp_row ne it_data_wa2-ROW AND temp_row IS NOT INITIAL.

temp_row
= it_data_wa2-ROW.
APPEND IT_HEADER.
ELSE.
temp_row
= it_data_wa2-ROW.
ENDIF.

CASE it_data_wa2-COL.

WHEN '0001'.
IT_HEADER
-ID = it_data_wa2-VALUE.
WHEN '0002'.
IT_HEADER
-KUNNR = it_data_wa2-VALUE.
WHEN '0003'.
IT_HEADER
-INV_DATE = it_data_wa2-value.
WHEN '0004'.
IT_HEADER
-PST_DATE = it_data_wa2-VALUE.
WHEN '0005'.
IT_HEADER
-REF = it_data_wa2-VALUE.
WHEN '0006'.
IT_HEADER
-AMT_DOCCUR = it_data_wa2-VALUE.
WHEN '0007'.
IT_HEADER
-TXT = it_data_wa2-VALUE.
WHEN '0008'.
IT_HEADER
-PRD_TEXT = it_data_wa2-VALUE.
WHEN '0009'.
IT_HEADER
-CMP_CODE = it_data_wa2-VALUE.

ENDCASE.

ENDLOOP.
APPEND IT_HEADER.

CLEAR:temp_row.

LOOP AT it_data2 INTO it_data_wa ."WHERE ROW = it_data_wa2-ROW.

IF temp_row ne it_data_wa-ROW AND temp_row IS NOT INITIAL.

temp_row
= it_data_wa-ROW.
APPEND IT_ITEM.
ELSEIF ( temp_row NE it_data_wa-ROW AND temp_row IS  INITIAL ).
temp_row
= it_data_wa-ROW.
*           ELSE
ENDIF.

CASE it_data_wa-COL.

WHEN '0001'.
IT_ITEM
-ID = it_data_wa-VALUE.
WHEN '0002'.
IT_ITEM
-GL_ACCOUNT = it_data_wa-VALUE.
WHEN '0003'.
IT_ITEM
-AMT_DOCCUR = it_data_wa-value.
WHEN '0004'.
IT_ITEM
-ITEM_TEXT = it_data_wa-VALUE.
WHEN '0005'.
IT_ITEM
-BUS_AREA = it_data_wa-VALUE.
WHEN '0006'.
IT_ITEM
-KOSTL = it_data_wa-VALUE.

ENDCASE.
ENDLOOP.

APPEND IT_ITEM.
ENDFORM.                    " EXECUTE



*ENDLOOP.
*&---------------------------------------------------------------------*
*&      Form  BAPI
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM BAPI .

DATA: it_acc_gl LIKE bapiacgl09 OCCURS 0 WITH HEADER LINE,
it_acc_ap
LIKE bapiacap09 OCCURS 0 WITH HEADER LINE,
it_acc_aR
LIKE bapiacaR09 OCCURS 0 WITH HEADER LINE,
it_return
LIKE bapiret2 OCCURS 0 WITH HEADER LINE,
it_curr_amt
LIKE bapiaccr09 OCCURS 0 WITH HEADER LINE,
it_doc_header
LIKE bapiache09 OCCURS 0 WITH HEADER LINE,
it_acc_tax
LIKE bapiactx09 OCCURS 0 WITH HEADER LINE,
obj_type
LIKE bapiache09-obj_type,
obj_key
LIKE bapiache09-obj_key,
obj_sys
LIKE bapiache09-obj_sys,
pstng_date
LIKE it_doc_header-pstng_date,
doc_date
LIKE it_doc_header-doc_date,

loop_cnt
TYPE i VALUE 0,
gv_vendor
(10) TYPE c,
gv_gl_acc
(10) TYPE c.
DATA  conv_s_amt TYPE BETRG.
DATA  cur_line TYPE P.
data item_no type POSNR_ACC.
data item_no1 type POSNR_ACC.

CLEAR: obj_type, obj_sys, obj_key, pstng_date, doc_date, gv_vendor, gv_gl_acc.


LOOP AT it_HEADER INTO WA_HEADER .

REFRESH it_doc_header.

it_doc_header
-bus_act = 'RFBU'.
it_doc_header
-username = sy-uname.
*   it_doc_header = WA_HEADER-KUNNR." Customer Number
it_doc_header
-header_txt = WA_HEADER-PRD_TEXT." bdc_source-col_h. " Invoice Text
it_doc_header
-comp_code = WA_HEADER-CMP_CODE."bdc_source-col_a. " Company Code
CONCATENATE WA_HEADER-INV_DATE+6(4) WA_HEADER-INV_DATE+3(2) WA_HEADER-INV_DATE(2)
into it_doc_header-doc_date.
CONCATENATE WA_HEADER-pst_date+6(4) WA_HEADER-pst_date+3(2) WA_HEADER-pst_date(2)
into it_doc_header-pstng_date.

it_doc_header
-doc_type = 'DR'. " Return Order...?
*    it_doc_header-fisc_year = '2013'. " Return Order...?
*    it_doc_header-fis_period = '02'. " Return Order...?
it_doc_header
-ref_doc_no = WA_HEADER-ref."bdc_source-col_d. " Invoice Number
*CONDENSE conv_s_amt.
*conv_s_amt = WA_HEADER-AMT_DOCCUR."bdc_source-col_f. " Invoice Amount
*REPLACE ALL OCCURRENCES OF ',' IN conv_s_amt WITH ''.
*IF conv_s_amt < 0.
*it_doc_header-de_cre_ind = 'H'. " H-Credit
*conv_s_amt = - conv_s_amt.
*ELSE.
*it_doc_header-de_cre_ind = 'S'. " S-Debit
*ENDIF.

APPEND it_doc_header.

REFRESH it_acc_aR.
it_acc_aR
-itemno_acc = '1'. " Invoice Number
it_acc_aR
-customer = WA_HEADER-KUNNR. " Customer Number
it_acc_aR
-comp_code = WA_HEADER-CMP_CODE. " Company Code
it_acc_aR
-item_text = WA_HEADER-TXT. " Line Item Text

APPEND it_acc_aR.


REFRESH it_acc_gl.
REFRESH IT_CURR_AMT.

"GL Information details collected

CLEAR : ITEM_NO,item_no1.
item_no
= 1.
LOOP AT it_ITEM INTO WA_ITEM where id = wa_header-ID.

ITEM_NO
= ITEM_NO + 1.
it_acc_gl
-itemno_acc = ITEM_NO.
it_acc_gl
-gl_account = WA_ITEM-GL_ACCOUNT."gv_gl_acc. " GL Account
it_acc_gl
-item_text = WA_ITEM-ITEM_TEXT. "bdc_source-col_o. " Line Item Text
it_acc_gl
-doc_type = 'DR'. " Return Order...?
it_acc_gl
-comp_code = WA_HEADER-CMP_CODE."bdc_source-col_a. " Company Code
it_acc_gl
-bus_area = WA_ITEM-BUS_AREA."bdc_source-col_a. " Company Code
it_acc_gl
-CUSTOMER = WA_HEADER-KUNNR.
it_acc_gl
-costcenter = WA_ITEM-KOSTL."bdc_source-col_k. " Cost Center
*      it_acc_gl-tax_code = 'V6'."WA_ITEM-VAT."bdc_source-col_m. " Tax Code
*it_acc_gl-pstng_date ='20130506'." pstng_date. " Posting Date
*it_acc_gl-vendor_no = '0000050386'. " Vendor Number
*      it_acc_gl-costcenter = WA_ITEM-KOSTL."bdc_source-col_k. " Cost Center
*it_acc_gl-wbs_element = bdc_source-col_q. " WBS Element
*it_acc_gl-network = bdc_source-col_p. " Internal Order
conv_s_amt
= - WA_ITEM-AMT_DOCCUR."bdc_source-col_f. " Invoice Amount

it_acc_gl
-de_cre_ind = 'S'. " S-Debit

APPEND it_acc_gl
.


*      ITEM_NO1 = ITEM_NO1 + 1.
it_curr_amt
-itemno_acc ITEM_NO . " Invoice Number
it_curr_amt
-curr_type = '00'.
it_curr_amt
-currency = 'INR'. " Currancy
it_curr_amt
-amt_doccur = conv_s_amt. " Line Item Amount
APPEND it_curr_amt.

ENDLOOP.
*   this amount details for Customer
conv_s_amt
WA_HEADER-amt_doccur.
*    IF conv_s_amt < 0.
*      conv_s_amt = - conv_s_amt.
*    ENDIF.
it_curr_amt
-itemno_acc = '1'. " Invoice Number
it_curr_amt
-curr_type = '00'.
it_curr_amt
-currency = 'INR'. " Currancy
it_curr_amt
-amt_doccur = conv_s_amt . " Line Item Amount
APPEND it_curr_amt.

REFRESH it_return.

"Customer Invoice

* Do the post to GL Account and AP
CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'
EXPORTING
documentheader   
= it_doc_header
IMPORTING
obj_type         
= obj_type
obj_key          
= obj_key
obj_sys          
= obj_sys
TABLES
accountgl        
= it_acc_gl
currencyamount   
= it_curr_amt
accountreceivable
= it_acc_aR
return            = it_return.

CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
* Check for any errors

WRITE :/ wa_header-id , ' ', obj_key  .
LOOP at IT_RETURN WHERE TYPE = 'E'.
WRITE : / 'Error :', IT_RETURN-MESSAGE .
endloop.

ENDLOOP.
*ENDLOOP.

ENDFORM.                    " BAPI