代码之家  ›  专栏  ›  技术社区  ›  CalvT

SAP Business One中销售订单、交付和发票之间的链接是什么

  •  0
  • CalvT  · 技术社区  · 7 年前

    我想加入 ORDR , ODLN OINV 在SAP Business One查询中,我似乎找不到他们共享的领域。

    在某个地方一定有一些相互联系的记录。

    它们是否通过单独的表链接?还是我错过了一些明显的东西?

    我使用SAP HANA作为我的数据库,因此首选HANA中的查询,而不是MSSQL。

    2 回复  |  直到 3 年前
        1
  •  2
  •   CalvT    6 年前

    首先,归功于 Eralper 对于他们的答案,因为其中包含的链接帮助我找到了我正在寻找的解决方案。然而,他们的解决方案不包括解释,也没有给出正在寻找的结果。


    SAP中销售订单的主要信息存储在两个表中, ORDR RDR1 . 订单 每个销售订单有一行,而 RDR1 销售订单上的每个产品行都有一行。

    送货单和发票(基本上包括SAP中的任何文档)都遵循这种模式。

    为什么这对这个问题很重要?因为包含链接销售订单、送货单和发票的数据的列位于 RDR1 (或类似变体)。它的名字是 TrgetEntry .

    由于销售订单上的每个产品都有一行,我们不能简单地进行联接,因为任何具有多个产品的销售订单都会在结果中多次出现。下面的查询使用分组来显示一个表,该表为每个销售订单都有一行,并且具有将其链接到交货通知单所需的信息。

    SELECT T0."DocEntry" AS "SO DE", T0."DocNum" AS "Sales Order Number", T1."TrgetEntry" AS "SO TE", COUNT(T0."DocNum") AS "Rows"
    FROM ORDR T0
    LEFT JOIN RDR1 T1 ON T0."DocEntry" = T1."DocEntry"
    GROUP BY T0."DocEntry", T0."DocNum", T1."TrgetEntry"
    

    只需更改表名,就可以为交货通知单和发票创建类似的查询。

    然后您可以使用 TrgetEntry公司 DocEntry 链接各种结果。

    我用于显示销售订单、其相关交付和发票的最终代码如下:

    SELECT S0."SalesOrderNumber", S1."DeliveryNumber", S2."DocNum" AS "InvoiceNumber", S0."Rows", S2."DocTotal"
    FROM (SELECT T0."DocEntry" AS "SO_DE", T0."DocNum" AS "SalesOrderNumber", T1."TrgetEntry" AS "SO_TE", COUNT(T0."DocNum") AS "Rows"
    FROM ORDR T0
    LEFT JOIN RDR1 T1 ON T0."DocEntry" = T1."DocEntry"
    GROUP BY T0."DocEntry", T0."DocNum", T1."TrgetEntry") S0
    LEFT JOIN (SELECT T0."DocEntry" AS "DN_DE", T0."DocNum" AS "DeliveryNumber", T1."TrgetEntry" AS "DN_TE"
    FROM ODLN T0
    LEFT JOIN DLN1 T1 ON T0."DocEntry" = T1."DocEntry"
    GROUP BY T0."DocEntry", T0."DocNum", T1."TrgetEntry") S1 ON S0."SO_TE" = S1."DN_DE"
    LEFT JOIN OINV S2 ON S1."DN_TE" = S2."DocEntry"
    
        2
  •  1
  •   Eralper    7 年前

    请检查 https://archive.sap.com/discussions/thread/1440163 给出了以下关系

     SELECT Distinct(T0.DocNum ),T0.DocDate, T0.CardCode, T0.CardName, T1.ItemCode, T1.Quantity, T1.Price,T1.TotalSumSy, T0.DocTotal
        FROM ORDR T0 
        INNER JOIN RDR1 T1 ON T0.DocEntry = T1.DocEntry 
        INNER JOIN ODLN T2 ON T2.DocEntry = T1.TrgetEntry
        INNER JOIN DLN1 T3 on T3.DocEntry = T2.Docentry
        INNER JOIN OINV T4 ON T4.DocEntry = T3.TrgetEntry
        INNER JOIN INV1 T5 ON T5.DocEntry = T4.DocEntry
        LEFT JOIN ORDN T6 ON T6.DocEntry = T5.TrgetEntry
        LEFT JOIN RDN1 T7 ON T7.DocEntry = T6.DocEntry
    

    所以下面的关系也是正确的

    SELECT *
    FROM ODLN T2 
    INNER JOIN DLN1 T3 on T3.DocEntry = T2.Docentry
    INNER JOIN OINV T4 ON T4.DocEntry = T3.TrgetEntry