Notifications
Clear all
Oct 19, 2023 8:55 pm
Hệ thống SAP Business One hiện chưa hỗ trợ các bảng lưu lịch sử của OPLN. Tuy nhiện, giá của các mặt hàng được lưu trong bảng ITM1 và chi tiết các lần thay đổi được lưu ở bảng AIT1. Do đó, SAP hỗ trợ câu query giúp truy vấn các thay đổi về giá.
SQL
/*This query uses Common Table Expression (CTE) to return only those rows
where there is a price change per item per price list.*/
With PriceTrack (ItemCode, Pricelist_No, Pricelist_Name, Currency, Price, UpdateDate, LogInstanc) as
(
/* Select each item's price, per log instance, in a specific price
list and return those rows where the price is different */
Select distinct T0.itemcode, T1.PriceList, T2.ListName, t1.currency, T1.Price, T0.UpdateDate, T1.loginstanc
FROM
AITM T0
Inner Join AIT1 T1 on T0.itemcode = T1.Itemcode
and t0.loginstanc = t1.loginstanc
left outer join AIT1 T3 on T1.itemcode = T3.itemcode
and t1.pricelist = T3.pricelist
and t1.loginstanc > t3.loginstanc
INNER JOIN OPLN T2 on T1.PriceList = T2.ListNum
where (t1.price <> t3.price )
/*select price changes where only the currency changes*/
union
Select distinct T0.itemcode, T1.PriceList , T2.ListName, t1.currency, T1.Price, T0.UpdateDate, T1.loginstanc
FROM
AITM T0
Inner Join AIT1 T1 on T0.itemcode = T1.Itemcode
and t0.loginstanc = t1.loginstanc
left outer join AIT1 T3 on T1.itemcode = T3.itemcode
and t1.pricelist = T3.pricelist
and t1.loginstanc > t3.loginstanc
INNER JOIN OPLN T2 on T1.PriceList = T2.ListNum
where (t1.price = t3.price and T1.currency <> T3.currency )
/*Select factors which have not been manually updated.*/
union
Select distinct T5.itemcode, T5.PriceList , T2.ListName, t5.currency, T5.Price, '', T5.loginstanc
FROM
AITM T0
Inner Join AIT1 T1 on T0.itemcode = T1.Itemcode
and t0.loginstanc = t1.loginstanc
left outer join AIT1 T3 on T1.itemcode = T3.itemcode
and t1.pricelist = T3.pricelist
and t1.loginstanc > t3.loginstanc
Right Outer join OPLN T4 on T1.PriceList <> T4.ListNum
Inner join ITM1 T5 on T4.listnum = T5.pricelist
INNER JOIN OPLN T2 on T1.PriceList = T2.ListNum
where
T4.Base_Num <> T4.listNum
and
T5.price <> 0
/*Exclude all those incidents where the price has not changed.
e.g. log isntance 5 shows a change to the price of $20 but there is no subsequent price
change until log instance 10. This section removes all the irrelevant rows from the result
set */
except
Select distinct T0.itemcode,T1.PriceList, T2.ListName, t1.currency, T1.Price, T0.UpdateDate, T1.loginstanc
FROM
AITM T0
Inner Join AIT1 T1 on T0.itemcode = T1.Itemcode
and t0.loginstanc = t1.loginstanc
left outer join AIT1 T3 on T1.itemcode = T3.itemcode
and t1.pricelist = T3.pricelist
and t1.loginstanc > t3.loginstanc
INNER JOIN OPLN T2 on T1.PriceList = T2.ListNum
where t1.price = t3.price and t1.currency =T3.currency
)
/*Select all data from the common table expression*/
select top 10 * from pricetrack ORDER BY "ItemCode", "Pricelist_No", "LogInstanc"
HANA
CREATE COLUMN TABLE "Pricetrack" AS (
SELECT DISTINCT T0."ItemCode", T1."PriceList", T2."ListName", t1."Currency", T1."Price", T0."UpdateDate", T1."LogInstanc"
FROM AITM T0
INNER JOIN AIT1 T1 ON T0."ItemCode" = T1."ItemCode" AND t0."LogInstanc" = t1."LogInstanc"
LEFT OUTER JOIN AIT1 T3 ON T1."ItemCode" = T3."ItemCode" AND t1."PriceList" = T3."PriceList" AND
t1."LogInstanc" > t3."LogInstanc"
INNER JOIN OPLN T2 ON T1."PriceList" = T2."ListNum"
WHERE (t1."Price" <> t3."Price")
UNION
SELECT DISTINCT T0."ItemCode", T1."PriceList", T2."ListName", t1."Currency", T1."Price", T0."UpdateDate", T1."LogInstanc"
FROM AITM T0
INNER JOIN AIT1 T1 ON T0."ItemCode" = T1."ItemCode" AND t0."LogInstanc" = t1."LogInstanc"
LEFT OUTER JOIN AIT1 T3 ON T1."ItemCode" = T3."ItemCode" AND t1."PriceList" = T3."PriceList" AND
t1."LogInstanc" > t3."LogInstanc"
INNER JOIN OPLN T2 ON T1."PriceList" = T2."ListNum"
WHERE (t1."Price" = t3."Price" AND T1."Currency" <> T3."Currency")
UNION
SELECT DISTINCT T5."ItemCode", T5."PriceList", T2."ListName", t5."Currency", T5."Price", '', T5."LogInstanc"
FROM AITM T0
INNER JOIN AIT1 T1 ON T0."ItemCode" = T1."ItemCode" AND t0."LogInstanc" = t1."LogInstanc"
LEFT OUTER JOIN AIT1 T3 ON T1."ItemCode" = T3."ItemCode" AND t1."PriceList" = T3."PriceList" AND
t1."LogInstanc" > t3."LogInstanc"
RIGHT OUTER JOIN OPLN T4 ON T1."PriceList" <> T4."ListNum"
INNER JOIN ITM1 T5 ON T4."ListNum" = T5."PriceList"
INNER JOIN OPLN T2 ON T1."PriceList" = T2."ListNum"
WHERE T4.BASE_NUM <> T4."ListNum" AND T5."Price" <> 0
EXCEPT
SELECT DISTINCT T0."ItemCode", T1."PriceList", T2."ListName", t1."Currency", T1."Price", T0."UpdateDate", T1."LogInstanc"
FROM AITM T0
INNER JOIN AIT1 T1 ON T0."ItemCode" = T1."ItemCode" AND t0."LogInstanc" = t1."LogInstanc"
LEFT OUTER JOIN AIT1 T3 ON T1."ItemCode" = T3."ItemCode" AND t1."PriceList" = T3."PriceList" AND
t1."LogInstanc" > t3."LogInstanc"
INNER JOIN OPLN T2 ON T1."PriceList" = T2."ListNum"
WHERE t1."Price" = t3."Price" AND
t1."Currency" = T3."Currency");
SELECT * FROM "Pricetrack" ORDER BY "ItemCode", "PriceList", "LogInstanc" ;
DROP TABLE "Pricetrack";