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

xây dựng ứng dụng quản lí kế toán bằng c 2005 part3

130 293 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 130
Dung lượng 39,45 MB

Nội dung

Trang 1

268 Chương 6: Phần kế toán xuất - nhập - tén

WHERE I.ImportId = D.ImportId

AND ImportDate between @StartDate and @EndDate

GROUP BY StockId, ProductId UNION ALL

/{T6ng hop méu tin tt bang Exports va ExportDetails SELECT StockId, ProductId, 0, 0,

isnull(SUM(Quantity),0) As ExportQuantity

FROM Exports E , ExportDetails D

WHERE E ExportId = D.Exportid

AND ExportDate between @StartDate and @EndDate

GROUP BY StockId, ProductId

}

!1Tổng hợp mẩu tin vao bang MonthlyInventoryControl

INSERT INTO MonthlyInventoryControl

(StockId, ProductId, BeginQuantity, ImportQuantity,

ExportQuantity, EndQuantity) SELECT StockId, ProductId,

SUM (BeginQuantity) AS BeginQuantity, SUM(ImportQuantity) AS ImportQuantity, SUM(ExportQuantity) AS ExportQuantity, SUM(BeginQuantity) + SUM(ImportQuantity) - SUM(ExportQuantity) AS EndQuantity FROM ExportAndImportQuantity GROUP BY StockId, Productld; GO

Trong trường hợp bạn cho phép người sử đụng tổng hợp xuất nhập và tên kho của một sản phẩm, bạn khai báo thủ tục nội tại có tên

udsInventoryControl;ä như ví dụ 6-40 và cũng gọi trong biến cố Click của

nút btnCalculate

í dụ 6-40: Thu tue 1

CREATE PROC udsInventoryControl;3

+¡ Khai báo tham số @Product1đ varchar (10), @PreviousMonth CHAR (8), @StartDate smalldatetime, @EndDate smalldatetime AS

// Xa mau tin dang tôn tai trong bang MonthlyInventoryControl

DELETE FROM MonthlyInventoryControl

WHERE Product Id=@ProductId;

(1 Khai báo biểu thức bằng ExportAndimporiQuantiy WITH ExportAndImportQuantity

Trang 2

Chương 6: Phân kế toán xuất - nhập - tổn 269

(

//Téng hop méu tin tit bang CloseMonthInventoryControlDetails

SELECT StockId, ProductiId, EndQuantity As BeginQuantity,

0 As ImportQuantity, 0 As ExportQuantity FROM CloseMonthInventoryControlDetails

WHERE CloseMonth = @PreviousMonth AND Product Id=@ProductId

UNION ALL

/{Téng hop méu tin tit bdng Imports va ImportDetails SELECT StockId, ProductId, 0,

isnull(SUM(Quantity),0) As ImportQuantity, 0 FROM Imports I, ImportDetails D

WHERE I ImportId = D.ImportId

AND ProductId=@ProductId

AND ImportDate between @StartDate and @EndDate

GROUP BY StockId, ProductId

UNION ALL

/1Téng hop méu tin tit bang Exports va ExportDetails

SELECT StockId, ProductId, 0, 0,

isnull (SUM(Quantity),0) As ExportQuantity FROM Exports E ; ExportDetallsD

WHERE E.Exbort1d = D.ExportTd AND Product Id=@ProductId

AND ExportDate between @StartDate and @EndDate GROUP BY StockId, ProductId

)

£ITổng hợp mẩu tin vao bang MonthlyInventoryControl INSERT INTO MonthlyInventoryControl

(StockId, ProductId, BeginQuantity, ImportQuantity,

ExportQuantity, EndQuantity)

SELECT StockId, ProductId,

SUM (BeginQuantity) AS BeginQuantity,

SUM (ImportQuantity) AS ImportQuantity, SUM(ExportQuantity) AS ExportQuantity, SUM(BeginQuantity) + SUM(ImportQuantity) - SUM(ExportQuantity) AS EndQuantity

FROM ExportAndimportQuantity WHERE Product Id=@ProductId

GROUP BY StockId, ProductId; GO

Chú ý: Khi thực hiện chức năng này, chương trình sẽ tự tổng hợp xuất nhập và tính tôn kho cho tất cả sản phẩm trong nhiều kho

Chẳng hạn, bạn chọn vào tùy chọn Selected Product réi tiép tue chon

Trang 3

Chương 6: Phần kế toán xuất - nhập - tồn

TẾT me lel

Fe GeneralLedger Account Receivable Account Payable Inventory Controls Directories Close Month Rights Heb

Inventory Controls 7 Month 012007 Specie Marth @ Calcuste AP

Stat Date: [01/0cr 72007 =] End Date [3170c1/2007 = erence ok a

CaedalelClo CC AIPodeh (S SastedPodel Calculate | SlockName | Pioductid | PodietNanerVeinsnese Beginduently ImporQuaniiy Exportuanity Eneuentiy 00001 h 100 s 15 #5 ODOT 'Túsách 180 600 40 50 P0002 | Tuixdch ding cho hoe sinh nf 180 0U — 885 55 P0002 xách đìng cho học sphrủ 7 250 180 Tixéch ding cha hoe sin nam |Stock8 | P3 /Túxáchdmgckohoesihnam | so To ma ‘Ti domoa [Tú sách đng co Máy tính 315

:hđng cho điện hoạ đ động 2h ding cho Gién thos! di dong Tả xách dừng cho PC Ready $82 Logged as [Administrator] Inventory Controls Loggedin [4:54:21 PM)”

Hình 6-24: Tổng hợp dữ liệu xuất nhập uà tính tồn kho của một sản phẩm Chú $: Đề tạo danh sách tháng và năm trên điều khiển ComboBox

dùng cho lựa chọn tháng và năm trong quá khứ, bạn khai báo phương thức InitiateMonth như ví dụ 6-41 và gọi trong biến cố Load của form Vi du 6-41: Phu rin pint teMonth| void InitiateMonth() Ệ for (int year = 2007; year < 2010; year++) { }

ASCommon asCommon = new ASCommon () ;

Trang 4

Chương 6: Phần kế toán xuất - nhập - tồn 271

4 CẬP NHẬT SỐ LƯỢNG THỰC

Số lượng sản phẩm trong kho có thể khác với số lượng trong sổ sách

kế toán”, nguyên nhân của sự khác biệt này là đo con số nhập và xuất thực

tế khơng đúng

Ngồi ra, chức năng này còn cho phép người sử dụng nhập số lượng sản phẩm bị hư hỏng vào cột BadProductInStock thuộc bảng ProductInStocks phục vụ cho mục đích quản lý

Chú ý: Đề tìm hiểu chức năng này, bạn bắt đầu trình đơn Inventory

Controls | Update Product In Stock để kích hoạt form có tên frmUpdateStock.cs, các thủ tục lưu trong tap tin

ProductStatusProcedures.sql

4.1 Giao dién

Để điều chỉnh số lượng của sản phẩm trong kho theo sổ sách kế toán hay ngược lại, bạn cần thiết kế form với giao tiếp như hình 6-25

Hinh 6-25: Giao dién frmUpdateStock.cs

Dữ liệu dùng để điều chỉnh số lượng hiện tại trong kho phải được tổng

hợp trong chức năng trên

4.2 Khai báo

Tương tự như chức năng trên, bạn có thể trình bày tình hình xuất

nhập và tôn kho của tháng hiện hành bằng cách gọi thủ tục nội tại có tên

udsProductStatus với cấu trúc như ví dụ 6-42 trong phương thức FillDataToGridView

CREATE PROC udsProductStatus

Trang 5

fA? 272 Chương 6: Phan ké todn xudt - nhap - tén AS SELECT S.StockId, StockName, I-ProductId, ProductNameInVietnamese, BeginQuantity AS BeginQtty, ImportQuantity AS ImportQtty, ExportQuantity AS ExportQtty, EndQuantity AS EndQtty, GoodProduct InStock AS QttyInStock, BadProductInStock AS BadQtty FROM Products P INNER JOIN MonthlyInventoryControl I ON P ProductId = I ProductId

INNER JOIN Stocks S ON S.StockId = I.StockId INNER JOIN Product InStocks PIS

ON I.StockId = PIS.StockId

AND PIS ProductId = I ProductId

WHERE S.StockId = case @StockId when ''

then S.StockId else @StockId end Go

'Rhi gọi frmUpdateStock, tình hình xuất nhập va tồn kho trong tháng

Trang 6

R o * k

Chương 6: Phần kế toán xuất - nhập - tổn ams

Bằng cách thêm hai cột, cột thứ nhất ứng với trường hợp người sử

dụng nhập số lượng sản phẩm bị hư hồng (BadQtty), cột thứ hai là cột UpdateQtty, bạn khai báo đoạn chương trình sau trong phương thức ApplyStyleForColumn

if (!dataGridView.Columns.Contains("Updategtty"))

dataGridView.Columns.Add("UpdateQtty", "Update"); Để điền số lượng từ cột EndQtty hay QttyInStock vào cột Update tùy

thuộc vào tùy chọn EndQtty To QttyInStock hay QttyInStock To EndQtty,

ban khai báo đoạn chương trình trong biến cố Click của nút btnFillUpdate@tty như ví dụ 6-43 private void btnFillUpdateQtty_Click (object sender, EventArgs e} { try {

f1 Duyệt qua từng mẩu tin

foreach (DataGridViewRow row in dataGridView Rows) { 1} EndQtty To QttyInStock if (rdoEndQttyToUpdateQtty.Checked) row.Cells["UpdateQtty"].Value = row.Cells["EndQtty"].Value; else 1} QttyInStock To EndQtty row.Cells["UpdateQtty"].Value = row.Cells["QttyInStock"] Value; } } catch (Exception ex) { ASUTHelper ShowMessageBox ( "btnFillUpdateQtty_Click", ex); } }

Chang han, khi bạn nhấn nút Fill Update Qity với tùy chọn là ndQtty To UpdateQtty thì kết quả trình bầy như hình 6-27

Trang 7

Chương 6: Phan kế toán xuất - nhập - tồn Tibdch dig cht sh [Ti ch ding cho hoe sinh nam {dh fom ing he rn Tonia [Taek oie TH xách đồng cho học enh nam Tú áo ma Tứ áo mùa Tech ng cho My tinh Tú xách đừng cho My th

Tiindch ding cho din thoi dé |

Trang 8

Chương 6: Phần kế toán xuất - nhập - tổn 275

Sau khi điều chỉnh số lượng trong cột Update, nếu bạn quyết định cập

nhật số lượng theo thực tế hay sổ sách trong kho thì nhấn nút Update Tùy

vào thy chon EndQtty To QttyInStock hay QttyInStock To EndQtty, ban gọi thủ tục nội tại udsProductStatus;2 nhữ ví dụ 6-44

CREATE PROC udsProductStatus;2

#1 Khai báo tham số @UpdateMode bit, @StockId CHAR (5), @ProductId varchar (10), @Quantity DECIMAL (18, 2) AS 11 Trường hợp cập nhật số lượng từ sổ sách sang kho IF @UpdateMođe = 1

UPDATE Product InStocks

SET GoodProduct InStock = @Quantity,

ModifiedBy = CURRENT_USER, ModifiedDate = GETDATE() WHERE StockId = @StockId AND Productid = @ProductId ELSE +] Trường hợp cập nhật số lượng từ sách sang sổ sách UPDATE MonthlyInventoryControl SET EndQuantity = @Quantity, ModifiedBy = CURRENT_USER, ModifiedDate = GETDATE() WHERE StockId = @Stockid AND ProductId = @ProductId GO Sau đó, khai báo gọi thủ tục nội tại này trong biến cố CHek của nút btnCalculate như ví dụ 6-45 private void btnCalculate_Click (object sender, EventArgs e} { try {

41 Khai báo mdng string va object

string{] parameterName = null;

object {] parameterValue = null; parameterName = new string[4]

Trang 9

276 Chương 6: Phần kế toán xuất - nhập - tồn

"aQuantity" };

parameterValue = new object [4];

11 Duyệt qua từng mẩu tin

foreach (DataGridViewRow row in dataGridView Rows) { object obj = row.Cells["UpdateQtty"].Value; if (obj t=null && ASFormatter.IsNumeric (obj) ) {

// Khai báo biến

string productId = Convert.ToString( row.Cells["ProductId"] Value) ; string stockId = Convert ToString(

row.Cells["StockId"].Value);

double qtty = Convert ToDouble(obj};

/{ Khai bdo va khdi tao déi tugng ASDataProvider ASDataProvider dataProvider = new ASDaraProvider () ; + Khai báo thuộc tính cho đối tượng ASDataProuider đataProvider.CommandText = "udsProductStatus;2"; dataProvider.CommandType = CommandType StoredProcedure; 1 { Khai bdo gid tri cho tham sé parameterValue[0] = rdoEndQttyToQttyInStock.Checked; parameterValue[1]= stockId; parameterValue[2]= productId; parameterValue[3]=qtty;

TỊ Khai báo gọt phương thúc ExecuteNonQuery đataProvi đer ExecuteNonQuery ( parameterName, parameterValue); } } } catch (Exception ex} ae ASUTHelper ShowMessageBox (

"btnCalculate_ Click", ex);

Chú ý: Bạn cần cẩn thận khi thực hiện chức năng này, do nó làm ảnh

Trang 10

Chương 6: Phần kế toán xuất - nhập - tồn

5 KẾT LUẬN

“Trong phần này, bạn tập trung tìm hiểu chức năng tổng hợp số lượng nhập và xuất rồi tính tôn kho cuối kỳ của từng thủ tục nội tại trong từng

kho

Ngoài ra, bạn cũng tìm hiểu chỉ tiết các cập nhật số lượng của sản phẩm từ con sổ trong sổ sách so với số lượng thực tế hay ngược lại

Chú ý: Đây là chức năng dùng để làm tham khảo, bạn có thể loại bỏ

hay thay đổi theo quy định nào đó nhằm bảo đảm thống nhất số lượng tồn của sản phẩm trên sổ sách so với số lượng tổn thực tế trong kho

Ban có thể tham khảo diễn giải chỉ tiết của các ghỉ chú được đánh dấu

theo thứ tự như sau:

{1): Xuất nhập tổn (nventory Controls) là chức năng quản lý số lượng nhập sản phẩm từ nhà cung cấp và xuất sản phẩm cho

khách hàng

(2): Trên sổ sách kế toán, số lượng được tính toán đựa trên dữ liệu

nhập và xuất cùng với số lượng cuối kỳ Tuy nhiên, trong thực tế

số lượng tổn thực tế tổn trong kho có thể khác với số lượng tồn

Trang 11

Chương 7: Phần đóng sổ kế toán 279 Chương 7: PHAN DONG SO KE TOAN Tém chương 7:

Vào thời gian cuối tháng, nhân viên kế toán cần tính toán

và làm báo cáo cuối kỳ về tổn quỹ, công nợ thu của khách hàng và

chỉ cho nhà cung cấp, tình hình xuất nhập tồn,

Để kết thúc kỳ (tháng hiện hành) thì kế toán, nhân viên kế

toán phải chuyển các số đư cuối kỳ của tháng hiện hành thành số

dư đầu kỳ của tháng kế tiếp

Chúng ta đã tìm hiểu chỉ tiết 3 chức năng tương ứng với 3

phần của ứng dụng đã trình bày trong những phần trước, để cho

phép người sử dụng thực hiện chức năng chuyển số dư cuối kỳ của tháng hiện thành số dư đầu kỳ của tháng kế tiếp, bạn cung cấp

giao điện và khai báo cùng với thủ tục nội tại tương ứng

Các vấn dé chính sẽ được đề cập:

v Chuyển số dư cuối kỳ thành số dư đầu kỳ Thay đổi giá trị dùng chung

*ˆ Cấu hình ứng dụng

1 CHUYỂN SỐ DƯ CUỐI KỲ THÀNH SỐ DƯ

ĐẦU KỲ

Trước khi cho phép người sử dụng thực thi chức năng chuyển số dư

cuối kỳ thành số dư đầu kỳ sang tháng kế tiếp, bạn cần trình bày tình hình tôn quỹ, xuất nhập tổn và công nợ đã tính trong các chức năng trước

Chú $: Để tìm hiểu chức năng này, bạn bắt đầu từ trình đơn Close Month

Trang 12

280 Chương 7: Phần đóng sổ kế tốn

Ngồi ra, thủ tục nội tại sử dụng để tổng hợp dữ liệu cuối kỳ trong

chức năng đều đã trình bày trong phần trước 1.1 Giao diện

Để cho phép người sử dụng thực hiện chức năng này, trước tiên bạn thiết kế form có tên frmCloseMonth với giao diện như hình 7-1

Kế đến, bạn khai báo phương thức FiICBToGridView để gọi thủ tục nội tại có tên udsCashBalance đã trình bày trong phần kế toán thu và chỉ

Hình 7-1: Giao diện frmCloseMonth 1.2 Khai báo liệt kê dữ liệu

Bạn cần khai báo hai phương thức ApplyStyleForCB và

ResizeGridViewForCB để định dạng dữ liệu và điều chỉnh kích thước các

cột dữ liệu

Chẳng hạn, nếu chọn vào tùy chọn Cash Balance rồi nhấn nút

Refresh thì kết quả trình bày như hình 7-2

Tương tự như trên, bạn khai báo phương thức FillARToGridView để

gọi thủ tục nội tại có tên udsAecountReceivable;4 đã trình bày trong phần

kế tốn cơng nợ phải thu

Bạn cần khai báo hai phương thức ApplyStyleForAR và

ResizeGridViewForAR để định dạng dữ liệu và điều chỉnh kích thước các

cột dữ liệu

Như đã giới thiệu trong phần kế tốn cơng nợ phải thu, bạn cần khai

báo phương thức AddSumAmountForAR để tính công nợ phải thu của tất cả

Trang 13

Chương 7: Phần đóng sổ kế toán TH Ý Paotuana | œ/0aaur LÍ PAD0000104 | 07/02/2007 | Ì?apœonœ '0/na/amr |“ ®amomG |0a/2mz | Panaaont; | 06/0a/2m07 PAD0fA0108 0902/2007 ~ Paoooomt08 | osroe/2007 ˆ_ 'PAp®0ni0 09/0a/207 n2 LỄ Pepmemlitwoa.mr Trà pin mua ng Suan Vit a Tekan mus ig

[Teh tan rushing

[Tedtén muahing Ainomar VietNam | [TRhênmabin [hananmahing [Teter mu hig Titan mus hig Trà ăn mua hàng Tà tên ma hồng Train mua hàng ‘APTOOOOTOT ` 10/00/2007 | ThuIên bán hàg của khiến hàngM ¡ 888750000) 8283 5m 90857-50000) 73687 500.00, | 71.857 mm, 62.057 500.00 (68.257 500.00 885780000 65387 500.00) ‘6 05750000) 8837200 Hình 7-3: Tình hình tồn quỹ

Ví dụ, bạn chọn vào tùy chọn Account Receivable thì tình hình công nợ phải thu của khách hàng trình bày như hình 7-3

Bacco System Mananeest Conse [Gos er

Cray Trdch Nig HO Hon 8 Vi (Công Trách Nise Hu Han Kodak | Céngiy Tdch Nin Duan ES "Công Cổ phn Suzan Vietnam

TieđenUCAUSA — | Genaiy 8a aute ga UFCA [Clog chin Reoutinn

| Trang tm gio du Vein

Trang 14

282 Chương 7: Phần đóng sổ kế toán

Đối với trường hợp tình hình công nợ phải trả cho nhà cung cấp, bạn

khai báo phương thức FiIAPToGridView để gọi thủ tục nội tại có tên udsAccountPayable;4

Ngoài ra, bạn cũng khai báo hai phương thức ApplyStyleForAP và

ResizeGridViewForAP để định dạng dữ liệu và điều chỉnh kích thước các

cột dữ liệu

Tương tự như trong phần kế tốn cơng nợ phải trả, bạn cần khai báo

phương thức AddSumAmountForAP để tính công nợ trả cho nhà cung cấp

trên form thay vì trong thủ tục nội tại

Chẳng hạn, bạn chọn vào tùy chọn Account Payable thi tinh hinh công nợ phải trả cho nhà cung cấp trình bày như hình 7-4 ies I 8745000 912250 CăglyCổ gảnYendaVệtNen | 12677500 17177800 Côngty Trách Nhận HẦu Hạn Macr 346700 68000 ng Tieh Nhén MôMaaVeh 2 TedAveut | 2000000

Hình 7-4: Tình hình công nợ phải trả cho nhà cung cấp

Bằng cách tương tự như trên, bạn khai báo phương thức PIICToGridView để gọi thủ tục nội tại có tên udsInventoryControl;4 để trình bày tình hình xuất nhập và tồn kho

Chú ý: Bạn cũng khai báo hai phương thức ApplyStyleForIC và

ResizeGridViewForIC để định dạng dữ liệu và điều chỉnh kích thước các cột

Trang 15

Chương 7: Phần đóng sổ kế toán

Ví dụ, bạn chọn vào tùy chọn Inventory Controls thì tình hình xuất

nhập và tôn kho trình bày như hình 7-5

VỂ Account System 4anagemsentt Console - [Close Mohth] tú ho Tổ xách đìng cho học sh ngm “Teixéch ding cho hoe sinh nam “Ti do mua Tứ xách đồng cho Máy tinh Tú xách đìng choMáytih

Tú xách dùng cho điện hoạ đ động Tí xách dùng cho điện thoa đ động Í Tá xách dừng cho PC

ÍTú sách đờng choPC,

Rosy Logged ot (nto lets eth coped 9.2235 44)

Hình 7-5: Tinh hinh xuất nhập tơn

Để hồn thiện chức năng vừa trình bày ở trên, bạn khai báo phương thức Preview để gọi phương thức FillCBToGridView, FIIARToGridView,

Trang 16

Chương 7: Phần đóng số kế toán break; : case “InventoryControl": FillicToGridview(); break;

Sau đó, gọi phương thức Preview trong biến cố Click của nút

btnRefresh hay biến cố CheckedChanged của các diéu khién RadioButton

1.3 Tính số dư cuối kỳ

Nếu người sử dụng có nhu cầu tính lại số dư tồn quỹ, công nợ phải thu, công nợ phải trả và tôn kho cuối kỳ, bạn khai báo phương thức Caleulate

như ví dụ 7-2 rồi gọi trong biến cố Click của nút btnCalculate

Ví dụ 7 Phương thức Calculate|

void Calculate()

{

+1 Khai báo uà khỏi tao déi tuang Common

ASCommon asCommon = new A3Common () ; 1] Khai báo tính tháng trước đó string previousMonth = asCommon Get PreviousMonth ( ASParameters.currentMonth) ; String startDate = "01/"+ ASParameters.currentMonth; +] Khai báo tính số ngày trong tháng

int days = DateTime DaysInMonth ( DateTime Parse (startDate) Year, DateTime Parse (startDate) Month) ; string endDate = đays.ToString(} + "/

+ ASParameters.currentMonth;

/1 Khai báo mảng tham số 0à giá trị của tham số

Trang 17

Chương 7: Phần đóng số kế toán 285 case "CashBalance": dataProvider.CommandText = "udsCashBalance;2"; parameterName = new string(4) { "@CurrentMonth", "@PreviousMonth", “@StartDate", "@EndDate" }; parameterValue = new object [4] { ASParameters.currentMonth, previousMonth, startDate, endDate }; break; ff Tinh hinh céng ng phdi thu cia khach hang case "AccountReceivable”: dataProvider.CommandText = "udsAccountReceivable; 2"; parameterName = new string[3] { "@PreviousMonth", "@StartDate", "@EndDate” };

parameterValue = new object (3) {

previousMonth, startDate, endDate }; break;

#1 Tình hình công nợ phải trả cho nhà cung cấp

case “Account Payable":

dataProvider CommandText =

“udsAccount Payable;2";

parameterName = new string[3] {

"@PreviousMonth", "@StartDate", "@EndDate" };

parameterValue = new object [3] {

previousMonth, startDate, endDate }; break; /{ Tinh hinh xudt nhap tén case "InventoryControls": dataProvider.CommandText = “udsInventoryControl;2";

parameterName = new string(3) {

"@PreviousMonth", "@StartDate”, "@EndDate" };

parameterValue = new object [3] {

previousMonth, startDate, endDate };

break;

}

dataProvider.CommandType =

Trang 18

286 Chuong 7: Phan déng sé ké todn catch (Exception ex) { ASUIHelper ShowMessageBox( "Calculate", ex); } J

Chú ý: Phương thức trên gọi thủ tục nội tại tương ứng với chức năng

đã trình bày trong các phần trước để tổng hợp đữ liệu và tính số dư cuối kỳ

1.4 Đóng sổ

Khi thực hiện chức năng đóng sổ kế toán, số dư cuối kỳ của tháng hiện hành sẽ chuyển sang số dư đầu kỳ của tháng kế tiếp

Đối với trường hợp tồn quỹ, bạn lưu trong bang CloseMonthCashBalances

và CloseMonthCashBalanceDetails; công nợ phải thu của khách hàng thì

lưu vào bảng CloseAccountReceivable va CloseAccountReceivableDetails; công nợ phải trả cho nhà cung cấp thì lưu vào bảng CloseAccountPayable và

CloseAccountPayableDetails, xuất nhập tổn thì lưu trong bảng

CloseInventoryControl va CloseInventoryControlDetails

Để làm điều này, trước tiên bạn khai báo phương thức có tên

CloseMonth với cấu trúc như ví dụ 7-3 du hươi seMonth g thức string CloseMonth(}) { string closeMonth = "";

TỊ Khai báo uà khởi tạo đổi tượng ASConumon ASCommon asCommon = new ASCommon () ;

TJ Khai bảo tháng trước đó string previousMonth = asCommon Get PreviousMonth ( ASParameters.currentMonth) ; string startDate = "01/°+ ASParameters.currentMonth; £] Khai báo số ngày trong tháng

inE đays = DateTime DaysTnMonEh (

DateTime Parse (startDate) Year,

DateTime Parse(startDate) Month);

string endDate = days.ToString() +"/"+ ASParameters.currentMonth;

11 Khai báo mắng tham số uữ giá trị

Trang 19

Chương 7: Phần đóng số kế toán 287 object [] parameterValue = null; try ` { +1 Khai báo uà khởi tạo đối tượng ASDataProuider ˆ ASDataProvider dataProvider = new ASDataProviđer () ; 11 Khai bdo thuée tính cho đối tượng ASDataProuider dataProvider.CommandText = "udsCloseMonth"; parameterName = new string[4] { “@CurrentMonth", "@PreviousMonth", “@StartDate", "@EndDate" }; parameterValue = new object [4] { ASParameters.currentMonth, previousMonth, startDate, endDate }; dataProvider.CommandType = CommandType StoredProcedure; /} Khai báo gọi phương thúc ExecuteNonQuery dataProvider ExecuteNonQuery ( parameterName, parameterValue) ; if (dataProvider.ErrorMessage != "") { closeMonth = dataProvider.ErrorMessage; } } catch (Exception ex) { ASUTHelper ShowMessageBox ( "Close Month", ex); } return closeMonth; } Trong đó, thủ tục nội tại có tên udsCloseMonth khai báo với cấu trúc như ví dụ 7-4 Thủ tục nội tại ud

CREATE PROC udsCloseMonth

/J Khai báo tham số

9CurrentMonEh CHAR (8),

@PreviousMonth CHAR(8) , @DeleteData BIT

AS

£1 Thực thủ thủ tục nội tại udsCloseMonthForGL exec udsCloseMonthForGL @CurrentMonth,

@PreviousMonth, @DeleteData

Trang 20

288 Chuong 7: Phan đóng số kế toán exec udsCloseMonthForAR @CurrentMonCch, @PreviousMonth, @DeleteData

£† Thực thi thi tục nội tai udsCloseMonthForAP exec udsCloseMonthForAP @CurrentMonth,

@PreviousMonth, @DeleteData

// Thue thi thủ tục nột tai udsCloseMonthForIC exec udsCloseMonthForIc @CurrentMonth,

@PreviousMonth, @DeleteData

GO

Trong đó, thủ tục nội tại dùng để chuyển số dư tổn quỹ cuối kỳ là

udsCloseMonthForGL, có cấu trúc như ví dụ 7-5

CREATE PROC udsCloseMonthForGL

17 Khai báo tham số

@CurrentMonth CHAR (8),

@PreviousMonth CHAR (8),

@DeleteData BIT

AS

//Xéa méu tin dang ton tại

DELETE FROM CloseMonthCashBalances

WHERE CloseMonth = @CurrentMonth;

DELETE FROM CloseMonthCashBalanceDetails WHERE CloseMonth = @CurrentMonth;

1/Tén quy déu ky

DECLARE @BeginAmount DECIMAL

SELECT @BeginAmount = EndingAmount

FROM CloseMonthCashBalances

WHERE CloseMonth = @PreviousMonth;

//Thém mau tin vao béng CloseMonthCashBalances INSERT INTO CloseMonthCashBalances

{CloseMonth, BeginingAmount , ReceiptAmount,

PaymentAmount, EndingAmount)

SELECT TOP 1 @CurrentMonth, @BeginAmount,

ReceiptAmount, PaymentAmount, BalanceAmount

FROM MonthlyCashBalances

ORDER BY BalancelId DESC;

/{Thém mGu tin véo béng CloseMonthCash BalanceDetails INSERT INTO CloseMonthCashBalanceDetails

(Balanceld, CloseMonth, Issueld,

IssueDate, PartnerId, ReceiptAmount, PaymentAmount, BalanceAmount,

ĐescriptionTnVietnamese}

Trang 21

Chương 7: Phần đóng số kế toán 289 TssuelId, IssueDate, PartnerId, ReceiptAmount, PaymentAmount, BalanceAmount, DescriptionInVietnamese FROM MonthlyCashBalances 11Xóa mẫu tin đang tôn tại IF @DeleteData=1 BEGIN

DELETE FROM Receipts;

DELETE FROM ReceiptBatchs;

DELETE FROM Payments;

DELETE FROM Payment Batchs; END

Go

Ngoài ra, bạn khai báo thủ tục nội tại có tên udsCloseMonthForAR,

dùng để chuyển số dư công nợ cuối kỳ phải thu của khách hàng với cấu trúc

như ví dụ 7-6

CREATE PROC udsCloseMonthForAR

11 Khai bdo tham số

@CurrentMonth CHAR (8), @PreviousMonth CHAR (8),

@DeleteData BIT AS

/1/X6éa mau tin đang tôn tại

DELETE FROM CloseMonthAccountReceivable WHERE CloseMonth = @CurrentMonth;

DELETE FROM CloseMonthAccountReceivableDetails

WHERE CloseMonth = @CurrentMonth;

/{Thém mau tin vao bang CloseMonthAccountReceivable

INSERT INTO CloseMonthAccount Receivable (CloseMonth,

BeginAmount, SalesAmount, ReceivedAmount, EndAmount )

SELECT @CurrentMonth, SUM(BeginAmount),

SUM(SalesAmount),

SUM(ReceivedAmount) , SUM(EndAmount ) FROM MonthlyAccountReceivable

/{Thém mau tin vao bang CloseMonthAccountReceivableDetails INSERT INTO CloseMonthAccountReceivableDetails

(CustomerTđ, CloseMonth, BeginAmount, SalesAmount,

ReceivedAmount ) EndAmount }

SELECT CustomerId, @CurrentMonth, BeginAmount, SalesAmount, ReceivedAmount , EndAmount

FROM MonthlyAccountReceivable {/Xéa mdu tin dang tén tai

Trang 22

290 Chương 7: Phần đóng sổ kế toán

BEGIN

DELETE FROM Receipts;

DELETE FROM SalesInvoiceBatchs;

DELETE FROM Salesinvoices;

DELETE FROM SalesinvoiceDetails;

END GO

Tương tự như vậy, bạn khai báo thủ tục nội tại có tên

udsCloseMonthForAP dùng để chuyển số dư công nợ cuối kỳ phải trả cho

nhà cung cấp với cấu trúc như ví dụ 7-7 Ví dụ

CREATE PROC udsCloseMonthForAP

J1 Khai báo tham số

@CurrentMonth CHAR (8),

@PreviousMonth CHAR(8) ,

@DeleteData BIT

AS

/ {Xba mau tin dang tén tai

DELETE FROM CloseMonthAccount Payable

WHERE CloseMonth = @CurrentMonth;

DELETE FROM CloseMonthAccount PayakleDetails

WHERE CloseMonth = @CurrentMonth;

t1 Thêm nấu tin vao bdng CloseMonthAccountPayable

INSERT INTO CloseMonthAccount Payable (CloseMonth, BeginAmount, PurchaseAmount, PaidAmount, EndAmount)

SELECT @CurrentMonth, SUM(BeginAmount), SUM(PurchaseAmount),

SUM(PaidAmount), SUM(EndAmount ) FROM MonthlyAccount Payable

//Thém mu tin vao bang CloseMonthAccountPayableDetails INSERT INTO CloseMonthAccount PayableDetails

(SupplierId, CloseMonth, BeginAmount, PurchaseAmount, PaidAmount , EndAmount }

SELECT Supplierld, @CurrentMonth, BeginAmount, PurchaseAmount, PaidAmount, EndAmount

FROM MonthlyAccount Payable

41 Xóa mầu tin đang tôn tại

TF @DeleteData = 1 BEGIN

DELETE FROM Payments;

DELETE FROM PurchaseInvoiceBatchs; DELETE FROM PurchaseTnvoices;

DELETE FROM PurchaseInvoiceDetails;

Trang 23

Chương 7: Phần đóng số kế toán 291

Sau cùng, bạn khai báo thủ tục nội tại có tên udsCloseMonthForIC

dùng để chuyển số dư cuối kỳ tổn kho với cấu trúc như ví dụ 7-8

CREATE PROC udsCloseMonthForic

4 Khai báo tham số

@CurrentMonth CHAR (8),

@PreviousMonth CHAR(8) , @DeleteData BIT

AS

(1! Xóa mẩu tin đang tôn tại

DELETE FROM CloseMonthTnvenEoryControl WHERE CloseMonth = @CurrentMonth;

DELETE FROM CloseMonthInventoryControlDetails

WHERE CloseMonth = @CurrentMonth;

1{Thém mau tin vao bang CloseMonthInventoryControl

INSERT INTO CloseMonthInventoryControl (CloseMonth)

VALUES (@CurrentMonth) ;

{1Thêm mấu tin vao bang CloseMonthInventoryControlDetails

INSERT INTO CloseMonthInventoryControlDetails

(Productid, StockId, CloseMonth, BeginQuantity, ImportQuantity, ExportQuantity, EndQuantity}

SELECT Productid, Stockid, @CurrentMonth, BeginQuantity, ImportQuantity, ExportQuantity, EndQuantity FROM MonthlyInventoryControl; /1Xéa mdu tin đang tôn tại IF @DeleteData = 1 BEGIN

DELETE FROM ImportBatchs; DELETE FROM Imports;

DELETE FROM ImportDetails; DELETE FROM Export Batchs; DELETE FROM Exports;

DELETE FROM ExportDetails; END

Go

Sau đó, khai bdo goi phuong thie CloseMonth trong bién cé Click cha

nut btnCloseMonth nhy vi du 7-9

private void btnCloseMonth_Click (object sender,

Trang 24

° 292 Chương 7: Phan déng sé ké toan

if (MessageBox Show("You are closing month, once you

click OK, all data will be transferred to history

database.", ASParameters.welcomeMessage,

MessageBoxButtons OKCancel, MessageBoxIcon.Warning,

MessageBoxDefaultButton Button2) == DialogResult.OK)

{

(1 Khai báo gọi phương thức CloseMonth

string resulE z CloseMonEh(); if(result == "") MessageBox Show ( "Close Month has completed."); else MessageBox Show ( "Close Month has not completed \n" + result);

Chú ý: Trong mỗi thủ tục nội tại thành viên, bạn khai báo để xóa dữ

liệu của các bảng tương ứng từng trường hợp tham số @DeleteData có giá trị lal

Néu dang chay chuong trinh dé kiém tra, ban truyén gid tri cho tham số này là 0 Tuy nhiên, khi chạy chương trình vào mục đích ứng dụng, bạn truyển giá trị cho tham số này là 1, sau khi đóng sổ thành công, đữ liệu dùng để lưu trữ nghiệp vụ phát sinh hằng ngày sẽ bị xóa

Để lưu trữ dữ liệu này sang cơ sở dữ liệu khác dùng cho mục đích tham

khảo, bạn có thể tạo cơ sở đữ liệu có tên ABC chẳng hạn, rồi khai báo phát

biéu INSERT thay vi DELETE

Tuy nhiên, để bảo đảm dữ liệu không bị mất khi thực hiện chức năng

đóng số, bạn cần khai báo transaction trong các thủ tục thành viên

udsCloseMonthForGL, udsCloseMonthForAR, udsCloseMonthForAP va

udsCloseMonthForlIC

Chẳng hạn, bạn có thể cài đặt transaction trong thủ tục nội tại

udsCloseMonthEorIC như ví dụ 7-10

i dat transaction trong udsCloseMouthF CREATE PROC udsCloseMonthForIc

+Ị Khai báo tham số

@CurrentMonth CHAR (8) ,

Trang 25

Chương 7: Phần đóng sổ kế toán 293 AS 7¡Bắt đầu transaction BEGIN TRAN 1C

tJ Xóa mẩu tin đang tôn tại

DELETE FROM CloseMonthInventoryControl

WHERE CloseMonth = @CurrentMonth;

DELETE FROM CloseMonthIinventoryControlDetails WHERE CloseMonth = @CurrentMonth;

//Thém mau tin vdo béng CloseMonthinventoryControl

INSERT INTO CloseMonthInventoryControl (CloseMonth}

VALUES (@CurrentMonth) ;

-11Thém mẩu tin vao bang CloseMonthInventoryControlDetails INSERT INTO CloseMonthInventoryControlDetails

(Productid, StockId, CloseMonth, BeginQuantity, ImportQuantity, ExportQuantity, EndQuantity)

SELECT Productid, StockId, @CurrentMonth, BeginQuantity, ImportQuantity, ExportQuantity, EndQuantity FROM MonthlyInventoryControl; //Xéa méu tin đang tôn tại IF 8DeleteData = 1 BEGIN

DELETE FROM ImportBatchs; DELETE FROM Imports;

DELETE FROM ImportDetails; DELETE FROM Export Batchs; DELETE FROM Exports;

DELETE FROM Export Details; END TF ERROR_ NUMBER () >0 //Hily transaction ROLLBACK TRAN IC / [Két thúc transaction COMMIT TRAN 1C GO

Ngoài ra, bạn cũng có thể cài đặt try catch cùng với transaction dé kiểm soát lỗi trong thủ tục nội tại thành viên Chẳng hạn, bạn khai báo

try catch trong thủ tục nội t:

tch va transaction;

CREATE PROC udsCloseMonthForIC // Khai bdo tham sé

Trang 26

BR? 204 Chương 77: Phần đóng sổ kế toán @breviousMonth CHAR(8) , apeleteData BIT AS (GIN TRAN IC 7/Bát đầu khối TRY BESIN TRY

+JXóa mẩu tín đang tân tại

DELETE FROM CloseMonthInventoryControl

WHERE CloseMonth = @CurrentMonth;

DELETE FROM CloseMonthInventoryControlDetails WHEKE CloseMonth = @CurrentMonth;

//Théem mdu tin vao bang CloseMonthInventoryControl

INSERT INTO CloseMonthinventoryControl (CloseMonth)

VALUES (@CurrentMonth) ;

!ƒThêm mẫu tin uào bảng CloseMonthinuentoryControlDetails

INSERT INTO CloseMonthInventoryControlDetails

(ProductId, StockId, CloseMonth, BeginQuantity, ImportQuantity, ExportQuantity, EndQuantity)

SELECT ProductId, StockId, @CurrentMonth, BeginQuantity, ImportQuantity, ExportQuantity, EndQuantity FROM MonthiyInventoryControl; / {Xéa méu tin dang tén tại IF @DeleteData = 1 BEGIN

DELETE FROM Import Batchs; DELETE FROM Imports;

DELETE FROM TmportDetails; DELETE FROM Export Ratchs; DELETE FROM Exports;

Trang 27

Chương 7: Phần đóng sổ kế toán 295

2 THAY ĐỔI GIÁ TRỊ DÙNG CHUNG

Bạn có thể cho phép người sử dụng thay đổi giá trị cho các biến công

khai tĩnh được khai báo trong lớp ASParameters bằng cách lưu chúng trong bảng Parameters

Tương tự như các chức năng đã trình bày trong phần trước, để tìm

hiểu chức năng này, bạn có thể thiết kế form và khai báo thủ tục nội tại liên

quan

Chú ý: Để tìm hiểu chức năng này, bạn bắt đầu trình đơn Close

Month | Parameters để kích hoạt form có tên frmParameters, thủ tục lưu trong tập tin Paremeters.sql

2.1 Giao diện

Bạn có thể thiết kế frmParameters bao gồm các điều khiển với giao

diện tương tự như hình 7-6 Parameters 'WelcomeMessage CưnentMonth DateFormat DoubleNumberFormat ‘IntegerNumberFormat AutoCreateld }- $howToolTipOnDataAyd Ï” Hình 7-6: Giao diện frmParameters 2.2 Khai báo

Khi frmParameters nap lén man hình, bạn điển giá trị trong các biến công khai tĩnh trong lớp ASParameters vào điều khiển bằng cách khai báo

trong biến cố Load như ví dụ 7-12

Trang 28

BA? 296 Chương 7: Phần đóng sổ kế toán

object sender, EventArgs e) { txtCurrentMonth Text = ASParameters.currentMonth; txtWelcomeMessage.Text = ASParameters welcomeMessage; txtDateFormat Text = ASParameters.dateFormat; txtDoubleNumberFormat Text = ASParameters.doubleNumberFormat ; - txtIntegerNumberFormat Text = ASParameters integerNumberFormat; chkAutoCreateId.Checked = ASParameters.autoCreateld; chkShowToolTipOnDataGrid.Checked = ASParameters.showToolTipOnDataGrid;

Chẳng hạn, khi thực thi chương trình, nếu người sử dụng chọn vào

trình đơn Close Month | Parameters thì frmParameters trình bày như hình 7-7

Hình 7-7: Cập nhật giá trị cho biến công khai tĩnh

Khi người sử dụng thay đổi và cập nhật, bạn khai báo đoạn chương

Trang 29

Chương 7: Phần đóng số kế toán 397

private void btnUpdate_Click( object sender, EventArgs e)

{

try {

#1 Khai báo mảng tham số

string[] parameterName = new string[ 71 { "@CurrentMonth", "@WelcomeMessage", AutoCreateId", "@ShowToolTipOnDataGrid", "@DateFormat", “@DoubleNumberFormat", "@IntegerNumberFormat" };

i} Khai báo mảng giỏ trị của tham số

object [] parameterValue = new object [7] { txtCurrentMonth.Text, txtWelcomeMessage.Text, chkAutoCreateld.Checked, chkShowToolTipOnDataGrid.Checked, txtDateFormat Text, txtDoubleNumberFormat.Text, txtIntegerNumberFormat.Text }; 1} Khai bdo vd khdi tao déi tuong ASDataProvider ASDataProvider asDataProvider = new ASDataProvider(); 17 Khai báo thuộc tính cho đối tượng ASDataProuider asDataProvider.CommandText = "udsParameters;2"; asDataProvider CommandType = CommandType StoredProcedure; £1 Khai báo gọi phương thúc ExecuteNonQuery asDataProvider ExecuteNonQuery ( parameterName, parameterValue) ; ?¡ Khai báo gọi phương thức PutParameters PutParameters (} ; Joven (Exception ex) ‘ ASUIHelper ShowMessageBox ( "btnUpdate_Click" , ex.Message}; ) }

Trong đó, phương thức PutParameters dùng để cập nhật giá trị vừa

thay đổi trên các điểu khiển vào biến công khai tĩnh trong lớp

Trang 30

Chương 7: Phần đóng sổ kế toán Phương thức PutParamete void Put Parameters () { ASParameters.currentMonth = txtCurrentMonth, Text; ASParameters.welcomeMessage = txtWelcomeMessage.Text; ASParameters.dateFormat = txtDateFormat Text; ASParameters.doubleNumberFormat = txtDoubleNumberFormat Text; ASParameters integerNumberFormat = txtIntegerNumberFormat Text; ASParameters.autoCreateld = chkAutoCreateId Checked; ASParameters showToolTipOnDataGrid = chkShowToolTipOnDataGrid.Checked;

Ngoài ra, để cập nhật giá trị thay déi vao bang Parameters, ban khai

báo thủ tục nội tại có tên udsParameters;2 như ví dụ 7-15

tai udsParameters

CREATE PROC udsParameters;2 !J Khai báo tham số @CurrentMonth char(8}, @WelcomeMessage nvarchar (50), 6AutoCreate1d bit, @ShowToolTipOnDataGrid bit, @DateFormat varchar (15), @DoubleNumberFormat varchar (15 @IntegerNumberFormat varchar (1 AS

/1 Méu tin dé tén tai thi thue thị phát biéu UPDATE

IF EXISTS (SELECT * FROM Parameters) UPDATE Parameters SET CurrentMonth = @CurrentMonth, WelcomeMessage = @WelcomeMessage, AutoCreateld = @AutoCreateld, ShowToolTipOnDataGrid = @ShowToolTipOnDataGrid, DateFormat = @DateFormat, DoubleNumberFormat = @DoubleNumberFormat, IntegerNumberFormat = @IntegerNumberFormat ELSE }„ 5)

f1 Thêm mới mẩu tin

INSERT INTO Parameters (CurrentMonth,

Trang 31

Chương 7: Phần đóng số kế toán 299 ShowTool'iponDataörid, DatreFormat, DoubleNumberFormaE, TnregerNumberFormat) VALUES (@CurrentMonth, @WelcomeMessage, @AutoCreateld, @ShowToolTipOnDataGrid, @DateFormat, @DoubleNumberFormat, @IntegerNumber Format)

Luu %: Dé doc gid tri ty bang Parameters va điển vào biến công khai

tĩnh trong lớp ASParameters, bạn khai báo phương thức GetParameters

với cấu trúc như ví dụ 7-16

í dụ Phương (hức Get

internal static void Get Parameters ()

{

11 Khai báo uà khởi tạo đối tuong ASDataProvider

ASDataProvider asDataProvider = new ASDataProvider(); 11 Khai báo thuộc tính cho đối tượng ASDataProuider asDataProvider.CommandText = "udsParameters"; asDataProvider CommandType = CommandType StoredProcedure;

11 Khai bảo gọi phương thúc GetDotafiou

DataRow dataRow = asDataProvider.GetDataRow(); if (dataRow != null} { 11 Khai bảo gắn giá trị uào biến công khai tĩnh ASParameters.currentMonth = Convert ToString (dataRow(["CurrentMonth"]); ASParameters.welcomeMessage = Convert ToString(dataRow["WelcomeMessage"])}; ASParameters.dateFormat = Convert ToString(dataRow["DateFormat"]}; ASParameters.doubleNumberFormat = Convert.ToString (dataRow[ *“DoubleNumberFormat"]); ASParameters integerNumberFormat = Convert.ToString (dataRow[ "tntegerNumberFormat"]); ASParameters.autoCreateld = Convert ToBoolean (dataRow["AutoCreateId"]); ASParameters showPoolTipOnDataGrid = Convert ToBoolean (dataRow[ "ShowToolTipOnDataGrid"}); iF

Sau đó khai báo gọi phương thức GetParameters trong biến cố CHck

Trang 32

Chương 7: Phản đóng sổ kế toán 3 CẤU HÌNH ỨNG DỤN!

Phần tham số cấu hình ứng đụng như tên máy, tên cơ sở dữ liệu, thời

gian kết nối, cổng kết nối cơ sở dữ liệu và vị trí tập tin Report được khai báo

trong tap tin App.config

Trong ứng dụng, chúng ta khai báo hai phương thức Overload có tên GetConnectionString trong lớp ASConfig dé doc giá trị từ tập tin

App.config

Ngoài ra, ban cũng khai báo phương thức GetReportPath để đọc giá trị ứng với đường dẫn tập tin Report (.rdÌc trình bày trong phần kế tiếp)

Bạn có thể thiết kế form và sử dụng đối tugng DOM (Document

Object Model) để cập nhật giá trị như cách làm viée véi tap tin Xml

Tuy nhiên, người sử dụng cũng có thể thay đổi các giá trị này bằng

cách sử dụng tiện ích Notepad thay vì sử dụng form trong ứng dụng

4 KẾT LUẬN

Thông qua phần này, bạn đã tìm hiểu cách đóng sổ để chuyển các số dư cuối kỳ của tháng hiện hành thành số dư đâu kỳ cho tháng kế tiếp

Bất kỳ ứng dựng nào cũng sử dụng các giá trị mặc định tương tự như

biến công khai tĩnh trong lớp ASParameters, bạn nên thiết kế form cho phép người sử dụng có thể thay đổi các giá trị này và lưu chúng trong cơ sở

Trang 33

Chương 8: Phan bdo cdo (Report) 301 Chuong 8: PHAN BAO CAO (REPORT) Tóm tắt chương 8:

Báo cáo là thông tin đâu ra của ứng dụng, nó cho phép người

sử dụng kết xuất dữ liệu theo yêu câu quản lý Do cùng sử dụng

chung chức năng Print trong mỗi form của từng chức năng trong

ứng dụng, bạn có thể kích hoạt form có tên rmReports cùng với

việc truyền một số tham số như đã trình bày trong các phần trước Bằng cách sử dụng trình điểu khiển ReportViewer va

Microsoft Report thay vì Crystal Report, bạn có thể trình bày báo

cáo với nhiều dạng khác nhau Các vấn đề chính sẽ được đề cập: Thiết kế Report w Giao diện v Khai báo 1 THIẾT KẾ REPORT

Mỗi bảng dữ liệu đều cho phép người sử dụng in báo theo ba loại, loại

thứ nhất là mỗi trang ứng với một mẩu tin (Single Form), loại thứ hai là mỗi trang trình bày nhiễu mẩu tin (Sheet), loại thứ ba là báo cáo bao gồm

loại một và hai (Master/Details)

Chẳng hạn, khi bạn im báo cáo cho trường hợp hóa đơn bán hàng, mua hàng, nhập kho và xuất kho thì báo cáo dạng Single form sẽ bao gồm danh sách mẩu tin có quan hệ N

Ví dụ, khi người sử dụng in báo cáo hóa đơn bán hàng, đanh sách hóa

Trang 34

302 Chương 8: Phan bdo cdo (Report)

Với ba loại như trên, chúng ta sẽ thiết kế Report đại diện cho mỗi loại,

các Report còn lại bạn có thể tham khảo chúng trong ứng dụng đính kèm

Chu §: Do hau hết dữ liệu đều được xuất ra bằng việc thực thi thủ tục

nội tại, khi thiết kế Report chúng ta cũng dựa trên các cột đữ liệu mà thủ tục

nội tại kết xuất

1.1 Tạo kết nối cơ sở dữ liệu

Dé tao Report, ban chon trinh don Project | Add New Item | Report

rồi đặt tên như hình 8-1 Templates: Visual Studio installed templates : Class 244 Interface

[2] Windows Form #5082 Procedure Class For Version 8

{9 User Control ACustom Control

‘@iinherited User Control BA Web Custom Control

| J SQL Database (šj)DataSet RJ XML Schema „2l! XSLT Fie Aj Style Sheet 3) Text File

B cursor File Aga

gi Icon File i] Windows Service

8) JScript File SB] VBScript File

«Assembly Information File |) Application Configuration File

1} Settings File [SIMO Parent

“GB Debugger Visualizer 2 Class Diagram i

[fan empty Report file For creating a report using Microsoft reporting technology [Report dle ee a eee | Hinh 8-1: Tao Report Sau khi đặt tên Report, nhấn nút Add thì Report được thêm vào dự án,

cửa sổ tạo Data Sources xuất hiện như hình 8-2

Bằng cách chọn vào lién két Add New Data Source, bạn có thể tìm

Trang 35

® Chương 8: Phần báo cáo (Report) 303 [Ml Data Sources ‹ Add New Data Source 3 Choose a Data Source Type ‘Where will the application get data from? = Web Service Object ee dataset,

Hinh 8-3: Logi kết nối cơ sở dữ liệu

Chú ý: Bạn có thể chọn loại kết nối cơ sở dữ liệu là Database hay

Web Service Tuy nhiên, trong trường hợp này chúng ta chỉ sử dụng loại kết

nối cơ sở dữ liệu là Database

Sau khi nhấn nút Next, nếu trước đó đã tạo chuỗi kết nối cơ sở dữ liệu và lưu trong tập tin App.confñig thì chuỗi kết nối đó sẽ hiện ra như hình 8-4

Trong trường hợp bạn muốn tạo mới chuỗi kết nối thì chọn vào nút

New Connection, khi đó cửa sổ khai báo các thuộc tính kết nối cơ sở dữ liệu

Trang 36

PA? 304 Chương 8: Phần báo cáo (Report)

Hình 8-4: Sử dụng chuỗi kết nối cơ sở dữ liệu đã có

Trang 37

Chương 8: Phần báo cáo (Report) 305

Chú ý: Để kết nối cơ sở dữ liệu SQL Server 2005, bạn có thể sử dụng

một trong hai đặc quyền ứng với hai tùy chọn Use Windows Authentication hay SQL Server Authentication

Chọn Next, bạn có thể tìm thấy danh sách một số loại đối tượng cơ sở

dữ liệu?) Tables, View, Stored Procedures hay Functions xuất hiện như hình 8-6 (Ậ , =eseeensseenee a “itch databace bjt do you want your cate? ae) 7 Oy Views © Oy Stored mocedres © Pe rretons

Hình 8-6: Chọn loại đối tượng cơ sở đữ liệu

Bằng cách chọn 3 loại đối tượng cơ sở dữ liệu và đặt tên Data Source

Trang 38

BX” 306 Chương 8: Phần báo cáo (Report)

ĐM 306 Chương 8: Phần báo cáo (Report)

Ngoài ra, bạn có thể tìm danh sách đối tượng cơ sở dữ liệu xuất hiện

trong cửa sổ Data a Sources n nhu “hình 8-8 th HEE eee ee eel ‘ Ễ CloseMorthAccountPayableDetals hAccountReceivable | FADES OOOO Ow | 4 & LE Cosehorthcataorcebetats tPA Clann ManthCach® alanene Hinh 8-8: Danh sdch déi tượng cơ sở dữ liệu 1.9 Thiết kế Report Để thiết kế Report, bạn sử dụng các điểu khiển trên cửa sổ ToolBox như hình 8-9 Toolbow

Hinh 8-9: Cia sé ToolBox

Để trình bày dữ liệu trên Report, bạn có thể chọn các cột từ cửa sổ Data

Trang 39

Chương 8: Phần báo cáo (Report) 307

1.2.1 Report dang Single Form-

Chẳng hạn, bạn thiết kế Report có tên Customer theo loai Single Form,

bằng cách chọn các cột dữ liệu từ bảng có tên Customers như hình 8-10 Geter } 2) Currencies err ‘CustomerId CompanyNameinvietnamese ‘CompanyNamelnSecondlanguage ContactName ContactTitle Address

Hinh 8-10: Cét di liéu trong thủ tục nội tại udsCustomers

Chọn từng cột rồi kéo và thả vào vùng Report với giao diện như hình 8-11

Customer

Customer Id =First(Fields!Customerld Value)

Customer Name =First(FieldsICompanyNameinVietnamese Value)

Contact Name =First(Fieids!ContactName Value)

Contact Title =First(Fields!ContactTitle Value) Address =First(Fields!Address Value) Tel =First(Fields!Telephone Value)

Fax =First(Fields!F axNumber Value) Email Address =First(Fields!EmailAddress Value)

Max Debit Amt =Sum(FieldsIMaxDebitAmount Value)

Hình 8-11: Thiết kế Report trình bày mẩu tin của từng khách hàng Chú ý: Bạn có thể kiểm tra danh sách, thêm hay loại bỏ đối tượng cơ

sở dữ liệu trong Report bằng cách chọn vào trình đơn Report | Data

Trang 40

308 Chương 8: Phan bdo cdo (Report) 2Ø Report Data Sources

Choose data sources to use in the report,

Broject data sources: ˆ i

fAccountSystemDataSet_AccountNumbers >] _

Report deta sources: zi

AccountSystemDataSet_Customers

Hình 8-12: Đối tượng cơ sở đữ liệu trong Report

Khi thực thi chương trình, nếu người sử dụng đang xem thông tin chỉ

tiết của khách hàng và nhấn nút Print thì kết quả trình bày như hình 8-13

5H + Customer Customer Id

Cuetomer Name _ Công ty Trách Nhiệm Hữu Han IBN Vietnam

Contact Name Mr Hall Contact Title Director

Ngày đăng: 01/03/2014, 00:00

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN