Какая связь в HANA между заказами на продажу, поставками и счетами
Я пытаюсь присоединиться ORDR
, ODLN
а также OINV
в запросе SAP HANA, но я не могу найти поле, которое они разделяют совместно.
Где-то должна быть запись, которая связывает одну с другой.
Связаны ли они через отдельную таблицу? Или я что-то упускаю очевидное?
2 ответа
Во-первых, Eralper за их ответ, поскольку содержащаяся в нем ссылка помогла мне найти решение, которое я искал. Тем не менее, решение не включает в себя объяснение и не совсем дает искомый результат.
Основная информация для заказа клиента в SAP хранится в двух таблицах: ORDR
а также RDR1
, ORDR
имеет одну строку для каждого заказа на продажу, в то время как 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"
Пожалуйста, проверьте 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