Hướng dẫn viết phần mềm quản lý kho hàng

Mục lục.

I. GIỚI THIỆU VỀ NGHIỆP VỤ QUẢN LÝ KHO
1.Kho là gì ? Quản Lý kho hàng là gì?

a. Kho là gì ?

b. Quản Lý Kho Hàng Là gì ?

2.Giới thiệu phần mềm quản lý kho hàng tại Datasa
II.  PHÂN TÍCH VÀ THIẾT KẾ HỆ THỐNG

1.Lập Trình dựa trên nền tảng

2.Phân Tích Dữ Liệu, Thiết Kế Database

a.Phân tích thiết kế databasa

b.Dữ liệu

III. XÂY DỰNG CHƯƠNG TRÌNH, GIAO DIỆN PHẦN MỀM, CHỨC NĂNG BÁO CÁO

1.  Xây Dựng các From, Chương trình

2.Giao Diên Phần Mềm, Chức năng

2.1 các chức năng cơ bản trên phần mềm

a. Chức năng thêm mới( add new)

b. Chức năng lưu(save)

c. Chức năng cập nhật(updata)

d. Chức năng xóa( delete)

3.Báo cáo 

a. Báo cáo tổng hợp sản phẩm tồn

b. Báo cáo từng sản phẩm tồn

4.Xuất excel

IV. Đánh Giá

 

Lời mở đầu

I.Giới thiệu nghiệp vụ quản lý kho hàng

1.Kho là gì ? Quản lý kho hàng là gì ?

a. Kho là gì ?
Kho là loại hình cơ sở logistics được sử dụng cho việc lưu trữ, dự trữ, bảo quản hàng hóa hay vật tư của doanh nghiệp nhằm cung ứng hàng hóa/nguyên liệu cho khách hàng/cho hoạt động xây dựng, sản xuất một cách nhanh chóng và tiết kiệm chi phí nhất.

b.Quản lý kho là gì ?

         Quản lý kho hay hàng tồn kho là hoạt động quan trọng giúp doanh nghiệp cân bằng giữa nhu cầu dự trữ hàng hóa cho các hoạt động sản xuất phân phối và yêu cầu giảm chi phí quản lý hàng tồn kho. Quản lý kho hiệu quả chính là giải pháp giúp giảm chi phí và tăng doanh thu cho doanh nghiệp. Việc duy trì hàng tồn kho một cách không hợp lý và hiệu quả ảnh hưởng rất nhiều đến hoạt động sản xuất kinh doanh của doanh nghiệp. Chính vì vậy, điều cần thiết là phải có cách thức quản lý kho hàng, kho vật tư phù hợp.

2. Giới thiệu phần mềm quản lý kho hàng Cty Datasa

Phần mềm quản lý kho hàng trực tuyến Datasa đã được rất nhiều doanh nghiệp ứng dụng nhằm giúp công tác quản lý xuất nhập kho trở nên đơn giản, hiệu quả và chuyên nghiệp hơn.

Phần mềm này sẽ giúp bạn:

  • Quản lý mua-nhập hàng: đơn đặt hàng, nhập hàng, trả lại hàng bán
  • Quản lý bán-xuất hàng: bán buôn, bán lẻ, trả lại nhà cung cấp
  • Quản lý hàng tồn kho: nhập số dư hàng tồn kho đầu kỳ, chính sách giá bán, điều chuyển kho, kết chuyển số dư, in tem mã vạch, in tem kệ hàng…
  •  Quản lý công nợ: nhập số dư công nợ đầu kỳ, thu chi công nợ, kết chuyển số dư công nợ, tổng hợp, chi tiết công nợ
  •  Thông tin quản trị (Dashboard): thông tin quản trị mang tính tức thời về doanh số bán hàng, công nợ, hàng tồn kho, v.v…
  •  Quản lý báo cáo: báo cáo hàng tồn kho, báo cáo thu chi, báo cáo công nợ, sổ nhật ký giao dịch, bảng kê hàng hóa, báo cáo quản trị bán hàng, sổ tổng hợp tài khoản, sổ quỹ,…
  • Quản lý hệ thống: tham số công ty, tham số chương trình, tham số giao dịch phát sinh, quản lý bảo mật (người dùng, phần quyền…), công cụ thao tác với cơ sở dữ liệu…

II. Phân Tích Và Thiết Kế Hệ Thống

1.Lập Trình dựa trên nền tảng

– Nền tảng công nhệ : Microsoft Visualstudio.
– Hệ quản trị cơ sở dữ liệu : SQL server managerment.
– Thư viện sử dụng : .NET Framework, Devexpress.
– Hệ thống báo cáo : Xtrareport,Excel ,Gridview.
– Ngôn ngữ giao diện và báo cáo : Tiếng Việt, tiếng Hoa, Tiếng Anh …
– Môi trường làm việc : DESKTOP WINDOWN.
– Kết nối : Mạng nội bộ LAN, INTERNET, VPN.

2. Phân Tích Dữ Liệu, Thiết Kế Database

a. Database

+ table client

Create table [CLIENT](

[Cus_id] Varchar(6) NOT NULL,

[Cus_name] Nvarchar(50) NULL,

Primary Key ([Cus_id]))

+ table PRODUCTS

Create table [PRODUCTS](

[Pro_id] varChar(5) NOT NULL,

[Pro_name] Nvarchar(100) NULL,

[Quantity] Decimal(18,0) NULL,

[Unit] Varchar(5) NULL

Primary Key ([Pro_id])

+ table MASTERS

Create table [MASTERS](

[Master_id] varChar(5) NOT NULL,

[Cus_id] Varchar(6) NOT NULL,

[Dates] Date NULL,

[Votes] Varchar(5) NULL

Primary Key ([Master_id])

+ table DETAIL

Create table [DETAIL](

[Detail_id] Varchar(8) Primary Key,

[Pro_id] varChar(5) NOT NULL,

[Master_id] varChar(5) NOT NULL,

[Number] Decimal(18,0) NULL,

[Price] Decimal(18,3) NULL,
)

+liên kết
Set quoted_identifier on
go
Set quoted_identifier off
go
Alter table [MASTERS] add foreign key([Cus_id]) references [CLIENT] ([Cus_id]) on update cascade
go
Alter table [DETAIL] add foreign key([Pro_id]) references [PRODUCTS] ([Pro_id]) on update cascade
go
Alter table [DETAIL] add foreign key([Master_id]) references [MASTERS] ([Master_id]) on update cascade
go

  • Liên kết giữa các bảng

b. Dữ Liệu

Nguồn dữ liệu được cung cấp bởi khách hàng.

 

III. XÂY DỰNG CHƯƠNG TRÌNH, GIAO DIỆN PHẦN MỀM

1.  Xây Dựng các From, Chương trình

2 Giao diện chương trình

2.1 các chức năng cơ bản trên phần mềm

a. chức năng thêm mới

 Add New : cho phép người dùng có thể Thêm thông tin , giá trị mới vào phần mềm

code:

private void btNew_Click(object sender, EventArgs e)
{
setcontrol();
Themmoi = true;
string id = ID_Voucher();
cbedDocument_Number.Text=(id);
cbedDocument_Number.Enabled = false;
dateEnter.Focus();
MessageBox.Show(“Invite you to add a new import bill!”);

}

b. chức năng lưu (save)

Nút Save: khi người dùng Thêm Mới dữ liệu vào phần mềm và bấm vô save để lưu dữ liệu lại .

code:

private void btSave_Click(object sender, EventArgs e)
{
if (Themmoi == true)
{
if (dateEnter.Text == “” || cbedDocument_Number.Text == “”)
{
MessageBox.Show(“No data. Please check back!”);
}
else
{
//string id = ID_Voucher();
string ma = ID_Detailed();//da co trong csdl ha
string connString = @”Data Source=LUUGIAHAN;Initial Catalog=INFOSALL;Integrated Security=true;”;
SqlConnection cn = new SqlConnection(connString);
cn.Open();
//kn.khoidong();
// Start a local transaction.
SqlTransaction sqlTran = cn.BeginTransaction();
// Enlist a command in the current transaction.
SqlCommand command = cn.CreateCommand();
command.Transaction = sqlTran;

try
{
string ngay = String.Format(“{0:MM/dd/yyyy}”, dateEnter.EditValue);
// Execute two separate commands.
command.CommandText =
“insert into [Voucher] values (‘” + cbedDocument_Number.Text + “‘,’” + lookUpEdit2.Text + “‘,’” + ngay + “‘,’PNK’)”;
command.ExecuteNonQuery();
float thanhtien = float.Parse(txtedNumber.Text) * float.Parse(txtedUnit_Price.Text);
txtedInto_Momey.Text = thanhtien.ToString();
command.CommandText =
“insert into [Detailed] values (‘” + ma + “‘,’” + cbedDocument_Number.Text + “‘,’” + lookUpEdit3.Text + “‘,’” + txtedNumber.Text + “‘,’” + txtedUnit_Price.Text + “‘,’” + txtedInto_Momey.Text + “‘)”;
command.ExecuteNonQuery();
// Commit the transaction.
sqlTran.Commit();
MessageBox.Show(“Both records were written to database.”);
//frmImport_Ballot_Load(sender,e);
}
catch (Exception ex)
{
// Handle the exception if the transaction fails to commit.
MessageBox.Show(ex.Message);
try
{
// Attempt to roll back the transaction.
sqlTran.Rollback();
}
catch (Exception exRollback)
{
// Throws an InvalidOperationException if the connection 
// is closed or the transaction has already been rolled 
// back on the server.
MessageBox.Show(exRollback.Message);
}
}
}
}
else
{

string connString = @”Data Source=LUUGIAHAN;Initial Catalog=INFOSALL;Integrated Security=true;”;
SqlConnection cn = new SqlConnection(connString);
cn.Open();
SqlCommand command = cn.CreateCommand();
SqlTransaction transaction;
// Start a local transaction.
transaction = cn.BeginTransaction();
// Must assign both transaction object and connection
// to Command object for a pending local transaction
command.Connection = cn;
command.Transaction = transaction;
try
{

string ngay = String.Format(“{0:MM/dd/yyyy}”, dateEnter.EditValue);
command.CommandText =
“UPDATE Voucher SET Customer_Id = ‘” + lookUpEdit2.Text + “‘ ,Date_Invoice=’” + ngay + “‘ WHERE Id_Voucher= ‘” + cbedDocument_Number.Text + “‘”;
command.ExecuteNonQuery();
float thanhtien = float.Parse(txtedNumber.Text) * float.Parse(txtedUnit_Price.Text);
txtedInto_Momey.Text = thanhtien.ToString();
command.CommandText =
“Update Detailed SET Id_Voucher=’” + cbedDocument_Number.Text + “‘,Goods_Id=’”+lookUpEdit3.Text+”‘, Number=’” + txtedNumber.Text + “‘,Unit_Price=’” + txtedUnit_Price.Text + “‘,Into_Money=’” + txtedInto_Momey.Text + “‘ WHERE Detailed_Id = ‘” + textBox1.Text + “‘”;
command.ExecuteNonQuery();
// Attempt to commit the transaction.
transaction.Commit();
MessageBox.Show(“Both versions are updated in the database.”);
}
catch (Exception ex)
{
// Handle the exception if the transaction fails to commit.
MessageBox.Show(ex.Message);
try
{
// Attempt to roll back the transaction.
transaction.Rollback();
}
catch (Exception exRollback)
{
// Throws an InvalidOperationException if the connection 
// is closed or the transaction has already been rolled 
// back on the server.
MessageBox.Show(exRollback.Message);
}
}
}
cbedDocument_Number.Enabled = true;
frmImport_Ballot_Load(sender, e);

gcImport.DataSource = imp_model.LoadImport();
}

c.chức năng Updata(sửa)

Update: khi người dùng sử dụng dữ liệu và muốn thêm mới dữ liệu hoặc sửa dữ liệu cũ thì người dùng có thể bấm vào update để sửa dữ liệu sau đó bấm lại nút save để lưu

code:

private void btNew_Click(object sender, EventArgs e)
{

if (Themmoi == true)
{
if (txtedGod_id.Text == “” || txtedGod_Name.Text == “”)
{
MessageBox.Show(“No data. Please check back!”);
}
else
{
// string ma = ID_Detailed();//da co trong csdl ha
//con.Open();
string connString = @”Data Source=LUUGIAHAN;Initial Catalog=INFOSALL;Integrated Security=true;”;
SqlConnection cn = new SqlConnection(connString);
cn.Open();
// Start a local transaction.
SqlTransaction sqlTran = cn.BeginTransaction();
// Enlist a command in the current transaction.
SqlCommand command = cn.CreateCommand();
command.Transaction = sqlTran;

try
{
// Execute two separate commands.
command.CommandText =
“insert into [Goods] values (‘” + txtedGod_id.Text + “‘,N’” + txtedGod_Name.Text + “‘,’” + txtedUnit.Text + “‘,’” + txtedNumber.Text + “‘)”;
command.ExecuteNonQuery();
//float thanhtien = float.Parse(txtedNumber.Text) * float.Parse(txtedUnit_Price.Text);
//txtedInto_Momey.Text = thanhtien.ToString();
//command.CommandText =
// “insert into [Detailed] values (‘” + ma + “‘,’” + txtedDocument_Number.Text + “‘,’” + cbGoods.Text + “‘,’Kg’,’” + txtedNumber.Text + “‘,’” + txtedUnit_Price.Text + “‘,’” + txtedInto_Momey.Text + “‘)”;
//command.ExecuteNonQuery();
// Commit the transaction.
sqlTran.Commit();
MessageBox.Show(“Both records were written to database.”);
txtedGod_id.Focus();
setcontrol();
}
catch (Exception ex)
{
// Handle the exception if the transaction fails to commit.
MessageBox.Show(ex.Message);
try
{
// Attempt to roll back the transaction.
sqlTran.Rollback();
}
catch (Exception exRollback)
{
// Throws an InvalidOperationException if the connection 
// is closed or the transaction has already been rolled 
// back on the server.
MessageBox.Show(exRollback.Message);
}
}
}
}
}

d.chức năng xóa (delete)

delete: tạo ra để xóa đi dữ liệu nhập sai hoặc bỏ đi dữ liệu không cần thiết..

code:

public void delete()
{
string connString = @”Data Source=LUUGIAHAN;Initial Catalog=INFOSALL;Integrated Security=true;”;
SqlConnection cn = new SqlConnection(connString);
cn.Open();

SqlTransaction objTrans = cn.BeginTransaction();
try
{
SqlCommand cmd = cn.CreateCommand();
cmd.CommandType = CommandType.Text;
cmd.Transaction = objTrans;
cmd.CommandText =
“DELETE from Detailed WHERE Detailed_Id= ‘” + textBox1.Text + “‘”;
cmd.ExecuteNonQuery();
string id = gvGoods.GetRowCellValue(gvGoods.FocusedRowHandle, gvGoods.Columns[4]).ToString();
cmd.CommandText =
“DELETE Goods WHERE Goods_Id =’” + id + “‘”;
cmd.ExecuteNonQuery();

objTrans.Commit();
MessageBox.Show(“The system deleted successfully”);

}
catch (Exception ex)
{
// Handle the exception if the transaction fails to commit.
MessageBox.Show(ex.Message);
try
{
// Attempt to roll back the transaction.
objTrans.Rollback();
}
catch (Exception exRollback)
{
// Throws an InvalidOperationException if the connection 
// is closed or the transaction has already been rolled 
// back on the server.
MessageBox.Show(exRollback.Message);
}
}
gcGoods.DataSource = god_model.LoadGoods();

}

e.Xóa.

public void delete()
{
string connString = @”Data Source=QUANGKHAI;Initial Catalog=SALES_MANAGER;Integrated Security=true;”;
SqlConnection cn = new SqlConnection(connString);
cn.Open();
SqlTransaction objTrans = cn.BeginTransaction();
SqlCommand cmd = cn.CreateCommand();
cmd.CommandType = CommandType.Text;
cmd.Transaction = objTrans;
try
{

cmd.CommandText =
“DELETE from Detailed WHERE Detailed_Id= ‘” + textBox1.Text + “‘”;
cmd.ExecuteNonQuery();
cmd.CommandText=
“DELETE from Voucher where Id_Voucher=’”+cbedDocument_Number.Text+”‘”;
cmd.ExecuteNonQuery();
objTrans.Commit();
MessageBox.Show(“Transaction Committed “);

}
catch (Exception ex)
{
// Handle the exception if the transaction fails to commit.
MessageBox.Show(ex.Message);
try
{
// Attempt to roll back the transaction.
objTrans.Rollback();
}
catch (Exception exRollback)
{
// Throws an InvalidOperationException if the connection 
// is closed or the transaction has already been rolled 
// back on the server.
MessageBox.Show(exRollback.Message);
}
}

3. Báo cáo

a. báo cáo tổng hợp sản phẩm tồn

sản phẩm tồn có thể tính theo ngày , theo tháng hoặc theo năm dựa vào yêu cầu của khách hàng.Hệ thống sẽ tự kiểm tra tất cả hàng hóa có trong khoản thời gian vừa chọn ở trên nếu có hàng hóa nào thì sẽ hiển thị hàng hóa có trong khoản thời gian vừa chọn sẽ hiển thị ra cho người dùng xem.

code sql:

 

create Proc oneAgust

@dateTo Date,

@DateFrom date

as

begin

WITH Inventory (ItemId,Pro_name,Unit,InventoryFirst,ImQuantity,ExQuantity,FinishInventory)

AS

(

select   ItemId,Pro_name,Unit, sum(InventoryFirst) InventoryFirst, sum(ImQuantity) ImQuantity , sum(ExQuantity) ExQuantity ,

sum(InventoryFirst+ImQuantity -ExQuantity) FinishInventory  from (

 

select ItemId,Pro_name,Unit, sum(ImQuantity – ExQuantity) InventoryFirst , 0 ImQuantity , 0 ExQuantity

from v_datafn where dates < @DateFrom–‘2010-08-01’

group by ItemId,Pro_name,Unit

union all

select ItemId,Pro_name,Unit, 0 InventoryFirst, sum(ImQuantity) ImQuantity ,sum( ExQuantity) ExQuantity

from v_datafn where dates  between @DateFrom  and @dateTo –‘2010-08-01’ –‘2015-08-31’

group by ItemId,Pro_name,Unit) DATA group by ItemId,Pro_name,Unit

)

SELECT ItemId,Pro_name,Unit,InventoryFirst,ImQuantity,ExQuantity,FinishInventory

FROM Inventory

End

 

Code báo cáo theo 1 sản phẩm.

 

create procedure sp_Inventory_product

@ItemId varchar(50),

@datefrom date,

@dateto date

as

begin

declare @tondau decimal=(select sum(Quantity) Quantity from PRODUCTS where Pro_id=@ItemId)

declare @nhap_pre decimal = (select SUM(Number) Import from MASTERS R inner join Detail D on D.Master_id=R.Master_id where votes=’PNK’ and pro_id = @ItemId and Dates < @datefrom)

declare @xuat_pre decimal = (select SUM(Number) Export from MASTERS R inner join Detail D on D.Master_id=R.Master_id where votes=’PXK’ and  Pro_id = @ItemId and Dates < @datefrom)

set @tondau = ISNULL(@tondau,0) + ISNULL(@nhap_pre,0) – ISNULL(@xuat_pre,0)

declare @tb table (pro_id varchar(6),pro_name nvarchar(50),Dates date, Import decimal, Export decimal, Inventory decimal);

 

select Dates,sum(Number) import, 0 export into #Im1 from MASTERS R inner join Detail D on D.Master_id=R.Master_id

where votes=’PNK’ and Pro_id=@ItemId group by Dates

select Dates, 0 import ,sum(Number) export into #Im2  from MASTERS R inner join Detail D on D.Master_id=R.master_id

where votes=’PXK’ and Pro_id=@ItemId group by Dates

 

declare @Id varchar(6)=(select Pro_id from PRODUCTS where Pro_id=@ItemId)

declare @Name nvarchar(50)=(select Pro_name from PRODUCTS where Pro_id=@ItemId )

 

declare @totalday int = DATEDIFF(day,@datefrom,@dateto);

declare @day date = @datefrom

declare @inventoryno_pre decimal

declare @nextday date, @quan1 decimal, @quan2 decimal, @inventory_tamp decimal;

declare @bool bit = 1;

if(@quan1 !=0 or @quan2 !=0)

begin

insert into @tb(pro_id,pro_name,Dates,Import,Export,Inventory) values(@Id,@Name,@nextday,@quan1,@quan2,@tondau + @quan1 – @quan2)

set @bool = 0

end

while (@totalday >0)

begin

set @inventoryno_pre  = ISNULL((select Inventory from @tb where Dates = @day),0)

set @nextday = DATEADD(day,1,@day)

set @day = @nextday

set @quan1 = ISNULL((select Sum(import) from #Im1 where [Dates] = @nextday),0)

set @quan2 = ISNULL((select Sum(export) from #Im2 where [Dates] = @nextday),0)

if(@inventoryno_pre !=0)

set @inventory_tamp = @inventoryno_pre

 

if(@quan1 !=0 or @quan2 !=0)

begin

if(@bool = 1)

begin

insert into @tb(pro_id,pro_name,Dates,Import,Export,Inventory) values(@Id,@Name,@nextday,@quan1,@quan2,@tondau + @quan1 – @quan2)

set @bool = 0

end

else

begin

insert into @tb(pro_id,pro_name,Dates,Import,Export,Inventory) values(@Id,@Name,@nextday,@quan1,@quan2,@inventory_tamp + @quan1 – @quan2)

end

end

set @totalday = @totalday -1

end

select *,total=@tondau

from @tb

END

4.Xuất Excel

Khi người dùng bấm vô import excel thì phần mềm sẽ giúp người dùng xuất dữ liệu báo cáo ra excel.

code:

private void ExportToXLS()
{

A path to export a report.
string reportPath = “E:\\INVENTORY REPORT DETAILS.xls”;
gcbaocao.ExportToXls(reportPath);

Create a report instance.
XtraReport2 report = new XtraReport2();
XtraReport2 rpt = new XtraReport2();
report.DataSource = dt;
report.BinData();
Get its XLS export options.
XlsExportOptions xlsOptions = report.ExportOptions.Xls;

Set XLS-specific export options.
xlsOptions.ShowGridLines = true;
xlsOptions.TextExportMode = TextExportMode.Value;
xlsOptions.ExportHyperlinks = true;
xlsOptions.SheetName = “My Sheet”;

Export the report to XLS.
report.ExportToXls(reportPath);

Show the result.
StartProcess(reportPath);

}

IV Đánh Giá