我正在尝试修复某个已经开发的功能,目标是金额为0欧元的SD发票不应传输到FI。据我所知,以下代码用于从FI和SD中选择数据:
* select order-related invoices
SELECT * FROM vbfa AS v INTO TABLE gt_vbfa_inv
FOR ALL ENTRIES IN gt_vbak
WHERE vbelv = gt_vbak-vbeln
AND vbtyp_n IN ('M', 'O', 'P', '5', '6')
AND stufe = '00'
AND NOT EXISTS ( SELECT * FROM vbfa
WHERE vbelv = v~vbeln
AND posnv = v~posnn
AND vbtyp_n IN ('N', 'S')
AND stufe = '00' ) .
IF sy-subrc = 0.
* select invoice head status
SELECT DISTINCT * FROM vbuk APPENDING TABLE gt_vbuk_inv
FOR ALL ENTRIES IN gt_vbfa_inv
WHERE vbeln = gt_vbfa_inv-vbeln. "#EC CI_SUBRC
ENDIF.
SORT gt_vbuk_inv BY vbeln.
DELETE ADJACENT DUPLICATES FROM gt_vbuk_inv COMPARING vbeln.
IF me->gv_items = abap_true AND gt_vbuk_inv IS NOT INITIAL.
SELECT * FROM vbrp INTO TABLE gt_vbrp
FOR ALL ENTRIES IN gt_vbuk_inv
WHERE vbeln = gt_vbuk_inv-vbeln. "#EC CI_SUBRC
ENDIF.
从上面的代码中,我可以理解的是,表VBFA用于获取FI的数据,而表VBRP则用于获取SD的数据。我想实现的是,当发票号没有FI文档时,发票号将为空。
如果将使用BKPF表(用于FI(和VBRK(用于SD(,那么我可以尝试以下关系:
vbrk-xblnr=bkpf-xblnr.
但是,这些表没有在函数中使用。我可以问你,我如何修复代码,以便当发票编号没有FI文档时,因此价值为0欧元的发票不会生成FI文档,那么发票编号将为空。
提前感谢大家!
因为目标是
金额为0欧元的SD发票不应传输至FI
我想在向Accounting发布SD发票时,您的代码处于某种用户退出或标准程序修改中。如果是这样,则BKPF
尚未创建,因此没有理由选择它。
VBFA
中的选择不是从FI中提取数据。从销售订单开始,它提取以下SD文档(仅限第一个文档流级别(
M Invoice
N Invoice Cancellation
P Debit Memo
5 Intercompany Invoice
6 Intercompany Credit Memo
不包括那些有后续取消的发票
N Invoice Cancellation
S Credit Memo Cancellation
这些文件可以在VBRK
表格(SD发票标题(中找到,并选择以下
SELECT DISTINCT * FROM vbrk APPENDING TABLE gt_vbrk
FOR ALL ENTRIES IN gt_vbfa_inv
WHERE vbeln = gt_vbfa_inv-vbeln.
顺便说一句:我不知道VBUK
选择的原因,因为你没有使用任何文档状态信息
如果您要求零金额的SD发票,目的是不将其发布给会计(因为否则它们会在FI中产生错误(,则不必选择BKPF
,而是在gt_vbrk
表中的每个条目中检查VBRK-NETWR = 0