Notifications
Clear all

[Queried Report] Cú pháp SQL truy vấn cho Bảng dữ liệu về hàng tồn kho của sản phẩm không quản lý bằng số serial no. vượt tuổi tồn kho định mức theo FIFO


DangLe
Bài viết: 5
Registered
Topic starter
(@dangle)
Active Member
Tham gia: 1 năm trước

Hệ báo cáo của hệ thống ERP SAP Business One (SAP B1) thực chất là phép dựng hình dựa trên Bảng dữ liệu dạng thô được truy vấn bằng ngôn ngữ SQL (Structured Query Language) từ Hệ quản trị cơ sở dữ liệu (Database System) mà Doanh nghiệp đang khai thác cùng ứng dụng SAP B1.

Trong chủ đề này, DangLe xin phép được chia sẻ và mong mỏi học hỏi thêm từ Diễn dàn về Cú pháp SQL truy vấn cho Bảng dữ liệu (dạng thô) dùng để Phân tích hàng hóa tồn kho (là những sản phẩm không áp dụng chế độ quản lý theo số serial no.) khi vượt tuổi tồn kho định mức của doanh nghiệp theo quy ước quản lý xuất-nhập kho FIFO, như sau:

 

/** SELECT FROM OCTG T3 **/
DECLARE @IntervalsDays as int
/* WHERE */
SET @IntervalsDays = /* T3.TolDays */ [%0]

/** SELECT FROM OINM T1 **/
DECLARE @Date as datetime
/* WHERE */
SET @Date = /* T1.Docdate */ '[%1]'

DECLARE @SQLQUERY as nvarchar(MAX)
SET @SQLQUERY = N'

SELECT
b.[ItemCode],
b.[ItemName],
b.[ItmsGrpNam],
b.[FirmName],
b.[OnStock],
b.[TransValue],
(b.[InBoundUnderLimit]-b.[ConsumedUnderLimit]) as ''StockUnder'+Cast(@IntervalsDays as varchar)+'Days'+''''+',
(b.[InBoundOverLimit]-b.[ConsumedOverLimit]) as ''StockOver'+Cast(@IntervalsDays as varchar)+'Days'+''''+'
FROM
(SELECT
a.[ItemCode],
a.[ItemName],
a.[ItmsGrpNam],
a.[FirmName],
a.[OnStock],
a.[InBoundOverLimit],
a.[NetGoingStock],
ConsumedOverLimit=(CASE
WHEN a.[NetGoingStock]<a.[InBoundOverLimit]
THEN a.[NetGoingStock]
ELSE a.[InBoundOverLimit]
END),
a.[InBoundUnderLimit],
ConsumedUnderLimit=(CASE
WHEN a.[NetGoingStock]<(a.[InBoundOverLimit]+1)
THEN 0
ELSE (CASE
WHEN a.[NetGoingStock]>=(a.[InBoundOverLimit]+a.[InBoundUnderLimit])
THEN a.[InBoundUnderLimit]
ELSE (a.[NetGoingStock]-(CASE
WHEN a.[NetGoingStock]<a.[InBoundOverLimit]
THEN a.[NetGoingStock]
ELSE a.[InBoundOverLimit]
END))END)END),
a.[TransValue]
FROM
(SELECT
T0.[ItemCode],
T0.[ItemName],
T2.[ItmsGrpNam],
T4.[FirmName],
OnStock=(SELECT
SUM(T1.[InQty]-T1.[OutQty])
FROM
OINM T1
WHERE T1.[ItemCode]=T0.[ItemCode] and
T1.[DocDate]<='''+Cast(@Date as varchar)+'''),
TransValue=(SELECT
SUM(T1.[TransValue])
FROM
OINM T1
WHERE
T1.[ItemCode]=T0.[ItemCode] and
T1.[DocDate]<='''+Cast(@Date as varchar)+'''),
NetGoingStock=ISNULL(((SELECT
SUM(T1.[InQty])
FROM
OINM T1
WHERE
T1.[ItemCode]=T0.[Itemcode] and
T1.[TransType]!=67) - (SELECT
SUM(T1.[InQty]-T1.[OutQty])
FROM
OINM T1
WHERE
T1.[ItemCode]=T0.[ItemCode] and
T1.[DocDate]<='''+Cast(@Date as varchar)+''')),0),
InBoundOverLimit=ISNULL((SELECT
SUM(T1.[InQty])
FROM
OINM T1
WHERE
T1.[ItemCode]=T0.[Itemcode] and
T1.[TransType]!=67 and
DATEDIFF(day, T1.[docdate], '''+Cast(@Date as varchar)+''') > '+Cast(@IntervalsDays as varchar) +'),0),
InBoundUnderLimit=ISNULL((SELECT
SUM(T1.[InQty])
FROM
OINM T1
WHERE
T1.[ItemCode]=T0.[Itemcode] and
T1.[TransType]!=67 and
DATEDIFF(day, T1.[docdate], '''+Cast(@Date as varchar)+''') <= '+Cast(@IntervalsDays as varchar) +'),0)
FROM
OITM T0 inner join OITB T2 on T0.[ItmsGrpCod] = T2.[ItmsGrpCod]
inner join OMRC T4 on T0.[FirmCode]=T4.[FirmCode]
WHERE
T2.[ItmsGrpNam] like N'''+Cast(N'%%[%2]%%' as nvarchar)+''' and
(SELECT
SUM(T1.[InQty]-T1.[OutQty])
FROM
OINM T1
WHERE
T1.[ItemCode]=T0.[ItemCode] and
T1.[DocDate]<='''+Cast(@Date as varchar)+''')>0) a) b'

EXEC sp_executesql @SQLQUERY

 

Trả lời
Chia sẻ:
x Logo: Shield Security
This Site Is Protected By
Shield Security