【发布时间】:2026-01-07 06:10:02
【问题描述】:
我正在尝试修复某个已开发的功能,目标是不应将金额为 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 流?或者您的函数不创建任何内容,只是选择您想要在自定义 FM 中过滤 0 金额发票的现有订单/发票?