ĐƠ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ánh khỏ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ùng chuỗ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ệnh SQL(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.Connection
Thự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 SQL Select
Có thể tạo đối tượng Recordset bằng cách: Dim Rst as new ADODB Recordset Câ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ượng connection”>
Trang 3ví dụ: Rst.Open strSQL ,ConnI 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 gia cô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ÔNG2 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ính TenKhachHang Tên khách hàng Text
b2) Thực thể đơn đặt hàng:
SoDonDatHang Số đơn đặt hàng Text Khoá chính MaKhachHang 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ínhDiễn giảiKiểuRà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ính MaKhachHang 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ính NgayThanhToan 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ính MaKhachHang 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
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.DG R3-0: Tiền giao nhận = CTGN.SL * CTGN.DG
R3-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ựơng tồ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ÔNG2 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, SP R1-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 R1-11 : id( TON ) = MKH, NL
R1-12 : id( NHAPXUATNGUYENLIEU ) = SoDDH, MKH R1-13 : id( CHITIETNGUYENLIEU ) = SoHDN, NL
4.2) RÀNG BUỘC VỀ MIỀN GIÁ TRỊ:
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
Dim Cnn As New ADODB.Connection
strSQL = "SELECT ChiTietDonDatHang.SanPham, SanPham.TenSanPham, SanPham.DonViTinh, ChiTietDonDatHang.SoLuongDatHang,
strSQL = strSQL & " FROM SanPham, DonDatHang, ChiTietDonDatHang WHERE DonDatHang.SoDonDatHang = ChiTietDonDatHang.SoDonDatHang AND
SanPham.SanPham = ChiTietDonDatHang.SanPham" Set Rst = New ADODB.Recordset
Rst.CursorLocation = adUseClient
Trang 22Cnn.Open SQLConn ' KHÔNG DÙNG BIẾN Conn Rst.Open strSQL, Conn, adOpenKeyset, adLockOptimistic
: Nút Mới để thêm Đơn đặt hàng mới, khi nhấn nút Mới thì số DDH sẽ tự tăng, ta có thể chọn Khách hàng cũ ở textbox MaKhachHang hoặc điền thông tin mới nếu là Khách hàng mới.
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
: 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
: Khi nhấn nút Mới thì cboSP, cboDDh, txtNgay nhận focus, dữ liệu của cột SL và DG sẽ được nhập 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 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(txtNgay) & "'"
Conn.Execute Str1
Str2 = " insert into CHITIETGIAONHAN values('" & Trim(cboSoPhieu) & "','" & Trim(SSOGiaoNhan.Columns(0).Text) & "','" &
Trim(SSOGiaoNhan.Columns(2).Text) & "','" & Trim(SSOGiaoNhan.Columns(3).Text) & "' ) Conn.Execute Str2
Str3 = " update CHITIETGIAONHAN set SOPHIEU='" & Trim(cboSoPhieu) & "', SANPHAM='" & Trim(SSOGiaoNhan.Columns(0).Text) & "', SOLUONG='" & Trim(SSOGiaoNhan.Columns(2).Text) & "',DONGIA='" &
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 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 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ới Menu Đị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"