II. Phân tích thiết kế phần mềm quản lý hàng hoá vật t
2. Một số giải thuật
• Giải thuật đăng nhập
B Đ
Mở form đăng nhập
Nhập tên NSD
Kiểm tra tên NSD và mật khẩu? K T Đúng Sai Nhập mật khẩu Vào Form chính Thông báo nhập sai Có nhập lại Không Có
• Giải thuật cập nhật dữ liệu Có Không Sai Có Không Đúng B Mở form cập nhật Thêm 1 bản ghi trắng Nhập dữ liệu Kiểm tra dữ liệu Lưu bản ghi KT Tiếp tục?
Thông báo dữ liệu nhập sai
Nhập lại?
• Giải thuật xoá dữ liệu B Chọn bản ghi cần xóa NDùng nhấn nút xoá Sai Đúng Thông báo có xoá ko? Thực hiện lệnh xoá KT
3. Thiết kế giao diện và đầu ra của ch ơng trình
Việc thiết kế giao diện có ý nghĩa vô cùng quan trọng đối với sự thành công của hệ thống. Qúa trình thiết kế giao diện trong hệ thống quản lý hàng hoá vật t đã tuân thủ một số nguyên tắc sau:
Hệ thống luôn đảm bảo rằng ngời sử dụng đang kiểm soát hệ thống.
Hệ thống đợc thiết kế theo thói quen và kinh nghiệm của ngời sử dụng.
Hệ thống che khuất những bộ phận bên trong của các phần mềm và phần cứng tạo thành hệ thống.
Hệ thống cung cấp thông tin t liệu trên màn hình.
Hệ thống đã đợc thiết kế để giảm tối thiểu lợng thông tin mà ng- ời sử dụng phải nhớ trong qúa trình sử dụng chơng trình.
Hệ thống tuân thủ những nguyên tắc chuẩn đã đợc chấp nhận khi thể hiện thông tin trên màn hình hay trên giấy.
Một số giao diện chính trong chơng trình.
Form Login hệ thống: Khi ngời sử dụng login vào chơng trình thì
phải khai báo tên đăng nhập và mật khẩu để truy nhập.
Form Quản lý ngời dùng : Cho phép ngời quản lý có thể tạo thêm mới
Form Nhập tồn kho đầu kì : Cho phép cập nhật những hàng hoá tồn
trong kho cuối kì trớc vào đầu kì mới. Có thể xem, chỉnh sửa các thông tin về hàng hoá tồn trong kho.
Form Đổi mật khẩu : Ngời dùng có thể sử dụng chức năng thay đổi
mật khẩu trong chơng trình để đảm bảo tính bảo mật của hệ thống.
Form Viết, xem, sửa, xoá phiếu nhập vật t : Cho phép ngời dùng có
thể xem các phiếu đã viết trớc, có thể chỉnh sửa phần mũ phiếu và viết thêm các phiếu nhập mới.
Form Cập nhật ruột phiếu nhập: Đợc sử dụng để cập nhật, chỉnh sửa
và xoá các thông tin về vật t trong phiếu nhập.
Form Viết, xem, sửa, cập nhật phiếu xuất vật t: Cho phép ngời sử
dụng có thể xem, chỉnh sửa các phiếu cũ, đồng thời viết mới các phiếu xuất kho
Form Cập nhật ruột phiếu xuất: Dùng để cập nhật và chỉnh sửa các
thông tin về vật t trong mục phiếu xuất.
Form Chọn vật t trong danh mục vật t: Dùng để chọn vật t để cập
Form Danh mục vạt t tồn trong kho: Dùng để chọn các vật t để cập
nhật vào phiếu xuất vật t.
Form Danh mục kho: Cho phép ngời dùng có thể cập nhật, chỉnh sửa
Form Danh mục vật t: Cho phép xem, sửa, xoá các thông tin về danh
mục vật t.
Form Danh mục đơn vị nhập: Ngời dùng có thể xem, chỉnh sửa, xoá
Form Danh mục đơn vị xuất: Cho phép ngời dùng có thể xem, sửa,
xoá danh mục các đơn vị xuất.
Form Danh mục tính chất nhập: Lu các thông tin về cách thức nhập
Form Danh mục tính chất xuất: Gồm có mã tính chất xuất và tên tính chất xuất.
Form Xem tồn kho: Dùng để xem các thông tin về hàng hoá tồn trong
kho tại thời điểm hiện tại.
4. Một số mẫu báo cáo trong ch ơng trình
Phiếu xuất vật t
Báo cáo hàng tồn kho
Báo cáo danh mục tính chất xuất
5. Một số ch ơng trình nguồn. Mã nguồn của modul kết nối.
Public Cn As New ADODB.Connection Public rs As New ADODB.Recordset Public f_user, f_group As String Public flag_pass As String Public key As String
Public Sub connect_database() Dim Str As String
Dim db_name
db_name = App.Path & "\db1.mdb"
Str = "provider=Microsoft.jet.OLEDB.4.0;data source=" & db_name & "" DE_HH.CN_HH.ConnectionString =
"Provider=Microsoft.jet.OLEDB.4.0;Persist Security Info=False;Data Source=" & db_name & ""
DE_HH.CN_HH.Open Cn.Open Str
Hàm mã hoá và giải mã mật khẩu.
Public Function mahoa(pass) As String Dim strtemp, kqua, nlen, l
nlen = Len(key) kqua = ""
l = 0
Do Until Len(pass) <= nlen strtemp = Left(pass, nlen) pass = Mid(pass, nlen + 1) If l = 0 Then
kqua = kqua & StrReverse(strtemp) l = 1
Else
kqua = kqua & strtemp l = 0
End If Loop
If l = 0 Then
mahoa = kqua & StrReverse(pass) Else
mahoa = kqua & pass End If
End Function
Public Function giaima(pass) As String Dim strtemp, kqua, nlen, l
nlen = Len(key) kqua = ""
l = 1
Do Until Len(pass) <= nlen strtemp = Left(pass, nlen) pass = Mid(pass, nlen + 1) If l = 1 Then
kqua = kqua & StrReverse(strtemp) l = 0
Else
kqua = kqua & strtemp l = 1
End If Loop
If l = 1 Then
giaima = kqua & StrReverse(pass) Else
giaima = kqua & pass End If
End Function
Hàm đổi số thành chữ
Public Function VND(D_sotien As Double)
Dim Ketqua, B, TIEN, Chudoc, Chuso, i, BACONSO, chu, So1, So2, So3, j, Dich, S, Vitri If D_sotien = 0 Then Ketqua = "Không đồng" Else If D_sotien < 0 Then Ketqua = "Trừ " Else Ketqua = "" End If B = " " TIEN = Format(Abs(D_sotien), "##0.00") TIEN = Right(Space(12) + TIEN, 15) Chudoc = ""
Chudoc = Chudoc + "trăm mơi tỷ " Chudoc = Chudoc + "trăm mơi triệu " Chudoc = Chudoc + "trăm mơi ngàn " Chudoc = Chudoc + "trăm mơi đồng " Chudoc = Chudoc + "trăm mơi "
Chuso = ""
Chuso = Chuso + "một hai ba bốn năm " Chuso = Chuso + "sáu bảy tám chín " For i = 1 To 5
BACONSO = Mid(TIEN, i * 3 - 2, 3) If BACONSO <> Space(3) Then Select Case BACONSO
Case "000" If i = 4 Then chu = "đồng " Else chu = "" End If Case ".00" chu = "chẵn " Case Else So1 = Left(BACONSO, 1) So2 = Mid(BACONSO, 2, 1) So1 = Right(BACONSO, 1)
chu = "" For j = 1 To 3 Dich = ""
S = Val(Mid(BACONSO, j, 1)) If S > 0 Then
Dich = Trim(Mid(Chuso, S * 5 - 4, 5)) + B + Trim(Mid(Chudoc, (i - 1) * 18 + j * 6 - 5, 6)) + B
End If
Select Case j Case 2 And S = 1 Dich = "mời "
Case 3 And S = 0 And BACONSO <> Space(2) + "0" Dich = Trim(Mid(Chudoc, (i - 1) * 18 + j * 6 - 5, 6)) + " " Case 3 And S = 5 And So2 <> " " And So2 <> "0"
Dich = "l" + Mid(Dich, 2)
Case 2 And S = 0 And So3 <> "0" And So1 >= "0" And i = 4 'If (So1 >= "1" And So1 <= "9") Or (So1 = "0" And I = 4) Then Dich = "lẻ "
'End If End Select
chu = chu + Dich Next j
End Select
Vitri = InStr(1, chu, "mơi một", 1) If Vitri > 0 Then
Mid(chu, Vitri, 9) = "mơi mốt" End If
Ketqua = Ketqua + chu End If
Next i End If
VND = UCase(Left(Ketqua, 1)) + Mid(Ketqua, 2) End Function
Hàm kiểm tra sự tồn tại của vật t.
Public Function Ktra_ExistVT(mSTT_REC As Integer, mMa_VT As String, mCL As String, mDG As Double) As Boolean
Dim Rs1 As ADODB.Recordset Set Rs1 = New ADODB.Recordset Ktra_ExistVT = False
Rs1.Open "SELECT * FROM CTVT WHERE STT_REC=" & Str(mSTT_REC) & " AND MA_VT='" & mMa_VT & "' AND CL='" & mCL & "' AND DG=" & Str(mDG), Cn, adOpenDynamic, adLockReadOnly If Not Rs1.EOF Then
Ktra_ExistVT = True End If Rs1.Close Set Rs1 = Nothing End Function Hàm kiểm tra số chứng từ.
Public Function Ktra_SoCT(mSO_CT As String, mMA_CT As String) As Boolean
Dim Rs1 As ADODB.Recordset Set Rs1 = New ADODB.Recordset Ktra_SoCT = False
Rs1.Open "SELECT * FROM CTCHUNG WHERE SO_CT='" & mSO_CT & "' AND MA_CT='" & mMA_CT & "'", Cn, adOpenDynamic, adLockReadOnly
If Not Rs1.EOF Then Ktra_SoCT = True End If
Rs1.Close
Set Rs1 = Nothing End Function
Mã nguồn trong form Viết phiếu nhập.
Option Explicit Dim State As String
Public mSTT_REC As Integer Dim mSO_CT As String Private Sub cmdADD_Click() State = "ADD" cmdEDIT.Caption = "&Ghi" cmdDEL.Caption = "&Hũy" cmdDEL.Enabled = True cmdEDIT.Enabled = True cmdADD.Enabled = False cmdCANDOI.Enabled = False mSO_CT = "" Call EmptyItem Call LockItem(False)
txtNGAY_CT.Value = Format(Date, "dd/mmm/yyyy") txtSO_CT.SetFocus
cmdPREV.Enabled = False cmdNEXT.Enabled = False cmdfirst.Enabled = False
cmdlast.Enabled = False comMAKHO.Enabled = False cmdIN.Enabled = False cmdADD_VT.Enabled = False cmdEDIT_VT.Enabled = False cmdDEL_VT.Enabled = False End Sub
Private Sub cmdADD_VT_Click() frmRUOT_PN.State = "ADD" frmRUOT_PN.Show 1
End Sub
Private Sub cmdCANDOI_Click()
If MsgBox("Bạn thực sự muốn cân đối vật t trong kho!", vbOKCancel, "Chú ý !") = vbOK Then
Cn.Execute "DELETE * FROM CDTEMP" Cn.Execute "delete * from CDTEMP2" Cn.Execute "delete * from TON_KHO" Cn.Execute "INSERT INTO
CDTEMP(MAKHO,MA_VT,CL,SL_DAU,DG) SELECT MAKHO,MA_VT,CL,SL,DG FROM TON_DAU " Cn.Execute "INSERT INTO
CDTEMP(MAKHO,MA_VT,CL,SL_NHAP,DG) SELECT MAKHO,MA_VT,CL,SL, DG from viewPSNHAP'"
Cn.Execute "INSERT INTO
CDTEMP(MAKHO,MA_VT,CL,SL_XUAT,DG) SELECT MAKHO,MA_VT,CL,SL, DG from viewPSXUAT'"
Cn.Execute "INSERT INTO
CDTEMP2(MAKHO,MA_VT,CL,SL_DAU,SL_NHAP,SL_XUAT,DG) SELECT * FROM viewTONGHOP"
Cn.Execute "INSERT INTO TON_KHO(MAKHO,MA_VT,CL,SL,DG) SELECT * FROM viewTONKHO"
cmdCANDOI.Enabled = False End If
End Sub
Private Sub cmdDEL_Click() If State = "" Then
If MsgBox("Thực sự muốn xóa phiếu nhập này !", vbOKCancel, "Chú ý !") = vbOK Then
Cn.Execute "DELETE FROM CTVT WHERE STT_REC=" & Str(rs!Stt_Rec)
Cn.Execute "DELETE FROM CTCHUNG WHERE STT_REC=" & Str(rs!Stt_Rec)
rs.Find "MAKHO='" & Trim(comMAKHO.ColText) & "'" cmdEDIT.Caption = "&Sửa phiếu"
cmdDEL.Caption = "&Xóaphiếu" cmdADD.Enabled = True Call LockItem(True) If rs.EOF Then Call EmptyItem cmdDEL.Enabled = False cmdEDIT.Enabled = False cmdIN.Enabled = False cmdADD_VT.Enabled = False cmdDEL_VT.Enabled = False cmdEDIT_VT.Enabled = False Else Call MovePhieu cmdDEL.Enabled = True cmdEDIT.Enabled = True cmdIN.Enabled = True End If End If Else State = ""
cmdEDIT.Caption = "&Sửa phiếu" cmdDEL.Caption = "&Xóaphiếu" cmdADD.Enabled = True
Call LockItem(True) cmdADD.SetFocus
If rs.BOF And rs.EOF Then cmdDEL.Enabled = False cmdEDIT.Enabled = False cmdIN.Enabled = False cmdADD_VT.Enabled = False cmdDEL_VT.Enabled = False cmdEDIT_VT.Enabled = False Call EmptyItem Else cmdIN.Enabled = True Call MovePhieu End If cmdPREV.Enabled = True cmdNEXT.Enabled = True cmdfirst.Enabled = True cmdlast.Enabled = True comMAKHO.Enabled = True End If
cmdCANDOI.Enabled = True End Sub
Private Sub cmdDEL_VT_Click()
If MsgBox("Thực sự muốn xóa khoản hàng này !", vbOKCancel, "Chú ý !") = vbOK Then
Cn.Execute "DELETE FROM CTVT WHERE STT_REC=" &
Str(mSTT_REC) & " AND STT_KHOAN = " & Grid.TextMatrix(Grid.Row, 0)
Call RuotPhieu(rs!Stt_Rec) End If
End Sub
Private Sub cmdEDIT_Click() Dim Ten_ND
Dim Sql As String Dim mDate As String If State = "" Then State = "EDIT" cmdEDIT.Caption = "&Ghi" cmdDEL.Caption = "&Hũy" cmdDEL.Enabled = True cmdEDIT.Enabled = True cmdADD.Enabled = False Call LockItem(False) mSO_CT = Trim(txtSO_CT.Text) txtSO_CT.Enabled = False cmdPREV.Enabled = False cmdNEXT.Enabled = False cmdfirst.Enabled = False cmdlast.Enabled = False comMAKHO.Enabled = False cmdIN.Enabled = False cmdADD_VT.Enabled = False cmdEDIT_VT.Enabled = False cmdDEL_VT.Enabled = False Else
If State = "ADD" Then
If Ktra_SoCT(Trim(txtSO_CT.Text), "PN") = True Then txtSO_CT.SetFocus
MsgBox "Trùng số chứng từ !", vbCritical, "Chú ý !" Exit Sub
End If
If txtSO_CT = "" Then
txtSO_CT.SetFocus Exit Sub
End If End If
If txtNGAY_HH.Value <= txtNGAY_CT.Value Then MsgBox " Ngày hết hạn nhập sai !", vbCritical, "Chú ý !" txtNGAY_HH.SetFocus
Exit Sub End If
If txtNGAY_HH.ValueIsNull Then
MsgBox "Ngày hết hạn không đợc để trống !", vbCritical, "Chú ý !" txtNGAY_HH.SetFocus
Exit Sub End If
If IsDate(txtNGAY_CT.Value) = False Then
MsgBox "Ngày chứng từ nhập sai !", vbCritical, "Chú ý !" txtNGAY_CT.SetFocus
Exit Sub End If
If comMA_TCN.ListIndex = -1 Then
MsgBox "Cha nhập tính chất nhập !", vbCritical, "Chú ý !" comMA_TCN.SetFocus
Exit Sub End If
If comMA_DVN.ListIndex = -1 Then
MsgBox "Cha nhập đơn vị giao hàng !", vbCritical, "Chú ý !" comMA_DVN.SetFocus
Exit Sub End If
If State = "ADD" Then rs.AddNew
End If
rs!MA_CT = "PN"
rs!So_CT = UCase(Trim(txtSO_CT.Text))
rs!NGAY_CT = IIf(IsNull(txtNGAY_CT.Value), Null, Format(txtNGAY_CT.Value, "dd/mm/yyyy"))
rs!NGUOI_NHAP = Trim(f_user)
rs!MaKHO = Trim(comMAKHO.ColText) rs!MA_DVN = Trim(comMA_DVN.ColText) rs!MA_TCN = Trim(comMA_TCN.ColText)
rs!NGAY_HH = IIf(IsNull(txtNGAY_HH.Value), Null, Format(txtNGAY_HH.Value, "dd/mm/yyyy"))
rs.UpdateBatch adAffectAllChapters cmdEDIT.Caption = "&Sửa phiếu" cmdDEL.Caption = "&Xóa phiếu"
cmdDEL.Enabled = True cmdEDIT.Enabled = True cmdADD.Enabled = True cmdIN.Enabled = True Call LockItem(True) rs.Requery cmdADD.SetFocus If State = "ADD" Then rs.MoveLast Call MovePhieu frmRUOT_PN.State = "ADD" frmRUOT_PN.Show 1 Else Call MovePhieu End If State = "" cmdPREV.Enabled = True cmdNEXT.Enabled = True cmdfirst.Enabled = True cmdlast.Enabled = True comMAKHO.Enabled = True cmdIN.Enabled = True End If cmdCANDOI.Enabled = True End Sub
Private Sub cmdEDIT_VT_Click() frmRUOT_PN.State = "EDIT" frmRUOT_PN.Show 1
End Sub
Private Sub cmdEXIT_Click() Unload Me
End Sub
Private Sub cmdfirst_Click() If Not rs.EOF Then
rs.MoveFirst End If
If Not rs.EOF Then Call MovePhieu Else
If rs.BOF Then Exit Sub rs.MoveLast
Call MovePhieu End If
End Sub
reportPN.Show 1 End Sub
Private Sub cmdlast_Click() If Not rs.EOF Then
rs.MoveLast End If
If Not rs.EOF Then Call MovePhieu Else
If rs.BOF Then Exit Sub rs.MoveFirst
Call MovePhieu End If
End Sub
Private Sub cmdNEXT_Click() If Not rs.EOF Then
rs.MoveNext End If
If Not rs.EOF Then Call MovePhieu Else
If rs.BOF Then Exit Sub rs.MoveLast
Call MovePhieu End If
End Sub
Private Sub cmdPREV_Click() If Not rs.BOF Then
rs.MovePrevious End If
If Not rs.BOF Then Call MovePhieu End If
End Sub
Private Sub comMA_DVN_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = 13 Then
comMA_TCN.SetFocus End If
End Sub
Private Sub comMA_DVN_LostFocus() On Error Resume Next
If comMA_DVN.ListIndex = -1 Then comMA_DVN.Text = ""
End If End Sub
Private Sub comMA_TCN_LostFocus() If comMA_TCN.ListIndex = -1 Then comMA_TCN.Text = ""
End If End Sub
Private Sub comMAKHO_Click()
Call DuyetPhieu(Trim(comMAKHO.ColText)) End Sub
Private Sub Form_Load()
Set rs = New ADODB.Recordset Grid.Rows = 1
Call LoadDM
Call LockItem(True) End Sub
Private Sub Form_Unload(Cancel As Integer) If State <> "" Then Cancel = 1 Else If rs.State = 1 Then rs.Close End If Set rs = Nothing End If End Sub
Private Sub Grid_DblClick() If Grid.Rows > 1 Then
frmRUOT_PN.State = "EDIT" frmRUOT_PN.Show 1
End If End Sub
Private Sub Grid_KeyDown(KeyCode As Integer, Shift As Integer) If Grid.Rows > 1 And KeyCode = 13 Then
frmRUOT_PN.State = "EDIT" frmRUOT_PN.Show 1
End If End Sub
Private Sub LoadDM()
Dim mRs As ADODB.Recordset Set mRs = New ADODB.Recordset
mRs.Open "SELECT * FROM DM_TCN ORDER BY MA_TCN", Cn, adOpenDynamic, adLockReadOnly
Do While Not mRs.EOF
comMA_TCN.AddItem Trim(mRs!MA_TCN) & vbTab & Trim(mRs! TEN_TCN)
Loop mRs.Close
mRs.Open "SELECT * FROM DM_DVN ORDER BY MA_DVN", Cn, adOpenDynamic, adLockReadOnly
Do While Not mRs.EOF
comMA_DVN.AddItem Trim(mRs!MA_DVN) & vbTab & Trim(mRs! TEN_DVN)
mRs.MoveNext Loop
mRs.Close
mRs.Open "SELECT * FROM DM_KHO ORDER BY MAKHO", Cn, adOpenDynamic, adLockReadOnly
Do While Not mRs.EOF
comMAKHO.AddItem Trim(mRs!MaKHO) & vbTab & Trim(mRs! TENKHO) mRs.MoveNext Loop If comMAKHO.ListCount > 0 Then comMAKHO.ListIndex = 0 Else Call EmptyItem cmdDEL.Enabled = False cmdEDIT.Enabled = False cmdIN.Enabled = False cmdADD_VT.Enabled = False cmdDEL_VT.Enabled = False cmdEDIT_VT.Enabled = False End If mRs.Close Set mRs = Nothing End Sub
Private Sub LockItem(Dk As Boolean) txtNGAY_CT.ReadOnly = Dk txtNGAY_HH.ReadOnly = Dk txtSO_CT.Locked = Dk comMA_DVN.Enabled = Not Dk comMA_TCN.Enabled = Not Dk End Sub
Private Sub EmptyItem() txtNGAY_CT.Text = "" txtNGAY_HH.Text = "" txtSO_CT.Text = "" comMA_DVN.ListIndex = -1 comMA_TCN.ListIndex = -1 Grid.Rows = 1
labTONGTIEN.Caption = "" End Sub
Private Sub DuyetPhieu(MaKHO As String) Dim Sql As String
DoEvents
If rs.State = 1 Then rs.Close
rs.Open "SELECT * FROM viewCTNHAP WHERE MA_CT='PN' AND MAKHO='" & MaKHO & "'", Cn, adOpenDynamic,
adLockBatchOptimistic, adAsyncExecute
While (rs.State And adStateExecuting) = adStateExecuting Wend
If Not rs.EOF Then rs.MoveFirst mSTT_REC = rs!Stt_Rec Call MovePhieu cmdDEL.Enabled = True cmdEDIT.Enabled = True cmdIN.Enabled = True Else Call EmptyItem cmdDEL.Enabled = False cmdEDIT.Enabled = False cmdIN.Enabled = False cmdADD_VT.Enabled = False cmdDEL_VT.Enabled = False cmdEDIT_VT.Enabled = False End If End Sub
Public Sub RuotPhieu(Stt_Rec As Integer) Dim mRs As ADODB.Recordset
Dim mTONG_TIEN As Double Set mRs = New ADODB.Recordset
mRs.Open "SELECT STT_KHOAN,CL,SL,DG,DM_VT.MA_VT, DM_VT.TEN_VT,DM_VT.DVT FROM CTVT INNER JOIN DM_VT ON CTVT.MA_VT=DM_VT.MA_VT WHERE STT_REC=" & Str(Stt_Rec), Cn, adOpenDynamic, adLockBatchOptimistic
Grid.Rows = 1 mTONG_TIEN = 0 Do While Not mRs.EOF
Grid.AddItem mRs!STT_KHOAN & vbTab & Trim(mRs!MA_VT) & vbTab & Trim(mRs!TEN_VT) & vbTab & Trim(mRs!DVT) & vbTab & Trim(mRs!CL) & vbTab & mRs!SL & vbTab & mRs!DG & vbTab & IIf(IsNull(mRs!SL), 0, mRs!SL) * IIf(IsNull(mRs!DG), 0, mRs!DG)
mTONG_TIEN = mTONG_TIEN + IIf(IsNull(mRs!SL), 0, mRs!SL) * IIf(IsNull(mRs!DG), 0, mRs!DG)
Grid.Cell(flexcpForeColor, Grid.Rows - 1, 0) = &H80& Grid.Cell(flexcpFontBold, Grid.Rows - 1, 0) = True Grid.Cell(flexcpFontBold, Grid.Rows - 1, 1) = True mRs.MoveNext Loop labTONGTIEN.Caption = Str(mTONG_TIEN) cmdADD_VT.Enabled = True If Grid.Rows = 1 Then cmdEDIT_VT.Enabled = False cmdDEL_VT.Enabled = False Else cmdEDIT_VT.Enabled = True cmdDEL_VT.Enabled = True End If End Sub
Public Sub MovePhieu() If rs.BOF Or rs.EOF Then Exit Sub
End If
txtSO_CT.Text = IIf(IsNull(rs!So_CT), "", Trim(rs!So_CT))
txtNGAY_CT.Value = Format(IIf(IsNull(rs!NGAY_CT), "", Trim(rs! NGAY_CT)), "dd/mm/yyyy")
txtNGAY_HH.Value = Format(IIf(IsNull(rs!NGAY_HH), "", Trim(rs! NGAY_HH)), "dd/mm/yyyy")
SetCmbValue comMA_DVN, IIf(IsNull(rs!MA_DVN), "", Trim(rs! MA_DVN))
SetCmbValue comMA_TCN, IIf(IsNull(rs!MA_TCN), "", Trim(rs! MA_TCN))
mSO_CT = IIf(IsNull(rs!So_CT), "", Trim(rs!So_CT)) mSTT_REC = rs!Stt_Rec
Call RuotPhieu(rs!Stt_Rec) End Sub
Private Sub txtNGAY_CT_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = 13 Then
If comMA_DVN.Enabled = True Then comMA_DVN.SetFocus Else txtNGAY_HH.SetFocus End If End If End Sub
Private Sub txtNGAY_HH_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = 13 Then
End If End Sub
Private Sub txtSO_CT_Change()
labSO_CT.Caption = Trim(txtSO_CT.Text) End Sub
Private Sub txtSO_CT_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = 13 Then
txtNGAY_CT.SetFocus End If
End Sub
Mã nguồn trong form Viết phiếu xuất
Option Explicit Dim State As String
Public mSTT_REC As Integer Dim mSO_CT As String Private Sub cmdADD_Click() State = "ADD" cmdEDIT.Caption = "&Ghi" cmdDEL.Caption = "&Hũy" cmdDEL.Enabled = True cmdEDIT.Enabled = True cmdADD.Enabled = False mSO_CT = "" Call EmptyItem Call LockItem(False)
txtNGAY_CT.Value = Format(Date, "dd/mmm/yyyy") txtSO_CT.SetFocus 'txtSO_CT.SetFocus cmdPREV.Enabled = False cmdNEXT.Enabled = False cmdfirst.Enabled = False cmdlast.Enabled = False comMAKHO.Enabled = False cmdIN.Enabled = False cmdCANDOI.Enabled = False cmdADD_VT.Enabled = False cmdEDIT_VT.Enabled = False cmdDEL_VT.Enabled = False End Sub
frmRuot_PX.State = "ADD" frmRuot_PX.Show 1
End Sub
Private Sub cmdCANDOI_Click()
If MsgBox("Bạn thực sự muốn cân đối vật t trong kho!", vbOKCancel, "Chú ý !") = vbOK Then
Cn.Execute "DELETE * FROM CDTEMP" Cn.Execute "delete * from CDTEMP2" Cn.Execute "delete * from TON_KHO" Cn.Execute "INSERT INTO
CDTEMP(MAKHO,MA_VT,CL,SL_DAU,DG) SELECT MAKHO,MA_VT,CL,SL,DG FROM TON_DAU "
Cn.Execute "INSERT INTO
CDTEMP(MAKHO,MA_VT,CL,SL_NHAP,DG) SELECT MAKHO,MA_VT,CL,SL, DG from viewPSNHAP'"
Cn.Execute "INSERT INTO
CDTEMP(MAKHO,MA_VT,CL,SL_XUAT,DG) SELECT MAKHO,MA_VT,CL,SL, DG from viewPSXUAT'"
Cn.Execute "INSERT INTO
CDTEMP2(MAKHO,MA_VT,CL,SL_DAU,SL_NHAP,SL_XUAT,DG) SELECT * FROM viewTONGHOP"