SAP Business One中交货表(ODLN、DLN1)关联OBTN批次表方法咨询
SAP Business One 交货表与批次表关联查询方案
核心关联逻辑
三张表的关联依赖以下核心键值匹配:
- 交货表头
ODLN与交货行DLN1关联:通过表头主键匹配行的外键ODLN.DocEntry = DLN1.DocEntry - 交货行
DLN1与批次主表OBTN关联:需同时匹配批次号与物料编码,避免跨物料重名批次关联错误,匹配规则为DLN1.ItemCode = OBTN.ItemCode AND DLN1.BatchNum = OBTN.DistNumber
若需要更精准的匹配,可额外加上仓库条件DLN1.WhsCode = OBTN.WhsCode
基础查询示例
以下是可直接运行的基础查询SQL,可查询交货单的基本信息、行信息及对应批次信息:
SELECT ODLN.DocNum, -- 交货单号 ODLN.DocDate, -- 交货日期 ODLN.CardCode, -- 客户编码 ODLN.CardName, -- 客户名称 DLN1.ItemCode, -- 物料编码 DLN1.Dscription, -- 物料名称 DLN1.Quantity, -- 交货行总数量 OBTN.DistNumber, -- 批次号 OBTN.MnfSerial, -- 制造商序列号 OBTN.ExpDate, -- 批次有效期 OBTN.PrdDate, -- 批次生产日期 OBTN.Quantity AS BatchCurrentQty -- 批次当前剩余库存 FROM ODLN INNER JOIN DLN1 ON ODLN.DocEntry = DLN1.DocEntry INNER JOIN OBTN ON DLN1.ItemCode = OBTN.ItemCode AND DLN1.BatchNum = OBTN.DistNumber AND DLN1.WhsCode = OBTN.WhsCode -- 可自行添加筛选条件,例如按交货日期范围、客户编码筛选 WHERE ODLN.DocDate >= '2024-01-01'
注意事项
- 若单条交货行拆分了多个批次出库,上述查询会返回多行数据,每一行对应一个批次,如需聚合交货行总数量需自行对
DLN1.Quantity去重 - 若交货行拆分了多个批次出库,
DLN1.BatchNum字段为空,此时无法直接通过DLN1关联OBTN,必须通过OBT1中间表关联OBTN查询对应批次信息 - 若需要查询该交货单实际扣减的对应批次数量,需要额外关联批次交易表
OBT1,关联规则为:OBT1.BaseEntry = DLN1.DocEntry AND OBT1.BaseLine = DLN1.LineNum AND OBT1.BaseType = 15(15为SAP B1中交货单的对象类型编码) OBTN中存储的是批次的最新主数据信息,若需要查询交货过账时的批次历史信息,需从批次交易历史表中获取
内容的提问来源于stack exchange,提问作者Daniel Carreira
相关产品推荐
相关产品推荐

