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

SQL server 2005 – Xây dựng ứng dụng quản lý kế toán bằng C# 2005 part 6 docx

40 233 2
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 40
Dung lượng 14,29 MB

Nội dung

Trang 1

202 Chương ð: Phần kế tốn cơng nợ phải trả

Chú $: Để tìm hiểu chức năng này, bạn bắt đầu trinh don Account Payable | Purchase Invoices | Purchase Invoice Batchs để kích hoạt form

có tên frmPurchaselnvoiceBatchs, các thủ tục lưu trong tap tin PurchaseInvoiceBatchProcedures.sql

2.1 Liét ké và tìm kiếm mẩu tin

Đối với trường hợp liệt kê và tìm kiếm lô hóa đơn mua hàng, bạn gọi thủ tục nội tại có tên udsPurchaselnvoiceBatchs có cấu trúc như ví dụ 5-7 bằng phương thức FillPurehaselnvoiceBatchsToGridView

CREATE PROC uđsPurchaseTnvoiceBatchs #1 Khai báo tham số @BatchStatus tinyint, @Keyword nvarchar (50), @StartDate smalldatetime, @EndDate smalidatetime, @UserName varchar (50) AS +] Liệt bề miẩu tin if (@Keywords'')

select BatchStatus AS Approval,

BatchStatus AS Status, InvoiceBatchId,

InvoiceBatchDate,

DescriptionInVietnamese,

CreatedBy, CreatedDate, ModifiedBy, ModifiedDate

from PurchaseInvoiceBatchs

where BatchStatus = case @BatchStatus

when 2 then BatchStatus else @BatchStatus end

and InvoiceRatchDate>= @StartDate and InvoiceBatchDate<=@EndDate

and CreatedBy = case @UserName when '' then CreatedBy else @UserName end

order by InvoiceBatchDate DESC else

£] Tìm kiếm mầu tin dựa uào từ khóa

select BatchStatus AS Approval,

BatchStatus AS Status, InvoiceBatchId,

InvoiceBatchDate,

DescriptionInVietnamese,

CreatedBy, CreatedDate, ModifiedBy, ModifiedDate

from PurchaseInvoiceBatchs

where BatchStatus = case @BatchStatus

when 2 then BatchStatus else @BatchStatus end

Trang 2

Chuong 5; Phan ké toan céng ng phai tra 203

and CreatedBy = case @UserName when '' then CreatedBy

else @UserName end

and CONTAINS (*, @Keyword)

order by InvoiceBatchDate DESC

co

2.2 Thêm mới và cập nhật mẩu tin

Để thêm mới và cập nhật lô hóa đơn mua hàng, bạn khai báo gọi thủ

tục nội tại có tên udsPurchaselnvoiceBatchs;4 có cấu trúc như ví dụ 5-8 trong phương thức SavePurchaselInvoiceBatch

haseInvoiceBatchs;4

CREATE PROC udsPurchaseInvoiceBatchs;4 11 Khai báo tham số @Flag BIT, 2 @invoiceBatchid VARCHAR (10), @invoiceBatchDate SMALLDATETIME, @bescriptionInVietnamese NVARCHAR (150), @BatchStatus BIT AS {/ Truong hợp thâm mới mẫu tin IF @Flag =1 INSERT INTO PurchaseInvoiceBatchs ( InvoiceBatchld, InvoiceBatchDate, DescriptioninVietnamese, BatchStatus, CreatedBy, CreatedDate} VALUES {(@InvoiceBatchId, @InvoiceBatchDate, @DescriptionInVietnamese, @BatchStatus, CURRENT_USER, GETDATE(}) ELSE 11 Trường hợp cập nhật mẩu tin UPDATE PurchaseInvoiceBatchs SET InvoiceBatchDate = @Invoi DescriptionInVietnamese = @DescriptionInVietnamese, BatchStatus = @BatchStatus, Modi fiedBy = CURRENT_USER, ModifiedDate = getdate() WHERE InvoiceBatchid=@InvoiceBatchid GO

Đối với trường hợp chỉnh sửa mẩu tin, bạn khai báo gọi thủ tục nội tại có tên udsPurchaseInvoiceBatchs;2 trong phương thức EditPurchaselnvoiceBatch

Trang 3

Chương 5: Phần kế tốn cơng nợ phải trả CREATE PROC udsPurchaseInvoiceBatchs;2 @InvoiceBatchId varchar (10) AS

select Convert (char(11), InvoiceBatchDate, 106)

AS DateOfInvoiceBatch, * from PurchaseInvoiceBatchs Where InvoiceBatchId = @InvoiceBatchId

GO

2.3 Xóa mẩu tin

Tương tự, để xóa mẩu tin trong bảng PurchaselnvoiceBatchs, bạn có

thể gọi thủ tục nội tại có tên udsPurchaselnvoiceBatchs;3 trong phương thức DeletePurchaseInvoiceBatch như ví dụ 5-10 Ví dụ 5-10: Thủ tục nội tai udsPurchaseInvoiceBatchs;3 CREATE PROC udsPurchaseTnvoiceBatchs ; 3 @InvoiceBatchId varchar (10) AS

11 Xéa mau tin

delete from PurchaseInvoiceBatchs

Where InvoiceBatchId = @InvoiceBatchId

GO

Ngoài ra, tương tự như bảng SalesInvoieeBatchs, bạn cần khai báo Trigger trong bảng PurchaselnvoiceBatchs có tên trgSalesInvoiceBatch với cấu trúc như ví dụ 4-17 để cập nhật trạng thái hóa đơn mua hàng khi người sử dụng duyệt lồ hóa đơn mua hàng

Ví dụ 5-11: Cấu trúc Trig gPurchaseÍfnvoieeBatchi

CREATE TRIGGER trgPurchaseInvoiceBatch

ON PurchaseInvoiceBatchs

FOR UPDATE AS

+7 Khai bdo biển

DECLARE @BatchStatus bit

DECLARE @InvoiceBatchId VARCHAR (10)

1Ị Rhai báo lấy gid tri tu bang INSERTED

Trang 4

Chương 5ð: Phần kế toán công nợ phải trả 205 UPDATE PurchaseTnvoices SET InvoiceStatus = 1 WHERE InvoiceBatchId = @InvoiceBatchId GO Lưu ý: Những phương thức như DeletePurchaselInvoiceBatch, SavePurchaselnvoice, FillPurchaseInvoiceBatchsToGridView va EditPurchaseInvoiceBatch cé cu tric tuong tu cdc phuong thiic cling muc

đích đã được trình bày trong phần trước

3 HÓA ĐƠN MUA HÀNG

Trong khi chức năng quản lý hóa đơn bán hàng mà doanh nghiệp ghỉ nợ cho khách hàng thì chức năng quản lý hóa đơn mua hàng là nghiệp vụ mà doanh nghiệp ghi nợ phải trả cho nhà cung cấp khi mua sản phẩm hay dịch vụ của họ

Tương tự như chức năng quản lý hóa đơn bán hàng, giao diện chính

của frmPurchaselnvoices bao gồm hai phần Phần bên trái là danh sách

Trang 5

206 Chương 5: Phần kế tốn cơng nợ phải trả

hi làm việc với chức năng quản lý hóa đơn bán hàng cho khách hàng, bạn quan tâm đến các bảng dữ liệu liên quan như: SalesInvoiceTypes,

SalesInvoiceBatchs, SalesInvoices, SalesInvoiceDetails va Customers còn

chức năng quản lý hóa đơn mua hàng từ nhà cưng cấp thì liên quan đến các bảng tương ứng cùng mục dich như: PurchaseinvoiceTypes,

PurchaseInvoiceBatchs, Purchaselnvoices, PurchaseInvoiceDetails va

Suppliers

Để trình bày danh sách hóa đơn mua hàng, bạn khai báo thủ tục nội tại có tên udsPurchaselnvoices;2 có cấu trúc như vi du 5-12 va goi trong phuong thie FillPurchaseInvoicesToGridView

wdsPurchaseInvo

CREATE PROC udsPurchaselInvoices;2

1ƒ Khai báo tham số @SupplierId char (5}, §Batch1đ VARCHAR (10), @InvoiceStatus tinyint, @keyword nvarchar(50}, @StartDate smalldatetime, @EndDate smalldatetime, @UserName varchar (50) AS /} Ligt k@ mdu tin if (@Keyword='')

select Approval, Status, Invoiceld,

InvoiceBatchId, InvoiceDate, SupplierId, €ompanyNameTnVietnamese, Currency14,

ExchangeRate, Amount, DescriptionInVietnamese from

vwPurchaseInvoices

where SupplierId = case @SupplieriId when '' then

SupplierId else @SupplierId end

and InvciceBatchId = case @BatchId when '' then InvoiceBatchId else @BatchId end

and Status = case @InvoiceStatus when 2 then Status else @InvoiceStatus end

and InvoiceDate>= @StartDate and

TnvoiceDate<=@EndDate

and CreatedBy = case @UserName when '' then CreatedBy

else @UserName end

order by InvoiceDate DESC else

1] Tim kiém méu tin dua vdo tit khéa select InvoiceStatus AS Approval,

InvoiceStatus AS Status, P.Invoiceld,

Trang 6

Chương ð: Phần kế toán công nợ phải trả 207 CompanyNameInVietnamese, Currencyld, ExchangeRate, ` SUM (Quanr i=y*Price* (1+VATRate/100) -Discount) AS Amount, DescriptionInVietnamese from PurchaseInvoices P, Suppliers S, PurchaseInvoiceNetails D WHERE P.SupplierId = $.SupplierId and D.Invoiceld = P,Invoiceld

P.SupplierId = case @SupplierId when '' then P.Supplierid else @Supplierid end

and InvoiceBatchId = case @BatchId

when '' then InvoiceBatchId else @Batchid end

and InvoiceStatus = case @InvoiceStatus when 2 then involceStatus else @InvoiceStatus end

and P,CreatedBy = case @UserName when '' then

P.CreatedBy else @UserName end and InvoiceDaLe>= @StartDate and invoicebate<=@EndDate

and CONTAINS (P.*, @Keyword)

Group by InvoiceStatus, P.Invoiceld,

InvoiceBatchld, Invoicebate, P.SupplierId,

CompanyName InVietnamese, Currencyld, ExchangeRate, DescriptionInVietnamese order by InvoiceDate DESC Q 3

Để cho phép người sử dụng Hệt kê danh sách hóa đơn mua hàng ứng

với mã tỉnh thành hay mã nhà cưng cấp, bạn khai báo gọi thủ tục nội tại có tên udsPurchaselnvoices như ví dụ õ-13 trong phương thức được cài đặt overload 1a FillPurchaseInvoicesToGridView udsPurchaseInvoices CREATE PROC udsPurchaseInveices @ItemId varchar (5}, @Level tinyint, @InvoiceStatus tinyint, @UserName varchar (50) AS f1 Trường hợp liệt bê mầu tìn theo mã tính thành if @Level=2

select Approval, Status, Invoiceld,

InvoiceBatchId, InvoiceDate, SupplierId,

CompanyNameInVietnamese, Currencyld,

ExchangeRate, Amount, DescriptionInVietnamese from vwPurchaseInvoices

where Provinceld = @ItemId

and Status = case @InvoiceStatus when 2 then Status

Trang 7

208 Chương ð: Phần kế toán công nợ phải trả and CreatedBy = case @UserName when '' then CreatedBy else @UserName end `

order by InvoiceDate DESC

if @Level=3

11 Trường hợp liệt kê mẩu tin theo mã nhà cung cấp select * from vwPurchaseTnvoices NHERE Supp1ierTđ = @ItemId

and Status = case @InvoiceStatus when 2 then Status else @InvoiceStatus end

and CreatedBy = case @UserName when '' then CreatedBy

else @UserName end

order by InvoiceDate DESC

GO

Trong đó, đối tượng View có tên vwPurchaselnvoices dùng để tổng

hợp dữ liệu từ hai bảng Purchaselnvoices và PurchaselnvoiceDetails có cấu trúc như vi dy 5-14

CREATE VIEW vwPurchaseInvoices

AS

select InvoiceStatus AS Approval,

InvoiceStatus AS Status, P.Invoiceld, Provinceld,

InvoiceBatchId, InvoiceDate, P.SupplierId,

CompanyNameInVietnamese, Currencyid, P.CreatedBy,

ExchangeRare, SUM (Quantity*Price* (1+VArRate/100) -Discount) AS Amount, DescriptionInVietnamese from Suppliers S inner join PurchaseInvoices P

on P.SupplierId = S§.Supplierid

left join PurchaseInvoiceDetails D

on D.Invoiceld =P.InvoicelId

Group by InvoiceStatus, P.Invoiceld, Provinceld, InvoiceBatchId, InvoiceDate, P.Supplier1d, CompanyNameInVietnamese, Currencyld,

ExchangeRate, DescriptionInVietnamese, P.CreatedBy Go

Thi chỉnh sửa thông tin hóa đơn mua hàng, bạn cũng khai báo gọi thủ tục nội tại có tên udsPurchaselnvoices;3 trong phương thức EditPurchaselnvoice với cấu trúc như ví dụ 5-15

í dụ 5-15: Thủ tục nội tại udsPurchaselnv: CREATE PROC udsPurchaselInvoices;3

@Invoiceld varchar (10}

AS

select P.*, CompanyNameInVietnamese,

Convert (char(11), InvoiceDate,106) AS DateOfInvoice

Trang 8

Chương 5ð: Phần kế tốn cơng nợ phải trả 209

Where P.Supplier1Id = S.SupplierTd

and InvoiceId = @Invoiceld `

GO

Khi liệt kê thông tin của hóa đơn mua hàng đang chọn, bạn cần gọi thủ tục nội tại có tên udsPurchaselnvoices;4 với cấu trúc như ví dụ 5-16 trong phương thức FillPurchaseInvoiceDetailsToGridView

PurchaseInvoic

CREATE PROC uđsPurchaseTnvoices; 4 @InvoicelId varchar (10)

AS

select OrdinalNumber AS '#', D.ProductId,

ProductNameInVietnamese, Quantity, Price, Discount, D.VATRate, D.ImportTaxRate, Quantity*Price* (1+D VATRate/100)

-Discount AS Amount

from PurchaseInvoiceDetails D, Products P

Where P ProductId = D ProductId

and InvoiceId = @InvoicelId

GO

Chẳng hạn, khi chỉnh sửa thông tin của hóa đơn mua hàng, danh

sách chỉ tiết hóa đơn mua hàng trình bày như hình 5-4 Le ee 7 =ƒ xi He Gereraliedo Aetrtm-Mulb Acartonlle verter Carts Oredanes core re Rg _ eb Edit Purchase Invoice

Oe = Vietnam Und Sate lewoice Date [G/02/207 =] BatchNa [PBDI2(020A40) ced : SSC

The Tana Hã Chí Mnh Canny eran bore 3] Em Hobdmmahing TM Hài Bên | [CS BH Darga banking beh Ding tanTte twos Stahe Agpovel [Puchase

Sales Invice Dota

2 POOOD2 _Tiixéch dig chohe seh

Createdfiy: dbo: CreatedD ate: 12/25/2007 4:18:00 PM: ModiiedBy dba: ModtiedD ste: 12/28/2007 41:00PM *

Uodite [ Bak | Dese | - Pạt | AdiDeud | DadsDeai| — Aemwe[ Hep | Gove |

end 9) Logged oe hdintroter) E]Prchge Ives Logpedn 6.4030 dóf 4i Jù es

Trang 9

210 Chương ð: Phần kế toán cơng nợ phải trả

Ngồi ra, để thêm mới chỉ tiết hóa đơn mua hàng, bạn khai báo thủ tục nội tại có tên udsPurchaselnvoices;8 nhu vi du 5-17 và gọi trong phương thức SaveInvoiceDetail thuộc frmlnvoieeDetails dùng cho trường hợp khai

báo chỉ tiết hóa đơn bán hàng

hủ tục nội tại udsPurchaseInvoiees;8|

CREATE PROC udsPurchaseInvoices;8

£† Khai bảo tham số @Flag bit, @OrdinalNumber int, @Invoiceld varchar(10) , @Productid varchar (50) , @Quantity DECIMAL(18,2), @Price DECIMAL(18,2) , @VATRate DECIMAL(18,2) , @ImportTaxRate DECIMAL (18,2) AS £¡ Trường hợp thêm mới mẩu tin +£ 8Flag =1

INSERT INTO PurchaseInvoiceDetails (OrdinalNumber, Invoiceld, ProductId,

Quantity, Price, VATRate, Import TaxRate)

VALUES (@OrdinalNumber, @Invoiceld, @Productid,

@Quantity, @Price, @VATRate, @ImportTaxRate) Else

/f Truong hop cdp nhat méu tin

update PurchaseInvoiceDetails

set Quantity=@Quantity, Price=@Price,

VATRate=@VATRate, Import TaxRate=@ImportTaxRate

Where InvoiceId= @Invoiceld

and ProductId = @ProductId

and OrdinalNumber = @OrdinalNumber

GO

Chú ý: Khi chỉnh sửa chi tiết hóa đơn mua hàng, ngoài các thuộc tính như đã trình bày trong phương thức EditDetails và biến cố Click của nút

btnNewDetail trong phản chí tiết hóa đơn bán hàng, bạn phải gán thuộc

tính Salesinvoiee là false

Chẳng hạn, khi người sử dụng Double Click vào chỉ tiết hóa đơn mua

Trang 10

Chương 5: Phần kế tốn cơng nợ phải trả EB Invoice Details fe 15 Xt Purchase Invoice Details - Edit Item Product Name Quantity [150.00 Price [mm VAT Rate [70.00 x ImpotTaxRate [ «0.00 % Add New | Update | - Delete Close 4 Hinh 5-5: Chi tiét hoa don mua hang

Đối với trường hợp xóa hóa đơn mua hàng, bạn khai báo gọi thủ tục nội tại có tên udsPurchaselnvoices;õ với cấu trúc như ví dụ 5-18 trong phương thức DeletePurchaselnvoiee i_du 5-18: Thu tuc ndi tai udsPurchaseInvoices;5} CREATE PROC udsPurchaseInvoices;5 @InvoicelId varchar (10) AS

delete from PurchaseInvoices Where InvoiceId= @InvoiceId

GO

Ngoài ra, dé cho phép người sử dụng xóa chỉ tiết hóa đơn mua hàng,

bạn khai báo gọi thủ tục nội tại có tên udsPurehaselnvoices;6 với cấu trúc như ví dụ 5-19 trong phương thức DeletelnvoiceDetail

Thu tuc ni tai udsPurchaseInvoices;6|

CREATE PROC udsPurchaseInvoices; 6 // Khai bdo tham sé

@OrdinalNumber int, @InvoiceId varchar (10) ,

Trang 11

Chương 5ð: Phần kế tốn cơng nợ phải trả

AS -

delete from PurchaselnvoicesPetails Where InvoicelId = @Invoicelda

and ProductId = @ProductIid

and OrdinalNumber = @OrdinalNumber

GO

Ngoài ra, những phương thức có cùng chung mục đích tương tự chức năng quản lý hóa đơn bán hàng sẽ không được trình bày trong phần này

4 TÌNH HÌNH CƠNG NỢ PHÁI TRẢ

Ngược lại với chức năng quản lý công nợ phải thu, doanh nghiệp có

thể mua hàng từ nhà cung cấp và thực hiện việc thanh toán theo hóa đơn cũng như số tiên còn nợ chưa thanh toán, bạn xây dựng chức năng này để

theo dõi công nợ phải trả đầu kỳ, quá trình mua hàng và thanh toán trong

kỳ để tính công nợ phải trả cuối kỳ

Công nợ phải trả cuối kỳ cho nhà cung cấp được tính bằng công nợ phải trả đầu kỳ cộng với tổng giá trị tiền mua dựa trên hóa đơn mua hàng trừ đi số tiền mà doanh nghiệp đã trả bằng cách tính tổng cộng phiếu chỉ

với công thức như sau:

CONG NO PHAT TRA CUỐI KY = CONG NO PHAI TRA DAU KY + TONG

TIEN MUA TRONG THANG — TONG TIEN DA TRA TRONG THANG

Chit §: DE tim hiéu chtfc nang nay, ban b&t ddu trinh don Account

Payable | Account Payable dé kich hoat form cé tén frmAccountPayable va cde thd tuc luu trong tap tin AccountPayableProcedures.sql

4.1 Giao diện chính

frmAccountPayable được thiết kế thành hai phần, phần bên trái là

danh sách country và province, phần bên phải là tình hình công nợ phải trả

cho nhà cung cấp

Chẳng hạn, bạn thiết kế form có tên frmAccountPayvable có giao diện bao gồm hai phần như hình 5-6

Đối với phần bên phải, bạn chia ra thành ba trường hợp Trường hợp

thứ nhất là đọc mẩu tin ứng với tình hình công nợ phải trả đã tính toán trong bảng AccountPayable bằng cách nhấn nút Refresh với tùy chọn như

Trang 12

Chương 5: Phần kế toán công nợ phải trả 213 [M]° 22 es Sinn meee le Generlledgar AcostBeewalie Account Bavoble_Invertry Account Payable

Hinh 5-7: Liét ké tình hình công nợ phải trả trong tháng

“Trường hợp thứ hai là cho phép người sử dụng liệt kê tình hình công nợ phải trả của các tháng trong quá khứ bằng cách nhấn nút Refresh

Giả sử, tháng hiện tại là 10/2007, tháng trước đó là tháng 09/2007 thì

bạn chọn tùy chọn tương tự như hình 5-8

Hình ð-8: Liệt kê công nợ phải trả trong tháng 09/2007

Lưu §: Cả hai trường hợp trên đều dựa theo mã tỉnh thành nếu người

sử dụng chọn mã tỉnh thành phía bên trái

Đối với trường hợp thứ ba là tính lại công nợ phải trả cho nhà cung

Trang 13

|? z4 Chương 5: Phần kế toán công nợ phải trả

công nợ phải trả cho nhà cung cấp kể từ ngày đâu đến ngày chỉ định trong tháng thay vì đến ngày cuối tháng

mt System Monogement Console (Account Payable] Pana eal

Several Ledger Account Recehable Account Bayable _Irvertory Contos Drectories ose North Rights Hợp Account Payable SiatDae fov0a7at07 =] EndDae [27027207 *]: ` CảeidelPlm Ê ASayen C 3aedsieoie OK Đ Mentha C $eseMenh Coat AP

Hinh 5-9: Tinh cong ng phdi trả theo bhoảng thời gian trong tháng

4.2 Khai báo liệt kê

Để liệt kê mẩu tin ứng với công nợ phải trả cho nhà cung cấp trong

bảng MonthlyAccountPayable da tam tinh hay tình hình công nợ phải trả của các tháng trước từ bảng CloseAccountReceivableDetails, bạn khai báo thủ tục nội tại có tên udsAccountPayable như ví dụ 5-20

20: Thủ tục nội tai udsAccountPayable

CREATE PROC udsAccount Payable

11 Khai báo tham số @ProvinceTd CHAR (3), @MonthYear CHAR (8) AS 1] Trường hợp liệt bê mẩu tin tháng hiện hành IF @MonthYear = ''!

SELECT C.SupplierId, CompanyNameInVietnamese,

BeginAmount, PurchaseAmount, PaidAmount, EndAmount,

MaxDebitAmount, case when EndAmount -MaxDebitAmount>0 then 'Over Debit' else '' end AS 'Debit Status’

FROM Suppliers C LEFT JOIN

MonthlyAccount Payable AP

ON C.SupplierId = AP.SupplierTd

WHERE Provinceld = CASE @Provinceld

WHEN '' THEN ProvinceId ELSE @Provinceld END ELSE

LỊ Trường hợp liệt bê mẩu tin tháng chỉ định trong quá khứ SELECT C.SupplierId, CompanyNameInVietnamese, BeginAmount, PurchaseAmount, PaidAmount, EndAmount

FROM Suppliers C LEFT JOIN

CloseMonthAccount PayableDetails AP ON C.SupplierId = AP.SupplierId

WHERE Provinceld = CASE @Provinceld

WHEN '' THEN Provinceld ELSE @ProvincelId END AND CloseMonth = @MonthYear

Trang 15

216 Chương ð: Phần kế tốn cơng nợ phải trả btnPrint.Enabled = true; } else { } btnPrint.Enabled = false; catch (Exception ex) { ASUIHelper ShowMessageBox ( “Account Receivable-FillAPToGridview", ex); } }

Chú ý: Phương thức AddSumAmount dùng để tính tổng công nợ phải trả đầu kỳ, tổng giá trị hàng mua, tổng giá trị tiền đã trả và tổng công nợ phải trả cuối kỳ rồi tạo ra mẩu tin cuối cùng và thêm vào đối tượng DataTable đã được trình bày trong phần trước

Bằng cách gọi phương thức FillAPToGridView trong biến cố Load của

form hay Click của nut btnRefresh, bạn có thể liệt kê mẩu tin theo hai tùy

chọn trên

Chẳng hạn, khi bạn thực thi chương trình, dữ liệu đang có trong bảng MonthlyAceountPayable sẽ trình bày tương tự như hình 5-10

= Coty Cet ute Oe

ven 3 ÌCăngty Trách Nhện Hu Hon Suz Ì

Thaathendu: || |” 3m3 lcưgyGEgaaYmaaVAMe | ne weownn | Icing ich ib en oss) smo me | Cingy ch it utero ng ich it sant

Zot Amount |

Cee nef

Roady SE) Lopied ae [AdrinstratorZ) Account Payable Logged [11:26:40 AM]

Trang 16

Chương 5: Phần kế toán công nợ phải trả 217 [M|°

Trong trường hợp bạn muốn trình bày công nợ phải trả cho nhà cung cấp trong tháng 09/2007, bạn chọn vào tùy chọn Specifie Month và nhấn

nút Refresh thì kết quả trình bày như hình 5-11

it System Management Console « [Account Payable}

le General Ledger Account Receivable Account Payable Inventory Controls Directories Close Month Riợts Help

Accaunt Payable 7 Month Oct/2007 ( Specific Month C Calculate AP Morth: [Sep >] Year [2007 > = County Cause AP for Œ United States = Vietnam Thủa Thên - Huế H8 Chi Minh HaiPhing Hà Nội Đăng Nai Đànẵng, Can Ths Binh Ding Country 3 28 Ready 2 Logged as [Administrator] [E] Account Payable Logged in [11:26:40 AM]

Hinh 5-11: Tinh hình công nợ phải trả trong tháng 09/2007 Ngoài ra, nếu muốn che giấu hay hiển thị các tùy chọn, ngoài cách khai báo trong phương thức CheckPermission, bạn khai báo phương thức

ShowPanels và gọi nó trong biến cố CheckedChanged của 3 điều khiển

rdoCalculate, rdoSpeciñieMonth và rdoMonthly tương tự như đã trình bày

trong phần trước

Tương tự cách so sánh với số tiền nợ phải thu lớn nhất cho phép được

khai báo trong cột MaxDebitAmount của mỗi nhà cung cấp thuộc bảng

Suppliers, bạn có thể trình bày trạng thái công nợ phải trả vượt quá số

lượng cho phép

Để làm điều này, bạn khai báo trong thủ tục nội tại

Trang 17

Chương 5: Phần kế tốn cơng nợ phải trả RNs Be 2 MenhDE/207 7 Spectic Month Coledate AP ET tess] ares Seatac Ready $2 Logged as [Administrator] Account Payable Logged i {11:26:40 AM)

Hinh 5-12: Cong ng phdi tré vuot quá giới hạn cho phép

4.3 Tinh céng ng phai tra

Tương tự như cách tính công nợ phải thu của khách hàng, bạn cũng chia chức năng này thành hai trường hợp Trường hợp thứ nhất là tính cho tất cả nhà cung cấp Trường hợp thứ hai chỉ tính lại công nợ cho nhà cung cấp đang chọn

Để làm điểu này, bạn khai báo thủ tục nội tại có tên udsAccountPayable;2 ding để tính công nợ phải trả cho tất cả nhà cung cấp

với cấu trúc như ví dụ 5-22

CREATE PROC uđsAccountPayable;2

11 Khai báo tham số

@PreviousMonth CHAR (8),

@startDate smalldatetime, @EndDate smalldatetime

AS

// Khai bdo xéa dit ligu dang tén tai trong bang MonthlyAccountReceivable

DELETE FROM MonthlyAccount Payable;

11 Khai báo bảng dữ liệu ảo uới phát biểu WITH

Trang 18

Chương 5: Phản kế tốn cơng nợ phải trả - 219

{ :

71 Khai báo tổng hợp dữ liệu từ bảng CloseMonthAccountPayableDetails

71 ứng uới công nợ đầu kỳ

SELECT SupplierId, EndAmount As BeginningAmount,

0 As PurchaseAmount, 0 As PaymentsAmount FROM CloseMonthAccount PayableDetails

WHERE CloseMonth = @PreviousMonth

UNION ALL

// Khai béo téng hop da liệu từ bảng Purchaselnvoices va

11 PurehaselnuoiceDetalls ứng uới tiền mua hàng SELECT SupplierTd, 0, isnull (SUM(Quantity*Price* (1+VATRate/100)-Discount), 0) As PurchaseAmount, 0 FROM Purchaseinvoices S, PurchaseInvoiceDetails D

WHERE S.Invoiceld = D.Invoiceld

AND InvoiceDate between @StartDate and @EndDate GROUP BY SupplierTđ UNION ALL L1 Khai báo tổng hợp dữ liệu từ bằng Payments ung véi 11 tiên trả cho nhà cùng cấp SELECT SupplierTrd, 0, 0, 1snu11 (SUM(PaymentAmount},0) As PaymenEAmounE FROM Payments WHERE PaymentDate between @StartDate and @EndDate GROUP BY Supplierid £7 Khai báo thêm tổng hợp dữ liệu tw bing ARBAndPurchaseAmount + bèo bảng MonthiyAccountPayable

INSERT INTO MonthlyAccount Payable

(SupplierId, BeginAmount, PurchaseAmount, PaidAmount,

EndAmount }

SELECT C.SupplierId,

SUM (BeginningAmount) AS BeginningAmount, SUM (PurchaseAmount) AS PurchaseAmount, SUM (PaymentsAmount) AS PaymentsAmount, SUM (BeginningAmount) + SUM(PurchaseAmount ) - SUM(PaymentsAmount) AS EndAmount FROM Suppliers C LEFT JOIN ARBAndPurchaseAmount ARC ON C.SupplierId = ARC.SupplierId GROUP BY C.SupplierId;

Trong trường hợp tính lại công nợ phải trả của nhà cung cấp đang chọn, bạn khai báo thủ tục nội tại có tên udsAccountPayable;3 với cấu trúc

Trang 19

220 Chương 5: Phần kế tốn cơng nợ phải trả í dụ Thi tuc n udsAccountPayable;3|

CREATE PROC udsAccount Payable; 3

{1 Khai bdo tham sé @SupplierIdCHAR (5) @PreviousMonth CHAR(8), @StartDate smalidatetime, @EndDate smalldatetime AS

11 Khai báo xóa dữ liệu dang tén tai trong bang

(† MonthlyAceountPayable của một nhà cung cấp

DELETE FROM MonthlyAccount Payable

WHERE Supplierld = @Supplierid; £1 Khai báo bảng dữ liệu áo uới phát biểu WITH WITH ARBAndSalesAmount

AS

{ {

+] Khai báo tổng hợp dữ liệu lừ bảng CloseMonthAccouniPayableDetaiis

17 ứng uới công nợ phải trả đầu hỳ của một nhà cung cấp

SELECT SupplierTd, EndAmount As BeginningAmounE,

OAs PurchaseAmount, 6 As PaymentsAmount

FROM CloseMonthAccount PayableDetails

WHERE CloseMonth = @PreviousMonth

/1 Lọc theo một nhà cung cấp

AND Supp1ierTả z @SupplierTđ UNION ALL

11 Khai báo tổng hợp dữ liệu từ bảng Purchaselnvoices va

11 PurehaselnuoiceDetails ứng uới tiên mua hàng của nhà cung cấp

SELECT SupplierId, 0,

isnull (SUM (Quant ity* Price* (1+VATRate/100)-Discount), 0) As PurchaseAmount, 0

FROM Purchaseinvoices S, PurchaseInvoiceDetails D WHERE S.Invoiceld = D Invoiceld

1} Loc theo một nhà cung cấp

AND Supplierid = @SupplierId

AND InvoiceDate between @StartDate and @EndDate

GROUP BY SupplierId

UNION ALL *

Trang 20

Chương 5: Phản kế tốn cơng nợ phải trả 221

AND PaymentDate between @StartDate and @EndDate

GROUP BY SupplierId

11 Khai báo thêm tổng hợp dữ liệu từ bằng ARBAndPurchaseAmount

£ƒ uào bằng MontllyAccountPayable của một nhà cung cấp

INSERT INTO MonthlyAccount Payable

(SupplierlId, BeginAmount, PurchaseAmount, PaidAmount,

EndAmount )

SELECT C.Supplierld,

SUM (BeginningAmount} AS BeginningAmount, SUM{PurchaseAmount) AS PurchaseAmount,

SUM (PaymentsAmount) AS PaymentsAmount,

SUM (BeginningAmount} + SUM(PurchaseAmount) - SUM{PaymentsAmount) AS EndAmount FROM Suppliers c LEFT JOIN ARBAndPurchaseAmount ARC ON C.Suppliertd = ARC.SupplierId (1 Loc theo một nhà cùng cấp WHERE ARC SupplierId = 8SupplierTd GROUP BY C.SupplierId; GO

Sau đó, bạn khai báo gọi hai thủ tục nội tại trên trong biến cố Click của nút btnCalculate như ví dụ 5-24

Đrivate void bcncalculace_C1iek(tobject sender,

EventArgs e)

{

1 Khai bảo vd khởi tạo đối tượng ASCommon

ASCommon asCommon = new ASConunon (} ; đJ Tính tháng trước đó bằng cách gọi phương thức

Trang 21

222 Chuong 5: Phan kế tốn cơng nợ phải trả #1 Khai báo thuộc tính cho dối tượng ASDataProuider

dataProvider CommandType =

CommandType StoredProcedure; 11 Khai báo mảng tham số uà giá trị

string[(] parameterName = null; object (] parameterValue = null;

11 Trường hop tinh công nợ phải trả cho tất cả nhà cung cấp if (rdoAllSuppliers.Checked) { {} Khai bdo chi dink thd tuc noi tại dataProvider CommandText = “udsAccount Payable;2";

if Khai báo khối tạo giá trị cho mảng tham số 0à giá trị parameterName = new string[3] {

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

parameterValue = new object [3] { previousMonth, dtpStart.Value.ToString( ASParameters.dateFormat), dtpEnd Value.ToString( ASParameters.dateFormat) }; } else { £J Trường hợp tính công nợ phải trả cho một nhà cung cấp if (dataGridView.CurrentRow != null) {

11 Khai báo lấy mã nhà cùng cấp

string supplierId = Convert ToString( dataGridView.CurrentRow.Cells({ “SupplierId "].value); + Khai báo chỉ định thủ tục nội tại đaEaProviđer CommandText = "uđsAccountPayable;3°;

Trang 22

Chuong 5: Phan ké todn céng ng phai tra rll (dataProvider.ErrorMessage FS) { ASUIHelper ShowMessageBox ( “Account Payable-Calculate", dataProvider.ErrorMessage) ; else FillAPToGridVview("", "");

/1 Khai báo goi phuong thite FillAPToGridView catch (Exception ex)

ASUIHelper ShowMessageBox ( "Account Payable-Calculate", ex); Mr

}

Chẳng hạn, sau khi người sử dung chon vao til chon Calculate AP va chọn tiếp tùy chọn All Suppliers rồi nhấn nút OK thì kết quả trình bày

tương tự như hình 5-13

Account Payable © Month 0172007 Spectic Mori Calulale AP

} Stat Date: [01700172007 =] EndDae [3170472007 =] lade AP Lr ALSupene Selected Sunnie Ok | _Công ty Trách Nhiệm HẦu Hạn 3500000 8745000, | $132.50 "xẻ .n | sooo ingly TchNiémHOsHen 1.500000 3497500 638000 s05 Cin io —— Tim S00 CảngwTrảchNhệmHồuHạn, = — Z2 21odAe.n 557845001 4682000

Hinh 5-13: Tính công nợ phải trả cho tất cả nhà cung cấp

Trang 23

224 Chương 5ð: Phần kế tốn cơng nợ phải trả Account Payable : C Medh0cU2007.C SpeeleMenh (2 CdoideAPp

Stan Date: [0170c1 72007 =] EndDae [5/04/2007 | Caledste AP for AlSupplere Selected Supper _ÚK

= County ConparyNenaiivetnanese | BeprAnoun| Rachesohno| Padhnaunt| ExiAnart

nae 'Công ty Trách Nhệm Hồu Hạn, 2500000 24854500 12030000 iw CénglyTréchNhm Huson 3800000, 8745000 3132500) This Thin Hud Mà Chinh Céng ly phin Veaka ma Vite 4500000 12 1717780 Hà Phòng h i Heme Cing y Tesch Nim HDs Ho | ĐăngNg i Banking Cin ths Beh Dung 4 Je Carhy tte |

Reedy {92 Logged as (Adkins ator} “Account Payable ae)

Hình 5-14: Tính công nợ phải trả cho một nhà cung cấp

5 KẾT LUẬN

Bạn vừa tìm hiểu chức năng liệt kê và tìm kiếm mẩu tin, thêm mới và cập nhật mẩu tin, xóa và kích hoạt hay đóng nhà cung cấp cùng với cách tính công nợ phải trả cho mỗi nhà cung cấp dựa trên công nợ đầu kỳ, tổng giá trị mua trên hóa đơn và tiền đã trả

Ngoài ra, bạn cũng tham khảo cách quản lý hóa đơn mua hàng với thông tin chỉ tiết và tính tổng giá trị hóa đơn mua hàng cùng với khai báo

đối tượng DataTable để lưu dữ liệu cho phép in báo cáo theo mẫu

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

theo thứ tự như sau:

(1): Công ng phai tra (Account Payable) là chức năng quản lý công nợ

mà doanh nghiệp còn thiếu nợ của nhà cung cấp

Trang 24

Chương 6: Phần kế toán xuất - nhập - tén 225 Chuong 6: PHAN KE TOAN XUAT - NHAP - TON Tóm tắt chương 6;

Tương tự như phần công nợ phái thu của khách hàng và

công nợ phải trả cho nhà cung cấp, chức năng xuất nhập tồn là phần dùng để quần lý sản phẩm nhập và xuất kho

Sau khi mua hàng của nhà cung cấp, doanh nghiệp nhập hàng vào kho rồi khi bán hàng cho khách hàng, doanh nghiệp lại

tiếp tục xuất hàng, Muốn theo đõi tình hình xuất và nhập để biết được số lượng tổn kho”, bạn cần quần lý danh mục sản phẩm, loại sản phẩm, kho, tình hình xuất nhập và tồn kho Các vấn đề chính sẽ được đề cập: Y Quan ly san phẩm _ Nhập và xuất kho * Tình hình tôn kho v_ Cập nhật số lượng thực

1 QUAN LY SAN PHAM

Sản phẩm là đối tượng chính áp dụng cho chức năng quản lý xuất

nhập tên kho, nhưng do nó có liên quan đến các bảng dữ liệu khác như loại

sản phẩm (category), danh mục kho (stock), danh muc sắn phẩm (product),

nên chúng ta chỉ tìm hiểu cách làm việc với bảng Products

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

Controls | Products | Products để kích hoạt form có tén frmProducts va các thủ tục lưu trong tập tin ProductProcedures.sal

1.1 Giao dién chinh

Bạn đã làm quen với giao diện chung trong cùng một form của chức

Trang 25

226 Chương 6: Phần kế toán xuất - nhập - tôn chúng ta lại tiếp tục tìm hiểu cách dùng chung nhiều chức năng trên cùng một form để quản lý sản phẩm

Chúng ta thiết kế giao diện phần bên trái là danh sách loại sản phẩm

và phần bên phải là danh sách sản phẩm như hình 6-1 (Products) List of Products

& Categories Tonich Từ nhe th dn toa

Tử Hohle thun TW 19 babes ih Talent Tnkch dig choc och To xieh minh vàđ4{ † Tito moa

Ì Tiixbch aie cho My toh Từ hp do động Tach dr oP Tihuich rg co 4 4 ile besten | | poet] _ ng [ 7 awd oan a[Aereresto]TE]moảets (agmedD[I92978)

Hinh 6-1: Giao dién chinh

Nếu cho phép người sử dụng tìm kiếm nâng cao thì bạn thiết kế giao

Trang 26

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

Ngoài ra, phần bên phải sẽ bao gồm các chức năng liệt kê và tìm

kiếm mẩu tin, thêm mới và cập nhật mẩu tin, xóa và kích hoạt hay đóng

sản phẩm

Để làm điều này, bạn thiết kế giao diện dùng cho thêm mới và cập nhật thông tin sản phẩm Khi người sử dụng nhấn nút Edit hay Add New thì bạn chỉ cần vô hiệu hóa điều khiển txtId

Chẳng hạn, khi người sử dụng nhấn nút Edit để cập nhật thông tin

sản phẩm thì giao diện xuất hiện tương tự như hình 6-3 Ce mỹ : alls! fle GereralLodgr Account rcevala Accu Boyble _fwertory Cot Close trth Ritts Heb Edit Product i S Daegae Tảxách đện thoa ddy| Pelsetld PEE Caegpy [Taxkhmpirhvad 2 bs Tả xách học sen, ạt T6xáehbocsehram | Due Date [/Fah/200g v] Mawaehwe [HKE Tả xáchkhác 1

Tis ndch mip inh vb di] Product Name [Tutxach ding cho din thes dng Deeteien [Turnch ding cho din thoi dling

VATRate [ — “T6 Impat Taxote [0

Product Unt frit ‘Image Location 1 Discontinued

‘Quariy In Stock A

1 1 »

(Clestety dbo’ Crested ate 12/25/2007 41.00 PM: Mediedy dbo: ModiedD ale 2/1/2008 5 10.00 AM

teste | tuck | nove | fe | Decne GEN

Reedy $93 Logged as (Admistrator) “S] Products Logged in [3:19:99 Pe]

Hình 6-3: Giao diện cập nhật mẩu tin

1.2 Khai báo liệt kê mẩu tin

1.2.1 Liệt kê dữ liệu phía bên trái

Để liệt kê danh sách loại sản phẩm trên điều khiển TreeView, bạn

Trang 27

228 Chương 6: Phần kế toán xuất - nhập - tồn £J Khai bảo uà khối tạo đối tượng ASDataProvider ASDataProvider dataProvider = new ASDataProvider(); /} Khai bdo thuge tính cho đốt tượng ASDataProuider dataProvider.CommandText = CreateCommandText ForTreeView(); LÍ Khai báo gọi phương thức GetDataTubile DataTable dataTable = dataProvider.GetDataTable {); ASUIHelper.FillDataToTreeView("Category", dataTable, this.tvwCategories); } catch (Exception ex) { ASUIHelper ShowMessageBox ( "Product -FillDataToTreeView", ex); Ỳ }

Sau đó, bạn khai báo gọi phương thức FillDataToTreeView trong biến

cố Load của frmProducts Nếu thực thi chương trình, bạn có thể tìm thấy

danh sách loại sản phẩm xuất hiện như hình 6-4

€] Categories

Túi xách điện thoại di động Túi xách hoe sinh

Túi xách học sinh nam

Túi sách khác †

Túi xách máy tỉnh và điện thoại di động

Hình 6-4: Danh sách loại sản phẩm

thi người sử dụng chọn vào tên loại sản phẩm thì bạn liệt kê danh

Trang 28

Chương 6: Phan ké todn xuat - nhap - tén 229 e.Node Level); ResizeGridViewForProducts ( rightOnForm IndexOf ("A") !=-1); } 1b1Warning.Text = e.Node,Text;

Trong đó, phương thức FillProductsToGridView va ResizeGridViewForProducts được khai báo tương tự như những phương

thức cùng mục đích đã trình bày trong phần trước

Tuy nhiên, để hoàn thiện chức năng của phương thức này, bạn cần

khai báo thủ tục nội tại có tên udsProducts;3 với cấu trúc như ví dụ 6-3

EM $À) icy

CREATE PROC udsProducts;3

// Khai bdo tham số @CategoryId varchar (10), @ProductStatus tinyint, @UserName varchar (50) AS SELECT P Discontinued, P.Discontinued AS Status, ProductId, ProductNameTnVietnamese, ProđuctUniE, VATRate, Import TaxRate, Product DescriptionInVietnamese, Manufactureld, CategoryNameInVietnamese FROM Products P, Categories Cc WHERE P.CategoryId=C.Category!Id AND P.CategoryId = @Categoryid

AND P Discontinued = CASE @ProductStatus

WHEN 2 THEN P.Discontinued ELSE @ProductStatus END

AND C.CreatedBy = CASE @UserName

WHEN '' THEN C.CreatedBy ELSE @UserName END ORDER BY ProductId ASC

GO

Chú $: Bạn có thể thay đổi thủ tục nội tại trên để cho phép người sử

dụng chọn vào chuỗi Category Phía bên phải thì liệt kê danh sách sản

Trang 29

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

CREATE PROC udsProducts;3

£/ Khai báo tham số @Level tinyinE, @CategoryTd varchar (10), @ProductStatus tinyint, @UserName varchar (50) AS /1 Liét ké sdn phdm theo logi sdn phém IF @Level =1 SELECT P Discontinued, P.Discontinued AS Status, ProductId, ProductNameInVietnamese, ProductUnit, VATRate, ImportTaxRate, ProductDescript ionInVietnamese, Manufactureld, CategoryNameInVietnamese FROM Products P, Categories € WHERE P.Categoryld=C.CategoryId

AND P.Categoryld = @CategoryId

AND P.Discontinued = CASE @ProductStatus WHEN 2 THEN P.Discontinued

ELSE @ProductStatus END

AND C.CreatedBy = CASE @UserName

WHEN '' THEN C.CreatedBy ELSE @UserName ORDER BY ProductId ASC

11 Liệt kê sân phẩm không theo loại sản phẩm SELECT P Discontinued, P.Discontinued AS Status, Productid, ProductNameinVietnamese, ProductUnit, VATRate, ImportTaxRate, ProductDescriptionInVietnamese, Manufactureld, CategoryNameInVietnamese FROM Products P, Categories C WHERE P.CategoryId-=C.Categoryld

AND P.Discontinued = CASE @Product Status

WHEN 2 THEN P.Discontinued

ELSE @ProductStatus END

AND C.CreatedBy = CASE @UserName

WHEN '' THEN C.CreatedBy ELSE @UserName END ORDER BY ProductId ASC

GO

Trang 30

Chương 6: Phần kế toán xuất - nhập - tổn 231 private void tvwProvinces_AfterSelect (object sender, TreeViewEventArgs e) { FillProductsToGridView( Convert ToString(e.Node.Tag) ,e.Node.Level) ; ResizeGridViewForProducts ( rightOnForm.IndexOf ("A") !=~-1); lblWarning.Text = e.Node.Text;

Mỗi khi người sử dụng chọn loại sản phẩm, thủ tục nội tại trên được

gọi là danh sách sản phẩm liệt kê theo loại sản phẩm tương tự như hình 6-5 dị L4 Tả sách học th

ttle | ta | oe | pet | See a

Ready {Logged as (Adrstrotr] Products Lopged in [3:19:99 4]

Hinh 6-5: Liệt bê sản phẩm theo loại sản phẩm

1.9.2 Liệt kê dữ liệu phía bên phải

Bạn có thể khai báo phương thức FillProduetsToGridView dùng để trình bày danh sách sản phẩm khi người sử dụng tìm kiếm theo từ khóa hay

các tùy chọn mở rộng khác rồi gọi trong biến cố Click của nút btnSearch

Để làm điều này, trước tiên bạn khai báo thủ tục nội tại có tên

udsProducts;4 với cấu trúc như ví dụ 6-6 và gọi trong phương thức FillProductsToGridView

Thủ tục nội tại

Trang 31

° 232 Chương 6: Phần kế toán xuất - nhập - tồn // Khai báo tham sé @CategoryTd varchar (10), @ManufactureTd char (5), @ProductStatus tinyint, @Keyword nvarchar (50), @StartDate smalldatetime, @EndDate smalldatetime, @UserName varchar (50) /1 Liét kê mẩu tin không theo từ khóa if @Keyword='' select P.Discontinued, P.Discont inued AS Status, ProducttId, ProductNameInVietnamese, ProductUnit, VATRate, ImportTaxRate, ProductDescriptionInvietnamese, Manufactureld, CategoryNameInVietnamese from Products P, Categories C WHERE P.CategoryId=C.Category1Id

and P.CategoryId = case @CategoryId when 0 then

P.Categoryld else @CategorylId end

and Manufactureld = case @ManufactureId when '’ then ManufacturelId else @Manufactureld end

and P.Discontinued = case @Product Status

when 2 then P Discontinued else @Product Status end

and P.CreatedBy = case @UserName when '' then

P.CreatedBy else @UserName end

and P.CreatedDate>= @StartDate and | P.CreatedDate<=@EndDate

order by ProductId ASC else // Tim kiếm mẩu tin dựa uào từ khóa select P.Discontinueđ, P.Discontinued AS Status, ProductId, ProductNameInVietnamese, Productunit, VATRate, ImportTaxRate, ProductDescriptionInVietnamese, Manufactureld, CategoryNameInVietnamese from Products P, Categories C WHERE P.CategoryId=C.CategoryId

and P.Categoryld = case @CategorylId when 0 then P.Categoryld else @CategoryId ena

and Manufactureld = case @Manufactureld when '' then Manufactureld else @Manufactureld end

and P Discontinued = case @ProductStatus

when 2 then P Discontinued else @ProductStatus end

and P.CreatedBy = case @UserNamewhen '' then P.CreatedBy else @UserName end

Trang 32

Chương 6: Phần kế toán xuất - nhap - tén 233

and CONTAINS (F.*, @Keyword)

order by ProductId ASC

GO

1.8 Khai báo thêm mới hay cập nhật mẩu tin

Để thêm mới hay cập nhật mẩu tin, bạn khai báo phương thức SaveProduet để gọi thủ tục nội tại udsProducts;7 với cấu trúc như ví dụ 6-7

CREATE PROC udsProducts;7

{1 Khai báo tham số @Flag BIT, @ProductId VARCHAR (10), @Manufactureid CHAR(5), @CategoryId varchar (10), @DueDate SMALLDATETIME, @ProductNameInVietnamese NVARCHAR (150), @ProductDescriptionInVietnamese NVARCHAR (250), @ProductUnit NVARCHAR (20), @Imagebocation NVARCHAR(50), @VATRate floạt, @importTaxRate float, @Discont inued BIT AS 71 Trường hợp thêm mới mẫu tin IF @Flag=1 INSERT INTO Products (ProductId, ProductNameInVietnamese, Product DescriptionInVietnamese, Categoryld, Manufactureld, ProductUnit, ImageLocation,

DueDate, Discontinued, VATRate,

Trang 33

Chương 6: Phần kế toán xuất - nhập - tồn ProductDescriptioninVietnamese = @ProductDescriptioniInVietnamese, Categoryl@ = @Categoryid, Manufactureld = @Manufactureld, ProductUnit = @ProductUnit, TImageLocation = @ImageLocation, DueDate = @DueDate, Discontinued = @Discontinued, VATRate = @VATRate, ImportTaxRate = @ImportTaxRate, ModifiedBy = CURRENT_USER, ModifiedDate = getdate() WHERE Product id=@ProductId GO

Đối với trường hợp chỉnh sửa để cho phép cập nhật mẩu tin, bạn khai

báo phương thức EditProduet để gọi thủ tục nội tại có tên udsProduets;ð với cấu trúc như ví dụ 6-8

(iY VOM Comets) udsProduct:

CREATE PROC udsProducts;5 @ProductId VARCHAR {10) AS SELECT Convert (char (11), DueDate,106} AS JoinDate,* FROM Products where ProductId = @ProductId GO

Ngoài ra, trong phương thức EditProduct, bạn cần gọi phương thức để liệt kê danh sách số lượng sản phẩm trong kho bằng cách khai báo phương

Trang 34

Chương 6: Phần kế toán xuất - nhập - tôn 235 dataProvider GetDataTable ( “@ProductiId", ProductId); 11 Khai báo gọi phương thúc FillDataToGridView ASUTHelper.FillDataToGridview( dataTable, this.dataGridViewl); if (dataTable.Rows.Count > 0) { 11 Khai báo gọi phương thức ApplyStylePorProductInStocks LÍ nà ResizeGridVieuForProductinStocks ApplyStyleForProductInstocks Qa ResizeGridViewForProduct InStocks (); } lblRecordText.Text = "Products found: "; lblRecords.Text = dataTable.Rows.Count Tostring(); if (dataProvider.ErrorMessage !="") ASUIHelper ShowMessageBox ( "product -Fill Product ToGridvView", dataProvider ErrorMessage) ; } } catch (Exception ex) ASUIHelper ShowMessageBox ( "Product -FillProductToGridview", ex); } t Trong đó, thủ tục nội tại có tên udsProduets;8 khai báo với cấu trúc như ví dụ 6-10 í dụ CREATE PROC udsProducts;8 @ProductId VARCHAR (10) AS

SELECT StockName, ProductNameInVietnamese,

ProductUnit, GoodProduct Instock AS QttyInStock,

BadProductInStock AS BadQtty FROM Products P INNER JOIN

Product InStocks PIS ON PIS Productid = P.ProductId INNER JOIN Stocks S ON S.StockId = PIS Stockid

WHERE PIS ProductId = @productId

Go

hi thực thi chương trình, nếu bạn chỉnh sửa một sản phẩm thì danh

Trang 35

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

Hình 6-6: Số lượng đang có trong kho của sản phẩm có mã số là P0006

1.4 Khai báo xóa mẩu tin

Trong trường hợp xóa mẩu tin, bạn cũng khai báo xác nhận hành động xóa và gọi phương thức DeleteProduct thông qua thủ tục nội tại có tên

udsProduets;6 với cấu trúc như ví dụ 6-11 udsProdu CREATE PROC udsProducts;6 @Productid VARCHAR (10) AS

DELETE FROM Products

where ProductId = @Productid

GO

Chú §: Bạn có thể tìm thấy thủ tục nội tại liên quan đến loại sản phẩm và danh mục kho trong ứng dụng đính kèm

2 NHẬP VÀ XUẤT KHO

Chức năng nhập kho và xuất kho là hai chức năng đối nghịch nhau, phương thức và thủ tục nội tại đều có nội dung tương tự nhau chỉ khác nhau

Trang 36

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

Chúng ta chỉ cân tập trung tìm hiểu chức năng xuất kho Bạn có thể

tự tìm hiểu chức năng nhập kho từ form, Bảng dữ liệu và thủ tục nội tại trong ứng dụng

Chẳng hạn, khi làm việc với chức năng nhập kho thì các bảng liên quan là: ImportTypes, ImportBatchs, Imports; thủ tục nội tại có tên udsImports và form giao diện chính cho chức năng này là frmlmports

Tuy nhiên, phần xuất kho (Export) cũng có hai phần là chức năng quản lý lô phiếu xuất và phiếu xuất Bạn cũng có thể tự tìm hiểu chức năng

quản lý lô phiếu xuất do nó tương tự như chức năng quản lý lô hóa đơn bán hàng

Bạn có thể tìm hiểu chức năng lô phiếu xuất kho bao gồm bảng

ImportBatchs; thủ tục nội tại có tên udsImportBatchs và form giao diện chính cho chức năng này là frmImportBatchs

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

Controls | Exports | Export để kích hoạt form có tên frmExports và các thủ tục luu trong tap tin ExportProcedures.sql, UpdateStockTriggers.sql va ProductProcedures.sql

2.1 Giao dién chinh

Khác với giao diện chức năng quản lý sản phẩm, bạn thiết kế

frmExports với giao diện như hình 6-7

2W04/2007| A005 |CmpyCSànswwmVemn '8Đu8871 Ai0m_ lumgyuehdelôulinMtsd- 3 3

19/04/27 A002 Cang TúáchNh&mkOaMwIENVe

‘wre | sa "Cig ohn acne est | a |i dom 9/84/3671 Ađ87.|ceavbasicnUEA OA USA i [esa | Att | cha ah nation THSG/E07) A085 | Congy phn Sa Vitro ea

Tả92/2M71 HH1 |ChgylugaNhenluMenMasee

cee | A Cry Thi er |x| Ne si sn ‘van |" ~| Cig ich shen

Reeth AD Leeda (Art) SDesors

Trang 37

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

Tương tự như các trường hợp tìm kiếm đã trình bày trong phần trước, bạn thiết kế khung cung cấp tùy chọn tìm kiếm nâng cao như hình 6-8 Customer: ES aE Batch No: pio (29640 edostiiioquil asqy Toc 4 Dae [01/04/2007 =] Ts [a/0a/207 x] UserName EE :

Hinh 6-8: Giao dién tim kiém

“Tương tự như các loại form khác, bạn thiết kế giao diện thêm mới hay

cập nhật mẩu tin chung như hình 6-9

EditExporl Sip

twgeeld- [TT TT” Cwomer [Cig CE phan Recudleien lmseeOse [i0/0a/207 =] ĐaehMe [f80010902201 2 Iace Situs I~ Approval twee - [EŒ - 5 Dereon re" Ũ (nos Beate [Ta xách dìng ohợc tr nam, [Táo ma hesy BìlogzdeIShwttivo]T]eoee tey»dbftl6i8f8)

Hình 6-9: Giao diện cập nhật mẩu tin

2.2 Khai báo liệt kê mẩu tin

Để trình bày danh sách phiếu xuất hàng, bạn khai báo thủ tục nội tại

Trang 38

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

CREATE PROC udsExports

11 Khai báo tham số 8CustomerTd char (5), @Batchfđ VARCHAR (10), @ExportStatus tinyint, @Keyword nvarchar (50), @StartDate smalldatetime, @EndDate smaildatetime, @UserName varchar (50) AS 11 Liệt kê mẩu tin if (@Keyword='')

select Approval, Status, Exportid,

ExportBatchId, ExportEDate, CustomerTd,

CompanyNameInVietnamese, Products, ExportTypeName,

DescriptionInVietnamese from vwExports

where CustomerId = case @CustomerId when '' then Customerid else @CustomeriId end

and Export Batchid = case @BatchId when '' then Export Batchid else @BatchId end

and Status = case @ExportStatus when 2 then Status else

@Export Status end

and Export Date>= @StartDate and ExportDate<-=@EndDate

and CreatedBy = case @UserName when '' then CreatedBy else @UserName end

order by ExportDate DESC

else

21 Tìm kiém mau tin dua véo tit khoa select ExportStatus AS Approval,

ExportStatus AS Status, I.ExportId,

ExportBatchTd, ExportDate, 1.CustomerTỏ, CompanyNameInvietnamese, COUNT (D ExportId) AS Products, ExportTypeName, DescriptionInVietnamese from Exports I, Customers S, ExportDetails D, ExportTypes T

WHERE I.CustomerId = S.Customerid and D.ExportId = I.ExportId and T.ExportTypeId=1.ExportTypeld AND I.Customerid = case @CustomerId when '' then

I.CustomerId else @CustomerId end

and ExportBatchid = case @BatchId

when '' then ExportBatchId else @Batchid end and ExportStatus = case @ExportStatus when 2 then ExportStatus else @ExportStatus end

Trang 39

GO

240 Chương 6: Phần kế toán xuất - nhập - tồn and ExportDate>= @StartDate and Export Date<=@EndDate

and CONTAINS (I.*, @Keyword)

Group by ExportStatus, I.Exportid,

ExportBatchid, ExportDate,

I.CustomerId, ExportTypeName,

CompanyNameInVietnamese, DescriptionInVietnamese

order by ExportDate DESC

Trong đó, đối tượng View có tên vwExports dùng để kết nối ba bảng

Customers, Exports, ExportTypes va ExportDetails được khai báo tương tự

như ví dụ 6-13

CREATE VIEW vwExports AS

select ExportStatus AS Approval,

ExportStatus AS Status, I.Exportid, Provinceld, ExportBatchTd, ExportDate, 1,CustomerTd, ExportTypeName, CompanyNameInVietnamese, I.CreatedBy, COUNT(D.ExportId) AS Products, DescriptionInVietnamese from Customers S inner join Exports I on I.CustomerId = §.CustomerId inner join ExportTypes T on T.ExportTypeld = I ExportTypeld left join ExportDetails D on D.ExportId =1.ExportId

Group by ExportStatus, I.ExportId, Provinceld,

ExportBatchId, ExportDate, 1.CustomerTd, ExportTypeName, CompanyNameInVietnamese, DescriptioninVietnamese, I.CreatedBy GO 2.3 Khai báo thêm mới và cập nhật mẩu tin CR:

Để thêm mới hay cập nhật mẩu tin, bạn khai báo thủ tục nội tại có

tên udsExports;7 và gọi trong phương thức SaveExport ứng với hai trường hợp dựa theo tham số Flag

EATE PROC udsExports;7

11 Khai bdo tham số

@Flag bit,

Trang 40

Chương 6: Phân kế toán xuất - nhập - tôn 241 @BatchId varchar (10; , @ExportDate Smal] DateTime, @ExportTypeld char (3) , @CustomerTd char (5) „ @ExportStatus bit , @DescriptionInVietnamese varchar (150) AS i} Truong hop thém mdi méu tin if @Flag =1

INSERT INTO Exports

{ExportBatchId, ExportId, ExportTypeld,

ExportDate, Customerld, ExportStatus,

DescriptioninVietnamese)

VALUES (@BatchId, @ExportId, @ExportTypeld,

@ExportDate, @Customerid, @ExportStatus, @DescriptionInVietnamese} Else !† Trường hợp cập nhật mẫu tin update Exports set Export BatchId=@Batchld, Export Typeld=@ExportTypeld, ExportDate=@ExportDate, CustomerId=@Customerld, ExportStatus = @ExportStatus, DescriptioninVietnamese = @DescriptionInVietnamese Where ExportId = @ExportId GO

Trong trường hợp chỉnh sửa hóa đơn bán hang để xem hay cập nhật, bạn khai báo thủ tục nội tại có tên udsExport;3 với cấu trúc như ví dụ 6-15 và gọi trong phương thức EditExport CREATE PROC udsExports;3 @Exportid varchar (10) AS select ExportStatus,

ExportStatus AS Status, I.*,

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

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w