& 290 Ung dụng: Sử dụng thủ tục nội tại trong ứng dụng SELECT SupplierTD, isnull (SUM(PaymentAmount) ,0) As PaymentAmount FROM Payments GROUP BY SupplierID )
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 - udsPaymehtOfSuppliers '' Công ty Trâch Nhệ 31120 Công ty Cổ phầnYa 4500000 1267750000000 17177500 0 Công ty Trâch Nhệ 1500000 4007500 Công ty Trâch Nhệ 0 150000)
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
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 LUST CREATE PROC udsAP @MonthYear CHAR(7), @SupplierId CHAR (5} AS ¡ chỉ cho nhă cun WITH APBAndPurchaseAmount AS ( SELECT SupplierID, EndAmount As BeginningAmount, 0 As PurchaseAmount, 0 As PaymentAmount
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 GROUP BY SupplierID UNION ALL SELECT SupplierID, 0, 0, isnull (SUM(PaymentAmount),0) As PaymentAmount FROM Payments GROUP BY SupplierID )
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
Trang 3292 Ứng dụng: Sử dụng thủ tục nội tại trong ứng dụng udsaP !09/20071, '! so | lung TH ends |p Meson] _ | Supple lanelVietna BegneingAmount | PurchaseAmeunt PaymentAmount 1 loons 2000) 24854500 000000 12030000 thể gọi thủ tục nội tại udsAP tương tự như hình UD-11-13 15324500 | $0002 Cĩngty Trĩch Nhigm H #00000 8746000000000 9132500 311200 |3 90003 CôngyC6phăYxmk 4500000 ˆ [Ả 50004 Cĩngty Trĩch Nhiĩm H 1500000 178M0 tnZ75m 38750000000 6990000 T0 4007500 |Š S05 CôngyTâehNhệmH 0 00000 180000 -18I000)
Hì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ó Ý wdsAP !09/20071, !80003' so EE 3) Messages] a, Cispsivilasainiorengse 1 Công ly C8 phn Yemaka Vigt Nam 4 1267780000000 17177500 _ EndAmout 0
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
Trang 4
Ứng dụng: Sử dụng thủ tục nội tại trong ứng dụng
SET @MonthYear = dbo.udfPreviousMonth (@CurrentMonth) Xóu đữ liệu nếu trước đó có tính tạm thời
DELETE 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 WITH APBAndPurchaseAmount AS { SELECT SupplierID, EndAmount As BeginningAmount, 0 As PurchaseAmount, 0 As PaymentAmount
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 GROUP BY SupplierID UNION ALL SELECT SupplierID, 0, 0, isnull (SUM(PaymentAmount),0) As PaymentAmount FROM Payments GROUP BY SupplierID )
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, SUM(BeginningAmount) + SUM(PurchaseAmount ) - SUM(PaymentAmount} AS EndAmount FROM Suppliers ¢ LEFT JOIN APBAndPurchaseAmount APY ON C.SupplierID = APY.SupplierID GROUP BY C.SupplierID; - Xóa dữ liệu trong câc bảng liín quan 1F @DeleteData = 1 BEGIN
PRINT 'Delete all data' DELETE FROM Payments;
~-DELETE FROM PurchaseInvoiceBatchs; DELETE FROM PurchaseInvoices;
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; WITH APBAndPurchaseAmount AS ( SELECT SupplierID, EndAmount As BeginningAmount, 0 As PurchaseAmount, 0 As PaymentAmount
FROM CloseAccount PayableDetails WHERE CloseMonth = @MonthYear AND SupplierId = @SupplierId
UNION ALL
SELECT SupplierID, 0,
SUM (Quantity*Price* (1+VATRate/100) -Discount) As PurchaseAmount, 0
FROM PurchaseInvoices S, PurchaseInvoiceDetails D WHERE S InvoiceNo = D InvoiceNo
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, SUM(PurchaseAmount) AS PurchaseAmount, SUM{PaymentAmount) AS PaymentAmount, SUM (BeginningAmount) + SUM(PurchaseAmount ) — SUM(PaymentAmount) AS EndAmount FROM Suppliers C LEFT JOIN APBAndPurchaseAmount APY ON C.SupplierID = APY.SupplierID WHERE C.SupplierId = @SupplierlId GROUP BY C.SupplierID; END GO
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 “a 3: Khai bí Lc CREATE PROC udsViewReceipt @ReceiptNo VARCHAR (10) AS SELECT * FROM Receipts WHERE
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 | udsViewReceipt |! lo Fe 8 2007-10-10 00,00:00 2 RPTOOO0102 BROOOOOT 2007-101 000000 R02 A02 VND 3 RPT00013 BR002 2007101100000 AOI A001 VND |4 RPT000010 BR000002 2007101200000 ngz A003 VND (5 RPT000015 BR0UQ03 2071013000000 R03 A00 VND \PI000106 BR000003 - 20071012000000 R02 A003 VND |7 RPTU000107 BR000003 2007101300000 ng2 A002 VND |8 RPT0000108 BRUOUOO4 2071014000000 OZ A000 VND |$_ RPT000010% 8R0000% 2007101400000 n2 A0005 VND JŨ RPI0UĐ0H0 BROODS 2071017000000 R2 0006 VND RPT000111 BR00005 2071017000000 Rữ2 A007 VND
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 udsViewReceipt 'RPT0000102' so 1 T[SANo _ ñeeeplactNo ReesgÐde - - BeosplypeD CodmelD CaneolD Anoui BRO00G01 2071011000000 R02 AD0M2 VND 45000)
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 CREATE PROC udsViewRec ptByPeriod @StartDate VARCHAR (15) , @EndDate VARCHAR (15) AS SELECT * FROM Receipts WHERE
ReceiptDate >= CASE @StartDate
WHEN '' THEN CAST('1/1/1900' as SMALLDATETIME) ELSE CAST (@StartDate AS SMALLDATETIME) END
AND ReceiptDate <= CASE @EndDate
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 GO Giả sử, bạn khai bâo gọi thủ tục nội tại trín như hình UD-12-2 udsViewReceipeByPeriod '10/0T/2007°, '11/007/2007"| be : spBalctNo ReepDas RespllupaD DusomelD DaeneiD Anowi 2007-10-10 00:00:00 R01 A0001 500000 2 RPI0W0102 8R00001 2007-10-11 00:00:00 R02 A0002 VND 450000 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 @ReceiptNo VARCHAR (10) As IF @ReceiptNo='' DELETE FROM Receipts; ELSE DELETE FROM Receipts WHERE @ReceiptNo=ReceiptNo GO
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
udsDeleteReceipt ‘RPTO000109’
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 Receipts, bạn khai bâo thủ tục dùng chung hai trường hợp năy dựa văo
Trang 9Ung dung: Sir dụng thủ tục nội tại trong ứng dụng nhật mẩu tỉn| CREATE PROC udsInsAndUpdReceipt @Flag BIT, @ReceiptNo VARCHAR (10), @ReceiptBatchNo VARCHAR (10), @ReceiptDate SMALLDATETIME, @ReceiptTypelID CHAR (3), @CustomerID CHAR (5), @CurrencyID CHAR (3), @Amount DECIMAL (18,0), @ExchangeRate DECIMAL (18,0), @ReceiptAmount DECIMAL (18,0), @DescriptionInVietnamese NVARCHAR(150), @DescriptionInSecondLanguage NVARCHAR (150), @ReceiptDiscontinued BIT As IF @Flag =0
INSERT INTO Receipts
VALUES (@ReceiptNo, @ReceiptBatchNo, @ReceiptDate, @ReceiptTypeID, @CustomerID, @CurrencyID,
@Amount, @ExchangeRate, @ReceiptAmount, @DescriptionInVietnamese, @DescriptionInSecondLanguage, 1,1, GETDATE(), CURRENT_USER) ELSE UPDATE Receipts SET ReceiptBatchNo = @ReceiptBatchNo, ReceiptDate = @ReceiptDate, ReceiptTypelD = @ReceiptTypeID, CustomerID = @CustomerID, CurrencyID = @CurrencyID, Amount = @Amount, ExchangeRate = @ExchangeRate, ReceiptAmount = @ReceiptAmount, DescriptionInVietnamese = @DescriptionInVietnamese, Descript ionInSecondLanguage = @DescriptionInSecondaLanguage, ReceiptDiscontinued = @ReceiptDiscontinued, UserName = CURRENT_USER WHERE @ReceiptNo=ReceiptNo GO
Trang 10Ung dụng: Sử dụng thủ tục nội tại trong ứng dụng 299 SELECT CustomerId, SUM(ReceiptAmount) As ReceiptAmount FROM Receipts GROUP BY CustomerId ELSE SELECT CustomerId, SUM(ReceiptAmount) As ReceiptAmount FROM Receipts ¥ WHERE CustomerId = @CustomerId GROUP BY CustomerId GO
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 | | Customerld | ReceiptAmount 6255000 oe 1650000 3 A0008 4700000 A0004 4450000 _ A0005 1650000 A0008 3000000 A0007 2040500 ˆ A0008 1000000 A0009 1100000
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 Ví dụ UD-12-8: Gọi thủ tục r udsReceiptByCustomer 'A0007' GO ï udsReceiptByCus
Khi thực thi khai bâo trong ví dụ trín, bạn có thể tìm thấy kết quả
Trang 11Ung dung: Sit dụng thủ tục nội tại trong ứng dụng EB Results Messages| Hình UD-12-4: Tình hình thu của khâch hăng A0007 3.2 Bảng ReceiptTypes
Tương tự như bảng Receipts, đối với hănh động truy vấn dữ liệu cho bảng ReceiptTypes, bạn cần khai bâo thủ tục nội tại như ví dụ UD-13 Ví 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 So Nếu thực thi thủ tục nội tại trín để liệt kí danh sâch loại phiếu thu, bạn cần sử dụng cú phâp như ví dụ UD-13-1 Ví dụ UD-13-1: Khai bâo udsViewSalesInvoiceTypes '' GO Khi thực thi thủ tục trín, bạn có thể tìm thấy danh sâch mẩu tin như hình UD-13
&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
Trang 12Ứng dụng: Sử dụng thủ tục nội tại trong ứng dụng soi [M? dụ UD-13-2 udsViewReceiptTypes 'R02' GO
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 BÑ Reeults | ReceiptTypelD | ReceiptTypelnVietnamese | | Thu tiền nở mua hăng của khâch hăng
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 hi CREATE PROC udsDeleteReceiptTypes @ReceiptTypeld CHAR (3) AS DELETE FROM ReceiptTypes WHERE
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
Ví dụ UD-13-4: Khai bâo xóa tất cả mẩu tin tron
udsDeleteReceiptTypes ''
GO
Nếu muốn xóa một mẩu tin trong bảng Receipts, bạn khai bâo gọi thủ tục udsDeleteReceiptTypes như ví dụ UD-13-õ
Ví dụ UD-13-5: Khai bâo xóa một mẩu tỉn|
udsDeleteReceiptTypes 'R10' GO
Trang 13Ung dụng: Sử dụng thủ tục nội tại trong ứng dụng CREATE PROC udsInsUpdReceiptTypes @Flag BIT, @ReceiptTypeld char (3), @ReceiptTypeNameInVietnamese nvarchar (50), @Receipt TypeNameInSecondLanguage varchar (50) AS IF @Flag = 0
INSERT INTO ReceiptTypes
VALUES (@ReceiptTypeld, @ReceiptTypeNameInVietnamese,
@Receipt TypeName InSecondLanguage, 1) ELSE UPDATE ReceiptTypes SET Receipt TypeNameInVietnamese = @ReceiptTypeNameInvietnamese, Receipt TypeNameInSecondLanguage =
@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
Trang 14Ứng dụng: Sử dụng thủ tục nội tại trong ứng dụng 308 pa” CÂ Results Lă poe i 7 2007-10-10 00:00:00 im 2 2007101000000 ngan 1 3 BR000003 2007-10-13 00:00:00 hai 1 4 BRoooo04 2007-1014 00:00:00 khang 0 L5 BR000005 2007-1017 00:00:00 khang 0 _8 BR000008 2007-10-18 00:00:00 | hei 0 pe BR000007 2007-10-19 00:00:00 ngan ũ BR000008 2007-10-20 00:00:00 hai 0
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 CREATE PROC udsDeleteReceiptBatchs @ReceiptBatchNo VARCHAR (10) AS DELETE FROM ReceiptBatchs WHERE
ReceiptBatchNo = CASE @ReceiptBatchNo WHEN '' THEN ReceiptBatchNo
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 @Flag BIT, @ReceiptBatchNo VARCHAR (10), @ReceiptBatchDate SMALLDATETIME, @Discontinued BIT AS IF @Flag = 0 INSERT INTO ReceiptBatchs VALUES (@ReceiptBatchNo, @ReceiptBatchDate, CURRENT_USER, 1) ELSE UPDATE ReceiptBatchs SET ReceiptBatchDate = @ReceiptBatchDate, UserName = CURRENT_USER, Discontinued = Discontinued WHERE ReceiptBatchNo = @ReceiptBatchNo GO 3.4 Bang Payments
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
Trang 16Ứng dụng: Sử dụng thủ tục nội tại trong ứng dụng 305 MP? CREATE PROC udsViewPayment @PaymentNo VARCHAR (10) AS SELECT * FROM Payments WHERE
PaymentNo = CASE @PaymentNo
WHEN '' THEN PaymentNo
ELSE @PaymentNo END
GO
Khi liệt kí tất cả danh sâch phiếu chỉ trong bảng Payments thì bạn gọi thủ tục nội tại trín như hình UD-15 udsViewPayment '' 60 Đi Rewb |llă Mesaga| ` : ees “PaymentNo | PaymentBatchNo | PaymentDate | PaymentTypelD —SupplierID | Amount | 1 {epbowatai @ — 2007-10-06 00:00:00 P01 soon! 5030000 L2 PAD0000102 2007-10-06 00:00:00 P01 §0002 5132500 |3 PAD0000103 trinh: 2007-1008 00:00:00 P01 $0003 — 7000000 L4 PAD0000104 BP000002 2007-10-07 00:00:00 P01 sooo4 1980000 L5 PAD000105 BP000002 2007-10-07 00:00:00 P01 sooor 7000000 |8 PAD000I0 BP000002 2007-10-07 00:00:00 POI $0002 2000000 |7 PAD000107 BP000003 2007-10-08 00:00:00 P01 $§0002 2000000 |8 PAD0000108 BP000004 2007-10-09 00:00:00 Pũ1 soo0s 1500000 |3 PA00000103 BP00000 2007-10-09 00:00:00 POI $0004 1500000 [1Ô PAD0000110 BP00000 2007-10-09 00:00:00 P03 sooos 1500000 tt PAD0000111 BP000005 2007-10-10 00:00:00 P03 §0004 3500000 |12 PAD0000112 BP000005 2007-10-10 00:00:00 P03 §0003 2500000 [13 PADI00013 BP000006 2007-10-11 00:00:00 P03 §0003 6177800
Hình UD-1ð: Danh sâch phiếu chỉ
Trang 17I sos Ứng dụng: Sử dụng thủ tục nội tại trong ứng dụng
udsVieuPayment 'PAD0000109'
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 Vi du UD CREATE PROC udsViewPayment ByPeriod @StartDate VARCHAR(15), @EndDate VARCHAR (15) AS SELECT * FROM Payments WHERE
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 GO Vi du, bạn khai bâo gọi thủ tục nội tại trín thì kết quả trình băy như hình UD-15-2 udsViewPaymentByPeriod '10/0CT/2007', '11/0CT/2007' Go P Payment ypelD |S “Amount _| 2007-10-10 00:00:00 P03 $0004 3500000 2071010000000 P03 §0003 2500000 2071011000000 P03 S003 6177500
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
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 @PaymentNo VARCHAR (10) As IF @PaymentNo = ''' DELETE FROM Payments; ELSE
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 @Flag BIT, @PaymentNo VARCHAR (10), @PaymentBatchNo VARCHAR (10), @PaymentDate SMALLDATETIME, @Payment TypeID CHAR (3), @SupplierID CHAR(5), @currencyID CHAR (3), @Amount DECIMAL(18,0), @ExchangeRate DECIMAL (18,0), @PaymentAmount DECIMAL (18,0), @DescriptionInVietnamese NVARCHAR (150), @DeseriptionInSecondLanguage NVARCHAR (150), @PaymentDiscontinued BIT As IF @Flag =0
INSERT INTO Payments
VALUES (@PaymentNo, @PaymentBatchNo, @PaymentDate,
Trang 19a 308 Ung đụng: Sử dụng thú tục nội tại trong ứng dụng @Amount, @ExchangeRate, @PaymentAmount, @DescriptioniInVietnamese, @Descript ionInSecondLanguage, 1,1, GETDATE(), CURRENT_USER) ELSE UPDATE Payments SET Payment BatchNo = @Payment BatchNo, PaymentDate = @PaymentDate, Payment TypeID = @PaymentTvpe1ID, SupplierID = @SupplierID, CurrencyID = @CurrencyID, Amount = @Amount, ExchangeRate @ExchangeRate, PaymentAmount = @PaymentAmount, DescriptionTnVietnamese = @DescriptionInVietnamese, Descript ionInSecondLanguage = @Descript ionInSecondLanguage, Payment Discontinued = @Payment Discontinued, UserName = CURRENT_USER WHERE @PaymentNo=PaymentNo GO
Dĩ cho phĩp người sử dụng tổng hợp tiền chỉ theo nhă cung cấp, bạn
có thể khai bâo thủ tục nội tại như ví dụ UD-15-6
du UD hai bâo tiền chỉ theo nhă cung cấp CREATE PROC udsPaymentBySupplier 9Supp1ierTd CHAR (5) As IF @SupplierId='' SELECT SupplierTd, SUM (PaymentAmount) As PaymentAmount FROM Payments GROUP BY SupplierId ELSE SELECT SupplierId, SUM (PaymentAmount) As PaymentAmount FROM Payments WHERE SupplierId = @SupplierIa GROUP BY SupplierId GO
Nếu muốn tổng hợp tiền thu của mọi nhă cung cấp trong thâng thì bạn khai bâo gọi thủ tục nội tại trín như ví dụ UD-15-7,
Ví dụ UD-15-7: Gọi thủ tục nội tại udsPayi udsPaymentBySupplier '!
GO
Trang 20_ I©
Ứng dụng: Sử dụng thủ tục nội tại trong ứng dụng 309 M
Rhi 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-15-3 B Resuts Messages 12030000 9132500 17177500 6980000 1500000
Hình UD-15-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 nhă cung cấp thì bạn
khai bâo gọi thủ tục nội tại trín như ví dụ UD-15-8
H Gọi thủ tụ a
udsPaymentBySupplier 'S0004' GO
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-15-4 EB Results | lă Messages| Hình UD-15-4: Tình hình chỉ cho nhă cung cấp S0004 3.5 Bảng PaymentTypes
Tiếp tục lăm việc với bảng PaymentTypes, đối với hănh động truy
vấn dữ liệu bạn cần khai bâo thủ tục nội tại như ví dụ UD-16 CREATE PROC udsViewPaymentTypes @PaymentTypeTd CHAR (3) AS SELECT * FROM PaymentTypes WHERE
Payment Typeld = CASE @PaymentTypeId WHEN '' THEN PaymentTypeId
Trang 21° 310 Ứng dụng: Sử dụng thủ tục nội tại trong ứng dụng Khi thực thi thủ tục nội tại trín để liệt kí danh sâch loại phiếu chỉ, bạn cần sử dụng cú phâp như ví dụ UD-16-1 udsViewPaymentTypes GO
Khi thực thi thủ tục udsViewPaymentTypes, bạn có thể tìm thấy
danh sâch mẩu tin như hình UD-16
Results lă Messages| Š
| Payment] ypelD | PSreiTndrvorece | ug Ta tiĩn mua hang Tră tiền nở mua hăng cho nhă cung cấp Tạm Ứng tiền mua hăng
Hình UD-16: Loại phiếu chỉ
Đố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 chỉ được chọn, bạn khai bâo gọi thủ tục nội tại như ví dụ UD-16-2
Ví dụ UD-16-2: Khai bâo liệt kí một udsViewPaymentTypes 'P02' GO Khi thực thi thủ tục trín, bạn có thể tìm thấy thông tin của loại phiếu chỉ như hình UD-16-1 Results Messages
1 Pe TypelD | Pi tT yf ese Be) Trả tiền ng mua hang cho nhă cung cấp
Hình UD-16-1: Thông tin một mê loại phiếu chỉ
Trong trường hợp xóa mẩu tin trong bảng PaymentTypes, bạn có thể
Trang 22Ứng dụng: Sử dụng thủ tục nội tại trong ứng dụng 311
WHEN '' THEN PaymentTypetId ELSE @PaymentTypelId END GO
Bạn có thể gọi thủ tục nội tại có bín udsDeletePaymentTypes với hai trường hợp, trường xóa tất cả mẩu tin trong bảng Payments bạn khai bâo như ví đụ UD-16-4 Ví dụ UD-16-4: Xóa tất cả mẩu tín trong bảng, udsDeletePaymentTypes '' Go
Nếu muốn xóa một mẩu tin trong bâng Payments, bạn khai bâo gọi
thủ tục udsDeletePaymentTypes như ví dụ UD-16-5 Ví dụ UD-16-5: Khai bâo xóa một mau tin udsDeletePaymentTypes 'P10' GO
Tương tự như trường hợp khâc, khi thím mới hay cập nhật dữ liệu vao bang Payments, ban có thể khai bâo thủ tục nội tại ding chung cho hai
trường hợp năy dựa vă mê loại phiếu chỉ như ví dụ ƯD-16-6
Ví dụ UD-16-6: Thím vă cập nhật dữ l
CREATE PROC udsInsUpdPayment Types @Flag BIT,
@PaymentTypeld char (3),
@Payment TypeNameInVietnamese nvarchar (50),
@Payment TypeNameInSecondLanguage varchar (50) AS IF @Flag=0 INSERT INTO PaymentTypes VALUES (@PaymentTypeld, @Payment TypeNameInVietnamese, @Payment TypeNameInSecondLanguage, 1) ELSE
UPDATE Payment Types
SET Payment TypeNameInVietnamese = @Payment TypeNameInVietnamese, Payment TypeNameInSecondLanguage =
@Payment TypeNameInSecondLanguage
WHERE Payment Typeld = @PaymentTypelId
íu văo bảng Daymenba
Go
3.6 Bảng PaymentBatchs
Tiếp tục lăm việc với bảng PaymentBatchs, để cho phĩp truy vấn dữ
Trang 23
312 Ung dụng: Sử dụng thủ tục nội tai trong ứng dụng
Ví dụ UD-17: Khai bâo thủ tục nội tại truy vấn|
CREATE PROC udsViewPaymentBatchs @PaymentBatchNo VARCHAR (10) AS
SELECT * FROM Payment Batchs WHERE
Payment BatchNo = CASE @Payment BatchNo
WHEN '' THEN Payment BatchNo ELSE @PaymentBatchNo END Go Khi thực thi thủ tục nội tại trín để liệt kí danh sâch lô phiếu chi, ban cần sử dụng cú phâp như ví dụ UD-17-1: Ví dụ UD-17-1: Khai bâo gọi thủ tục nội tại udsViewPaymentBatchs '' GO Khi thực thi thủ tục trín, bạn có thĩ tìm thấy danh sâch mẩu tin như hình UD-17 BE Results đă Messages) _.|,PaymentBatchNo | PaymentBatchDate UseiName | Discontinued) | 1 Oi 2007-10-06 00:00:00 khang 1 |2 BP000002 2007-10-07 00:00:00 khang — 1 |3 BP000003 2007-10-08 00:00:00 ngan 0 4 BP000004 2007-10-09 00:00:00 hai 0 8 BF000005 2007-10-10-00:00:00 khang — 0 8 BP000006 2007-10-11 00:00:00 khang 0
Hình UD-17: Danh sâch lô phiếu chỉ
Trong trường hợp muốn liệt kí một mẩu tin ứng với một lô phiếu chỉ
được chọn, bạn khai bâo gọi thủ tục nội tại như ví dụ UD-17-2
udsViewPaymentBatchs BP000004' ( kí một lô pi 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
Trang 24©
Ứng dụng: Sử dụng thủ tục nội tại trong ứng dụng 313 M
<a zi
EE] Results | lă Messages :
PaymentBatchNo ' PaymentBatchDate ˆ UserName | Discontinued | | 2007-10-09 00:00:00 , hai 0
Hình UD-17-1: Thông tin một lô phiếu chỉ
Trong trường hợp xóa mẩu tin trong bảng PaymentBatchs, bạn có thể
khai bâo thủ tục có tín udsDeletePaymentBatchs như ví dụ UD-17-3
CREATE PROC udsDeletePaymentBatchs @Payment BatchNo VARCHAR (10) AS
DELETE FROM Payment Batchs
WHERE
Payment BatchNo = CASE @PaymentBatchNo WHEN '' THEN PaymentBatchNo
ELSE @PaymentBatchNo END
GO
Nếu tạo thủ tục nội tại udsDeletePaymentBatchs 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 PaymentBatchs bạn khai bâo như ví dụ UD-17-4
Ví dụ UD-17-4: Khai bâo xóa tất cả mẩu tin
udsDeletePaymentBatchs ''
Go
Trong trường hợp xóa một mẩu tin, bạn khai bâo gọi thủ tục udsDeletePaymentBatchs như ví dụ UD-17-ð
-17-5: Khai bâo xóa một mẩu tin
udsDeletePaymentBatchs ' BP000014' GO
Ngoăi ra, 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 PaymentBatchs, 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 chi như ví dụ UD-17-6
Ví dụ UD-17-6: Khai bâo thím vă cập nhđt
Trang 25
314 Ung dụng: Sử dụng thủ tục nội tại trong ứng dụng INSERT INTO PayrientBatchs
VALUES (@Payment BatchNo,
@Payment BatchDate, CURRENT_USER, 1} ELSE UPDATE PaymentBatchs SET Payment BatchDate = @PaymentBatchDate, UserName = CURRENT_USER, Discontinued = Discontinued WHERE PaymentBatchNo = @PaymentBatchNo GO
3.7 Bâo câo tổng hợp thu vă chỉ
Sau khi lăm việc với hai bảng chính lă Payments va Receipts, bạn có
thể khai bâo thủ tục để thống kí tổng thu va chỉ rồi bâo câo cđn đối thư chỉ Chẳng hạn, bạn có thể thống kí tiển thu vă chỉ cùng với tiền tôn
trong thâng trước đó bằng câch khai bâo thủ tục nội tại như ví dụ UD-18 L3 CREATE PROC udsBalanceOfMonth @CurrentMonth CHAR (7) AS DECLARE @PreviousMonth CHAR (7) SET @PreviousMonth =
dbo udfPreviousMonth (@CurrentMonth)
SELECT '01/' + @CurrentMonth AS IssueDate ,
0 as ReceiptAmount, 0 AS PaymentAmount, EndingAmount FROM CloseMonthCashBalances WHERE CloseMonth = @PreviousMonth UNION ALL SELECT Convert (char(i1), ReceiptDate, 103) AS DueDate, ReceiptAmount, 0 AS PaymentAmount, 0 FROM Receipts UNION ALL SELECT Convert (char (11), PaymentDate, 103) AS DueDate, 9, PaymentAmount, 0 FROM Payments ORDER BY IssueDate GO
Sau đó, bạn khai bâo gọi thủ tục nội tại BalanceOfMonth với tham số ứng với thâng năm hiện hănh như ví dụ UD-18-1
udsBalanceOfMonth '10/2007'
Trang 26Ứng dụng: Sử dụng thủ tục nội tại trong ứng dụng s15 [MỊ°
hi thực thi ví dụ gọi thủ tục nội tại trong ví dụ trín, bạn có thể tìm
Trang 27
316 Ung dụng: Sử dụng thú tục nội tại trong ứng dụng Trong trường hợp muốn lưu đữ liệu vừa tính toân văo bảng
MonthlyCashBalanees, bạn có thể khai bâo thủ tục nội tại với cấu trúc như vi du UD-18-2
du UD-18-2: bâo lưu đữ CREATE PROC udsBalance
@CurrentMonth CHAR (7) AS
DELETE FROM MonthlyCashBalances
DECLARE @PreviousMonth CHAR (7 ) SET @PreviousMonth =
dbo udf PreviousMonth (@CurrentMonth) INSERT INTO MonthlyCashBalances
(IssueNo, IssueBatchNo, PartnerID, Description, IssueDate, ReceiptAmount, PaymentAmount, BalanceAmount}
SELECT '',t' te, ‘Beginning amount’,
CAST('O1/' + @CurrentMonth AS SMALLDATETIME) AS IssueDate, G as ReceiptAmount, 0 AS PaymentAmount, EndingAmount FROM CloseMonthCashBalances WHERE CloseMonth = @PreviousMonth UNION ALL SELECT ReceiptNo, ReceiptBatchNo, CustomerTd, DescriptionInVietnamese, ReceiptDate, ReceiptAmount, 0, 0 FROM Receipts UNION ALL SELECT PaymentNo, Payment.BatchNo, Supplierid, DescriptionInVietnamese, PaymentDate, 0, PaymentAmount, 0 FROM Payments ORDER BY IssueDate GO
Sau khi tạo thănh công thủ tục nội tại udsBalance, bạn có thể gọi nó
bằng câch khai bâo như ví dụ UD-18-3 udsBalance '10/2007 GO SELECT * FROM MonthlyCashBalances GO
Trang 28207011081000) Patna 0 2071096000000 $0001 0 somme 0 207/40008060 S008 0 smo ors00600000 S005 0 room 0 2040708000 S000 0 t0B 0 2071097 000000 soo 0 20/400708060 00 0 room 00p 0 0 20400008080 s00 0 AB 0 20/400808086 9000 0 OANH 0 20400808000 9000 0 0000 0 2o0r 0800000 300% 0 20101000000 50004 0 som ou 0 s0 20401088060 S00 0 Z0 0 200101008000 A000 88889 oorsoi1 oneno) cow 460000 0 a 6 2W/1011080800 con 1055000 207401108000 008 0 0 om 0 0 20401200000 A003 188800 AW/AMA00000 AM 000m 0 0 a 6 AW/AD130M000 AM 00% 0 6 2WA01800008 AE 14M0 0 D 20/4014080009 A90M IGUD 0 0 20W40I4M00 AOUS TU 0 6 25 RETA 2040170880009 Ađ0B 288000 0 0 [5 xo mm mưmmG a0aoU0S% A6 mHĐ 0 0 Hình UD-18-1: Tình hình thu chỉ
Để tính cđn đối thu chi, bạn khai bâo thủ tục nội tại có sử dụng kiểu
dữ liệu CURSOR như ví dụ UD-18-4 @CurrentMonth CHAR (7) AS Y n đối thu vă c
CREATE PROC uđsExecuteBalance
DECLARE CursorBalance CURSOR FOR SELECT IssueID, ReceiptAmount,
PaymentAmount, BalanceAmount FROM MonthlyCashBalances FOR UPDATE OF BalanceAmount
OPEN cursorBalance DECLARE @IssueID INT
DECLARE @ReceiptAmount DEC IMAL DECLARE @PaymentAmount DECIMAL DECLARE @BalanceAmount DECIMAL DECLARE @Balance DECIMAL
Trang 29I1 318 Ứng dụng: Sử dụng thú tục nội tại trong ứng dụng @ReceiptAmount - @PaymentAmount
UPDATE MonthlyCashBalances
SET BalanceAmount = @Balance
WHERE IssueID = @IssueID
FETCH NEXT FROM cursorBalance INTO @IssueID, @ReceiptAmount, @PaymentAmount, @BalanceAmount
END
CLOSE cursorBalance DEALLOCATE cursorBalance Chuyĩn dĩi ngăy hợp lệ
DECLARE @Last Date CHAR(10) SET @LastDate = RIGHT('0' +
itrim(dbo udfLastDay (@CurrentMonth)), 2) + '/'+ @CurrentMonth;
SET @LastDate = dbo.ConvertToDate (@LastDate) Tĩng thu, chi trong hỳ
INSERT INTO MonthlyCashBalances (IssueNo, IssueBatchNo, PartnerID, Description, IssueDate, RecĩiptAmount, PaymentAmounE, BalanceAmount}
SELECT '!,'',!'*, 'Enđing amount ',
CAST (@LastDate AS SMALLDATETIME) AS IssueDate, SUM (ReceiptAmount), SUM(PaymentAmount}, @Balance
FROM MonthlyCashBalances
GO
Trong đó, hăm ConvertToDate nhận chuỗi có định dạng ngăy rồi đến
thâng vă năm rồi chuyển về dạng thâng rồi ngăy vă năm có cấu trúc như ví dy UD-18-5 CREATE FUNCTION ConvertToDate { @CurrentDate char (10) ) RETURNS char (10) WITH EXECUTE AS CALLER AS BEGIN RETURN (substring (@CurrentDate,4,2) +'/' + 1eft (8CurrentDate, 2) + !⁄' + right (@CurrentDate, 4)) END;
Sau khi gọi thủ tục nội tại để tổng hợp thu va chi lă udsBalance, ban tiếp tục gọi thủ tục nội tại có tín udsExecuteBalance rồi sử dụng phât biểu
Trang 30Ung dụng: Sử dụng thủ tục nội tại trong ứng dung 319 EXECUTE udsBalance '10/2007' EXEC udsExecuteBalance '10/2007' SELECT IssueId, ReceiptAmount, PaymentAmount, BalanceAmount, Description FROM MonthlyCashBalances GO
Nếu thực thi câc khai bâo trong vi dụ trín, bạn có thể tìm thấy mẩu
tin trong bảng MonthlyCashBalances trình băy như hình UD-18-2 | Gl Resuts | 2) Messages | § || eld Recsiptmount|Pamerttmount | Balrcedmount Desciton 4 no 0 100000000 Beginmingamoun Za 0 5030000 94970000 — TrătềnmuahăngAjnomooViệtNam | 3 0 5132500 89837500 TrătềnmuahăngSuzumiViệtNam 4 0 7000000 82837500 Trăềnmuahăng a 0 1980000 80857500 — Trăềnmuahăng 6 0 7000000 73857500 TrătiềnmuahăngAjnomoioViệtNam 7 0 2000000 71857500 Trătềnmuahăng | 8 0 2000000 69857500 Trătềnmuahăng lạ 0 1800000 68357500 Trăềnmuahăng l0 0 1500000 68857500 — Trăềnmuahăng lí" 0 1500000 65357500 Trătiềnmuahăng 12 0 3500000 61857500 Trătềnmuahăng lă 0 2500000 59357500 Trătềnmuahăng lu 500000 0 59857500 Thutiềnbânhăng củakhâchhăng 15 450000 0 60307500 Thutềnbânhăng củakhâchhăng lR 1055000 0 61362500 Thutềnbânhăngcủakhâchhăng a? 0 6177500 55185000 Trả tiền mua hăng l 1a 1500000 0 56685000 Thutềnbânhăng củakhâchhăng l 3000000 0 59685000 Thuiềntạm0ngmuăhăng củakhâ || 20 2000000 0 61695000 Thutềnbânhăngcủakhâchhăng la 1200000 0 62885000 Thutềnbânhăng cùakhâchhăng | 22 310 1450000 0 64335000 Thutềnbânhăng củakhâchhăng | 23 3111650000 0 65985000 Thuiềnbânhăng của khâchhăng | 2 2000000 0 67995000 Thuiiềnbânhăng củakhâchhăng 06w seeded sec MVS0LUTION 6092) MYSDLUIIDNVHanHuuEheglEE] _ AcsonS;sel
Hình UD-18-2: Tình hình cđn đối thu uỉ chỉ
Sau khi tính cđn đối thu vă chi, người sử dụng có thể thực hiện quâ
trình đóng sổ, khi đó câc số liệu sẽ bị xóa vă dữ liệu đê tính toân trong bảng
Trang 318M? 320 Ứng dụng: Sứ dụng thủ tục nội tại trong ứng dụng Tương tự như trường hợp câc khoân phải thu vă câc khoản phải chỉ, bạn có thể khai bâo thủ tục nội tại để chuyển đữ liệu đê tính toân trong bảng MonthlyCashBalances văo bảng CloseMonthCashBalances như ví dụ UD-18-7 CREATE PROC udsCloseMonehForel, @CurrentMonth CHAR(7}, @DeleteData BIT AS
EXECUTE udsBalance @CurrentMonth EXEC udsExecuteBalance @CurrentMonth DELETE FROM CloseMonthCashBalances WHERE CloseMonth = @CurrentMonth;
DECLARE @BeginAmount DECIMAL
SELECT TOP 1 @BeginAmount = BalanceAmount FROM MonthlyCashBalances;
INSERT INTO CloseMonthCashBalances
SELECT TOP 1 @CurrentMonth, @BeginAmount, ReceiptAmount, PaymentAmount, BalanceAmount, GETDATE() , CURRENT_USER
FROM MonthlyCashBalances ORDER BY IssueId DESC; INSERT INTO CloseMonthCashBalanceDetails SELECT IssuelId, @CurrentMonth, IssueNo, IssueBatchNo, IssueDate, PartnerId, ReceiptAmount, PaymentAmount, BalanceAmount, Description FROM MonthlyCashBalances IF @DeleteData =1 BEGIN
PRINT 'Close Month! DELETE FROM Receipts; -~DELETE FROM ReceiptBatchs; DELETE FROM Payments;
~~DELETE FROM Payment Batchs;
END GO
Trong trường hợp đóng sổ tạm thời thì bạn có thể gọi thủ tục nội tại
có tín udsCloseMonthForGL với giâ trị 0 cho tham số @DeleteData như ví
dụ UD-18-8
udsCloseMonthForGL '10/2007
GO
Tuy nhiín, nếu bạn đóng sổ thực sự thì cần truyền giâ trị 1 cho tham
Trang 32Ung dụng: Sử dụng thủ tục nội tai trong ứng dụng 321 MP?
Ví dụ UD ai bâo gọi udsCloseMonthForGL
udsCloseMonthForGL '10/2007', 1 GO
Sau khi thực thi phât biểu trong ví dụ trín, bạn có thĩ tìm thấy mẩu
tin trong bảng CloseMonthCashBalances như hình UD-18-3 SELECT * FROM CloseMonthCashBalances 25845500 46820000
Hình UD-18-3: Tình hình thu uă chỉ trong thâng 10/2007
Tương tự như vậy, bạn cũng có thể tìm thấy chỉ tiết tình hình thu vă
chi trong bảng CloseMonthCashBalanceDetails như hình UD-18-4 | SELECT * FROM CloseMonthCashBalanceDetails TONER ca ba 7 arene son 0 wm am Taw
%3 10/2007 PADUMMIU2 BPWWƠI 071008000000 S0 0 5132500 _ #830) Tae 4 et AM? PADWO0I3 BPMWVM "2007-1006 000000 soy 0 700000) 283750) Tin
5 5 W2007 PAOWWOIM #PWWME 2471007000000 S00M 0 1880000) 90857500 Ti
fos war nong mm 2 muvmansm [HH mem lăm ys war pomon muHE XEiGGUUƠG sm G mmm Tem lăm li storm pmo orm a0i08000đ sa 0 = eee
Chú ý: Bạn có thể tìm thấy câch gọi câc thủ tục nội tại cho câc ví dụ trín từ ngôn ngữ lập trình C# trong tập SQL Seruer 2005 - Lập trình nđng cao
4 PHẦN KẾ TOÂN XUẤT NHẬP TỒN
Trang 33
322 Ung dụng: Sử dụng thủ tục nội tại trong ứng dụng
Chú ý: Bạn có thể tìm 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 StoredProcedureForIC.sql
4.1 Phần nhập kho
Phần nhập kho bao gồm bảng dữ liệu liín quan như: ImportTypes,
ImportBatchs, Imports va ImportDetails
4.1.1, Bang ImportTypes
Để lăm việc với bang ImportTypes, ban bắt đầu khai bâo thủ tục nội tại dùng để liệt kí danh sâch mẩu tin như ví dụ UD-19
AS
SELECT * FROM ImbortTypes WHERE
ImportTypeld = CASE @ImportTypeId WHEN '' THEN ImportTypeId
ELSE @ImportTypeId END GO
Nếu có nhu cđu liệt kí tất cả mẩu tin trong bảng ImportTypes, bạn
khai bâo gọi thủ tục nội tại udsViewImportTypes như hình UD-19 udsViewImportTypes |! Go 1 2 102 Import indirectly 3 103 Return
Hình UD-19: Liệt kí mẩu tin trong bảng ImportTypes
Đối với trường hợp liệt kí một mẩu tin thi bạn khai bâo tương tự như
Trang 34Ung dụng: Sử dụng thủ tục nội tại trong ứng dụng 323 udsViewImportTypes 'T02' GO Saeco Results | [3 Messages
Hình UD-19-1: Liệt kí một mểu tin
Trong trường hợp xóa mẩu tin trong bảng ImportTypes, bạn có thể
khai bâo thủ tục nội tại như ví dụ UD-19-1
Ví dụ UD-19-1: Khai bâo xóa mẩu tin tron
CREATE PROC udsDeleteImportTypes @ImportTypeld CHAR (3)
AS
DELETE FROM Import Types WHERE
ImportTypeld = CASE @ImportTypeId
WHEN '' THEN ImportTypeId ELSE @Import TypeId END GO
Khi xóa một mẩu tin trong bảng ImportTypes, bạn có thể khai bâo gọi thủ tục nội tại udsDeletelmportTypes như ví dụ UD-19-2
Ví dụ UD-19-2: Khai bâo xóa mẩu tỉn|
udsDeleteTmportTypes '104' GO
Nếu bạn cung cấp giâ trị rỗng cho tham số @ImportTypeld thì thủ tục
nội tại sẽ xóa tất cả mẩu tin trong bảng ImportTypes
Ví dụ UD-19-3: Khai bâo xóa mẩu tin
udsDeleteImportTypes ' '
GO
Tương tự như câc bảng dữ liệu khâc, bạn cũng khai bâo thủ tục nội tại cho phĩp người sử dụng thím mới vă cập nhật mẩu tin trong bảng ImportTypes như ví dụ UD-19-4
ï dụ UD-19-4: Khai bâo thím vă cập nhật mẩu tin
CREATE PROC udsInsAndUpdImportTypes @Flag BIT,
Trang 35
324 Ung dụng: Sử dụng thủ tục nội tại trong ứng dụng
@Import TypeName NVARCHAR (10) AS
IF @Flag = 0
INSERT INTO ImportTypes
VALUES (@ImportTypelId, @Import TypeName)
ELSE
UPDATE ImportTypes
SET Import TypeName = @Import TypeName WHERE ImportTypeld = @ImportTypeld GO
4.1.2 Bang ImportBatchs
Tương tự như trín, khi lăm việc với bảng ImportBatchs, bạn bắt đđu
khai bâo thủ tục nội tại dùng để liệt kí danh sâch mẩu tin như ví dụ UD-20
r b Ê lu tin trong bảng ImportBatchs
CREATE PROC udsViewImportBatchs @Import BatchNo CHAR (3)
AS
SELECT * FROM ImportBatchs WHERE
ImportBatchNo = CASE @ImportBatchNo WHEN '' THEN ImportBatchNo
ELSE @ImportBatchNo END GO
Để cho phĩp liệt kí tất cả mẩu tin trong bảng ImportBatchs, bạn
khai bâo gọi thủ tục nội tại udsViewImportBatchs như hình UD-20 udsViewImportBatchs |! sq
Cl Ress |) Mesage] — —- : ie be gk RAGES
Í _ ImpotBatchNo ` ImpotBatchDate | ImpottDiscontinued | EntyDate UserName (1 (JBNo00001 | 2007-10-09 00-0000 0 2007-09-05 19:43:00 khang 2007-10-10 00:00:00 0 2007-09-05 19:43:00 lan 2007-10-11 00:00:00 0 2007-09-05 19.43.00 lan 4 2007-10-13 00:00:00 0 2007-09-05 19:43:00 lan 15 18N000005 2071014000000 0 2070905194300 lan § ` IBN0OO006 2071015000000 0 2007-09-05 18:43:00 lan
Hình UD-20: Liệt kí mẩu tin trong bang ImportBatchs
Trang 36Ung dụng: Sử dụng thủ tục nội tại trong ứng dụng 325 dsViewImportBatchs ' IBN000005' TH Resuts |) Messages Í TÍW@alBacNo ImgwtBadOas ImpolDwomlnued EnpDae Usetane || 1 IBNWO 2071014000000 0 2007095194300 lan
Hình UD-20-1: Liệt kí một mẩu tin
Nếu cho phĩp người sử dụng xóa mẩu tin trong bang ImportBatchs, bạn có thể khai bâo thủ tục nội tại như ví dụ UD-20-1
Ví dụ UD-20-1: Khai bâo xóa mẩu tin tron:
CREATE PROC udsDeleteImportBatchs @ImportBatchNo VARCHAR (10) AS
DELETE FROM ImportBatchs WHERE
ImportBatchNo = CASE @ImportBatchNo
WHEN '' THEN ImportBatchNo
ELSE @ImportBatchNo END
bảng ImportBatchsj
GO
Nếu người sử dụng muốn xóa một mẩu tin trong bảng ImportBatchs, họ có thể khai bâo gọi thủ tục nội tại udsDeletelmportBatchs như ví dụ UD-20-2
Ji du UD-20-2: Khai bâo xóa một mẩu tin|
udsDeleteImportBatchs 'IBN000007'
GO
Nếu bạn cung cấp giâ trị rỗng cho tham số @ImportBatchNo thi tha tục nội tại sẽ xóa tất cả mẩu tin trong bảng ImportBatchs
Ji du UD-20-3: Khai bâo xó:
udsDeleteImportBatchs '' GO
tất cả câc mẩu tỉn|
Ngoăi ra, bạn cũng khai bâo thủ tục nội tại cho phĩp người sử dụng thím mới vă cập nhật mẩu tin trong bảng ImportBatchs như ví dụ UD-20-4