金额为 0 欧元的 SD 发票不会传输到 FI
SD Invoice with amount 0 EUR not to be transmitted to FI
我正在尝试修复某个已开发的功能,目标是金额为 0 欧元的 SD 发票不应传输到 FI。据我了解,以下代码用于 select 来自 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.
据我上面写的代码可以理解,table VBFA是用来获取FI的数据,而table VBRP用于获取SD的数据。我要实现的是,当发票号没有FI单据时,那么发票号就会为空。
如果使用tables BKPF(对于FI)和VBRK(对于SD),那么我可以尝试关系:
vbrk-xblnr=bkpf-xblnr.
但是,那些table在函数中没有使用。请问,如何修改代码,当发票号没有FI单据时,0欧元的发票不会生成FI单据,那么发票号就会为空。
提前谢谢大家!
因为目标是
the SD Invoice with amount 0 EUR should not be transmitted to FI
我想您的代码在将 SD 发票发布到会计时处于某些用户退出或标准程序修改中。如果是这样,则 BKPF
尚未创建,没有理由 select 创建它。
来自 VBFA
的 select 没有从 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
table(SD 发票抬头)中找到这些文件,其中 select
SELECT DISTINCT * FROM vbrk APPENDING TABLE gt_vbrk
FOR ALL ENTRIES IN gt_vbfa_inv
WHERE vbeln = gt_vbfa_inv-vbeln.
顺便说一句:我不知道 VBUK
select 的原因,因为您没有使用任何文档状态信息
如果您要求金额为零的 SD 发票,目的是不将它们释放到会计(否则它们会在 FI 中产生错误),您不必 select BKPF
但检查 VBRK-NETWR = 0
gt_vbrk
table
中的每个条目
我正在尝试修复某个已开发的功能,目标是金额为 0 欧元的 SD 发票不应传输到 FI。据我了解,以下代码用于 select 来自 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.
据我上面写的代码可以理解,table VBFA是用来获取FI的数据,而table VBRP用于获取SD的数据。我要实现的是,当发票号没有FI单据时,那么发票号就会为空。
如果使用tables BKPF(对于FI)和VBRK(对于SD),那么我可以尝试关系:
vbrk-xblnr=bkpf-xblnr.
但是,那些table在函数中没有使用。请问,如何修改代码,当发票号没有FI单据时,0欧元的发票不会生成FI单据,那么发票号就会为空。
提前谢谢大家!
因为目标是
the SD Invoice with amount 0 EUR should not be transmitted to FI
我想您的代码在将 SD 发票发布到会计时处于某些用户退出或标准程序修改中。如果是这样,则 BKPF
尚未创建,没有理由 select 创建它。
来自 VBFA
的 select 没有从 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
table(SD 发票抬头)中找到这些文件,其中 select
SELECT DISTINCT * FROM vbrk APPENDING TABLE gt_vbrk
FOR ALL ENTRIES IN gt_vbfa_inv
WHERE vbeln = gt_vbfa_inv-vbeln.
顺便说一句:我不知道 VBUK
select 的原因,因为您没有使用任何文档状态信息
如果您要求金额为零的 SD 发票,目的是不将它们释放到会计(否则它们会在 FI 中产生错误),您不必 select BKPF
但检查 VBRK-NETWR = 0
gt_vbrk
table