‎2006 Jul 11 5:39 PM
I am using 'BAPI_INCOMINGINVOICE_CREATE' to post an invoice for a purchase order. Which field do I use on the header data structure of this bapi for tax code to make it "A/P Sales Tax, exempt" ?
‎2006 Jul 11 5:59 PM
I can see the following fields in <b>BAPI_INCINV_CREATE_HEADER</b>
<b>CALC_TAX_IND
DEL_COSTS_TAXC
DEL_COSTS_TAXJ
TAX_EXCH_RATE</b>
As per my understanding, its tied up with some payment condition type in Sales order like 'MSt' or ZEXP ( exempt ) etc ...
Hope thisll give you idea!!
<b>Pl... award the points.</b>
Good luck
Thanks
Saquib Khan
"Some are wise and some are otherwise"
‎2006 Jul 11 6:12 PM
HI,
<i>Look at this sample code</i>
REPORT Z_BAPI_INCOMINGINVOICE_CREATE .
*----------------------------------------------------------------------*
* Create Vendor Invoices using BAPI *
Invoice data is sent by the vendors in a text file and an inbound
* interface is required to create Vendor Invoices in SAP.
* The file contains the Purchase Order information, material quantity
* received from vendor along with the amount.
* Here the requirement becomes a little complex as there might be
* several ocuurences of same Purchase Order item in one invoice.
*----------------------------------------------------------------------*
* Only a incomplete sample coding is given here and it can only be used
* as a base for writing a program.
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
* Populate internal Table I_ITAB from the data uploaded
* from text data file.
*......
*......
*----------------------------------------------------------------------*
* Populate Item Table from item data in data file
*......
*......
* Processing for header records of data file.
* set up header data for BAPI call.
* Check whwther it's an Incoice or Credit Memo.
* And populate Invoice indicator accordingly.
IF I_ITAB-TRANS EQ '-'.
I_HEADER-INVOICE_IND = C_X.
ELSE.
CLEAR I_HEADER-INVOICE_IND.
ENDIF.
I_HEADER-PSTNG_DATE = I_ITAB-BUDAT.
I_HEADER-DOC_DATE = I_ITAB-BLDAT.
I_HEADER-CURRENCY = W_WAERS.
I_HEADER-GROSS_AMOUNT = I_ITAB-DMBTR.
I_HEADER-COMP_CODE = I_ITAB-BUKRS.
I_HEADER-HEADER_TXT = I_ITAB-SGTXT.
I_HEADER-REF_DOC_NO = I_ITAB-XBLNR.
IF NOT I_ITAB-INV_REC_DATE IS INITIAL.
I_HEADER-INV_REC_DATE = I_ITAB-INV_REC_DATE.
ELSE.
I_HEADER-INV_REC_DATE = I_ITAB-BLDAT.
ENDIF.
I_HEADER-PYMT_METH = I_ITAB-ZLSCH.
APPEND I_HEADER.
*....
*....
*----------------------------------------------------------------------*
* Populate Item Table from item data in data file
lv_count = 0.
LOOP AT I_ITAB.
* Processing for header records of data file.
lv_count = lv_count + 1.
* ...........
* ...........
* Item Data
I_ITEM-INVOICE_DOC_ITEM = lv_COUNT.
I_ITEM-PO_NUMBER = I_ITAB-EBELN.
I_ITEM-PO_ITEM = I_ITAB-EBELP.
I_ITEM-TAX_CODE = I_ITAB-MWSKZ2.
I_ITEM-ITEM_AMOUNT = I_ITAB-NETWR.
* Populate quantities if not a blanket order
IF I_ITAB-BLANKET EQ SPACE.
I_ITEM-QUANTITY = I_ITAB-MENGE.
PERFORM GET_MEINS USING I_ITAB-EBELN " Use table EKPO
I_ITAB-EBELP
CHANGING I_ITEM-PO_UNIT.
I_ACCOUNTINGDATA-PO_UNIT = I_ITEM-PO_UNIT.
IF I_ITEM-QUANTITY EQ 0.
I_ITEM-PO_UNIT = SPACE.
ENDIF.
ENDIF.
* Item Text
I_ITEM-ITEM_TEXT = I_ITAB-ITEM_TEXT.
APPEND I_ITEM.
* Populate Accounting Data
IF I_ITAB-BLANKET EQ SPACE.
I_ACCOUNTINGDATA-INVOICE_DOC_ITEM = lv_COUNT.
I_ACCOUNTINGDATA-SERIAL_NO = '01'.
I_ACCOUNTINGDATA-TAX_CODE = I_ITAB-MWSKZ2.
I_ACCOUNTINGDATA-ITEM_AMOUNT = I_ITAB-NETWR.
SELECT SINGLE SAKTO KOSTL VBELN VBELP ANLN1 ANLN2 DABRZ
FISTL GEBER GRANT_NBR GSBER IMKEY KOKRS KSTRG PAOBJNR
PRCTR PS_PSP_PNR AUFNR MENGE
FROM EKKN
INTO (I_ACCOUNTINGDATA-GL_ACCOUNT, I_ACCOUNTINGDATA-COSTCENTER,
I_ACCOUNTINGDATA-SD_DOC, I_ACCOUNTINGDATA-SDOC_ITEM,
I_ACCOUNTINGDATA-ASSET_NO, I_ACCOUNTINGDATA-SUB_NUMBER,
I_ACCOUNTINGDATA-REF_DATE, I_ACCOUNTINGDATA-FUNDS_CTR,
I_ACCOUNTINGDATA-FUND, I_ACCOUNTINGDATA-GRANT_NBR,
I_ACCOUNTINGDATA-BUS_AREA, I_ACCOUNTINGDATA-RL_EST_KEY,
I_ACCOUNTINGDATA-CO_AREA, I_ACCOUNTINGDATA-COSTOBJECT,
I_ACCOUNTINGDATA-PROFIT_SEGM_NO, I_ACCOUNTINGDATA-PROFIT_CTR,
I_ACCOUNTINGDATA-WBS_ELEM, I_ACCOUNTINGDATA-ORDERID,
I_ACCOUNTINGDATA-QUANTITY)
WHERE EBELN EQ I_ITAB-EBELN
AND EBELP EQ I_ITAB-EBELP
AND ZEKKN EQ '01'.
IF EKKO-BSART NE 'LTV'.
CLEAR I_ACCOUNTINGDATA-QUANTITY.
CLEAR I_ACCOUNTINGDATA-PO_UNIT.
ENDIF.
APPEND I_ACCOUNTINGDATA.
ENDIF.
*.....
*.....
ENDLOOP.
*----------------------------------------------------------------------*
* The following coding is to solve the problem
* mentioned in OSS Note 518338.
* Same PO item within several invoice items.
SORT I_ITEM BY PO_NUMBER PO_ITEM.
LOOP AT I_ITEM.
ON CHANGE OF I_ITEM-PO_NUMBER OR I_ITEM-PO_ITEM.
W_COUNTER = 1.
LOOP AT I_ITEM WHERE PO_NUMBER = I_ITEM-PO_NUMBER
AND PO_ITEM = I_ITEM-PO_ITEM.
IF W_COUNTER EQ 1.
I_ACCOUNTINGDATA-SERIAL_NO = '01'.
I_ACCOUNTINGDATA-XUNPL = ' '.
ELSE.
I_ACCOUNTINGDATA-SERIAL_NO = ' '.
I_ACCOUNTINGDATA-XUNPL = 'X'.
ENDIF.
MODIFY I_ACCOUNTINGDATA
TRANSPORTING SERIAL_NO XUNPL
WHERE INVOICE_DOC_ITEM = I_ITEM-INVOICE_DOC_ITEM.
W_COUNTER = W_COUNTER + 1.
ENDLOOP.
* To solve the repetition of PO item in subsequent invoices.
ELSEIF SY-TABIX EQ 1.
W_COUNTER = 1.
LOOP AT I_ITEM WHERE PO_NUMBER = I_ITEM-PO_NUMBER
AND PO_ITEM = I_ITEM-PO_ITEM.
IF W_COUNTER EQ 1.
I_ACCOUNTINGDATA-SERIAL_NO = '01'.
I_ACCOUNTINGDATA-XUNPL = ' '.
ELSE.
I_ACCOUNTINGDATA-SERIAL_NO = ' '.
I_ACCOUNTINGDATA-XUNPL = 'X'.
ENDIF.
MODIFY I_ACCOUNTINGDATA
TRANSPORTING SERIAL_NO XUNPL
WHERE INVOICE_DOC_ITEM = I_ITEM-INVOICE_DOC_ITEM.
W_COUNTER = W_COUNTER + 1.
ENDLOOP.
ENDON.
ENDLOOP.
* Changes over for OSS Note 518338.
SORT I_ITEM BY INVOICE_DOC_ITEM PO_NUMBER PO_ITEM.
<b>CALL FUNCTION 'BAPI_INCOMINGINVOICE_CREATE'
EXPORTING
HEADERDATA = I_HEADER
IMPORTING
INVOICEDOCNUMBER = W_BELNR
FISCALYEAR = W_GJAHR
TABLES
ITEMDATA = I_ITEM
ACCOUNTINGDATA = I_ACCOUNTINGDATA
TAXDATA = I_TAX
RETURN = I_RETURN.</b>
if sy-subrc < > 0.
message e999(re) with 'Problem occured'.
else.
loop at return.
if not return is initial.
clear bapi_retn_info.
move-corresponding return to bapi_retn_info.
if return-type = 'A' or return-type = 'E'.
error_flag = 'X'.
endif.
append bapi_retn_info.
endif.
endloop.
if error_flag = 'X'.
message e999(re) with 'Problem occured'.
rollback work.
else.
* Return Table from BAPI call is empty
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'
IMPORTING
RETURN = I_RETURN.
endif.
endif.Thanks
Sudheer
‎2008 Feb 23 7:49 AM
‎2008 Feb 23 7:56 AM
hi
hope this code will help you.
Reward if help.
REPORT z_yaktest3 NO STANDARD PAGE HEADING MESSAGE-ID zi455.
*----
Internal table declaration *
----
DATA: gt_headerdata TYPE STANDARD TABLE OF bapi_incinv_create_header
INITIAL SIZE 0,
gt_itemdata TYPE STANDARD TABLE OF bapi_incinv_create_item
INITIAL SIZE 0,
gt_accountingdata TYPE STANDARD TABLE OF bapi_incinv_create_account
INITIAL SIZE 0,
gt_return TYPE STANDARD TABLE OF bapiret2
INITIAL SIZE 0.
DATA: gs_headerdata LIKE bapi_incinv_create_header.
DATA: gs_itemdata LIKE bapi_incinv_create_item.
DATA: gs_accountingdata TYPE bapi_incinv_create_account.
DATA: gs_return TYPE bapiret2.
DATA: l_date TYPE sy-datum.
l_date = sy-datum - 15.
Error flag *
DATA: l_errflag(1) TYPE c.
*----
Build Invoice header
*----
Document Type (Invoice)
gs_headerdata-invoice_ind = 'X'.
gs_headerdata-doc_type = 51.
Document Date
gs_headerdata-doc_date = l_date.
Posting Date
gs_headerdata-pstng_date = l_date.
Reference Document No
gs_headerdata-ref_doc_no = 323348.
gs_headerdata-gross_amount = 31.
Currency
gs_headerdata-currency = 'USD'.
Company Code
gs_headerdata-comp_code = 'D3'.
Baseline Date
gs_headerdata-bline_date = l_date.
*
**Tax Indicator
*gs_headerdata-calc_tax_ind = 'X'.
*----
Build order item(s) - Only 1 is used in this example
*----
Document Item
gs_itemdata-invoice_doc_item = 000001.
Purchase Order Number
gs_itemdata-po_number = 3700000011.
Purchase Order Item
gs_itemdata-po_item = 00010.
Quantity
gs_itemdata-quantity = 31.
gs_itemdata-po_unit = 'Z00'.
Item Amount
gs_itemdata-item_amount = 31.
gs_itemdata-tax_code = 'O0'.
gs_itemdata-taxjurcode = '0100000000'.
APPEND gs_itemdata TO gt_itemdata.
Document Item
*gs_itemdata-invoice_doc_item = '00002'.
*
Purchase Order Number
*gs_itemdata-po_number = '4700000158'.
*
Purchase Order Item
*gs_itemdata-po_item ='00020' .
*
Quantity
*gs_itemdata-quantity = '5'.
*gs_itemdata-po_unit = 'Z00'.
*
Item Amount
*gs_itemdata-item_amount = '5'.
*gs_itemdata-tax_code = 'O0'.
*gs_itemdata-taxjurcode = '0100000000'.
*
*APPEND gs_itemdata TO gt_itemdata.
*
Accounting Data
***gs_accountingdata-costcenter = 'DUMMY CCTR'.
*gs_accountingdata-invoice_doc_item = '00001'.
*gs_accountingdata-xunpl = 'X'.
*gs_accountingdata-tax_code = 'O0'.
*gs_accountingdata-taxjurcode = '0100000000'.
*gs_accountingdata-ITEM_AMOUNT = 100.
*gs_accountingdata-gl_account = '0003805101'.
*
*APPEND gs_accountingdata TO gt_accountingdata.
*CLEAR :gs_accountingdata.
*Call the BAPI to Create the Return Order
data: gv_INVOICE type BAPI_INCINV_FLD-INV_DOC_NO,
gv_YEAR type BAPI_INCINV_FLD-FISC_YEAR.
CALL FUNCTION 'BAPI_INCOMINGINVOICE_CREATE'
EXPORTING
headerdata = gs_headerdata
IMPORTING
INVOICEDOCNUMBER = gv_INVOICE
FISCALYEAR = gv_YEAR
TABLES
return = gt_return
itemdata = gt_itemdata.
accountingdata = gt_accountingdata.
PERFORM error.
*----
Check and write Return table
*----
FORM error.
LEAVE TO LIST-PROCESSING.
CLEAR l_errflag.
LOOP AT gt_return INTO gs_return.
WRITE: / gs_return-type, gs_return-message(200).
IF gs_return-type = 'E'.
l_errflag = 'X'.
ENDIF.
ENDLOOP.
PERFORM commit.
ENDFORM. " ERROR INPUT
*----
No errors - Commit
*----
FORM commit.
IF l_errflag IS INITIAL.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
ENDIF.
ENDFORM. " COMMIT INPUT