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: 

BAPI_BILLINGDOC_CREATEMULTIPLE u0096 Duplication of line item in billing docume

Former Member
0 Kudos

Hi All,

I am using BAPI “<b>BAPI_BILLINGDOC_CREATEMULTIPLE</b>” to create billing document. Creation of billing document is fine, but issue is I am passing individual line item along with <b>quantity</b> to be billed. But what’s happening is if I got 3 item line in sales order with quantity 1-3-5, billing document getting created 3 quantity ‘1’, 3 quantity ‘3’ and 3 quantity ‘5’. So I end up with 9 line item on billing document which is incorrect.

Please see the code below which I am using, can anyone tell me what I am doing wrong here. I basically need to create 3 billing line item with respective quantity I pass. Any hint is much appreciated. Thanks in advance.

Regards,

Tim

loop at GT_INIT_ITAB2 into GS_INIT_ITAB2.

select single * into gs_vbak

from vbak

where vbeln = GS_INIT_ITAB2-VBELN.

select single * into gs_vbap

from vbap

where vbeln = GS_INIT_ITAB2-VBELN AND

posnr = GS_INIT_ITAB2-posnr.

select single * into gs_mara

from mara

where matnr = gs_vbap-matnr.

refresh GT_BILLINGDATAIN.

GT_BILLINGDATAIN-SALESORG = gs_vbak-vkorg.

GT_BILLINGDATAIN-DISTR_CHAN = gs_vbak-vtweg.

GT_BILLINGDATAIN-DIVISION = gs_vbak-spart.

GT_BILLINGDATAIN-DOC_TYPE = GS_INIT_ITAB2-auart.

GT_BILLINGDATAIN-ORDBILLTYP = p_fkart.

GT_BILLINGDATAIN-SOLD_TO = GS_INIT_ITAB2-kunnr.

  • GT_BILLINGDATAIN-ITEM_CATEG = GS_INIT_ITAB2-pstyv.

GT_BILLINGDATAIN-REQ_QTY = GS_INIT_ITAB2-kwmeng.

GT_BILLINGDATAIN-SALES_UNIT = gs_vbap-vrkme.

GT_BILLINGDATAIN-CURRENCY = gs_vbak-waerk.

GT_BILLINGDATAIN-SHORT_TEXT = 'Test'.

GT_BILLINGDATAIN-BILL_DATE = gl_date.

  • write GS_INIT_ITAB2-afdat to GT_BILLINGDATAIN-BILL_DATE ddmmyy.

  • GT_BILLINGDATAIN-BILL_DATE = GS_INIT_ITAB2-afdat.

GT_BILLINGDATAIN-PRICE_DATE = SY-DATUM.

GT_BILLINGDATAIN-REF_DOC = GS_INIT_ITAB2-VBELN.

GT_BILLINGDATAIN-DOC_NUMBER = GS_INIT_ITAB2-VBELN.

GT_BILLINGDATAIN-ITM_NUMBER = GS_INIT_ITAB2-POSNR.

  • GT_BILLINGDATAIN-ORIGINDOC = GS_INIT_ITAB2-VBELN.

GT_BILLINGDATAIN-ITEM = GS_INIT_ITAB2-POSNR.

GT_BILLINGDATAIN-NO_MATMAST = co_x.

GT_BILLINGDATAIN-COUNTRY = 'AUS'.

GT_BILLINGDATAIN-MATERIAL = gl_matnr.

GT_BILLINGDATAIN-TAXCL_1MAT = '1'.

GT_BILLINGDATAIN-REF_DOC_CA = 'C'.

append GT_BILLINGDATAIN.

endloop.

      • Prepare for BAPI call

CALL FUNCTION 'BAPI_BILLINGDOC_CREATEMULTIPLE'

EXPORTING

CREATORDATAIN = GS_CREATORDATAIN

  • TESTRUN = co_x

  • POSTING = co_x

TABLES

BILLINGDATAIN = GT_BILLINGDATAIN

  • CONDITIONDATAIN = GT_CONDITIONDATAIN

  • CCARDDATAIN =

  • TEXTDATAIN =

  • ERRORS =

RETURN = GT_RETURN

SUCCESS = GT_SUCCESS

.

clear gl_return.

loop at GT_RETURN.

if GT_RETURN-type EQ 'E' OR

GT_RETURN-type EQ 'A'.

move: GT_RETURN to gl_return.

exit.

endif.

endloop.

if gl_return is initial.

CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'

  • EXPORTING

  • WAIT = '1'

IMPORTING

RETURN = gt_return_commit.

endif.

1 ACCEPTED SOLUTION

Former Member
0 Kudos

Hi,

You have commented the WITH_POSTING parameter...

CALL FUNCTION 'RV_INVOICE_CREATE'

EXPORTING

  • DELIVERY_DATE = sy-datum

INVOICE_DATE = sy-datum

INVOICE_TYPE = 'ZPF5' "Pre Invoice

PRICING_DATE = sy-datum

  • VBSK_I = X_VBSK

<b> WITH_POSTING = 'B'</b>

  • ID_NO_ENQUEUE = 'X'

vbsk_i = s_vbsk

  • with_posting = 'B'

IMPORTING

vbsk_e = s_vbsk

TABLES

xkomfk = xkomfk

xkomv = xkomv

xthead = xthead

xvbfs = xvbfs

xvbpa = xvbpa

xvbrk = xvbrk

xvbrp = xvbrp

xvbss = xvbss.

Please let me know if you have any questions..

Thanks,

Naren

9 REPLIES 9

Former Member
0 Kudos

Why you are clearing the table 'GT_BILLINGDATAIN' (refresh GT_BILLINGDATAIN) in the loop and in the same loop you are appending records to it?. At the end of that loop you have only one record in that table... try to clear only work area , CLEAR instead of refresh.

Message was edited by: Tomasz Kozerski

0 Kudos

Hi Tomasz,

I moved the code around, i have commented the "<b>REFRESH GT_BILLINGDATAIN</b>". I will have all 3 records in before calling BAPI with respective quantity. But still i have duplication.

Regards,

Tim

0 Kudos

Hi All,

I am still getting duplication. Basically if I have 3 item records on Sales order and I am populating 3 lines in BAPI expecting to get 3 billing document (one line item on each billing document). Instead every time I call BAPI it’s taking quantity and processing all 3 line item again and again. So I end up with 3 billing document with total 9 line item. Which is incorrect. Had anyone come across such issue? I tried all option even populating individual condition record, still same. Am I using right BAPI for my requirement. Any hint much appreciated.

Regards,

Tim

Former Member
0 Kudos

Hi,

Check this code...For creating billing document from sales order..

TABLES: vbak.

PARAMETERS: p_vbeln LIKE vbak-vbeln OBLIGATORY,

p_fkart LIKE vbrk-fkart.

DATA:

s_vbsk LIKE vbsk.

DATA:

xkomfk LIKE komfk OCCURS 0 WITH HEADER LINE,

xkomv LIKE komv OCCURS 0 WITH HEADER LINE,

xthead LIKE theadvb OCCURS 0 WITH HEADER LINE,

xvbfs LIKE vbfs OCCURS 0 WITH HEADER LINE,

xvbpa LIKE vbpavb OCCURS 0 WITH HEADER LINE,

xvbrk LIKE vbrkvb OCCURS 0 WITH HEADER LINE,

xvbrp LIKE vbrpvb OCCURS 0 WITH HEADER LINE,

xvbss LIKE vbss OCCURS 0 WITH HEADER LINE.

SELECT SINGLE * FROM vbak

WHERE vbeln = p_vbeln.

IF sy-subrc <> 0.

MESSAGE s208(00) WITH 'Invalid vbeln'.

LEAVE LIST-PROCESSING.

ENDIF.

CALL FUNCTION 'RV_INVOICE_REFRESH'

EXPORTING

with_posting = 'B'

TABLES

xkomfk = xkomfk

xkomv = xkomv

xthead = xthead

xvbfs = xvbfs

xvbpa = xvbpa

xvbrk = xvbrk

xvbrp = xvbrp

xvbss = xvbss.

DATA: BEGIN OF t_vbap OCCURS 0,

vbeln TYPE vbeln,

posnr TYPE posnr,

END OF t_vbap.

SELECT vbeln posnr INTO TABLE t_vbap

FROM vbap WHERE vbeln = p_vbeln.

LOOP AT t_vbap.

  • Fill the values.

xkomfk-mandt = sy-mandt.

xkomfk-vbeln = p_vbeln.

xkomfk-posnr = t_vbap-posnr.

xkomfk-vbtyp = vbak-vbtyp.

xkomfk-seldat = sy-datum.

xkomfk-fkart = p_fkart.

xkomfk-fkimg = '1.000'.

xkomfk-vrkme = 'EA'.

APPEND xkomfk.

ENDLOOP.

CALL FUNCTION 'RV_INVOICE_CREATE'

EXPORTING

vbsk_i = s_vbsk

with_posting = 'B'

IMPORTING

vbsk_e = s_vbsk

TABLES

xkomfk = xkomfk

xkomv = xkomv

xthead = xthead

xvbfs = xvbfs

xvbpa = xvbpa

xvbrk = xvbrk

xvbrp = xvbrp

xvbss = xvbss.

READ TABLE xvbfs WITH KEY msgty = 'S'.

WRITE:/ sy-subrc.

WRITE:/ xvbfs-msgv1,xvbfs-msgv2,xvbfs-msgv3.

Thanks,

Naren

0 Kudos

Thanks Narendran ... I will try.

Former Member
0 Kudos

Hi,

Please let me know if it works..

Thanks,

Naren

0 Kudos

Hi Narendaran,

Thanks for your reply. It's not 100% yet. Structure ‘xvbfs’ is blank which we are checking subrc. But table ‘xvbrk’ and ‘xvbrp’ as all billing document details with VBELN as ‘$000000001’. Do I have to call any FM or COMMIT to complete invoice creation. I am not sure what I am doing wrong here. Can you think of any thing from code (below) which I am doing wrong. Thanks for your time and help.

Regards,

Tim

CODE ............

SELECT SINGLE * FROM vbak

WHERE vbeln = p_vbeln.

IF sy-subrc <> 0.

MESSAGE s208(00) WITH 'Invalid vbeln'.

LEAVE LIST-PROCESSING.

ENDIF.

CALL FUNCTION 'RV_INVOICE_REFRESH'

EXPORTING

with_posting = 'B'

TABLES

xkomfk = xkomfk

xkomv = xkomv

xthead = xthead

xvbfs = xvbfs

xvbpa = xvbpa

xvbrk = xvbrk

xvbrp = xvbrp

xvbss = xvbss.

DATA: BEGIN OF t_vbap OCCURS 0,

vbeln TYPE vbeln,

posnr TYPE posnr,

END OF t_vbap.

data: gt_vbap type standard table

of vbap with non-unique default key.

data: gs_vbap like vbap.

*SELECT vbeln posnr INTO TABLE t_vbap

*FROM vbap WHERE vbeln = p_vbeln.

select * into corresponding fields of table gt_vbap

from vbap

where vbeln eq p_vbeln.

LOOP AT gt_vbap into gs_vbap.

  • Fill the values.

move-CORRESPONDING gs_vbap to xkomfk.

xkomfk-mandt = sy-mandt.

xkomfk-vbeln = p_vbeln.

  • xkomfk-posnr = gs_vbap-posnr.

xkomfk-vbtyp = vbak-vbtyp.

  • xkomfk-seldat = sy-datum.

  • xkomfk-fkart = p_fkart.

xkomfk-fkimg = gs_vbap-KWMENG.

  • xkomfk-vrkme = gs_vbap-vrkme.

APPEND xkomfk.

ENDLOOP.

s_vbsk-mandt = sy-mandt.

s_vbsk-smart = 'F'.

s_vbsk-ernam = sy-uname.

s_vbsk-erdat = sy-datum.

s_vbsk-uzeit = sy-uzeit.

CALL FUNCTION 'RV_INVOICE_CREATE'

EXPORTING

  • DELIVERY_DATE = sy-datum

INVOICE_DATE = sy-datum

INVOICE_TYPE = 'ZPF5' "Pre Invoice

PRICING_DATE = sy-datum

  • VBSK_I = X_VBSK

  • WITH_POSTING = 'D'

  • ID_NO_ENQUEUE = 'X'

vbsk_i = s_vbsk

  • with_posting = 'B'

IMPORTING

vbsk_e = s_vbsk

TABLES

xkomfk = xkomfk

xkomv = xkomv

xthead = xthead

xvbfs = xvbfs

xvbpa = xvbpa

xvbrk = xvbrk

xvbrp = xvbrp

xvbss = xvbss.

READ TABLE xvbfs WITH KEY msgty = 'S'.

WRITE:/ sy-subrc.

WRITE:/ xvbfs-msgv1,xvbfs-msgv2,xvbfs-msgv3.

Former Member
0 Kudos

Hi,

You have commented the WITH_POSTING parameter...

CALL FUNCTION 'RV_INVOICE_CREATE'

EXPORTING

  • DELIVERY_DATE = sy-datum

INVOICE_DATE = sy-datum

INVOICE_TYPE = 'ZPF5' "Pre Invoice

PRICING_DATE = sy-datum

  • VBSK_I = X_VBSK

<b> WITH_POSTING = 'B'</b>

  • ID_NO_ENQUEUE = 'X'

vbsk_i = s_vbsk

  • with_posting = 'B'

IMPORTING

vbsk_e = s_vbsk

TABLES

xkomfk = xkomfk

xkomv = xkomv

xthead = xthead

xvbfs = xvbfs

xvbpa = xvbpa

xvbrk = xvbrk

xvbrp = xvbrp

xvbss = xvbss.

Please let me know if you have any questions..

Thanks,

Naren

0 Kudos

Hi Narendarn,

Thanks a lot for your help. It works at last. I had to comment few lines based on VF01 code. By mistake i commented with post one. Thanks a lot for your help and speak to you soon.

Regards,

Tim