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 đó.Ng
Trang 1ĐƠN HÀNG GIA CÔNG
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
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:
Trang 2SQLConn = " 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 "
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
Trang 3Nguyên liệu Số lượng ĐVT
Sản phẩm Số lượng Đơn giá
4 Phiếu thanh toán:
Trang 4PHÂ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
ChiTietGiaoNhan Chi tiết giao nhận
NguyenLieu Nguyên liệu
NhapXuatNguyenLieu Nhập xuất nguyên liệu
ChiTietNguyenLieu Chi tiết nguyên liệu
Trang 6b) 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:
NguyenLieu Nguyên liệu Text Khoá ngoại
SoLuongSanXuat Số lượng sản xuất Number
b6) Thực thể công nợ:
Trang 7Thuộc tính Diễn giải Kiểu Ràng buộc
NgayCongNo Ngày công nợ Date() Khoá chínhMaKhachHang Mã khách hàng Text Khoá ngoạiTienCongNo Tiền công nợ Number
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:
NguyenLieu Nguyên liệu Text Khoá chínhTen 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ạiMaKhachHang 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ạiNguyenLieu Nguyên liệu Text Khoá ngoạiSoLuongTon Số lượng tồn Number
b12) Thực thể Nhập xuất nguyên liệu:
Trang 8Thuộc tính Diễn giải Kiểu Ràng buộc
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
NguyenLieu Nguyên liệu Text Khoá ngoại
c) Ràng buộc toàn vẹn:
KHOÁ CHÍNH:
R1-01: id(CongNo) = sttCNOR1-02: id(KhachHang) = MaKhachHangR1-03: id(DonDatHang) = SoDDHR1-04: id(ChiTietDonDathang) = sttDDHR1-05: id(SanPham) = SanPham
R1-06: id(DinhMucSanXuat) = sttSXR1-07: id(GiaoNhan) = SoPhieuR1-08: id(ChiTietGiaoNhan) = sttGiaoNhanR1-09: id(ThanhToan) = SoTT
R1-10: id(Ton) = sttTonR1-11: id(NhapXuatNguyenLieu) = SoHDNR1-12: id(ChiTietNguyenLieu) = sttHDNR1-13: id(NguyenLieu) = NguyenLieu
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ựơng tồn cuối kì ( SLTonCK ) của tháng trước
Trang 9Qui 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
_Tên xử lý : XL3:
Chức năng : Cập nhật Đơn đặt hàng
Input : SDDH, MSP, DDH, CTDDH, KH, SP
Output : DDH
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
Output : GN
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
Output : TTOAN
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
_Tên xử lý : XL6:
Chức năng : Tính nợ Khách hàng
Input : NgCN, MKH, CNO
Trang 10Output : CNO.
Qui tắc: NOCK = NODK + SONO - THANHTOAN
_Tên xử lý : XL7 :Chức năng : Tính tồn Nguyên liệu :Input : NgTON, LN, TON
Output : TON
Qui tắc: TONCK = TONDK + NHAP - XUAT
III THIẾT KẾ DỮ LIỆU :
1 Sơ đồ Logic dữ liệu:
Hì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
Trang 11DienThoai Điện thoại
NgayCongNo Ngày công nợ
TienCongNo Tiền công nợ
NguyenLieu Nguyên liệu
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
Trang 12Thuộc tính Kiểu Khóa
Khoá ngoại:
Khoá ngoại Bảng tham chiếu Khoá nội
MaKhachHang KhachHang MaKhachHang
Khoá ngoại:
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 13SanPham Text Ngoại
Khoá ngoại Bảng tham chiếu Khoá nội
3.6) Sản phẩm :
Thuộc tính:
Trang 14Khoá ngoại Bảng tham chiếu Khoá nội
Trang 15Khoá ngoại Bảng tham chiếu Khoá nội
Trang 16Khoá ngoại Bảng tham chiếu Khoá nội
3.12) Nhập xuất nguyên liệu :
Khoá ngoại Bảng tham chiếu Khoá nội
3.13) Chi tiết nguyên liệu :
Thuộc tính:
Chỉ mục:
Trang 17Khoá ngoại Bảng tham chiếu Khoá nội
SoHoaDonNhap NXNguyenLieu SoPhieu
4 MÔ TẢ CÁC RÀNG BUỘC TOÀN VẸN :
4.1) KHÓA CHÍNH :
R1-01 : id( CONGNO ) = NgayCNR1-02 : id( KHACHANG ) = MKHR1-03 : id( NGUYENLIEU ) = NLR1-04 : id( DONDATHANG ) = SDDH, MAKHR1-05 : id( CHITIETDONDATHANG ) = SDDH, SPR1-06 : id( SANPHAM ) = SANPHAM
R1-07 : id( DINHMUCSANXUAT ) = NL, SPR1-08 : id( GIAONHAN ) = SPhieu, SDDHR1-09 : id( CHITIETGIAONHAN ) = SPhieu, SPR1-10 : id( THANHTOAN ) = SoTT, MKHR1-11 : id( TON ) = MKH, NL
R1-12 : id( NHAPXUATNGUYENLIEU ) = SoDDH, MKHR1-13 : id( CHITIETNGUYENLIEU ) = SoHDN, NL
4.2) RÀNG BUỘC VỀ MIỀN GIÁ TRỊ:
R2-01 : (CTDDH.SLDH > 0) and (CTDDH.DG > 0)R2-02 : (SP.DG > 0)
R2-03 : (DMSX.SLSX > 0)R2-04 : (CNO.TienCNO > 0)R2-05 : (CTGN.SL > 0) and (CTGN.DG > 0)R2-06 : (TToan.TToan > 0)
Trang 19Menu 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:
Hì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,
ChiTietDonDatHang.DonGia"
strSQL = strSQL & " FROM SanPham, DonDatHang, ChiTietDonDatHang WHERE DonDatHang.SoDonDatHang = ChiTietDonDatHang.SoDonDatHang AND
SanPham.SanPham = ChiTietDonDatHang.SanPham"
Trang 20Set Rst = New ADODB.Recordset
Rst.CursorLocation = adUseClient
Cnn.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 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ôngtin 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 Dim SQL4 As String Dim SQL5 As String
Trang 21SQL2 = " 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) & "'"
Trang 22Hì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
rsSoDDH.Open sql1, Conn, adOpenKeyset, adLockOptimistic Set cboSoDDH.DataSourceList = rsSoDDH
Trang 23strSQL = "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 Str1 = " 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
Trang 24End 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:
Dim Cnn As New ADODB.Connection
strSQL = "select * from NGUYENLIEU"
Set Rst = New ADODB.Recordset
Trang 25: 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
Trang 26Hì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