📄 myflexgrid.ctl
字号:
VERSION 5.00
Object = "{00028C01-0000-0000-0000-000000000046}#1.0#0"; "DBGRID32.OCX"
Object = "{5E9E78A0-531B-11CF-91F6-C2863C385E30}#1.0#0"; "MSFLXGRD.OCX"
Begin VB.UserControl MyFlexGrid
ClientHeight = 6645
ClientLeft = 0
ClientTop = 0
ClientWidth = 11325
ScaleHeight = 6645
ScaleWidth = 11325
Begin VB.Data Data1
Caption = "Data1"
Connect = "Access"
DatabaseName = "E:\datum\应用软件\物流管理\warehouse\DB-Access\hunterPOS.mdb"
DefaultCursorType= 0 'DefaultCursor
DefaultType = 2 'UseODBC
Exclusive = 0 'False
Height = 345
Left = 10080
Options = 0
ReadOnly = 0 'False
RecordsetType = 1 'Dynaset
RecordSource = "hpos_products"
Top = 5400
Width = 1140
End
Begin VB.TextBox text1
BackColor = &H00FFFFFF&
BorderStyle = 0 'None
Height = 210
Left = 315
TabIndex = 0
Top = 420
Visible = 0 'False
Width = 1485
End
Begin MSFlexGridLib.MSFlexGrid msfgTtl
Height = 1695
Left = 720
TabIndex = 1
Top = 4800
Width = 8895
_ExtentX = 15690
_ExtentY = 2990
_Version = 393216
AllowUserResizing= 3
End
Begin MSDBGrid.DBGrid grid1
Bindings = "MyFlexGrid.ctx":0000
Height = 2985
Left = 3780
OleObjectBlob = "MyFlexGrid.ctx":0014
TabIndex = 2
Top = 420
Visible = 0 'False
Width = 6285
End
Begin MSFlexGridLib.MSFlexGrid mf1
Height = 4575
Left = 0
TabIndex = 3
Top = 120
Width = 11175
_ExtentX = 19711
_ExtentY = 8070
_Version = 393216
BackColorFixed = -2147483636
BackColorBkg = 16777215
AllowUserResizing= 3
End
End
Attribute VB_Name = "MyFlexGrid"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = True
Attribute VB_PredeclaredId = False
Attribute VB_Exposed = False
Option Explicit
Dim s, y, i '定义变量
Dim r, c, col As Integer
Private Sub mf1_EnterCell()
frm_main.text1.Text = "1"
' 当列处于条形码编号、总净重、单价、皮重、件数及工号时允许编辑
If mf1.row >= mf1.FixedRows And (mf1.col = 1 Or mf1.col = 6 Or mf1.col = 7 Or mf1.col = 9 Or mf1.col = 10 Or mf1.col = 12) Then
' text1.Width = mf1.CellWidth
text1.Height = mf1.CellHeight
text1.Left = mf1.CellLeft + mf1.Left
text1.Top = mf1.CellTop + mf1.Top
text1.Text = mf1.Text
text1.Visible = True 'text1可见
text1.SetFocus
text1.Locked = False
Else
' text1.Visible = False
text1.Locked = True
End If
Call frm_main.entercell '调用函数
End Sub
Private Sub text1_Change()
' gridCustomer.Visible = False
mf1.Text = text1.Text '赋值给mf1.text
text1.Visible = True
If mf1.col = 1 Then
If Len(Trim(text1.Text)) = g_barcode_length Then
' Call fillDataFromBarcode
Call fillTotalDataFromDtlData
End If
End If
' 总净重和价格变化时更新金额
If mf1.col = 6 Or mf1.col = 7 Then
If text1.Text <> "" And Not IsNumeric(text1.Text) Then
MsgBox "总净重/价格必须为数值!", vbCritical, "输入错误"
text1.SetFocus
Exit Sub
End If
If IsNumeric(mf1.TextMatrix(mf1.row, 6)) And IsNumeric(mf1.TextMatrix(mf1.row, 7)) Then
mf1.TextMatrix(mf1.row, 8) = Val(mf1.TextMatrix(mf1.row, 6)) * Val(mf1.TextMatrix(mf1.row, 7))
mf1.TextMatrix(mf1.row, 8) = Format(mf1.TextMatrix(mf1.row, 8), g_barcode_weight_scale)
End If
fillTotalDataFromDtlData
End If
' 皮重和件数变化时候更新总皮重
If mf1.col = 9 Or mf1.col = 10 Then
If text1.Text <> "" And Not IsNumeric(text1.Text) Then
MsgBox "件数/皮重必须为数值!", vbCritical, "输入错误"
text1.SetFocus
Exit Sub
End If
If IsNumeric(mf1.TextMatrix(mf1.row, 9)) And IsNumeric(mf1.TextMatrix(mf1.row, 10)) Then
mf1.TextMatrix(mf1.row, 11) = Val(mf1.TextMatrix(mf1.row, 9)) * Val(mf1.TextMatrix(mf1.row, 10))
mf1.TextMatrix(mf1.row, 11) = Format(mf1.TextMatrix(mf1.row, 11), g_barcode_weight_scale)
End If
fillTotalDataFromDtlData
End If
End Sub
Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
frm_main.text1.Text = "1"
Dim strValid As String
strValid = "0123456789.-"
If KeyCode = vbKeyEscape And text1.Locked = False Then
text1.Text = "" 'mf1.TextMatrix(mf1.Row, mf1.col)
Exit Sub
End If
If KeyCode = vbKeyReturn Then
If mf1.col = 1 And Len(text1.Text) = g_barcode_length Then
Call fillDataFromBarcode
mf1.row = mf1.row - 1
mf1.col = 6
Exit Sub
End If
If (mf1.col = mf1.cols - 2) And mf1.row < mf1.rows - 1 Then
mf1.row = mf1.row + 1
mf1.col = 1
Exit Sub
End If
If mf1.col = 6 Or mf1.col = 9 Then
mf1.col = mf1.col + 1
Exit Sub
End If
' 当处于价格列回车跳到皮重列
If mf1.col = 7 Then
mf1.col = 9
Exit Sub
End If
' 当处于价格列回车跳到皮重列
If mf1.col = 7 Then
mf1.col = 9
Exit Sub
End If
' 当处于件数列回车跳到工号列
If mf1.col = 10 Then
mf1.col = 12
Exit Sub
End If
End If
If mf1.col = 1 And Len(Trim(text1.Text)) = g_barcode_length Then
' 当输入数据长度为13位
If KeyCode = vbKeyDelete Then
' 删除某行数据
For i = mf1.FixedCols To mf1.cols - mf1.FixedCols
mf1.TextMatrix(mf1.row, i) = ""
Next i
Exit Sub
If mf1.row > 1 Then
mf1.row = mf1.row - 1
End If
ElseIf Not (KeyCode = vbKeyUp Or KeyCode = vbKeyDown Or _
KeyCode = vbKeyLeft Or KeyCode = vbKeyRight Or KeyCode = vbKeyBack) Then
' 输入条形码长度为13位后按下字母或者数字键时换行并读取条码信息
Call fillDataFromBarcode
Exit Sub
End If
End If
If KeyCode = vbKeyUp Then
If mf1.row > 1 Then mf1.row = mf1.row - 1
End If
If KeyCode = vbKeyDown Then
If mf1.row < 29 Then mf1.row = mf1.row + 1
End If
' If KeyCode = vbKeyLeft Then Call frm_main.moveleft '调用函数
' If KeyCode = vbKeyRight Then Call frm_main.moveright '调用函数
End Sub
Private Sub text1_Validate(Cancel As Boolean)
If Len(Trim(text1.Text)) = g_barcode_length And mf1.col = 1 Then
Call fillDataFromBarcode
mf1.row = mf1.row - 1
ElseIf mf1.col = 1 And Trim(text1.Text) <> "" Then
MsgBox "条形码长度必须为" & CStr(g_barcode_length) & "位", vbCritical, "警告"
Cancel = True
End If
End Sub
Private Sub clearData(msfg As MSFlexGrid)
For r = msfg.FixedRows To msfg.rows - msfg.FixedRows
For c = msfg.FixedCols To msfg.cols - msfg.FixedCols
msfg.TextMatrix(r, c) = ""
Next
Next
End Sub
' 计算累计总净重和皮重
Private Sub fillTotalDataFromDtlData()
clearData msfgTtl
For r = mf1.FixedRows To mf1.rows - mf1.FixedRows
' 只对存在的物料进行总净重、皮重等的累加
If mf1.TextMatrix(r, 13) <> "" Then
For i = msfgTtl.FixedRows To msfgTtl.rows - msfgTtl.FixedRows
If msfgTtl.TextMatrix(i, 10) = mf1.TextMatrix(r, 13) Then
'对于存在的物料(productId相等)总净重、皮重等累加
msfgTtl.TextMatrix(i, 6) = Format(Val(msfgTtl.TextMatrix(i, 6)) + Val(mf1.TextMatrix(r, 6)) * Val(mf1.TextMatrix(r, 10)), g_barcode_weight_scale) '总净重
msfgTtl.TextMatrix(i, 7) = Format(Val(msfgTtl.TextMatrix(i, 7)) + Val(mf1.TextMatrix(r, 8)), g_barcode_weight_scale) '金额
msfgTtl.TextMatrix(i, 8) = Format(Val(msfgTtl.TextMatrix(i, 8)) + Val(mf1.TextMatrix(r, 10)), g_barcode_weight_scale) '件数
msfgTtl.TextMatrix(i, 9) = Format(Val(msfgTtl.TextMatrix(i, 9)) + Val(mf1.TextMatrix(r, 11)), g_barcode_weight_scale) '皮重
Exit For
Else '对于没有的物料新增一行并填充数据
If msfgTtl.TextMatrix(i, 10) = "" Then
' msfgTtl.Rows = msfgTtl.Rows + 1
msfgTtl.TextMatrix(i, 1) = Mid(mf1.TextMatrix(r, 1), g_barcode_product_start, g_barcode_weight_start - g_barcode_product_start - g_barcode_sequenceno_len)
For col = 2 To 6
msfgTtl.TextMatrix(i, col) = mf1.TextMatrix(r, col)
Next
msfgTtl.TextMatrix(i, 6) = Val(mf1.TextMatrix(r, 6)) * Val(mf1.TextMatrix(r, 10)) '总净重
msfgTtl.TextMatrix(i, 7) = mf1.TextMatrix(r, 8) '金额
msfgTtl.TextMatrix(i, 8) = mf1.TextMatrix(r, 10) '件数
msfgTtl.TextMatrix(i, 9) = mf1.TextMatrix(r, 11) '皮重
msfgTtl.TextMatrix(i, 10) = mf1.TextMatrix(r, 13) ' productId
Exit For
End If
End If
Next
End If
Next
End Sub
' 从条形码中获取物料及其重量信息填充界面表格
Private Sub fillDataFromBarcode()
' 隐藏grid1
grid1.Visible = False
If Not IsNumeric(Mid(text1.Text, g_barcode_weight_start, g_barcode_length - g_barcode_weight_start)) Then
MsgBox "条码编号不规范,不能从中读取总净重!", vbCritical, "警告"
text1.SetFocus
Exit Sub
End If
If checkData(6, "总净重", 0) = False Then
Exit Sub
End If
' 产品编号取条形码中的3到7位
Dim rsProduct As Recordset
Set rsProduct = g_db.OpenRecordset("select * from hpos_products where (hpos_products.productCode ='" + Mid(text1.Text, g_barcode_product_start, g_barcode_weight_start - g_barcode_product_start - g_barcode_sequenceno_len) + "')")
With rsProduct
If .RecordCount > 0 Then
If .Fields("productCode") <> "" Then
'赋值给mf1表格
If IsNumeric(Mid(text1.Text, g_barcode_weight_start, g_barcode_length - g_barcode_weight_start)) Then
mf1.TextMatrix(mf1.row, 6) = Format(Val(Mid(text1.Text, g_barcode_weight_start, g_barcode_length - g_barcode_weight_start)) / g_barcode_weight_base, g_barcode_weight_scale)
End If
If Not IsNull(.Fields("productName")) Then
mf1.TextMatrix(mf1.row, 2) = .Fields("productName")
End If
If Not IsNull(.Fields("productModel")) Then
mf1.TextMatrix(mf1.row, 3) = .Fields("productModel")
End If
If Not IsNull(.Fields("productSpecs")) Then
mf1.TextMatrix(mf1.row, 4) = .Fields("productSpecs")
End If
If Not IsNull(.Fields("productUnit")) Then
mf1.TextMatrix(mf1.row, 5) = .Fields("productUnit")
End If
If Not IsNull(.Fields("price")) Then
mf1.TextMatrix(mf1.row, 7) = .Fields("price")
End If
If IsNumeric(mf1.TextMatrix(mf1.row, 6)) And IsNumeric(mf1.TextMatrix(mf1.row, 7)) Then
mf1.TextMatrix(mf1.row, 8) = Val(mf1.TextMatrix(mf1.row, 7)) * Val(mf1.TextMatrix(mf1.row, 6))
mf1.TextMatrix(mf1.row, 8) = Format(mf1.TextMatrix(mf1.row, 8), g_barcode_weight_scale)
End If
mf1.TextMatrix(mf1.row, 9) = "0.00"
mf1.TextMatrix(mf1.row, 10) = "1"
mf1.TextMatrix(mf1.row, 11) = "0.00"
If Not IsNull(.Fields("productId")) Then
mf1.TextMatrix(mf1.row, 13) = .Fields("productId")
End If
text1.Text = mf1.Text '赋值给text1
' mf1.Row = mf1.Row + 1: mf1.Col = 1 '到达第5列
grid1.Visible = False
End If
Else
MsgBox "无此商品编号!", vbCritical, "警告"
grid1.Visible = False 'grid1不可见
If mf1.row > 1 Then
' mf1.Row = mf1.Row - 1
text1.Visible = True
text1.SetFocus
text1.SelStart = 0
text1.SelLength = Len(text1.Text)
Exit Sub
End If
End If
End With
fillTotalDataFromDtlData
Call frm_main.movereturn '调用函数
mf1.row = mf1.row + 1: mf1.col = 1
End Sub
' 校验某列的数据输入是否有效;diffRow:0-表示当前行,-1表示上一行,1表示下一行。
Private Function checkData(col As Integer, colName As String, diffRow As Integer) As Boolean
If mf1.row > mf1.FixedRows - 1 Then
If Not Trim(mf1.TextMatrix(mf1.row, 1)) = "" And (mf1.col = col Or mf1.col = 1) And Not IsNumeric(Mid(Trim(mf1.TextMatrix(mf1.row, 1)), g_barcode_weight_start, g_barcode_length - g_barcode_weight_start)) Then
MsgBox colName + "必须为数值!", vbCritical, "输入错误"
If mf1.row > 1 Then
mf1.row = mf1.row + diffRow
text1.Visible = True
text1.SetFocus
text1.SelStart = 0
text1.SelLength = Len(text1.Text)
Exit Function
End If
checkData = False
Else
checkData = True
End If
End If
End Function
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -