金额为0欧元的SD发票不得发送给FI

  • 本文关键字:FI SD 金额 oop abap sap-erp
  • 更新时间 :
  • 英文 :


我正在尝试修复某个已经开发的功能,目标是金额为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

相关内容

最新更新