Обновление данных (формы) по справочнику (DAO)
В форму вводится уникальный идентификатор товара (в данном случае Штрих –код), а остальные поля заполняются из справочника.
В заголовок модуля формы помещаем описание типа данных с параметрами товара:
Private Type tpGood
Private Type tpGoodData
Article As String
Name As String
Price As Currency
IsFound As Boolean
End Type
Функция поиска данных товара по штрих-коду:
Private Function GetGoodPrm(BarCode$) As tpGoodData
Dim strSQL As String
Dim rst As DAO.Recordset
On Error GoTo GetGoodPrm_Err
strSQL = "SELECT * FROM dtGoods WHERE gdBarCode = '" & BarCode & "';"
Set rst = CurrentDb.OpenRecordset(strSQL, dbOpenSnapshot)
If rst.EOF = False Then
With rst
GetGoodPrm.Article = !gdArticle
GetGoodPrm.Name = !gdname
GetGoodPrm.Price = !gdPrice
GetGoodPrm.IsFound = True
End With
End If
GetGoodPrm_Bye:
On Error Resume Next
rst.Close
Set rst = Nothing
Exit Function
GetGoodPrm_Err:
MsgBox "Ошибка " & Err.Number & vbCrLf & Err.Description & vbCrLf & "в процедуре: GetGoodPrm", vbCritical, "Error in module Form_Редактор"
Resume GetGoodPrm_Bye
End Function
И наконец процедура заполнения полей данных товара по штрих-коду:
Private Sub txtBarCode_AfterUpdate()
Dim GoodData As tpGoodData
On Error GoTo txtBarCode_AfterUpdate_Err
If IsNull(Me!txtBarCode) Then
Exit Sub
End If
GoodData = GetGoodPrm(Me!txtBarCode)
If GoodData.IsFound = True Then
Me!txtArticle = GoodData.Article
Me!txtName = GoodData.Name
Me!txtPrice = GoodData.Price
Me!txtDate = Now()
Me!txtTime.Requery
Else
Me!txtBarCode.SetFocus
MsgBox "Товар с данным Штрих-кодом не найден!", vbExclamation, "Ошибка поиска данных"
End If
txtBarCode_AfterUpdate_Bye:
Exit Sub
txtBarCode_AfterUpdate_Err:
MsgBox "Ошибка " & Err.Number & vbCrLf & Err.Description & vbCrLf & "в процедуре: txtBarCode_AfterUpdate", vbCritical, "Error in module Form_frmSale"
Resume txtBarCode_AfterUpdate_Bye
End Sub
MSA-2007 ( 530 kB) Пример
|