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 để dựng hình Báo cáo xuất - nhập hàng hóa theo Kho Hàng từ Cơ sở dữ liệu của SAP B1, như sau:
Lưu ý
1. Tùy vào nhu cầu hiển thị hình thức dữ liệu cho các Khóa dữ liệu định danh là [giá trị ngày-tháng], người dùng có thể hiệu đính cấu thành [style] của hàm "CONVERT" được sử dụng trong câu truy vấn SQL (bên dưới). Chi tiết tham khảo tại "Thư viện learn.microsoft.com" về T-SQL >> Conversion >> Cast & Convert
2. Câu truy vấn SQL (bên dưới) phù hợp cho doanh nghiệp có khuynh hướng tổ chức quản lý hàng hóa rành mạch và theo chức năng của Kho Hàng (ví dụ: Kho Sản Xuất, Kho Vật Liệu, Kho Thành Phẩm,....). Trường hợp doanh nghiệp không quan trọng việc lưu chuyển hàng hóa nội bộ liên kho, thì người dùng có thể xem xét lọc dữ liệu truy xuất khỏi sự ràng buộc của Khóa dữ liệu [TransType] của Bảng OINM - Whse Journal khi nhận dữ liệu bằng "67"
Nội dung câu truy vấn SQL
SELECT
CreationDate=CONVERT(varchar,T0.[CreateDate],103),
PostDate=CONVERT(varchar,T0.[DocDate],103),
TransKey=T0.[TransType],
DocType=(CASE
WHEN T0.[TransType]=13 THEN 'IN'
WHEN T0.[TransType]=14 THEN 'CN'
WHEN T0.[TransType]=15 THEN 'DN'
WHEN T0.[TransType]=16 THEN 'RE'
WHEN T0.[TransType]=18 THEN 'PU'
WHEN T0.[TransType]=19 THEN 'PC'
WHEN T0.[TransType]=20 THEN 'PD'
WHEN T0.[TransType]=21 THEN 'PR'
WHEN T0.[TransType]=59 THEN 'SI'
WHEN T0.[TransType]=60 THEN 'SO'
WHEN T0.[TransType]=67 THEN 'IF'
ELSE 'PW'
END),
DocId=T0.[BASE_REF],
ItemNo=T0.[ItemCode],
ItemDescription=T1.[ItemName],
ItemBrand=T2.[FirmName],
ItemGroup=T3.[ItmsGrpNam],
WhsCod=T0.[Warehouse],
WhsNam=T4.[WhsName],
InQty=T0.[InQty],
OutQty=T0.[OutQty],
Remarks=TB1.[Remarks]
FROM
(SELECT
Keys=T01.[TransType],
DocId=T11.[DocNum],
Remarks=T11.[Comments]
FROM
OINV T11 inner join OINM T01 on T11.[DocNum]=T01.[BASE_REF]
WHERE
T01.[TransType]=13 and
T01.[CreateDate]>='[%1]' and
T01.[CreateDate]<='[%2]'
UNION ALL
SELECT
Keys=T01.[TransType],
DocId=T12.[DocNum],
Remarks=T12.[Comments]
FROM
ORIN T12 inner join OINM T01 on T12.[DocNum]=T01.[BASE_REF]
WHERE
T01.[TransType]=14 and
T01.[CreateDate]>='[%1]' and
T01.[CreateDate]<='[%2]'
UNION ALL
SELECT
Keys=T01.[TransType],
DocId=T13.[DocNum],
Remarks=T13.[Comments]
FROM
ODLN T13 inner join OINM T01 on T13.[DocNum]=T01.[BASE_REF]
WHERE
T01.[TransType]=15 and
T01.[CreateDate]>='[%1]' and
T01.[CreateDate]<='[%2]'
UNION ALL
SELECT
Keys=T01.[TransType],
DocId=T14.[DocNum],
Remarks=T14.[Comments]
FROM
ORDN T14 inner join OINM T01 on T14.[DocNum]=T01.[BASE_REF]
WHERE
T01.[TransType]=16 and
T01.[CreateDate]>='[%1]' and
T01.[CreateDate]<='[%2]'
UNION ALL
SELECT
Keys=T01.[TransType],
DocId=T15.[DocNum],
Remarks=T15.[Comments]
FROM
OPCH T15 inner join OINM T01 on T15.[DocNum]=T01.[BASE_REF]
WHERE
T01.[TransType]=18 and
T01.[CreateDate]>='[%1]' and
T01.[CreateDate]<='[%2]'
UNION ALL
SELECT
Keys=T01.[TransType],
DocId=T16.[DocNum],
Remarks=T16.[Comments]
FROM
ORPC T16 inner join OINM T01 on T16.[DocNum]=T01.[BASE_REF]
WHERE
T01.[TransType]=19 and
T01.[CreateDate]>='[%1]' and
T01.[CreateDate]<='[%2]'
UNION ALL
SELECT
Keys=T01.[TransType],
DocId=T17.[DocNum],
Remarks=T17.[Comments]
FROM
OPDN T17 inner join OINM T01 on T17.[DocNum]=T01.[BASE_REF]
WHERE
T01.[TransType]=20 and
T01.[CreateDate]>='[%1]' and
T01.[CreateDate]<='[%2]'
UNION ALL
SELECT
Keys=T01.[TransType],
DocId=T18.[DocNum],
Remarks=T18.[Comments]
FROM
ORPD T18 inner join OINM T01 on T18.[DocNum]=T01.[BASE_REF]
WHERE
T01.[TransType]=21 and
T01.[CreateDate]>='[%1]' and
T01.[CreateDate]<='[%2]'
UNION ALL
SELECT
Keys=T01.[TransType],
DocId=T19.[DocNum],
Remarks=T19.[Comments]
FROM
OIGN T19 inner join OINM T01 on T19.[DocNum]=T01.[BASE_REF]
WHERE
T01.[TransType]=59 and
T01.[CreateDate]>='[%1]' and
T01.[CreateDate]<='[%2]'
UNION ALL
SELECT
Keys=T01.[TransType],
DocId=T20.[DocNum],
Remarks=T20.[Comments]
FROM
OIGE T20 inner join OINM T01 on T20.[DocNum]=T01.[BASE_REF]
WHERE
T01.[TransType]=60 and
T01.[CreateDate]>='[%1]' and
T01.[CreateDate]<='[%2]'
UNION ALL
SELECT
Keys=T01.[TransType],
DocId=T21.[DocNum],
Remarks=T21.[Comments]
FROM
OWTR T21 inner join OINM T01 on T21.[DocNum]=T01.[BASE_REF]
WHERE
T01.[TransType]=67 and
T01.[CreateDate]>='[%1]' and
T01.[CreateDate]<='[%2]'
UNION ALL
SELECT
Keys=T01.[TransType],
DocId=T22.[DocNum],
Remarks=T22.[Comments]
FROM
OWOR T22 inner join OINM T01 on T22.[DocNum]=T01.[BASE_REF]
WHERE
T01.[TransType]=202 and
T01.[CreateDate]>='[%1]' and
T01.[CreateDate]<='[%2]') TB1
inner join OINM T0 on (TB1.[Keys]=T0.[TransType] and TB1.[DocID]=T0.[BASE_REF])
inner join OITM T1 on T0.[ItemCode]=T1.[ItemCode]
inner join OMRC T2 on T1.[FirmCode]=T2.[FirmCode]
inner join OITB T3 on T1.[ItmsGrpCod]=T3.[ItmsGrpCod]
inner join OWHS T4 on T0.[Warehouse]=T4.[WhsCode]
WHERE
T0.[CreateDate]>='[%1]' and
T0.[CreateDate]<='[%2]' and
(T0.[Warehouse]='[%3]' or T4.[WhsName]='[%4]') and
T0.[ItemCode] like N'%%[%5]%%' and
(T0.[InQty] + T0.[OutQty])>0
GROUP BY
T0.[CreateDate],
T0.[DocDate],
T0.[TransType],
T0.[BASE_REF],
T0.[ItemCode],
T1.[ItemName],
T2.[FirmName],
T3.[ItmsGrpNam],
T0.[Warehouse],
T4.[WhsName],
T0.[InQty],
T0.[OutQty],
TB1.[Remarks]