ĐƠN HÀNG GIA CÔNG TẠI CÔNG TY XYZ
Trang 1 GIỚI THIỆU:
Thực hiện chương trình: Võ Hòa Đoàn
Ngày cập nhật sau cùng: Ngày 26 tháng 10 năm 2004
XYZ là một Công Ty hoạt động theo mô hình phục vụ, được mô tả như sau:
Khách hàng ký các đơn đặt hàng để gia công các sản phẩm nào đó.Nguyên liệu sẽ do khách hàng cung cấp để sản xuất và khi sản xuất xong thì Công ty sẽ giao sản phẩm được sản xuất cho khách hàng theo các đơn hàng đã ký Việc tính lượng tồn nguyên liệu tồn còn lại dựa theo định mức sản xuất là bao nhiêu, các nguyên liệu nào để cho ra 1 đơn vị sản phẩm
Quản lý việc thanh toán (tiền gia công), công nợ khách hàng vàquản lý tồn nguyên liệu màcông ty còn giữ của khách hàng sau khi đã trừ các nguyên liệu sản xuất và giao các sản phẩm
Chương trình được viết trên ngôn ngữ Visual Basic, kết nối với Cơ sở dữ liệu Access; cùng với
2 phần mềm Data Widgets để hiển thị dữ liệu lên lưới và Crystal Report 8.5 để lập báo cáo Chúng em đã được sự hướng dẫn tận tình của thầy Phạm Ngọc Linh cũng như ý kiến đóng góp
quý báo của các bạn Tuy nhiên thới gian và kinh nghiệm có hạn nên chương trìng không tránhkhỏi thiếu sót, hạn chế Rất mong được sự góp ý của quý thầy cô và ý kiến của các bạn
Trang 2 Chương trình kết nối trên Cơ sở dữ liệu Access.
Để kết nối với các hệ quản trị cơ sở dữ liệu bằng đối tượng ADO phải dùngchuỗi chuổi kết nối ( SQLConn ) thông qua trình điều khiển Provider:
SQLConn = " Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source=
<”đường dẫn.Tên database”> Persist Security Info=False "
Đối tượng Connection:
Dùng để kết nối các hệ quản trị cơ sở dữ liệu, thực thi câc lệnhSQL(insert, update, delete) thông qua phương thức Execute
Có thể tạo đối tượng connection thông qua nhiều cách:
Dim Conn as new ADODB.ConnectionThực thi câu lệnh SQL
<Đối tượng connection”>.Execute <”Câu lệnh SQL”>
Ví dụ: Với câu lện SQL:
Str = " insert into GIAONHAN values('" & Trim(cboSoPhieu) & "','" &Trim(cboSoDDH) & "','" & Trim(txtNgay) & "')"
Conn.Execute Str
Đối tượng Recordset :
Dùng để thực thi lấy mẫu tin từ cơ sở dữ liệu thông qua câu lệnh SQLSelect
Có thể tạo đối tượng Recordset bằng cách:
Dim Rst as new ADODB RecordsetCâu lệnh SQL:
strSQL = " select TenkhachHang From KhachHang "
Thực thi câu lệnh SQL
<“Đối tượng Recordset”>.open <”Câu lệnh SQL”>,<”Đối tượngconnection”>
Trang 3ví dụ: Rst.Open strSQL ,Conn
I MÔ TẢ CÁC PHIẾU:
1 Phiếu nhập nguyên liệu:
Nguyên liệu được Khách Hàng cung cấp sau khi Công ty và khách hàng thoả thuận việc giacông sản phẩm mà khách hàng yêu cầu
Nguyên liệu Số lượng ĐVT
2 Đơn đặt hàng:
Sản phẩm ĐVT Số lượng Đơn giá
3 Phiếu giao nhận:
Trang 44 Phiếu thanh toán:
PHÂN TÍCH THÀNH PHẦN DỮ LIỆU CỦA ỨNG DỤNG:
1 Sơ đồ quan niệm dữ liệu:
Trang 5Hình 1: Sơ đồ Quan niệm dữ liệu của ứng dụng ĐƠN HÀNG GIA CÔNG
2 Mô tả dữ liệu:
a) Các loại thực thể:
DonDatHang Đơn đặt hàng
ChiTietDonDatHang Chi tiết đơn đặt hàng
DinhMucSanXuat Định mức sản xuất
ChiTietGiaoNhan Chi tiết giao nhận
Trang 6NhapXuatNguyenLieu Nhập xuất nguyên liệu
ChiTietNguyenLieu Chi tiết nguyên liệu
b) Mô tả các loại thực thể:
b1) Thực thể Khách hàng:
MaKhachHang Mã khách hàng Text Khoá chínhTenKhachHang Tên khách hàng Text
b2) Thực thể đơn đặt hàng:
SoDonDatHang Số đơn đặt hàng Text Khoá chínhMaKhachHang Mã khách hàng Text Khoá ngoại
b3) Thực thể Chi tiết đơn đặt hàng:
SoDonDatHang Số đơn đặt hàng Text Khoá chính
SoLuongDatHang SL đặt hàng Number
b4) Thực thể Sản phẩm:
TenSanPham Tên sản phẩm Text
b5) Thực thể Định mức sản xuất:
Trang 7Thuộc tính Diễn giải Kiểu Ràng buộc
SoLuongSanXuat Số lượng sản xuất Number
b6) Thực thể công nợ:
NgayCongNo Ngày công nợ Date() Khoá chínhMaKhachHang Mã khách hàng Text Khoá ngoại
b7) Thực thể Giao Nhận:
SoDonDatHang Số đơn đặt hàng Text Khoá ngoại
b8) Thực thể Chi tiết giao nhận:
b9) Thực thể Nguyên Liệu:
Ten NguyenLieu Tên nguyên liệu Text
b10) Thực thể Thanh Toán:
SoThanhToan Số thanh toán Text Khoá chínhNgayThanhToan Ngày thanh toán Date() Khoá ngoại
Trang 8MaKhachHang Mã khách Hàng Text
TienThanhToan Tiền thanh toán Number
b11) Tthực thể Tồn:
MaKhachHang Mã khách hàng Text Khoá ngoại
b12) Thực thể Nhập xuất nguyên liệu:
SoHoaDonNhap Số hoá đơn nhập Text Khoá chínhMaKhachHang Mã khách hàng Text Khoá ngoại
b13) Thực thể Chi tiết nguyên liệu:
SoHoaDonNhap Số hoá đơn nhập Text Khoá ngoại
c) Ràng buộc toàn vẹn:
Trang 9 RÀNG BUỘC MIỀN GÁI TRỊ:
R2-01: (CTDDH.SoDDH>0) and (CTDDH.SLDH>0) and (CTDDH.DG>0)
R2-02: (SP.DVT> 0 ) and (SP.DG > 0)R2-03: (DMSX.SLSX > 0)
R2-04: (GN.NgGiao < DDH.NgKK)R2-05: (CTNL.SL > 0)
R2-06: (NL.DVT > 0)R2-07: (TT.TienTT > 0)
RÀNG BUỘC GIỮA CÁC THUỘC TÍNH TRONG THỰC THỂ:
R3-0: CNOCK = CNODK + TIENNO - TIENTHU
R3-0: SLTonCK = SLTonDK + NHAP - XUAT
R3-0: Tiền đặt hàng = CTDDH.SLDH * CTDDH.DGR3-0: Tiền giao nhận = CTGN.SL * CTGN.DGR3-0: Số tiền nợ đầu kì ( CNODK ) của tháng này phải bằng số tiền nợ cuối kì ( CNOCK ) của tháng trước
R3-0: Số lượng tồn đầu kì ( SLTonDK ) của tah1ng này phải bằng số lựơngtồn cuối kì ( SLTonCK ) của tháng trước
PHÂN TÍCH THÀNH PHẦN XỬ LÝ CỦA ỨNG DỤNG:
XL1: Cập nhật Nguyên liệu
XL2: Cập nhật phiếu Nhập nguyên liệu
XL3: Cập nhật đơn đặt hàng
XL4: Cập nhật Phiếu giao nhận
XL5: Cập nhật Phiếu thanh toán
XL6: Tính Công nợ Khách hàng
XL7: Tính Tồn Nguyên liệu
MÔ TẢ CÁC XỬ LÝ:
Qui tắc : Số lượng nhập trong tháng t của NL n bằng tổng số lượng của CTNL
trong tháng t có liên quan đến NL n
Trang 10_Tên xử lý : XL3:
Chức năng : Cập nhật Đơn đặt hàng
Input : SDDH, MSP, DDH, CTDDH, KH, SP
Qui tắc : Số lượng Sản phẩm Khách hàng đặt trong tháng t bằng tổng số sản
phẩm của CTDDH trong tháng t có liên quan đến sản phẩm đó
_Tên xử lý : XL4:
Chức năng : Cập nhật phiếu Giao nhận
Input : SoP p, SoDDH h, GN, CTGN, DDH, CTDDH
Qui tắc : Số lượng giao nhận sản phẩm trong tháng t bằng tổng số lượng giao
nhận của CTGN trong tháng t liên quan đến Sản phẩm đó
_Tên xử lý : XL5
Chức năng : Cập nhật phiếu thanh toán
Input : SoTT, MKH, TTOAN, KH
Qui tắc : Số tiền thanh toán trong tháng t bằng tổng tiền thanh toán của
TTOAN trong tháng t có liên quan đến KH k
Chức năng : Tính tồn Nguyên liệu :
Input : NgTON, LN, TON
Qui tắc : TONCK = TONDK + NHAP - XUAT
III THIẾT KẾ DỮ LIỆU :
1 Sơ đồ Logic dữ liệu:
Trang 11Hình 2: Sơ đồ Logic dữ liệu của ứng dụng ĐƠN HÀNG GIA CÔNG
2 Từ điển dữ liệu:
MaKhachHang Mã khách hàng
TenKhachHang Ten khách hàng
SoDonDatHang Số đơn đặt hàng
TenSanPham Tên sản phẩm
Trang 12NgayGiao Ngày giao
NgayCongNo Ngày công nợ
TienCongNo Tiền công nợ
TenNguyenLieu Tên Nguyên liệu
SoThanhToan Số thanh toán
NgayThanhToan Ngày thanh toán
TienThanhToan Tiền thanh toán
SoHoaDonNhap Số hoá đơn nhập
SoLuongDatHang Số lượng đặt hàng
SoLuongSanXuat Số lượng sản xuất
SoLuongTon Số lượng tồn
3 Mô tả các bảng:
Trang 13MaKhachHang Text Ngoại
Khoá ngoại Bảng tham chiếu Khoá nội
3.3) Đơn đặt hàng
Khoá ngoại Bảng tham chiếu Khoá nội
3.4) Chi tiết Đơn đặt hàng
Thuộc tính:
Trang 14Thuộc tính Kiểu Khóa
Khoá ngoại Bảng tham chiếu Khoá nội
3.5) Tồn :
Thuộc tính:
Khoá ngoại Bảng tham chiếu Khoá nội
Trang 15NguyenLieu NguyenLieu NguyenLieu
Khoá ngoại Bảng tham chiếu Khoá nội
3.8) Giao Nhận:
Thuộc tính:
Trang 16Thuộc tính Kiểu Khóa
Khoá ngoại Bảng tham chiếu Khoá nội
3.9) Chi tiết Giao Nhận:
Thuộc tính:
Khoá ngoại Bảng tham chiếu Khoá nội
3.10) Nguyên liệu:
Trang 17Khoá ngoại Bảng tham chiếu Khoá nội
3.12) Nhập xuất nguyên liệu :
Trang 18Khoá ngoại Bảng tham chiếu Khoá nội
3.13) Chi tiết nguyên liệu :
Thuộc tính:
Khoá ngoại Bảng tham chiếu Khoá nội
4 MÔ TẢ CÁC RÀNG BUỘC TOÀN VẸN :
Trang 19R1-05 : id( CHITIETDONDATHANG ) = SDDH, SPR1-06 : id( SANPHAM ) = SANPHAM
R1-07 : id( DINHMUCSANXUAT ) = NL, SP
R1-08 : id( GIAONHAN ) = SPhieu, SDDH
R1-09 : id( CHITIETGIAONHAN ) = SPhieu, SP
R1-10 : id( THANHTOAN ) = SoTT, MKH
Trang 20H1ình 3: Màn hình chính của ứng dụng.
Danh Mục:
Menu Đặt hàng Khách hàng đặt đơn hàng mới.Menu Giao nhận Giao hàng cho Khách hàng.Menu Nhập xuất Nguyên liệu Nhập nguyên liệu từ khách hàng
2 Màn hình Đặt hàng:
Trang 21Hình 4: Màn hình Đơn đặt hàng mới
Source code lấy Mã KH lên combobox:
Dim sqlMKH As String sqlMKH = "Select MaKhachHang from KhachHang order by MaKhachHang asc" Set rsMKH = New ADODB.Recordset
rsMKH.Open sqlMKH, Conn, adOpenKeyset, adLockOptimistic
strSQL = "SELECT ChiTietDonDatHang.SanPham, SanPham.TenSanPham, SanPham.DonViTinh, ChiTietDonDatHang.SoLuongDatHang,
Trang 22Cnn.Open SQLConn ' KHÔNG DÙNG BIẾN Conn
Rst.Open strSQL, Conn, adOpenKeyset, adLockOptimistic
Source code khi nhấn nút mới số DDH sẽ tự tăng:
Private Sub cmdmoi_Click() txtSDDH.SetFocus
Dim SQLddh As String SQLddh = "select sodondathang from dondathang "
Set rsDDH = New ADODB.Recordset rsDDH.CursorLocation = adUseClient rsDDH.Open SQLddh, Conn, 0, 3 SDDH = Mid(Trim(txtSDDH.Text), 2, 2) txtSDDH.Text = SDDH & "DDH" & rsDDH.RecordCount + 1 End Sub
: Khi nhấn nút lưu thì sẽ gọi màn hình Đặt hàng mới để nhập thêm thông tin của sản phẩm mới:
: Lưu dữ liệu mới xuống cơ sở dữ liệu
Source code Lưu dữ liệu:
Private Sub cmdLuu_Click() Dim Rs As New ADODB.Recordset Dim rs1 As New ADODB.Recordset Dim SQL2 As String
Dim SQL3 As String
Trang 23MsgBox " Xin nhap dau du thong tin truoc khi luu ", vbOKOnly +
vbExclamation, "THONG BAO"
Me.MousePointer = 0
End If
SQL2 = " insert into KHACHHANG values('" &
Trim(frm1DatHang.cboMKH) & "','" & Trim(frm1DatHang.txtTKH) & "','" & Trim(frm1DatHang.txtDiachi) & "','" & Trim(frm1DatHang.txtDienthoai) & "')" SQL3 = " insert into DONDATHANG values(' " &
Trim(frm1DatHang.txtSDDH) & " ',' " & Trim(frm1DatHang.cboMKH) & " ',' " & Trim(frm1DatHang.txtNgayKK) & " ')"
SQL4 = " insert into CHITIETDONDATHANG values(' " &
Trim(frm1DatHang.txtSDDH) & " ',' " & Trim(cboSP) & " ',' " & Trim(txtSl) & " ',' "
& Trim(txtDG) & " ',' " & Trim(frm1DatHang.txtHanGiao) & " ') "
Conn.Execute SQL2
Conn.Execute SQL3
Conn.Execute SQL4
SQL5 = " update DONDATHANG set MAKHCHHANG='" &
Trim(frm1DatHang.cboMKH) & "', TENKHACHHANG='" &
Trim(frm1DatHang.txtTKH) & "', NGAYKIKET='" &
Trim(frm1DatHang.txtNgayKK) & "',HANGIAO='" &
Trim(frm1DatHang.txtHanGiao) & "' WHERE SODONDATHANG='" &
Trim(frm1DatHang.txtSDDH) & "'"
SQL6 = " update KHACHHANG set MAKHACHHANG='" &
Trim(frm1DatHang.cboMKH) & "',TENKHACHHANG='" &
Trim(frm1DatHang.txtTKH) & ",DIACHI='" & Trim(frm1DatHang.txtDiachi) &
"',DIENTHOAI='" & Trim(frm1DatHang.txtDienthoai) & "'"
SQL7 = " update CHITIETDONDATHANG set SODONDATHANG='" & Trim(frm1DatHang.txtSDDH) & "',SANPHAM='" & Trim(cboSP) &
"',SOLUONGDATHANG='" & Trim(txtSl) & "',DONGIA='" & Trim(txtDG) &
"',HANGIAO='" & Trim(frm1DatHang.txtHanGiao) & "'"
Conn.Execute SQL5
Conn.Execute SQL6
Conn.Execute SQL7
End Sub
Trang 24: Thoát cửa sổ đơn đặt hàng.
3 Màn hình Giao Nhận:
Hình 5: Màn hình giao nhận sản phẩm cho khách hàng.
Source code lấy dữ liệu lên cbo số phiếu:
Dim sql As String
sql = "select sophieu from giaoNhan "
Set rsSoP = New ADODB.Recordset
rsSoP.Open sql, Conn, adOpenKeyset, adLockOptimistic Set cboSoPhieu.DataSourceList = rsSoP
cboSoPhieu.DataFieldList = "SoPhieu"
cboSoPhieu.Columns(0).Width = 1200
Source code lấy dữ liệu lên cbo số ĐĐH :
1 Dim sql1 As String
sql1 = "select sodondathang from dondathang"
Set rsSoDDH = New ADODB.Recordset
Trang 25rsSoDDH.Open sql1, Conn, adOpenKeyset, adLockOptimistic Set cboSoDDH.DataSourceList = rsSoDDH
cboSoDDH.DataFieldList = "SoDonDathang"
cboSoDDH.Columns(0).Width = 1230
Source code lấy dữ liệu lên lưới:
Dim strSQL As String Dim Cnn As New ADODB.Connection strSQL = "select * from SanPham"
Set Rst = New ADODB.Recordset Rst.CursorLocation = adUseClient 'Conn.Open SQLConn
Cnn.Open SQLConn ' KHÔNG DÙNG BIẾN Conn Rst.Open strSQL, Conn, adOpenKeyset, adLockOptimistic SSOGiaoNhan.Columns(0).DataField = "sanpham"
: Lưu dữ liệu mới xuống cơ sở dữ liệu
Source code Lưu Dữ liệu:
Private Sub CmdLuu_Click () Dim Str As String
Dim Str1 As String Dim Str2 As String Dim Str3 As String
If Trim(cboSoPhieu) = "" Or Trim(cboSoDDH) = "" Then MsgBox " Xin nhap soPHIEU va soDDH truoc khi luu ", vbOKOnly + vbExclamation, "THONG BAO"
Me.MousePointer = 0 End If
Str = " insert into GIAONHAN values('" & Trim(cboSoPhieu) & "','" &
Trim(cboSoDDH) & "','" & Trim(txtNgay) & "')"
Conn.Execute Str
Trang 26Str1 = " update GIAONHAN set SOPHIEU='" & Trim(cboSoPhieu) &
"',SODONDATHANG='" & Trim(cboSoDDH) & "',NGAYGIAO='" &
Trim(SSOGiaoNhan.Columns(3).Text) & "' "
Conn.Execute Str3
End Sub
: thoát cửa sổ Giao nhận
4 Màn hình Nhập xuất Nguyên liệu:
Hình 6: Màn hình nhập xuất nguyên liệu.
Source code lấy dữ liệu lên cbo MAKH:
Trang 27Dim Cnn As New ADODB.Connection
strSQL = "select * from NGUYENLIEU"
Set Rst = New ADODB.Recordset
: Lưu dữ liệu mới xuống cơ sở dữ liệu
: Thoát màn hình Nhập xuất nguyên liệu
Tra cứu :
Menu Khách hàng: Hiển thị Khách hàng và nhập Khách hàng mới
Menu Nguyên liệu: Hiển thị danh sách nguyên kiệu và Nhập nguyên liệu
mới
Menu Sản phẩm: Hiển thị danh sách sản phẩm và nhập sản phẩm mớiMenu Định mức sản xuất: Hiển thị danh sách định mức sản xuất và nhập định
mức sản xuất cho sản phẩm mới
5 Màn hình Khách hàng :
Trang 28Hình 7: Màn hình tra cứu, nhập mới khách hàng.
Source code lấy Mã KH lên combobox:
Dim sqlMKH As String sqlMKH = "Select MaKhachHang from KhachHang order by MaKhachHang asc" Set rsMKH = New ADODB.Recordset
rsMKH.Open sqlMKH, Conn, adOpenKeyset, adLockOptimistic
Dim Cnn As New ADODB.Connection
strSQL = "select * FROM khachhang"
Set Rst = New ADODB.Recordset
Rst.CursorLocation = adUseClient
Cnn.Open SQLConn
Rst.Open strSQL, Conn, adOpenKeyset, adLockOptimistic
SSOkh.Columns(0).DataField = "makhachhang"
Trang 29If Trim(cboKH.Text) = "" Or Trim(txtTKH.Text) = "" Then
MsgBox " Nhap MaKH va TenKH truoc khi luu ", vbOKOnly + vbExclamation,
"WARNING"
Exit Sub
End If
Str = "Insert Into KHACHHANG values('" & Trim(cboKH) & "','" & Trim(txtTKH)
& "','" & Trim(txtDC) & "','" & Trim(txtDT) & "' ) "
Conn.Execute Str
Str1 = "update KHACHHANG set maKhachhang='" & Trim(cboKH) & "',
TenKhachHang='" & Trim(txtTKH) & "', DiaChi='" & Trim(txtDC) & "', DienThoai='"
& Trim(txtDT) & "' WHERE MaKhachHang='" & Trim(cboKH) & "' "
: Thoát màn hình Khách hàng
6 Màn hình Nguyên Liệu :