1. Trang chủ
  2. » Công Nghệ Thông Tin

SQL server 2005 – Lập trình, thủ tục và hàm part 9 pps

36 317 0
Tài liệu được quét OCR, nội dung có thể không chính xác

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 36
Dung lượng 17,75 MB

Nội dung

Trang 1

& 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 3

292 Ứ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 5

294 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 7

f° 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 9

Ung 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 10

Ung 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 11

Ung 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 13

Ung 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 17

I 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 19

a 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 28

207011081000) 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 29

I1 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 30

Ung 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 31

8M? 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 32

Ung 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 34

Ung 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 36

Ung 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

Ngày đăng: 11/08/2014, 00:24

w