Thực thi Store Procedure trong SAP Business One bằng Query Manager

SAP Business One Query Manager

“Query trong SAP B1 giúp người dùng viết truy vấn SQL tùy chỉnh để lấy dữ liệu từ hệ thống.
Query Manager là công cụ quản lý, lưu trữ, phân quyền và chia sẻ các truy vấn đó, giúp việc truy xuất dữ liệu nhanh chóng và bảo mật hơn.”

1️⃣ Query và Query Manager trong SAP Business One

Query là một truy vấn SQL tùy chỉnh mà người dùng tạo để trích xuất dữ liệu phục vụ phân tích, báo cáo hoặc kiểm tra nghiệp vụ.

Query Manager là giao diện quản lý các truy vấn trong SAP Business One. Tại đây, người dùng có thể:

  • Lưu và tổ chức các truy vấn theo nhóm;
  • Phân quyền truy cập cho từng người dùng hoặc nhóm người dùng;
  • Gắn tham số động (Filter) giúp dễ dàng tái sử dụng;
  • Thực thi trực tiếp trong hệ thống mà không cần mở SQL Server.

Thông thường, các truy vấn trong Query Manager chỉ dùng để lấy dữ liệu. Tuy nhiên, chúng ta hoàn toàn có thể mở rộng – gọi và chạy một Store Procedure trực tiếp từ Query – để xử lý nghiệp vụ phức tạp hơn.

2️⃣ Tạo Store Procedure trong SQL Server

Trước tiên, bạn cần tạo sẵn Store Procedure trong cơ sở dữ liệu SAP B1 (ví dụ: Testing_Report).
Store này có thể dùng để tổng hợp dữ liệu, phân tích doanh thu theo nhóm hàng, tháng hoặc các điều kiện cụ thể.

Store Procedure trong SQL Server

Ví dụ: Store nhận hai tham số: @Month@Group để lọc dữ liệu theo tháng và nhóm hàng.

3️⃣ Viết Query để thực thi Store Procedure

Trong SAP B1, mở Query Generator và nhập câu lệnh dưới đây để gọi Store:

DECLARE @ItmGrp NVARCHAR(50) = '[%0]';
DECLARE @Month INT = CONVERT(INT, [%1]);

EXEC Testing_Report
     @Month = @Month,
     @Group = @ItmGrp;

Ở đây, [%0][%1] là hai tham số đầu vào (parameters) mà SAP B1 sẽ hiển thị dưới dạng hộp thoại Filter khi chạy Query.

4️⃣ Gắn Filter cho tham số đầu vào

Bạn có thể gắn danh sách chọn (List of Values) cho tham số, giúp người dùng dễ dàng chọn Group hoặc Tháng mà không cần gõ tay.

Filter cho Group (bảng OITB):

/* SELECT * FROM OITB T0 WHERE CAST(T0.ItmsGrpCod AS NVARCHAR(50)) = '[%0]' */

Filter cho Tháng (bảng OFPR):

/* SELECT * FROM OFPR T1 WHERE T1.SubNum = [%1] AND "Category" = YEAR(CURRENT_DATE) */

Khi thực thi Query, hệ thống sẽ hiển thị hộp thoại để người dùng chọn tham số như hình minh họa:

Hộp thoại Filter trong Query Manager

5️⃣ Kết quả khi thực thi

Sau khi chọn tham số và chạy Query, kết quả sẽ được hiển thị ngay trong cửa sổ SAP B1.
Dữ liệu được lấy từ Store Procedure, giúp người dùng tận dụng toàn bộ logic SQL có sẵn mà không cần viết lại trong Query.

Kết quả truy vấn SAP B1

6️⃣ Lưu ý kỹ thuật

  • Query Manager trong SAP B1 không hỗ trợ CREATE hoặc ALTER — chỉ có thể gọi Store Procedure đã tồn tại.
  • Không nên thực hiện thao tác INSERT/UPDATE/DELETE trong Store được gọi, trừ khi dùng đúng context nghiệp vụ (vì có thể ảnh hưởng dữ liệu gốc).
  • Khi dùng tham số, nên khai báo kiểu dữ liệu rõ ràng (INT, NVARCHAR, …).
  • Store Procedure nên được đặt tên dễ hiểu và quản lý version rõ ràng (ví dụ: sp_SalesSummary_v1).

Kết luận

“Khai thác Store Procedure từ Query Manager là một thủ thuật đơn giản nhưng rất hiệu quả trong SAP B1.
Nó giúp bạn tận dụng sức mạnh SQL sẵn có, tự động hóa báo cáo và tăng tính linh hoạt khi truy xuất dữ liệu.”

Bạn có thể xem toàn bộ quá trình demo tại video hướng dẫn:

🎬 Xem video hướng dẫn trên YouTube

Cảm ơn bạn đã theo dõi bài viết.
Rất mong nhận được phản hồi và chia sẻ thêm từ cộng đồng SAP Business One Việt Nam.

Paul Nguyen
28/08/2024

Tác giả: Nghĩa Nguyễn (Paul)Tư vấn hệ thống & Phát triển giải pháp ERP - BI - Automation cho doanh nghiệp SME.

🚀 Paul Digital Consultant – Kết nối Công nghệ & Doanh nghiệp

Viết một bình luận

📊 Thống kê lượt xem

• Hôm nay: 68 • Hôm qua: 44 • Tháng này: 1272 • Tháng trước: 2723 Tổng: 8202