Trong trường hợp chỉ liệt kê thông tin của một phiếu thu, bạn khai báo gọi thủ tục nội tại tương tự như hình UD-12-1.. Đối với trường hợp xóa mẩu tin trong bảng Receipts, bạn có thể khai
Trang 1& 290 Ung dụng: Sử dụng thủ tục nội tại trong ứng dụng
SELECT APB.SupplierID, CompanyNameInVietnamese,
BeginningAmount, PurchaseAmount, PaymentAmount ,
BeginningAmount + PurchaseAmount - PaymentAmount
AS EndAmount
FROM vwAPBAndPurchaseAmount APB
LEFT JOIN PaymentOfSuppliers PY
ON APB.SupplierID = PY.SupplierID
Where APB SupplierID= CASE @SupplierId
WHEN '' THEN APB.SupplierID
ELSE @SupplierId END
GO
Bạn có thể liệt kê số tiền chi cho nha cung cấp bằng cách gọi thủ tục
nội tại udsPaymentOfSuppliers như hình UD-11-10
Hình UD-I1-10: Chi cho nhà cung cấp
Tuy nhiên, bạn có thể liệt kê số tiền chỉ cho mỗi nhà cung cấp bằng
cách gọi thủ tục nội tại udsPaymentOfSuppliers như hình UD-11-11
Trang 2Ứng dụng: Sử dụng thủ tục nội tại trong ứng dụng 291
Chú ý: Bạn có thể tham khảo chi tiết về đối tượng View có tên
vwAPBAndPurchaseAmount trong phần ứng dụng của tập: bập trình T_SQL
Để cho phép liệt kê công nợ chỉ cho nhà cung cấp của tháng hiện
hành, bạn phải khai báo thủ tục nội tại như ví dụ ỦD-11-7
FROM CloseAccount PayableDetails
WHERE CloseMonth = @MonthYear
UNION ALL
SELECT SupplierID, 0,
SUM (Quantity*Price* (1+VATRate/100) -Discount) As
PurchaseAmount, 0
FROM PurchaseInvoices §, PurchaseInvoiceDetails D
WHERE S InvoiceNo = D InvoiceNo
SELECT C.SupplierID, CompanyNameInvVietnamese,
SUM (BeginningAmount} AS BeginningAmount,
SUM(PurchaseAmount) AS PurchaseAmount,
SUM (PaymentAmount) AS PaymentAmount,
SUM (BeginningAmount) + SUM(PurchaseAmount)
- SUM(PaymentAmount) AS EndAmount
FROM Suppliers ¢
LEFT JOIN APBAndPurchaseAmount APY
ON C.SupplierID = APY.SupplierID
WHERE C.SupplierID= CASE @Supplierid
WHEN '' THEN C.SupplierID
ELSE @SupplierIda END
GROUP BY C.SupplierID, CompanyNameInVietnamese
GO
Để liệt kê công nợ chỉ cho nhà sản xuất, bạn có thể gọi thủ tục nội tai
udsÁP như hình UD-11-12
Trang 3Hình UD-11-12: Công nợ phải chỉ cho nhà cung cấp
Tuy nhiên, khi liệt kê công nợ phải chỉ của một nhà cung cấp, bạn có
Hình UD-11-13: Công nợ phải chỉ của nhà cung cấp S0003
Tương tự như trường hợp phần công nợ phải thu của khách hàng, cuối
vì vậy bạn cần khai báo thủ tục để chuyển thông tin công nợ phải chỉ cho nhà cung cấp vào
hai bang CloseAccountPayable va CloseAccountPayableDetails nhằm cung
tháng người sử dụng cần thực hiện chức năng đóng sổ, chính
cấp thông tin công nợ chỉ đầu kỳ của nhà cung cấp cho tháng kế tiếp
Ngoài ra, sau khi đóng sổ thì bạn phải xóa tất cả dữ liệu của các bảng liên quan như: Payments, PurchaselnvoiceBatchs, PurchaseInvoices, PurchaselnvoiceDetails dựa vào cờ ứng với tham số có tên @DeleteData
Dé lam diéu nay, trước tiên bạn khai báo thủ tục
udsCloseMonthForAP với cấu trúc như ví dụ UD-11-8
Trang 4DELETE FROM CloseAccount Payable
WHERE CloseMonth = @CurrentMonth;
Thêm dữ liệu vao bang CloseAccountPayable
INSERT INTO CloseAccount Payable
VALUES (@CurrentMonth, GETDATE(), CURRENT_USER) ;
~ Thêm dữ liệu vao bing CloseAccountPayableDetails
FROM CloseAccount PayableDetails
WHERE CloseMonth = @MonthYear
Thêm dit ligu vio bang CloseAccountPayableDetails
INSERT INTO CloseAccount PayableDetails
SELECT C.SupplierID, @CurrentMonth,
SUM(BeginningAmount) AS BeginningAmount,
SUM (PurchaseAmount) AS PurchaseAmount,
SUM (PaymentAmount) AS PaymentAmount,
PRINT 'Delete all data'
DELETE FROM Payments;
~-DELETE FROM PurchaseInvoiceBatchs;
DELETE FROM PurchaseInvoices;
~-DELETE FROM PurchaseInvoiceDetails;
Trang 5294 Ung dụng: Sử dụng thủ tục nội tại trong ứng dụng
END
GO
Luu ý: Nếu bạn thực thi 4 phát biểu DELETE ứng với trường hợp tham
số @DeleteData có giá trị là 1 để xóa dữ liệu trong bảng liên quan là Payments, PurchaseInvoiceBatchs, Purchaselnvoices, PurchaselnvoieeDetails thì dữ
liệu thêm vào sẽ tính toán cho tháng kế tiếp
Trong trường hợp cho phép người sử dụng tạm thời tính lại công nợ
phải chi cho một nhà cung cấp sau khi đã thực hiện việc đóng sổ tạm thời
thì khai báo như ví dự UD-11-9,
ho nhà cun APOfSupplier
bit CREATE PROC udsCloseMonthFor
@CurrentMonth CHAR (7),
@SupplierId@ CHAR (5)
AS
DECLARE @MonthYear CHAR (7 )
SET @MonthYear = dbo udfPreviousMonth (@CurrentMonth)
IF @SupplierId !=''
BEGIN
¬ Xóa dữ liệu trong bằng CloseAccountPayable
DELETE FROM CloseAccount PayapleDetai 18
WHERE CloseMonth = @CurrentMonth
AND SupplierId = @Supplierid;
FROM CloseAccount PayableDetails
WHERE CloseMonth = @MonthYear
AND SupplierId = @SupplierId
Trang 6
Ứng dụng: Sử dụng thủ tục nội tại trong ứng dụng 295
Thêm dữ liệu uào bảng CloseAccountPoyablelDetails
INSERT INTO CloseAccount PayableDetails
SELECT C.SupplierID, @CurrentMonth,
SUM (BeginningAmount) AS BeginningAmount,
3 PHAN KE TOAN TONG HGP
Tương tự như hai phan trên, chúng ta cần khai báo thủ tục nội tại cho
các bảng dữ liệu liên quan như: Receipts, ReceiptTypes, Payments, PaymentTypes, CloseMonthCashBalances va CloseMonthCashBalanceDetails
Chú ý: Bạn có thể tim thấy các ví dụ trình bày của chương này nằm
trong tập tin có tén StoredProcedureForGL.sql
3.1 Bảng Receipts
Dựa vào yêu cầu thống kê thu tiền của bộ phận làm kế toán tổng hợp, bạn có thể khai báo một số thủ tục nội tại nhằm đáp ứng các yêu cầu như: Liệt kê, thêm mới, cập nhật, xóa, tổng hợp tiên thu theo thời gian, tổng thu
theo khách hàng
Chẳng hạn, bạn khai báo thủ tục nội tại để liệt kê danh sách mẩu tin
trong bang Receipts nhu vi du UD-12
ReceiptNo = CASE @ReceiptNo
WHEN '' THEN ReceiptNo
ELSE @ReceiptNo END
6O
Trang 7f° 296 Ung dụng: Sử dụng thủ tục nội tại trong ứng dụng
Nếu muốn liệt kê tất cả danh sách phiếu thu trong bảng Receipts thì bạn gọi thủ tục nội tại trên như hình UD-12
Hình UD-12: Danh sách phiếu thu
Trong trường hợp chỉ liệt kê thông tin của một phiếu thu, bạn khai báo gọi thủ tục nội tại tương tự như hình UD-12-1
Hình UD-12-1: Liệt kê một phiếu thu
Nếu cho phép người sử dụng liệt kê danh sách phiếu thu trong khoảng thời gian, bạn có thể khai báo thủ tục nội tại như ví dụ UD-12-1
ReceiptDate >= CASE @StartDate
WHEN '' THEN CAST('1/1/1900' as SMALLDATETIME)
ELSE CAST (@StartDate AS SMALLDATETIME) END
AND ReceiptDate <= CASE @EndDate
WHEN '' THEN CAST('1/1/2079' aS SMALLDATETIME)
Trang 8
Ứng dụng: Sử dụng thủ tục nội tại trong ứng dụng
ELSE CAST (@EnđdDate AS SMALLDATETIME) END
3 RPT000103 BR000002 2071011000000 R01 A01 ND 1065000)
Hình UD-12-2: Liệt kê danh sách phiếu thu trong khoảng thời gian
Đối với trường hợp xóa mẩu tin trong bảng Receipts, bạn có thể khai
báo thủ tục nội tại như ví dụ UD-12-2
: Khai báo xóa mẩu tin trong bảng
CREATE PROC udsDeleteReceipt
Rhi cần xóa tất cả mẩu tin trong bang Receipts, ban c6 thé khai báo
gọi thủ tục nội tại udsDeleteReceipt như ví dụ UD-12-3
Ví dụ UD-12-3: Khai báo xóa toàn bộ các mẩu tin
udsDeleteReceipt '’
GO
Trong trường hợp xóa một mẩu tin trong bảng Receipts, bạn có thể khai báo gọi thủ tục nội tại udsDeleteReceipt với tham số ứng với mã phiếu thu như ví dụ UD-12-4
Ví dụ UD-12-4: Khai báo xóa một mẩu tin
Trang 9Ung dung: Sir dụng thủ tục nội tại trong ứng dụng
INSERT INTO Receipts
VALUES (@ReceiptNo, @ReceiptBatchNo, @ReceiptDate,
@ReceiptTypeID, @CustomerID, @CurrencyID,
@Amount, @ExchangeRate, @ReceiptAmount,
Trang 10Ung dụng: Sử dụng thủ tục nội tại trong ứng dụng 299
Nếu muốn tổng hợp tiên thu của mọi khách hàng trong tháng thì bạn
khai báo gọi thủ tục nội tại trên như ví dụ UD-12-7
udsReceiptByCustomer ''
GO
Khi thực thi khai báo trong ví dụ trên, ban có thé tim thấy kết quả
trình bày như hình UD-12-3
Resuts |[ Messages| te |
Hình UD-12-3: Tình hình thu trong tháng
Trong trường hợp tổng hợp tiển thu của từng khách hàng thì bạn
khai báo gọi thủ tục nội tại trên như ví dụ UD-12-8
Khi thực thi khai báo trong ví dụ trên, bạn có thể tìm thấy kết quả
trình bày như hình UD-12-4
Trang 11Ví dụ UD-13: Khai báo thủ tục nội tại truy vấn|
CREATE PROC udsViewReceiptTypes
@ReceiptTypeld CHAR (3)
AS
SELECT * FROM ReceiptTypes
WHERE
ReceiptTypeld = CASE @ReceiptTypeTd
WHEN '' THEN ReceiptTypeld
ELSE @ReceiptTypelId END
&H Resutts | [y Messages
| ReceiptTypelD | ReceiptTypelnVietnamese aac esnasippinnn eee cel ae ee nl 8
Thu tiền bán hàng Thụ tiền nở mua hàng của khách hàng
Thu tiền đặc cọc mua hàng
Hình UD-13: Loại phiếu thu
Đối với trường hợp muốn liệt kê một mẩu tin ứng với một mã loại
phiếu thu được chọn, bạn khai báo gọi thủ tục nội tại như ví dụ UD-13-2
Trang 12Ứng dụng: Sử dụng thủ tục nội tại trong ứng dụng soi [M?
Khi thuc thi thủ tục trên, bạn có thể tìm thấy thông tin của loại phiếu
thu như hình UD-13-1
Hình UD-18-1: Thông tin một mã loại phiếu thu
Đối với trường hợp xóa mẩu tin trong bảng ReceiptTypes, bạn có thể
khai báo thủ tục có tên udsDeleteReceiptTypes như ví dụ UD-13-3
ReceiptTypeld = CASE @ReceiptTypelId
WHEN '' THEN ReceiptTypeId
ELSE @ReceiptTypeId END
GO
Bạn có thể gọi thủ tục nội tại có tên udsDeleteReceiptTypes với hai
trường hợp, trường hợp xóa tất cả mẩu tin trong bảng Receipts bạn khai
báo như ví dụ UD-13-4
Ngoài ra, khi thêm mới hay cập nhật dữ liệu vào bảng Receipts, bạn
có thể khai báo thủ tục nội tại dùng chung cho hai trường hợp này dựa và
mã loại phiếu thu như ví dụ UD-13-6
Trang 13Ung dụng: Sử dụng thủ tục nội tại trong ứng dụng
INSERT INTO ReceiptTypes
VALUES (@ReceiptTypeld, @ReceiptTypeNameInVietnamese,
@Receipt TypeName InSecondLanguage, 1)
@Receipt TypeName InSecondLanguage
WHERE ReceiptTypeld = @ReceiptTypeld
Go
3.3 Bang ReceiptBatchs
Tuong tự như trên, khi làm việc với bảng ReceiptBatchs, đối với hành động truy vấn dữ liệu trong bảng ReceiptBatchs, chúng ta cần khai báo thủ tục nội tại như ví dụ UD-14
í dụ UD-14: Khai báo thủ tục nội tại truy vấn|
CREATE PROC udsViewReceiptBatchs
@ReceiptBatchNo VARCHAR (10)
AS
SELECT * FROM ReceiptBatchs
WHERE
ReceiptBatchNo = CASE @ReceiptBatchNo
WHEN '‘ THEN ReceiptBatchNo
ELSE @ReceiptBatchNo END
Trang 14Ứng dụng: Sử dụng thủ tục nội tại trong ứng dụng 308 pa”
Hình UD-14: Danh sách lô phiếu thu
Trong trường hợp muốn liệt kê một mẩu tin ứng với một lô phiếu thu
được chọn, bạn khai báo gọi thủ tục nội tại như ví dụ UD-14-2
udsViewReceiptBatchs ' BR000004'
GO
Khi thực thi thủ tục trên, bạn có thể tìm thấy thông tin của lô phiếu
thu như hình UD-14-1
ff Results là Messages |
| | ReceiptBatchNo | ReceiptBatchDate | UserName | Discontinued |
1 [BR000004 ^ 20071014000000 khag 0
Hình UD-14-1: Thông tin một lô phiếu thu
Trong trường hợp xóa mẩu tin trong bảng ReceiptBatchs, bạn có thể khai báo thủ tục có tên udsDeleteReceiptBatchs như ví dụ UD-14-3
ReceiptBatchNo = CASE @ReceiptBatchNo
WHEN '' THEN ReceiptBatchNo
ELSE @ReceiptBatchNo END
GO
Trang 15
304 Ung dụng: Sử dụng thủ tục nội tại trong ứng dụng Nếu tạo thủ tục nội tại trong ví dụ trên thành công, bạn có thể gọi thủ
tục nội tại này với hai trường hợp; nếu xóa tất cả mẩu tin trong bảng
RteceiptBatchs bạn khai báo như ví đụ UD-14-4
Ví dụ UD-14-4: Khai báo xóa tất cả mẩu tin
udsDeleteReceiptBatchs ''
GO
Đối với trường hợp xóa một mẩu tin, bạn khai báo gọi thủ tục
udsDeleteReceiptBatchs như ví đụ UD-14-5
Ví dụ UD-14-5: Khai báo xóa một mẩu tin
udsDeleteReceiptBatchs ' BR000014"
Go
Tuy nhiên, nếu cho phép người sử dụng thêm mới hay cập nhật dữ liệu vào bảng ReceiptBatchs, bạn có thể khai báo thủ tục nội tại dùng chung cho hai trường hợp này dựa và mã lô phiếu thu như ví du UD-14-6
Ví dụ UD-14-6: Khai báo thêm và cậ
CREATE PROC udsInsUpdReceiptBatchs
Tương tự như phần phiếu thu, để thống kê tiển chỉ của bộ phận làm
kế toán tổng hợp cho nhà cung cấp, bạn có thể khai báo một số thủ tục nội tại nhằm đáp ứng các yêu câu như: Liệt kê, thêm mới, cập nhật, xóa, tổng hợp tiền chi theo thời gian, tổng chỉ theo từng nhà cung cấp
Chẳng hạn, bạn khai báo thủ tục nội tại để liệt kê danh sách mẩu tin
trong bảng Payments nhu vi du UD-15
Trang 16Ứng dụng: Sử dụng thủ tục nội tại trong ứng dụng 305 MP?
PaymentNo = CASE @PaymentNo
WHEN '' THEN PaymentNo
ELSE @PaymentNo END
Hình UD-1ð: Danh sách phiếu chỉ
Đối với trường hợp chỉ liệt kê thông tin của một phiếu chi, bạn khai báo gọi thủ tục nội tại tương tự như hình UD-15-1
Trang 17I sos Ứng dụng: Sử dụng thủ tục nội tại trong ứng dụng
Hình UD-1ð-1: Liệt kê một phiếu chỉ
Nếu cho phép người sử dụng liệt kê danh sách phiếu chỉ trong khoảng thời gian, bạn có thể khai báo thủ tục nội tại như ví dụ UD-15-1
Payment Date >= CASE @StartDate
WHEN '' THEN CAST('1/1/1900' AS SMALLDATETIME)
ELSE CAST(@StartDate AS SMALLDATETIME) END
AND PaymentDate <= CASE @EndDate
WHEN '' THEN CAST('1/1/2079' AS SMALLDATETIME)
ELSE CAST (@EndDate AS SMALLDATETIME) END
Hình UD-1ð-2: Liệt kê danh sách phiếu thu trong khoảng thời gian
Trong trường hợp xóa mẩu tin trong bang Payments, bạn có thể khai
báo thủ tục nội tại như ví dụ UD-15-2.
Trang 18
Ứng dụng: Sử dụng thủ tục nội tại trong ứng dụng 307
Ví dụ UD-15-2: Khai bâo xóa mẩu (in trong bang Payments
CREATE PROC udsDeletePayment
DELETE FROM Payments
WHERE Payment No=@PaymentNo
Go
Khi cần xóa tất cả mẩu tin trong bang Payments, ban có thể khai bâo
gọi thủ tục nội tại udsDeletePayment như ví đụ UD-15-3
Ví dụ UĐ-15-3: Khai bâo xóa mẫu tỉn|
udsDeletePayment’’
GO
Trong trutng hgp x6a mĩt mau tin trong bang Payments, bạn có thĩ
khai bâo gọi thủ tục nội tại udsDeletePayment với tham số ứng với mê phiếu chỉ như ví dụ UD-15-4
Ví dụ UĐ-15-4: Khai bâo xóa mầu tin
udsDe1letePaymernr ' PAD0000109°
GO
Nếu cho phĩp người sử dụng thím mới hay cập nhật mẩu tin trong
bảng Payments, bạn khai bâo thủ tục dùng chung hai trường hợp năy dựa văo tham số @Fflag như ví dụ 15-5
Ví dụ UD-L5-5: Khai bầ thím mới bay cập nhật mẩu tin
CREATE PROC udsInsAnđUpdPayment
INSERT INTO Payments
VALUES (@PaymentNo, @PaymentBatchNo, @PaymentDate,
@PaymentTypelD, @SupplierID, @CurrencyID,