如何将AX系统中DOCUVALUE表与关联业务元数据关联以提取文档对应凭证批次号
Dynamics AX 文档关联Journal/批次号正确关联方案
- 核心问题定位
你之前的查询出现错配的核心原因是未过滤DOCUREF表的REFTABLEID字段:DOCUREF.REFRECID存储的是所有业务表的记录ID,不同业务表可能存在相同RECID,直接关联LEDGERJOURNALTABLE.RECID会把其他业务表的关联文档也匹配到总账日记账上,导致关联错误。 - 第一步:获取对应业务表的TABLEID
AX中每个业务表都有唯一的TABLEID,关联前需要先查询你环境中对应日记账表的ID,以总账日记账表LEDGERJOURNALTABLE为例,查询SQL如下:
SELECT TABLEID FROM SQLDICTIONARY WHERE NAME = 'LEDGERJOURNALTABLE' AND TABLEID = 0
AX2012默认环境中该表ID为257,不同版本或定制化环境可能有差异,以实际查询结果为准。
- 第二步:修正关联逻辑
关联时增加REFTABLEID匹配和跨公司过滤,修正后的总账日记账关联SQL如下:
SELECT ljt.journalnum, dv.filename + '.' + dv.filetype AS full_filename, ljt.name AS journal_name, dr.refcompanyid, CONVERT(VARCHAR(10), ljt.posteddatetime, 111) AS posted_date, ljt.createdby, CONVERT(NUMERIC(18,2), ljt.journaltotalcredit) AS journalamount FROM DOCUVALUE dv INNER JOIN DOCUREF dr ON dv.RECID = dr.VALUERECID INNER JOIN LEDGERJOURNALTABLE ljt ON dr.REFRECID = ljt.RECID AND dr.REFTABLEID = 257 -- 替换为第一步查询到的实际TABLEID AND dr.REFCOMPANYID = ljt.DATAAREAID ORDER BY ljt.journalnum, full_filename
- 覆盖多类型Journal/批次的扩展方案
如果需要匹配其他类型的批次/日记账,可通过UNION ALL拼接不同业务表的关联逻辑,每段关联都加上对应表的REFTABLEID过滤即可,常见的日记账表对应关系如下:- 销售发票日记账:
CUSTINVOICEJOUR - 采购发票日记账:
VENDINVOICEJOUR - 库存日记账:
INVENTJOURNALTABLE
- 销售发票日记账:
- 验证方法
先选取3-5个已知明确关联了文档的日记账号,用上述逻辑查询结果交用户核对,确认匹配准确后再全量导出数据即可。
内容的提问来源于stack exchange,提问作者Simon Weekley
相关产品推荐
相关产品推荐

