You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SAP Business One中筛选未完全交货且无采购订单的销售订单查询优化

优化SAP Business One销售订单查询方案

我明白你的问题了——原查询会把部分交货的订单也捞出来,这是因为它只检查订单里有没有符合条件的行,而不是判断整个订单的状态。咱们可以通过检查订单整体的关联状态来优化查询,精准定位你要的两类订单:完全未转交货的订单,或者完全没有采购订单关联的订单。

优化后的查询语句

SELECT DISTINCT T0.*
FROM ORDR T0
WHERE 
    -- 第一类:完全未转至交货单的订单(所有行都没关联交货单)
    NOT EXISTS (
        SELECT 1 FROM RDR1 T1 
        WHERE T1.DocEntry = T0.DocEntry 
          AND T1.TrgtEntry IS NOT NULL
    )
    OR
    -- 第二类:无采购订单关联的订单(所有行都没关联PO)
    NOT EXISTS (
        SELECT 1 FROM RDR1 T1 
        WHERE T1.DocEntry = T0.DocEntry 
          AND T1.BaseEntry IS NOT NULL
    )

逻辑解释

  1. 完全未转交货的订单:用NOT EXISTS判断该订单下有没有任何一行关联了交货单(TrgtEntry IS NOT NULL),如果没有,说明整个订单都没转交货,符合要求。
  2. 完全无PO的订单:同样用NOT EXISTS判断该订单下有没有任何一行关联了采购订单(BaseEntry IS NOT NULL),如果没有,说明整个订单都没有PO关联,符合要求。
  3. DISTINCT用来去重,避免同时符合两类条件的订单被重复返回。

如果你需要的是「存在未交货行的订单」而非「完全未交货」

如果你实际需求是允许部分交货的订单(只要有未交货的行就算),同时加上无PO的订单,可以用下面的查询:

SELECT DISTINCT T0.*
FROM ORDR T0
WHERE 
    -- 存在未转交货的行
    EXISTS (
        SELECT 1 FROM RDR1 T1 
        WHERE T1.DocEntry = T0.DocEntry 
          AND T1.TrgtEntry IS NULL
    )
    OR
    -- 完全无PO关联
    NOT EXISTS (
        SELECT 1 FROM RDR1 T1 
        WHERE T1.DocEntry = T0.DocEntry 
          AND T1.BaseEntry IS NOT NULL
    )

这样就能精准匹配你的需求,不会再把部分交货的订单误捞进来啦~

内容的提问来源于stack exchange,提问作者aintno12u

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 07:33:48