如何将RSEG/RBKP表关联至BSEG表?MIR7预制凭证关联问题
预制发票(MIR7)关联RBKP/RSEG与BSEG的解决方案
兄弟,我太懂你用MIR7创建预制发票时,想关联发票表和会计行项目表却拿不到记录的憋屈了!给你梳理下核心问题和解决方法:
核心问题:预制发票的特殊性
MIR7创建的是预制状态的发票凭证,这类凭证的关联逻辑和已过账发票有差异:
- 你之前拼接
RBKP-BELNR+RBKP-GJAHR为BKPF-AWKEY时,大概率没处理凭证号的格式:BKPF-AWKEY是固定14位(10位凭证号+4位年度),如果RBKP-BELNR不足10位,必须前面补零才能匹配上。 - 预制发票在
BKPF里的状态是STATU = 'V',如果没加这个条件,也会过滤掉目标记录。
正确关联步骤
1. 从RBKP定位预制发票记录
先筛选出MIR7创建的预制发票:
SELECT * FROM RBKP WHERE RBKP~STATU = '2' -- 2表示预制状态 AND RBKP~BELNR = '你的预制发票号' AND RBKP~GJAHR = '年度';
2. 关联BKPF(预制会计凭证)
用格式化后的凭证号拼接AWKEY,加上预制状态条件:
SELECT BKPF~BUKRS, BKPF~BELNR, BKPF~GJAHR FROM BKPF INNER JOIN RBKP ON BKPF~AWKEY = CONCAT(LPAD(RBKP~BELNR, 10, '0'), RBKP~GJAHR) WHERE RBKP~STATU = '2' AND BKPF~BLART = 'RE' -- 发票凭证类型 AND BKPF~STATU = 'V'; -- V表示预制状态
重点:
LPAD(RBKP~BELNR, 10, '0')是把凭证号补成10位,这是匹配AWKEY的关键!
3. 关联BSEG获取会计行项目
用上面拿到的BKPF字段关联BSEG:
SELECT BSEG~* FROM BSEG INNER JOIN BKPF ON BSEG~BUKRS = BKPF~BUKRS AND BSEG~BELNR = BKPF~BELNR AND BSEG~GJAHR = BKPF~GJAHR INNER JOIN RBKP ON BKPF~AWKEY = CONCAT(LPAD(RBKP~BELNR, 10, '0'), RBKP~GJAHR) WHERE RBKP~STATU = '2' AND BKPF~STATU = 'V';
4. 从RSEG关联的捷径
如果要从RSEG出发,先关联RBKP(因为RSEG-BELNR=RBKP-BELNR、RSEG-GJAHR=RBKP-GJAHR),再按上面的步骤关联BKPF和BSEG即可。
额外提示
不用纠结VBSEGS视图,用上面的标准表关联完全能拿到你需要的凭证详情。
内容的提问来源于stack exchange,提问作者Dumbest666
相关产品推荐
相关产品推荐

