Application Development and Automation 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: 
Read only

BAPI_INCOMINGINVOICE_CREATE

Former Member
0 Likes
3,237

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" ?

4 REPLIES 4
Read only

former_member181966
Active Contributor
0 Likes
2,177

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 this’ll give you idea!!

<b>Pl... award the points.</b>

Good luck

Thanks

Saquib Khan

"Some are wise and some are otherwise"

Read only

Former Member
0 Likes
2,177

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

Read only

chaouki_akir
Contributor
0 Likes
2,177

Hello,

do you find a solution to your problem ?

Read only

Former Member
0 Likes
2,177

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