HI:everybody!
I have used the function BILLING_SCHEDULE_SAVE to create the billing plan in sales orders.But when I use VF01 to create billing documents, the systems messages
'No billing documents were generated. See log'
then I see the log ,
it says
"The item has been fully invoiced already
Date 000001 has already been billed (billing plan)"
the bill type is L2 Debit Memo
But if I use va02 to create the billing plan ,the vf01 operation is sucessful,
then I dubgger the vf01,I find it call the function named 'RV_INVOICE_CREATE',
if the bill plan is created by 'BILLING_SCHEDULE_SAVE' function, the function 'RV_INVOICE_CREATE' can not create billing documents sucessfully,
but if the bill plan is created by 'VA02',it sucessed.
the parameter is Exactly the same!
Why these happen? Can anyone tell me why?thank you !!!
this is my program:
FORM F_CJ_KPJH.
REFRESH it_data2.
APPEND LINES OF it_data to it_data2.
DELETE ADJACENT DUPLICATES FROM it_data COMPARING vbeln posnr.
LOOP AT it_data INTO wa_data.
CALL FUNCTION 'SD_SALES_DOCUMENT_READ'
EXPORTING
document_number = wa_data-vbeln.
REFRESH e_fplt.
CALL FUNCTION 'SD_SALES_BILLINGPLAN_READ'
EXPORTING
i_vbeln = wa_data-vbeln
i_posnr = wa_data-posnr
IMPORTING
e_fpla = e_fpla
TABLES
e_fplt = e_fplt
EXCEPTIONS
no_billingplan_allowed = 1
no_billingplan_found = 2
OTHERS = 3.
IF sy-subrc NE 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
CALL FUNCTION 'BILLING_SCHEDULE_READ'
EXPORTING
fplnr = e_fpla-fplnr
* I_VFKDAT =
* I_BFKDAT =
TABLES
zfpla = zfpla
zfplt = zfplt.
REFRESH it_data3.
LOOP AT it_data2 INTO wa_data2 WHERE vbeln = wa_data-vbeln
AND posnr = wa_data-posnr.
APPEND wa_data2 to it_data3.
CLEAR wa_data2.
ENDLOOP.
DATA l_h TYPE i.
CLEAR l_h.
DESCRIBE TABLE zfplt LINES l_h.
REFRESH zfplt2.
DATA l_ft TYPE i.
READ TABLE it_data3 INTO wa_data INDEX 1.
if sy-SUBRC = 0.
l_ft = wa_data-BILL_PLANi - 1.
ENDIF.
"l_ft = 1.
DATA l_row TYPE i VALUE 0.
CLEAR l_row.
LOOP at it_data3 INTO wa_data2.
l_row = l_row + 1.
l_ft = l_ft + 1.
zfplt2-fplnr = e_fpla-fplnr.
zfplt2-fpltr = l_ft.
zfplt2-afdat = wa_data2-afdat.
zfplt2-tetxt = wa_data2-tetxt.
zfplt2-FAKWR = wa_data2-FAKWR.
zfplt2-FPROZ = wa_data2-FPROZ.
zfplt2-FAREG = wa_data2-FAREG.
zfplt2-FKSAF = wa_data2-FKSAF.
zfplt2-fpttp = '01'.
zfplt2-FPFIX = '1'.
if l_row <= l_h.
zfplt2-updkz = 'U'."修改第一行
ELSE.
zfplt2-updkz = 'I'."插入新数据
ENDIF.
APPEND zfplt2.
ENDLOOP.
REFRESH zfpla2.
LOOP at zfpla.
MOVE-CORRESPONDING zfpla TO zfpla2.
APPEND zfpla2.
MODIFY ZFPLA.
endloop.
CALL FUNCTION 'BILLING_SCHEDULE_SAVE'
TABLES
fpla_new = zfpla2
fpla_old = zfpla
fplt_new = zfplt2 " --> NEW
fplt_old = zfplt.
CALL FUNCTION 'SD_SALES_DOCUMENT_SAVE'
EXCEPTIONS
ERROR_MESSAGE = 01.
IF SY-SUBRC NE 0.
PERFORM MESSAGE_100 USING wa_data-VBELN.
EXIT.
ELSE.
MESSAGE '数据更新成功' TYPE 'S'.
ENDIF.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
ENDLOOP.