10-27-2006 7:49 AM
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 whats 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.
10-31-2006 3:05 AM
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
10-27-2006 7:56 AM
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
10-27-2006 8:02 AM
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
10-29-2006 10:49 PM
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 its 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
10-30-2006 1:01 AM
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
10-31-2006 12:16 AM
10-31-2006 12:24 AM
10-31-2006 1:20 AM
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.
10-31-2006 3:05 AM
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
10-31-2006 3:38 AM
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