⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 myflexgrid.ctl

📁 仓库扫描管理系统
💻 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 + -