上传用户:zhpu1995
上传日期:2013-09-06
资源大小:61151k
文件大小:124k
源码类别:

企业管理

开发平台:

Visual Basic

  1.         
  2.         End With
  3.         '计算合计数据(清零)(Fixed)
  4.         For Jsqte = Qslz To WglrGrid.Cols - 1
  5.             Call Sjhj(Jsqte)
  6.         Next Jsqte
  7.     End If
  8.     
  9.     '设置操作状态为浏览
  10.     Lab_OperStatus = "1"
  11.     Call Sub_OperStatus("10")
  12. End Sub
  13. Private Function Sub_SaveBill() As Boolean                                   '保 存 单 据
  14.   
  15.     Dim Rectemp As New ADODB.Recordset                    '临时使用动态集
  16.     Dim Rec_VouchMain As New ADODB.Recordset              '单据主表动态集
  17.     Dim Rec_VouchSub As New ADODB.Recordset               '单据子表动态集
  18.     Dim Rowjsq As Long                                    '网格行计数器
  19.     Dim Coljsq As Long                                    '网格列计数器
  20.     Dim Jsqte As Integer                                  '临时计数器
  21.     Dim Lng_RowCount As Long                              '有效数据行计数器
  22.     Dim Lrywlz As Long                                    '录入有误列值
  23.   
  24.     Sub_SaveBill = False
  25.   
  26.     '一.============先对单据内容进行有效性判断==============='
  27.   
  28.     '先进行字段不能为空或不能为零有效性判断(Fixed)
  29.     For Jsqte = 0 To Max_Text_Index
  30.         If Textint(Jsqte, 8) = 1 Then     '字段不能为空
  31.             If Len(Trim(LrText(Jsqte).Text)) = 0 Then
  32.                 Tsxx = Textstr(Jsqte, 7) & "不能为空!"
  33.                 Call Xtxxts(Tsxx, 0, 1)
  34.                 LrText(Jsqte).SetFocus
  35.                 Exit Function
  36.             End If
  37.         Else
  38.             If Textint(Jsqte, 8) = 2 Then   '字段不能为零
  39.                 If Val(Trim(LrText(Jsqte).Text)) = 0 Then
  40.                     Tsxx = Textstr(Jsqte, 7) & "不能为零!"
  41.                     Call Xtxxts(Tsxx, 0, 1)
  42.                     LrText(Jsqte).SetFocus
  43.                     Exit Function
  44.                 End If
  45.             End If
  46.         End If
  47.     Next Jsqte
  48.     
  49.     '对需要进行事后判断的文本框录入内容进行有效性判断 (Fixed)
  50.     For Jsqte = 0 To Max_Text_Index
  51.         If Textint(Jsqte, 9) = 0 Or Textint(Jsqte, 9) = 2 Then
  52.             If Not TextYxxpd(Jsqte) Then
  53.                 Call TextShow(Jsqte)
  54.                 Exit Function
  55.             End If
  56.         End If
  57.     Next Jsqte
  58.   
  59.     '[>>
  60.   
  61.     '可在此区域写入其他对单据表头内容的有效性判断.
  62.     
  63.     '<<]
  64.   
  65.     '[>>下面将对所有有效数据行进行有效性判断
  66.   
  67.     Lng_RowCount = 0
  68.   
  69.     With WglrGrid
  70.         For Rowjsq = .FixedRows To .Rows - 1
  71.             '带*号者为有效数据行(Fixed)
  72.             If .TextMatrix(Rowjsq, 0) <> "*" Then
  73.                 Exit For
  74.             Else
  75.                 Lng_RowCount = Lng_RowCount + 1
  76.             End If
  77.            
  78.            '1.首先进行为空或为零判断(Fixed)
  79.            For Jsqte = Qslz To .Cols - 1
  80.             
  81.                 '字段不能为空
  82.                 If GridInt(Jsqte, 5) = 1 Then
  83.                     If Len(Trim(.TextMatrix(Rowjsq, Jsqte))) = 0 Then
  84.                         Tsxx = GridStr(Jsqte, 2)
  85.                         Lrywlz = Jsqte
  86.                         GoTo Lrcwcl
  87.                         Exit For
  88.                     End If
  89.                 End If
  90.                 
  91.                 '字段不能为零
  92.                 If GridInt(Jsqte, 5) = 2 Then
  93.                     If Val(Trim(.TextMatrix(Rowjsq, Jsqte))) = 0 Then
  94.                         Tsxx = GridStr(Jsqte, 2)
  95.                         Lrywlz = Jsqte
  96.                         GoTo Lrcwcl
  97.                         Exit For
  98.                     End If
  99.                 End If
  100.             Next Jsqte
  101.            
  102.             '2.判断存货编码是否存在(Define)
  103.             SqlStr = "SELECT mnumber From Gy_Material Where mnumber='" & Trim(.TextMatrix(Rowjsq, Sydz("001", GridStr(), Szzls))) & "'"
  104.             Set Rectemp = Cw_DataEnvi.DataConnect.Execute(SqlStr)
  105.             If Rectemp.EOF Then
  106.                 Tsxx = "此存货编码不存在!"
  107.                 Lrywlz = Sydz("001", GridStr(), Szzls)
  108.                 GoTo Lrcwcl
  109.             End If
  110.         Next Rowjsq
  111.      
  112.         '单据分录行数不能为零(Fixed)
  113.         If Lng_RowCount = 0 Then
  114.             Tsxx = "单据分录行数不能为零!"
  115.             Call Xtxxts(Tsxx, 0, 1)
  116.             Exit Function
  117.         End If
  118.         
  119.         '[>>
  120.         '此处可以定义整张单据不能通过有效性检查的理由
  121.         '<<]
  122.     End With  '网格
  123.    
  124.    
  125.     '二.=============如果以上有效性检查均顺利通过,则执行存盘动作============'
  126.    
  127.     '对存盘进行事务处理(Fixed)
  128.     On Error GoTo Swcwcl
  129.     Cw_DataEnvi.DataConnect.BeginTrans
  130.     
  131.     '判断单据状态以进行不同处理
  132.     
  133.     '1.先对单据主表进行处理
  134.     If Trim(Lab_OperStatus) = "2" Then
  135.     
  136.         '新增单据
  137.         
  138.         '1.对于某些单据号自动生成的单据则可在此处自动生成
  139.          LrText(0).Text = CreatBillCode(BillCode, True, , , Trim(LrText(3).Tag))
  140.     
  141.         '2.开始存盘
  142.          
  143.         '打开单据主表动态集
  144.         If Rec_VouchMain.State = 1 Then Rec_VouchMain.Close
  145.         Rec_VouchMain.Open "Select * From Chhs_StartInputMain Where 1=2", Cw_DataEnvi.DataConnect, adOpenDynamic, adLockOptimistic
  146.              
  147.         With Rec_VouchMain
  148.             .AddNew
  149.             .Fields("StartInputMainId") = CreatBillID(BillCode)                              'Id号
  150.             .Fields("BillNum") = Trim(LrText(0).Text)                                        '单据号
  151.             .Fields("BillCode") = BillCode                                                   '单据编号
  152.             If Trim(LrText(1).Text) <> "" Then
  153.                 .Fields("BillDate") = CDate(LrText(1).Text)                                      '日期
  154.             End If
  155.             If Trim(LrText(2).Text) <> "" Then
  156.                 .Fields("InOutClassCode") = Trim(LrText(2).Tag)                              '入库类别
  157.             End If
  158.             .Fields("WhCode") = Trim(LrText(3).Tag)                                          '仓库
  159.             .Fields("SupplierCode") = Trim(LrText(4).Tag)                                    '供应商
  160.             If Trim(LrText(5).Text) <> "" Then
  161.                 .Fields("DeptCode") = Trim(LrText(5).Tag)                                    '部门
  162.             End If
  163.             If Trim(LrText(5).Text) <> "" Then
  164.                 .Fields("PersonCode") = Trim(LrText(6).Tag)                                  '业务员
  165.             End If
  166.             .Fields("Remark") = Trim(LrText(7).Text)                                         '备注
  167.             .Fields("Maker") = Xtczy                                                         '制单人
  168.             .Fields("Period") = StartMon                                                     '会计期间
  169.             .Fields("Kjyear") = Xtyear                                                       '会计年度
  170.             .Update
  171.             
  172.             '系统读出单据ID写入Lab_BillID
  173.             Lab_BillId.Caption = .Fields("StartInputMainId")
  174.         End With
  175.     Else
  176.         '修改单据
  177.        
  178.         '1.删除原单据子表中所有内容
  179.         
  180.         Cw_DataEnvi.DataConnect.Execute ("Delete Chhs_StartInputSub Where StartInputMainId=" & Val(Lab_BillId.Caption))
  181.         
  182.         '打开单据主表动态集
  183.         If Rec_VouchMain.State = 1 Then Rec_VouchMain.Close
  184.         Rec_VouchMain.Open "Select * From Chhs_StartInputMain  Where StartInputMainId=" & Val(Lab_BillId.Caption), Cw_DataEnvi.DataConnect, adOpenDynamic, adLockOptimistic
  185.         With Rec_VouchMain
  186.             
  187.             If Trim(LrText(1).Text) <> "" Then
  188.                 .Fields("BillDate") = CDate(LrText(1).Text)                                      '日期
  189.             End If
  190.             If Trim(LrText(2).Text) <> "" Then
  191.                 .Fields("InOutClassCode") = Trim(LrText(2).Tag)                              '入库类别
  192.             Else
  193.                 .Fields("InOutClassCode") = Null
  194.             End If
  195.             .Fields("SupplierCode") = Trim(LrText(4).Tag)                                    '供应商
  196.             If Trim(LrText(5).Text) <> "" Then
  197.                 .Fields("DeptCode") = Trim(LrText(5).Tag)                                    '部门
  198.             Else
  199.                 .Fields("DeptCode") = Null
  200.             End If
  201.             If Trim(LrText(5).Text) <> "" Then
  202.                 .Fields("PersonCode") = Trim(LrText(6).Tag)                                  '业务员
  203.             Else
  204.                  .Fields("PersonCode") = Null
  205.             End If
  206.             .Fields("Remark") = Trim(LrText(7).Text)                                         '备注
  207.             .Update
  208.         End With
  209.     End If
  210.          
  211.     '2.对单据子表进行处理
  212.          
  213.     '打开单据子表动态集
  214.     If Rec_VouchSub.State = 1 Then Rec_VouchSub.Close
  215.     Rec_VouchSub.Open "Select * From Chhs_StartInputSub Where 1=2", Cw_DataEnvi.DataConnect, adOpenDynamic, adLockOptimistic
  216.      
  217.     '将网格中有效数据行写入单据子表
  218.     For Rowjsq = WglrGrid.FixedRows To WglrGrid.Rows - 1
  219.         If WglrGrid.TextMatrix(Rowjsq, 0) <> "*" Then
  220.             Exit For
  221.         End If
  222.         
  223.         With Rec_VouchSub
  224.             .AddNew
  225.             .Fields("StartInputSubId") = Rowjsq - WglrGrid.FixedRows + 1                           'Id号
  226.             .Fields("StartInputMainId") = Val(Lab_BillId.Caption)                                                '单据ID
  227.             .Fields("Mnumber") = Trim(WglrGrid.TextMatrix(Rowjsq, Sydz("001", GridStr(), Szzls)))          '存货编码
  228.             .Fields("Quan") = Val(WglrGrid.TextMatrix(Rowjsq, Sydz("005", GridStr(), Szzls)))                    '单重
  229.             If PriceMode = "计划价法" Then
  230.                 .Fields("Planprice") = Val(WglrGrid.TextMatrix(Rowjsq, Sydz("006", GridStr(), Szzls)))                    '单价
  231.                 .Fields("Planmoney") = Val(WglrGrid.TextMatrix(Rowjsq, Sydz("007", GridStr(), Szzls)))               '数量
  232.             Else
  233.                 .Fields("Planprice") = 0                    '单价
  234.                 .Fields("Planmoney") = 0                    '数量
  235.             End If
  236.             .Fields("Price") = Val(WglrGrid.TextMatrix(Rowjsq, Sydz("008", GridStr(), Szzls)))                 '总重
  237.             .Fields("EMoney") = Val(WglrGrid.TextMatrix(Rowjsq, Sydz("009", GridStr(), Szzls)))               '金额
  238.             .Update
  239.         End With
  240.     Next Rowjsq
  241.     Cw_DataEnvi.DataConnect.CommitTrans
  242.     
  243.     Sub_SaveBill = True
  244.     Tsxx = "单据存盘完毕! 单据号:" & Trim(LrText(0).Text)
  245.     Call Xtxxts(Tsxx, 0, 4)
  246.     
  247.     '标识单据发生改动
  248.     Bln_BillChange = True
  249.     
  250.     '设置单据改变后的状态
  251.     Lab_OperStatus = "1"
  252.     Call Sub_OperStatus("10")
  253.     Rec_Query.Requery
  254.     Rec_Query.Find "StartInputMainId=" & Val(Lab_BillId.Caption)
  255.     
  256.     Exit Function
  257. Swcwcl:       '数据存盘时出现错误
  258.     Cw_DataEnvi.DataConnect.RollbackTrans
  259.     With WglrGrid
  260.         If Err.Number = -2147217887 Then
  261.             Tsxx = "单据中第  " & Trim(Str(Rowjsq - .FixedRows + 1)) & " 条分录录入数据超出允许范围!"
  262.             Call Xtxxts(Tsxx, 0, 1)
  263.             Changelock = True
  264.             .Select Rowjsq, Qslz
  265.             WglrGrid.SetFocus
  266.             Changelock = False
  267.             Exit Function
  268.         Else
  269.             Tsxx = "存盘过程中出现未知错误,程序自动恢复保存前状态!"
  270.             Call Xtxxts(Tsxx, 0, 1)
  271.             Exit Function
  272.         End If
  273.     End With
  274. Lrcwcl:        '录入错误处理(存盘前逐行有效性判断)
  275.     With WglrGrid
  276.         Call Xtxxts("(第 " & Trim(Str(Rowjsq - .FixedRows + 1)) & " 条单据分录)-" & Tsxx, 0, 1)
  277.         Changelock = True
  278.         .Select Rowjsq, Lrywlz
  279.         WglrGrid.SetFocus
  280.         Changelock = False
  281.         Exit Function
  282.     End With
  283. End Function
  284. '选择首张,上张,下张,末张(此4个过程只需用您的单据ID字段名替换"StartInputMainId"即可)
  285. Private Sub Sub_First()             '首 张
  286.     
  287.     With Rec_Query
  288.         If .RecordCount = 0 Then
  289.             Exit Sub
  290.         End If
  291.         .MoveFirst
  292.         Lab_BillId.Caption = .Fields("StartInputMainId")
  293.         Call Sub_ShowBill
  294.     End With
  295. End Sub
  296. Private Sub Sub_Prev()             '上 张
  297.     
  298.     With Rec_Query
  299.         If .RecordCount = 0 Then
  300.             Exit Sub
  301.         End If
  302.         If Not .BOF Then
  303.             .MovePrevious
  304.         End If
  305.         If Not .BOF Then
  306.             Lab_BillId.Caption = .Fields("StartInputMainId")
  307.         Else
  308.             .MoveNext
  309.         End If
  310.         Call Sub_ShowBill
  311.     End With
  312. End Sub
  313. Private Sub Sub_next()             '下 张
  314.     With Rec_Query
  315.         If .RecordCount = 0 Then
  316.             Exit Sub
  317.         End If
  318.         If Not .EOF Then
  319.             .MoveNext
  320.         End If
  321.         If Not .EOF Then
  322.             Lab_BillId.Caption = .Fields("StartInputMainId")
  323.         Else
  324.             .MovePrevious
  325.         End If
  326.         Call Sub_ShowBill
  327.     End With
  328. End Sub
  329. Private Sub Sub_Last()              '末 张
  330.     
  331.     With Rec_Query
  332.         If .RecordCount = 0 Then
  333.             Exit Sub
  334.         End If
  335.         .MoveLast
  336.         Lab_BillId.Caption = .Fields("StartInputMainId")
  337.         Call Sub_ShowBill
  338.     End With
  339. End Sub
  340.     
  341. '[>>===================以下为根据实际业务需要自定义过程区域=============================<<]
  342. '审核,弃审
  343. Private Sub Sub_CheckBill()             '审 核
  344.     
  345.     '[>>
  346.     '此处可以写入禁止单据审核的理由
  347.     '<<]
  348.     
  349.      '判断用户是否有此功能执行权限,如有则写上机日志(进入)
  350.      If Not Security_Log(Str_RightCheck, Xtczybm, 1, True) Then
  351.         Exit Sub
  352.      End If
  353.     
  354.     
  355.     '将单据写入审核标识
  356.     Cw_DataEnvi.DataConnect.Execute ("Update Chhs_StartInputMain Set Checker='" & Xtczy & "' Where StartInputMainId=" & Val(Lab_BillId.Caption))
  357.     
  358.     '写入系统操作员
  359.     LrText(9).Text = Xtczy
  360.     
  361.     '设置审核弃审按钮状态
  362.     Call Sub_CheckStatus
  363.     
  364.     '标识单据发生变化
  365.     Bln_BillChange = True
  366. End Sub
  367. Private Sub Sub_AbandonCheck()          '弃 审
  368.     
  369.     '[>>
  370.     '此处可以写入禁止单据弃审的理由
  371.     '<<]
  372.     
  373.     '判断用户是否有此功能执行权限,如有则写上机日志(进入)
  374.     If Not Security_Log(Str_RightCheck, Xtczybm, 1, True) Then
  375.        Exit Sub
  376.     End If
  377.    
  378.     '将单据清除审核标识
  379.     Cw_DataEnvi.DataConnect.Execute ("Update Chhs_StartInputMain Set Checker='' Where StartInputMainId=" & Val(Lab_BillId.Caption))
  380.     
  381.     '清空单据审核人
  382.     LrText(9).Text = ""
  383.     
  384.     '设置审核弃审按钮状态
  385.     Call Sub_CheckStatus
  386.     
  387.     '标识单据发生变化
  388.     Bln_BillChange = True
  389.   
  390. End Sub
  391. Private Function Fun_AllowEdit() As Boolean                      '判断当前单据是否允许编辑或删除
  392.   
  393.     Dim Rectemp As New ADODB.Recordset     '临时使用动态集
  394.     Fun_AllowEdit = False
  395.     SqlStr = "Select * From Chhs_StartInputMain Where StartInputMainId=" & Val(Lab_BillId.Caption)
  396.     Set Rectemp = Cw_DataEnvi.DataConnect.Execute(SqlStr)
  397.     With Rectemp
  398.         If Not .EOF Then
  399.             If Trim(.Fields("chalkitupman") & "") <> "" Or Trim(.Fields("checker") & "") <> "" Then
  400.                 Tsxx = "该单据已审核或已记帐,不能修改或删除!"
  401.                 Call Xtxxts(Tsxx, 0, 4)
  402.                 Exit Function
  403.             End If
  404.         End If
  405.     End With
  406.     Fun_AllowEdit = True
  407. End Function
  408. '[>>===================以上为根据实际业务需要自定义过程区域=============================<<]
  409. '===================以 下 程 序 为 通 用 部 分 ,一 般 不 需 更 改(程序动作部分)======================='
  410. Private Sub Sub_AdjustGrid()
  411.   
  412.     '调 整 网 格
  413.     With WglrGrid
  414.         '加 1 保持一行录入行
  415.         If .Rows < Pmbcsjhs + .FixedRows + Fzxwghs + 1 Then
  416.             .Rows = Pmbcsjhs + .FixedRows + Fzxwghs + 1
  417.             For Jsqte = .FixedRows To .Rows - 1
  418.                 .RowHeight(Jsqte) = Sjhgd
  419.             Next Jsqte
  420.         End If
  421.         
  422.         '判断是否有辅助行和录入行,如没有则加行
  423.         Do While .TextMatrix(.Rows - 1 - Fzxwghs, 0) = "*"
  424.             .AddItem ""
  425.             .RowHeight(.Rows - 1) = Sjhgd
  426.         Loop
  427.     
  428.     End With
  429. End Sub
  430. Private Sub Lrzdbz()                                                      '录入字段帮助
  431.     
  432.     If Not Ydcommand.Visible Then
  433.         Exit Sub
  434.     End If
  435.    
  436.     With WglrGrid
  437.         Valilock = True
  438.     
  439.         '处理通用部分
  440.         Changelock = True        '调入另外窗体必须加锁
  441.         Call Drbmhelp(GridInt(.Col, 6), GridStr(.Col, 3), Trim(Ydtext.Text))
  442.         Changelock = False
  443.         
  444.         If Len(Xtfhcs) <> 0 Then
  445.             If GridInt(.Col, 7) = 0 Then
  446.                 Ydtext.Text = Xtfhcs
  447.             Else
  448.                 Ydtext.Text = Xtfhcsfz
  449.             End If
  450.         End If
  451.         
  452.         Valilock = False
  453.         If Ydtext.Visible Then
  454.             Ydtext.SetFocus
  455.         End If
  456.     End With
  457. End Sub
  458. Private Sub Cshhjwg()                                                     '初始化合计网格(*对合计网格来说,录入网格为容器)
  459.     
  460.     With HjGrid
  461.     
  462.        '是否显示合计网格
  463.        If Not Sfxshjwg Then
  464.            .Visible = False
  465.            Exit Sub
  466.        Else
  467.            .Visible = True
  468.        End If
  469.       
  470.        '设置网格相关属性
  471.        .Enabled = False
  472.        .Appearance = flexFlat
  473.        .BorderStyle = flexBorderNone
  474.        .ScrollBars = flexScrollBarNone
  475.        .Width = WglrGrid.Width
  476.        .FixedRows = 0
  477.        .Rows = 1
  478.        .Cols = WglrGrid.Cols
  479.        .LeftCol = WglrGrid.LeftCol
  480.        .TextMatrix(0, Qslz) = "合  计"
  481.        For Jsqte = 0 To WglrGrid.Cols - 1
  482.            .ColHidden(Jsqte) = WglrGrid.ColHidden(Jsqte)
  483.            .ColWidth(Jsqte) = WglrGrid.ColWidth(Jsqte)
  484.            .ColAlignment(Jsqte) = WglrGrid.ColAlignment(Jsqte)
  485.            .ColFormat(Jsqte) = WglrGrid.ColFormat(Jsqte)
  486.        Next Jsqte
  487.        .ColAlignment(Qslz) = flexAlignCenterTop
  488.        For Jsqte = .FixedRows To .Rows - 1
  489.            .RowHeight(Jsqte) = .Height / .Rows
  490.        Next Jsqte
  491.        
  492.       '程序自动调整网格高度(自动设置为网格剩余高度+辅助项网格行数(默认为1)*数据行高度)、并设置其位置信息
  493.        .Height = Fzxwghs * Sjhgd + ((WglrGrid.Height - WglrGrid.FixedRows * WglrGrid.RowHeight(0)) Mod Sjhgd)
  494.        .RowHeight(0) = .Height
  495.        .Move 0, WglrGrid.Height - .Height, WglrGrid.Width, .Height
  496.     End With
  497. End Sub
  498. Private Sub Form_Resize()                                                '窗体大小发生变化时,重新显示文本框
  499.    Call Cxxswbk
  500. End Sub
  501. Private Function Fun_Drfrmyxxpd() As Boolean                             '调入其它窗体或功能产生的有效性判断(包括数据回写)
  502.     Fun_Drfrmyxxpd = True
  503.     With WglrGrid
  504.    
  505.         '如果文本框处于编辑状态,则先进性文本框的有效性判断
  506.         If Ydcommand1.Visible Then
  507.            If Not TextYxxpd(Ydcommand1.Tag) Then
  508.               Fun_Drfrmyxxpd = False
  509.               Exit Function
  510.            End If
  511.         End If
  512.         
  513.         '如果当前网格处于编辑状态,则先进行数据回写再进行有效性判断
  514.         If Ydtext.Visible Or YdCombo.Visible Then
  515.             Call Lrsjhx
  516.             If Not sjzdyxxpd(Dqlrwgh, Dqlrwgl) Then
  517.                 Fun_Drfrmyxxpd = False
  518.                 Exit Function
  519.             End If
  520.         End If
  521.    
  522.         '进行行有效性判断
  523.         If Not Sjhzyxxpd(.Row) Then
  524.             Fun_Drfrmyxxpd = False
  525.             Exit Function
  526.         End If
  527.     End With
  528. End Function
  529. Private Sub WglrGrid_AfterUserResize(ByVal Row As Long, ByVal Col As Long)       '调整列宽
  530.     
  531.     If HjGrid.Visible Then
  532.         With HjGrid
  533.             .ColWidth(Col) = WglrGrid.ColWidth(Col)
  534.         End With
  535.     End If
  536. End Sub
  537. Private Sub WglrGrid_EnterCell()                                                 '显示当前数据行相关信息
  538.     
  539.     With WglrGrid
  540.         If .Row >= .FixedRows Then
  541.             '[>>
  542.             '此处可以填写显示与此网格行相关信息
  543.             '<<]
  544.         End If
  545.     End With
  546. End Sub
  547. Private Sub WglrGrid_GotFocus()                                     '网格得到焦点
  548.     '网格得到焦点,如果当前选择行为非数据行
  549.     '则调整当前焦点至有效数据行
  550.     With WglrGrid
  551.         If .Row < .FixedRows And .Rows > .FixedRows Then
  552.             Changelock = True
  553.             .Select .FixedRows, .Col
  554.             Changelock = False
  555.         End If
  556.         If .Col < Qslz Then
  557.             Changelock = True
  558.             .Select .Row, Qslz
  559.             Changelock = False
  560.         End If
  561.     End With
  562. End Sub
  563. Private Sub WglrGrid_LostFocus()                                    '录入网格失去焦点
  564.     '用以屏蔽调用其它窗体时发生网格失去焦点事件
  565.     If Changelock Then
  566.         Exit Sub
  567.     End If
  568.     '引发网格RowcolChange事件
  569.     With WglrGrid
  570.         If Not (Ydtext.Visible Or YdCombo.Visible) Then
  571.             .Select 0, 0
  572.         End If
  573.     End With
  574. End Sub
  575. Private Sub WglrGrid_AfterScroll(ByVal OldTopRow As Long, ByVal OldLeftCol As Long, ByVal NewTopRow As Long, ByVal NewLeftCol As Long)                                       '限制用户在录入过程中滚动鼠标
  576.     If Gdtlock Then
  577.         Exit Sub
  578.     End If
  579.  
  580.     With WglrGrid
  581.         If Ydtext.Visible Or YdCombo.Visible Then
  582.             Gdtlock = True
  583.             .TopRow = Dqtoprow
  584.             .LeftCol = Dqleftcol
  585.             Gdtlock = False
  586.             Exit Sub
  587.         End If
  588.         HjGrid.LeftCol = .LeftCol
  589.     End With
  590. End Sub
  591. Private Sub WglrGrid_LeaveCell()                                    '离开单元格
  592.     
  593.     If Changelock Then
  594.         Exit Sub
  595.     End If
  596.     '记录刚刚离开网格单元的行列值
  597.     Dqlkwgh = WglrGrid.Row
  598.     Dqlkwgl = WglrGrid.Col
  599.     '判断是否需要录入数据回写
  600.     If Not (Ydtext.Visible Or YdCombo.Visible) Then
  601.         Exit Sub
  602.     End If
  603.     Call Lrsjhx
  604. End Sub
  605. Private Sub WglrGrid_RowColChange()                                '网格录入行列发生变化时,进行有效性判断
  606.     Valilock = True       '屏蔽文本框失去焦点进行有效性判断
  607.     With WglrGrid
  608.         If Changelock Then
  609.             Exit Sub
  610.         End If
  611.         If Not sjzdyxxpd(Dqlrwgh, Dqlrwgl) Then
  612.             Exit Sub
  613.         End If
  614.         If .Row <> Dqlkwgh Then
  615.             If Not Sjhzyxxpd(Dqlkwgh) Then
  616.                 Exit Sub
  617.             End If
  618.         End If
  619.     End With
  620.    
  621.     Call fhyxh
  622.     Call Xldql
  623.    
  624. End Sub
  625. Private Sub WglrGrid_DblClick()          '鼠标双击网格显示文本框
  626.   
  627.     With WglrGrid
  628.         Call xswbk
  629.     End With
  630. End Sub
  631. Private Sub Ycwbk()                      '隐藏文本框,帮助按钮,列表组合框
  632.     
  633.     Valilock = True
  634.     Ydtext.Visible = False
  635.     YdCombo.Visible = False
  636.     Ydcommand.Visible = False
  637. End Sub
  638. Private Sub YdCombo_KeyDown(KeyCode As Integer, Shift As Integer)        '列表框移动
  639.     With WglrGrid
  640.         Select Case KeyCode
  641.             Case vbKeyEscape                'ESC 键放弃录入
  642.                 Valilock = True
  643.                 .SetFocus
  644.                 Call Ycwbk
  645.                 Valilock = False
  646.             Case vbKeyReturn                '回 车 键 =13
  647.                 KeyCode = 0
  648.                 .SetFocus
  649.                 Call Lrsjhx
  650.                 Rowjsq = .Row
  651.                 Coljsq = .Col + 1
  652.                 If Coljsq > .Cols - 1 Then
  653.                     If Rowjsq < .Rows - 1 Then
  654.                         Rowjsq = Rowjsq + 1
  655.                     End If
  656.                     Coljsq = Qslz
  657.                 End If
  658.                 Do While Rowjsq <= .Rows - 1
  659.                     If .ColHidden(Coljsq) Or (Not GridBoolean(Coljsq, 1)) Then
  660.                         Coljsq = Coljsq + 1
  661.                         If Coljsq > .Cols - 1 Then
  662.                             Rowjsq = Rowjsq + 1
  663.                             Coljsq = Qslz
  664.                         End If
  665.                     Else
  666.                         Exit Do
  667.                     End If
  668.                 Loop
  669.                 .Select Rowjsq, Coljsq
  670.             Case vbKeyLeft                  '左 箭 头 =37
  671.                 If .Col - 1 = Qslz Then
  672.                     If .ColHidden(Qslz) Or (Not GridBoolean(Qslz, 1)) Then
  673.                         GoTo jzzx
  674.                     End If
  675.                 End If
  676.                 If .Col > Qslz Then
  677.                     KeyCode = 0
  678.                     .SetFocus
  679.                     Call Lrsjhx
  680.                     Coljsq = .Col - 1
  681.                     Do While Coljsq > Qslz
  682.                         If Coljsq - 1 = Qslz Then
  683.                             If .ColHidden(Qslz) Or (Not GridBoolean(Qslz, 1)) Then
  684.                                 GoTo jzzx
  685.                             End If
  686.                         End If
  687.                         If .ColHidden(Coljsq) Or (Not GridBoolean(Coljsq, 1)) Then
  688.                             Coljsq = Coljsq - 1
  689.                         Else
  690.                             Exit Do
  691.                         End If
  692.                     Loop
  693.                     .Select .Row, Coljsq
  694.                 End If
  695.             Case vbKeyRight                 '右 箭 头 =39
  696.                 KeyCode = 0
  697.                 .SetFocus
  698.                 Call Lrsjhx
  699.                 Rowjsq = .Row
  700.                 Coljsq = .Col + 1
  701.                 If Coljsq > .Cols - 1 Then
  702.                     If Rowjsq < .Rows - 1 Then
  703.                         Rowjsq = Rowjsq + 1
  704.                     End If
  705.                     Coljsq = Qslz
  706.                 End If
  707.                 Do While Rowjsq <= .Rows - 1
  708.                     If .ColHidden(Coljsq) Or (Not GridBoolean(Coljsq, 1)) Then
  709.                         Coljsq = Coljsq + 1
  710.                         If Coljsq > .Cols - 1 Then
  711.                             Rowjsq = Rowjsq + 1
  712.                             Coljsq = Qslz
  713.                         End If
  714.                     Else
  715.                         Exit Do
  716.                     End If
  717.                 Loop
  718.                 .Select Rowjsq, Coljsq
  719.         Case Else
  720.    End Select
  721.    
  722. jzzx:
  723.    
  724.     End With
  725. End Sub
  726. Private Sub YdCombo_LostFocus()
  727.   
  728.     With WglrGrid                                    '因为选中网格会先发生Rowcolchange事件置Valiock
  729.         If Not Valilock Then                           '为TRUE
  730.             Call Lrsjhx
  731.             If Not Sjhzyxxpd(Dqlrwgh) Then
  732.                 Exit Sub
  733.             End If
  734.         End If
  735.     End With
  736. End Sub
  737. Private Sub Ydcommand_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
  738.     Call Lrzdbz
  739. End Sub
  740. Private Sub ydtext_KeyDown(KeyCode As Integer, Shift As Integer)
  741.     Dim Rowjsq As Long, Coljsq As Long
  742.     With WglrGrid
  743.         Select Case KeyCode
  744.             Case vbKeyF2
  745.                 Call Lrzdbz
  746.             Case vbKeyEscape                'ESC 键放弃录入
  747.                 Valilock = True
  748.                 Call Ycwbk
  749.                 .SetFocus
  750.             Case vbKeyReturn                '回 车 键 =13
  751.                 KeyCode = 0
  752.                 .SetFocus
  753.                 Call Lrsjhx
  754.                 Rowjsq = .Row
  755.                 Coljsq = .Col + 1
  756.                 If Coljsq > .Cols - 1 Then
  757.                     If Rowjsq < .Rows - 1 Then
  758.                         Rowjsq = Rowjsq + 1
  759.                     End If
  760.                     Coljsq = Qslz
  761.                 End If
  762.                 Do While Rowjsq <= .Rows - 1
  763.                     If .ColHidden(Coljsq) Or (Not GridBoolean(Coljsq, 1)) Then
  764.                         Coljsq = Coljsq + 1
  765.                         If Coljsq > .Cols - 1 Then
  766.                             Rowjsq = Rowjsq + 1
  767.                             Coljsq = Qslz
  768.                         End If
  769.                     Else
  770.                         Exit Do
  771.                     End If
  772.                 Loop
  773.                 If Rowjsq <= .Rows - 1 Then
  774.                     .Select Rowjsq, Coljsq
  775.                 End If
  776.             Case vbKeyUp                    '上 箭 头 =38
  777.                 KeyCode = 0
  778.                 .SetFocus
  779.                 Call Lrsjhx
  780.                 If .Row > .FixedRows Then
  781.                     .Row = .Row - 1
  782.                 End If
  783.             Case vbKeyDown                  '下 箭 头 =40
  784.                 KeyCode = 0
  785.                 .SetFocus
  786.                 Call Lrsjhx
  787.                 If .Row < .Rows - 1 Then
  788.                     .Row = .Row + 1
  789.                 End If
  790.             Case vbKeyLeft                  '左 箭 头 =37
  791.                 If .Col - 1 = Qslz Then
  792.                     If .ColHidden(Qslz) Or (Not GridBoolean(Qslz, 1)) Then
  793.                         GoTo jzzx
  794.                     End If
  795.                 End If
  796.                 If Ydtext.SelStart = 0 And .Col > Qslz Then
  797.                     KeyCode = 0
  798.                     .SetFocus
  799.                     Call Lrsjhx
  800.                     Coljsq = .Col - 1
  801.                     Do While Coljsq > Qslz
  802.                         If Coljsq - 1 = Qslz Then
  803.                             If .ColHidden(Qslz) Or (Not GridBoolean(Qslz, 1)) Then
  804.                                 GoTo jzzx
  805.                             End If
  806.                         End If
  807.                         If .ColHidden(Coljsq) Or (Not GridBoolean(Coljsq, 1)) Then
  808.                             Coljsq = Coljsq - 1
  809.                         Else
  810.                             Exit Do
  811.                         End If
  812.                     Loop
  813.                     .Select .Row, Coljsq
  814.                 End If
  815. jzzx:
  816.             Case vbKeyRight                 '右 箭 头 =39
  817.                 wblong = Len(Ydtext.Text)
  818.                 If (Ydtext.SelStart = wblong Or Ydtext.SelLength = wblong) Then
  819.                     KeyCode = 0
  820.                     .SetFocus
  821.                     Call Lrsjhx
  822.                     Rowjsq = .Row
  823.                     Coljsq = .Col + 1
  824.                     If Coljsq > .Cols - 1 Then
  825.                         If Rowjsq < .Rows - 1 Then
  826.                             Rowjsq = Rowjsq + 1
  827.                         End If
  828.                         Coljsq = Qslz
  829.                     End If
  830.                     Do While Rowjsq <= .Rows - 1
  831.                         If .ColHidden(Coljsq) Or (Not GridBoolean(Coljsq, 1)) Then
  832.                             Coljsq = Coljsq + 1
  833.                             If Coljsq > .Cols - 1 Then
  834.                                 Rowjsq = Rowjsq + 1
  835.                                 Coljsq = Qslz
  836.                             End If
  837.                         Else
  838.                             Exit Do
  839.                         End If
  840.                     Loop
  841.                     .Select Rowjsq, Coljsq
  842.                 End If
  843.             Case Else
  844.         End Select
  845.     End With
  846. End Sub
  847. Private Sub ydtext_KeyPress(KeyAscii As Integer)         '录入字符事中控制
  848.     
  849.     Call InputFieldLimit(Ydtext, GridInt(WglrGrid.Col, 1), KeyAscii)
  850.     If KeyAscii <> 0 Then
  851.         Call Xyxhbz(Dqlrwgh)
  852.     End If
  853. End Sub
  854. Private Sub ydtext_Change()                              '录入事中变化处理
  855.     '防止程序改变但不进行处理
  856.     If Wbkbhlock Then
  857.         Exit Sub
  858.     End If
  859.     With WglrGrid
  860.         '限制字段录入长度
  861.         Wbkbhlock = True
  862.          
  863.         Call TextChangeLimit(LrText(Index), Textint(Index, 1))  '去掉无效字符
  864.         
  865.         Select Case GridInt(.Col, 1)
  866.             Case 8, 11   '金额型
  867.                 Call Sjgskz(Ydtext, Xtjezws - Xtjexsws - 1, Xtjexsws)
  868.             Case 9, 12   '数量型
  869.                 Call Sjgskz(Ydtext, Xtslzws - Xtslxsws - 1, Xtslxsws)
  870.             Case 10      '单价型
  871.                 Call Sjgskz(Ydtext, Xtdjzws - Xtdjxsws - 1, Xtdjxsws)
  872.             Case Else    '其他类型
  873.                 If GridInt(.Col, 3) <> 0 Or GridInt(.Col, 4) <> 0 Then
  874.                     Call Sjgskz(Ydtext, GridInt(.Col, 3), GridInt(.Col, 4))
  875.                 End If
  876.         End Select
  877.         Wbkbhlock = False
  878.     End With
  879. End Sub
  880. Private Sub ydtext_LostFocus()            '如果由于选中网格之外的控件而发生有效性判断(选中网格会先发生Rowcolchange事件置Valiock为TRUE)
  881.   
  882.     With WglrGrid
  883.         If Not Valilock Then
  884.             Call Lrsjhx
  885.             If Not sjzdyxxpd(Dqlrwgh, Dqlrwgl) Then
  886.                 Exit Sub
  887.             End If
  888.             If Not Sjhzyxxpd(Dqlrwgh) Then
  889.                 Exit Sub
  890.             End If
  891.         End If
  892.     End With
  893. End Sub
  894. Private Sub xswbk()                       '在当前选中单元显示文本框,列表框,帮助按钮(通用)
  895.     
  896.     Dim Wbkpy As Integer, Wbkpy1 As Integer '文本框偏移量
  897.   
  898.     '当某种条件成立时禁止文本框激活使单据处于录入状态
  899.     If Not Fun_AllowInput Then
  900.         Exit Sub
  901.     End If
  902.   
  903.     '显示文本框前返回有效行列(解决滚动条问题)
  904.     Call Xldqh
  905.     Call Xldql
  906.   
  907.     '隐藏文本框,帮助按钮,列表组合框
  908.     Call Ycwbk
  909.   
  910.     With WglrGrid
  911.         Dqlrwgh = .Row
  912.         Dqlrwgl = .Col
  913.         If Not GridBoolean(.Col, 1) Or .Row < .FixedRows Then
  914.             Exit Sub
  915.         End If
  916.      
  917.         Wbkpy = 30
  918.         Wbkpy1 = 15
  919.     
  920.         On Error Resume Next
  921.         
  922.         If GridBoolean(.Col, 3) Then
  923.             YdCombo.Left = .CellLeft + .Left + Wbkpy
  924.             YdCombo.Top = .CellTop + .Top + Wbkpy
  925.             YdCombo.Width = .CellWidth - Wbkpy1
  926.             Call Wbkcl
  927.             YdCombo.Visible = True
  928.             YdCombo.SetFocus
  929.             Ydcommand.Visible = False
  930.             Ydtext.Visible = False
  931.         Else
  932.             If GridBoolean(.Col, 2) Then
  933.                 Ydcommand.Left = .Left + .CellLeft + .CellWidth - Ydcommand.Width + Wbkpy
  934.                 Ydcommand.Top = .Top + .CellTop + .CellHeight - Ydcommand.Height + Wbkpy
  935.                 Ydcommand.Visible = True
  936.             Else
  937.                 Ydcommand.Visible = False
  938.             End If
  939.              
  940.             Ydtext.Left = .CellLeft + .Left + Wbkpy
  941.             Ydtext.Top = .CellTop + .Top + Wbkpy
  942.             If Ydcommand.Visible Then
  943.                 If Sfblbzkd Then
  944.                     Ydtext.Width = .CellWidth - Ydcommand.Width
  945.                 Else
  946.                     Ydtext.Width = .CellWidth - Wbkpy1
  947.                 End If
  948.             Else
  949.                 Ydtext.Width = .CellWidth - Wbkpy1
  950.             End If
  951.             Ydtext.Height = .CellHeight - Wbkpy1
  952.         
  953.             If GridInt(.Col, 2) <> 0 Then
  954.                 Ydtext.MaxLength = GridInt(.Col, 2)
  955.             Else
  956.                 Ydtext.MaxLength = 3000
  957.             End If
  958.       
  959.             Call Wbkcl
  960.       
  961.             Ydtext.Visible = True
  962.             Ydtext.SetFocus
  963.         End If
  964.         Dqtoprow = .TopRow
  965.         Dqleftcol = .LeftCol
  966.         
  967.         '重置锁值
  968.         Valilock = False
  969.         Wbkbhlock = False
  970.     End With
  971. End Sub
  972. Private Function Fun_AllowInput() As Boolean                           '当某种条件成立时禁止文本框激活使单据处于录入状态
  973.    
  974.     '如果单据操作状态为浏览状态则不能显示录入载体(通用)
  975.     If Trim(Lab_OperStatus.Caption) = "1" Then
  976.         Exit Function
  977.     End If
  978.    
  979.     '[>>
  980.     
  981.     '此处可以填写禁止文本框激活使单据处于录入状态的理由
  982.     If Trim(LrText(3).Text) = "" Then
  983.         Tsxx = "请先输入仓库!"
  984.         Call Xtxxts(Tsxx, 0, 1)
  985.         LrText(3).SetFocus
  986.         Exit Function
  987.     End If
  988.    
  989.     '<<]
  990.    
  991.     Fun_AllowInput = True
  992. End Function
  993. Private Sub Cxxswbk()                                                  'Formresize中重新显示文本框,列表框,帮助按钮(通用)
  994.                    
  995.     Dim Wbkpy As Integer, Wbkpy1 As Integer
  996.     Wbkpy = 30
  997.     Wbkpy1 = 15
  998.     With WglrGrid
  999.         If YdCombo.Visible Then
  1000.             YdCombo.Left = .CellLeft + .Left + Wbkpy
  1001.             YdCombo.Top = .CellTop + .Top + Wbkpy
  1002.             YdCombo.Width = .CellWidth - Wbkpy1
  1003.         End If
  1004.         If Ydcommand.Visible Then
  1005.             Ydcommand.Left = .Left + .CellLeft + .CellWidth - Ydcommand.Width + Wbkpy
  1006.             Ydcommand.Top = .Top + .CellTop + .CellHeight - Ydcommand.Height + Wbkpy
  1007.         End If
  1008.         If Ydtext.Visible Then
  1009.             If Ydcommand.Visible Then
  1010.                 If Sfblbzkd Then
  1011.                     Ydtext.Width = .CellWidth - Ydcommand.Width
  1012.                 Else
  1013.                     Ydtext.Width = .CellWidth - Wbkpy1
  1014.                 End If
  1015.             Else
  1016.                 Ydtext.Width = .CellWidth - Wbkpy1
  1017.             End If
  1018.             Ydtext.Left = .CellLeft + .Left + Wbkpy
  1019.             Ydtext.Top = .CellTop + .Top + Wbkpy
  1020.             Ydtext.Height = .CellHeight - Wbkpy1
  1021.         End If
  1022.     End With
  1023. End Sub
  1024. Private Sub Lrsjhx()                                                   '文本框录入数据回写
  1025.     
  1026.     With WglrGrid
  1027.         If YdCombo.Visible Then
  1028.             .Text = Trim(YdCombo.Text)
  1029.         End If
  1030.         If Ydtext.Visible Then
  1031.             .Text = Trim(Ydtext.Text)
  1032.         End If
  1033.         
  1034.         '(如果字段录入内容发生变化,则打开有效性判断锁)
  1035.         If Zdlrqnr <> Trim(.Text) Then
  1036.             Yxxpdlock = False
  1037.             Hyxxpdlock = False
  1038.         End If
  1039.     
  1040.         '如果字段录入内容不为空则写数据行有效性标志
  1041.         If Len(Trim(.Text)) <> 0 Then
  1042.             Call Xyxhbz(.Row)
  1043.         End If
  1044.     
  1045.         '隐藏文本框,帮助按钮,列表组合框
  1046.         Call Ycwbk
  1047.     End With
  1048. End Sub
  1049. Private Sub WglrGrid_KeyDown(KeyCode As Integer, Shift As Integer)    '网格录入增行,删行快捷键
  1050.   
  1051.     '如果单据操作状态为浏览状态则不能显示录入载体
  1052.     If Trim(Lab_OperStatus.Caption) = "1" Then
  1053.         Exit Sub
  1054.     End If
  1055.     Select Case KeyCode
  1056.         Case vbKeyF2                   '按F2键参照
  1057.             Call xswbk
  1058.             Call Lrzdbz
  1059.         Case vbKeyDelete               '删行
  1060.             Call Scdqfl
  1061.         Case vbKeyInsert               '增行
  1062.             Call zjlrfl
  1063.     End Select
  1064. End Sub
  1065. Private Sub WglrGrid_KeyPress(KeyAscii As Integer)                             '网格接受键盘录入
  1066.     '当某种条件成立时禁止文本框激活使单据处于录入状态
  1067.     If Not Fun_AllowInput Then
  1068.         Exit Sub
  1069.     End If
  1070.   
  1071.     With WglrGrid
  1072.         '屏 蔽 回 车 键
  1073.         If KeyAscii = vbKeyReturn Then
  1074.             KeyAscii = 0
  1075.             Rowjsq = .Row
  1076.             Coljsq = .Col + 1
  1077.             If Coljsq > .Cols - 1 Then
  1078.                 If Rowjsq < .Rows - 1 Then
  1079.                     Rowjsq = Rowjsq + 1
  1080.                 End If
  1081.                 Coljsq = Qslz
  1082.             End If
  1083.             Do While Rowjsq <= .Rows - 1
  1084.                 If .ColHidden(Coljsq) Or (Not GridBoolean(Coljsq, 1)) Then
  1085.                     Coljsq = Coljsq + 1
  1086.                     If Coljsq > .Cols - 1 Then
  1087.                         Rowjsq = Rowjsq + 1
  1088.                         Coljsq = Qslz
  1089.                     End If
  1090.                 Else
  1091.                     Exit Do
  1092.                 End If
  1093.             Loop
  1094.             If Rowjsq <= .Rows - 1 Then
  1095.                 .Select Rowjsq, Coljsq
  1096.             End If
  1097.             Exit Sub
  1098.         End If
  1099.      
  1100.         '接受用户录入
  1101.         Select Case KeyAscii
  1102.             Case 0 To 32             '用户输入KeyAscii为0-32的键 如空格
  1103.                 '显示录入载体
  1104.                 Call xswbk
  1105.             Case Else
  1106.                 '防止非编辑字段SendKeys()出现死循环
  1107.                 If Not GridBoolean(.Col, 1) Or .Row < .FixedRows Then
  1108.                     Exit Sub
  1109.                 End If
  1110.                 '如果此字段为列表框录入则调入相应列表框
  1111.                 If GridBoolean(.Col, 3) Then
  1112.                     '列表框录入
  1113.                     Call xswbk
  1114.                 Else
  1115.                     Ydtext.Text = ""
  1116.                     '录入限制
  1117.                     Call InputFieldLimit(Ydtext, GridInt(WglrGrid.Col, 1), KeyAscii)
  1118.                     If KeyAscii = 0 Then
  1119.                         Exit Sub
  1120.                     End If
  1121.                     '如果录入字符有效则写有效行数据标志
  1122.                     Call Xyxhbz(.Row)
  1123.                     Call xswbk
  1124.                     Ydtext.Text = ""
  1125.                     Valilock = True
  1126.                     SendKeys Chr(KeyAscii), True
  1127.                     DoEvents
  1128.                     Valilock = False
  1129.                 End If
  1130.         End Select
  1131.     End With
  1132. End Sub
  1133. Private Sub zjlrfl()                                                    '增加录入分录
  1134.     
  1135.     With WglrGrid
  1136.         If Not (Ydtext.Visible Or YdCombo.Visible) Then
  1137.             If Not Fun_Drfrmyxxpd Then
  1138.                 Exit Sub
  1139.             End If
  1140.         Else
  1141.             Exit Sub
  1142.         End If
  1143.         If .Row < .FixedRows Then
  1144.             Exit Sub
  1145.         End If
  1146.         .AddItem "", .Row
  1147.         .RowHeight(.Row) = Sjhgd
  1148.         If .Row <> .Rows - 1 Then
  1149.             If .TextMatrix(.Row + 1, 0) = "*" Then
  1150.                 .TextMatrix(.Row, 0) = "*"
  1151.             Else
  1152.                 .RemoveItem .Rows - 1
  1153.             End If
  1154.         End If
  1155.         Call Xldqh
  1156.         Call Xldql
  1157.         Hyxxpdlock = False
  1158.     End With
  1159. End Sub
  1160. Private Sub Scdqfl()                                                    '删除当前分录
  1161.     Dim Answer As Integer, Scqwghz As Long, Scqwglz As Long, Hjlzte As Long, Sflrzt As Boolean
  1162.     With WglrGrid
  1163.         Scqwghz = .Row
  1164.         Scqwglz = .Col
  1165.         If .TextMatrix(.Row, 0) = "*" Then
  1166.             '判断是否为录入状态
  1167.             If Ydtext.Visible Or YdCombo.Visible Then
  1168.                 Sflrzt = True
  1169.                 Validate = True
  1170.                 Call Lrsjhx
  1171.                 Validate = False
  1172.             End If
  1173.             Call Xldqh
  1174.             Changelock = True
  1175.             .Select .Row, 0
  1176.             Changelock = False
  1177.             If Shsfts Then
  1178.                 .Cell(flexcpBackColor, .Row, Qslz, .Row, .Cols - 1) = QBColor(12)
  1179.                 Tsxx = "请确认是否删除当前记录?"
  1180.                 yhAnswer = Xtxxts(Tsxx, 2, 2)
  1181.                 If yhAnswer = 2 Then
  1182.                     .Cell(flexcpBackColor, .Row, Qslz, .Row, .Cols - 1) = &H80000005
  1183.                     Changelock = True
  1184.                     .Select Scqwghz, Scqwglz
  1185.                     Changelock = False
  1186.                     
  1187.                     '如为录入状态,则恢复录入
  1188.                     If Sflrzt Then
  1189.                         Call xswbk
  1190.                     End If
  1191.                     Exit Sub
  1192.                 End If
  1193.             End If
  1194.             .RemoveItem .Row
  1195.             If .Rows < Pmbcsjhs + .FixedRows + Fzxwghs + 1 Then
  1196.                 .AddItem ""
  1197.                 .RowHeight(.Rows - 1) = Sjhgd
  1198.             End If
  1199.             Changelock = True
  1200.             .Select .Row, Scqwglz
  1201.             Changelock = False
  1202.    
  1203.             '重新计算合计数据
  1204.             For Hjlzte = Qslz To .Cols - 1
  1205.                 Call Sjhj(Hjlzte)
  1206.             Next Hjlzte
  1207.         End If
  1208.     End With
  1209. End Sub
  1210. Private Sub Sjhj(Hjwgl As Long)                                         '网格列数据合计
  1211.     
  1212.     Dim Hjjg As Double
  1213.     If Not GridBoolean(Hjwgl, 4) Then
  1214.         Exit Sub
  1215.     End If
  1216.     With WglrGrid
  1217.         Hjjg = 0
  1218.         For Jsqte = .FixedRows To .Rows - 1
  1219.             If .TextMatrix(Jsqte, 0) = "*" Then
  1220.                 Hjjg = Hjjg + Val(.TextMatrix(Jsqte, Hjwgl))
  1221.             End If
  1222.         Next Jsqte
  1223.         If GridBoolean(Hjwgl, 5) And Hjjg = 0 Then
  1224.             HjGrid.TextMatrix(0, Hjwgl) = ""
  1225.         Else
  1226.             HjGrid.TextMatrix(0, Hjwgl) = Hjjg
  1227.         End If
  1228.     End With
  1229. End Sub
  1230. Private Sub Qkwlzd(sjh As Long, Sjl As Long)                            '清空为零字段
  1231.     
  1232.     If Not GridBoolean(Sjl, 5) Then
  1233.         Exit Sub
  1234.     End If
  1235.     With WglrGrid
  1236.         If Val(Trim(.TextMatrix(sjh, Sjl))) = 0 Then
  1237.             .TextMatrix(sjh, Sjl) = ""
  1238.         End If
  1239.     End With
  1240. End Sub
  1241. Private Sub fhyxh()                                                     '返回录入数据有效行,同时让得到焦点网格可见
  1242.     
  1243.     With WglrGrid
  1244.         If .Row >= .FixedRows Then
  1245.             If .TextMatrix(.Row, 0) <> "*" Then
  1246.                 For Rowjsq = .FixedRows To .Rows - 1
  1247.                     If .TextMatrix(Rowjsq, 0) <> "*" Then
  1248.                         Exit For
  1249.                     End If
  1250.                 Next Rowjsq
  1251.                 If Rowjsq <= .Rows - 1 Then
  1252.                     Changelock = True
  1253.                     .Select Rowjsq, .Col
  1254.                     Changelock = False
  1255.                 Else
  1256.                     Changelock = True
  1257.                     .Select .Rows - 1, .Col
  1258.                     Changelock = False
  1259.                 End If
  1260.             End If
  1261.             Call Xldqh
  1262.         End If
  1263.   End With
  1264.   
  1265. End Sub
  1266. Private Sub Xldqh()                                                      '显露当前行
  1267.   
  1268.     Dim Toprowte As Long
  1269.     With WglrGrid
  1270.         Toprowte = 0
  1271.         Do While .CellTop + .RowHeight(.Row) + Fzxwghs * Sjhgd > .Height And .TopRow <> Toprowte
  1272.             Toprowte = .TopRow
  1273.             .TopRow = .TopRow + 1
  1274.         Loop
  1275.         Toprowte = 0
  1276.         Do While .CellTop < .FixedRows * .RowHeight(0) And .TopRow <> Toprowte
  1277.             Toprowte = .TopRow
  1278.             If .TopRow > 1 Then
  1279.                 .TopRow = .TopRow - 1
  1280.             End If
  1281.         Loop
  1282.     End With
  1283. End Sub
  1284. Private Sub Xldql()                                                     '显露当前列
  1285.     
  1286.     Dim Leftcolte As Long
  1287.     With WglrGrid
  1288.         If .Col >= Qslz And .Col >= .FixedCols Then
  1289.             If .LeftCol > .Col Then
  1290.                 .LeftCol = .Col
  1291.             End If
  1292.             Leftcolte = 0
  1293.             Do While .CellLeft + .CellWidth > .Width And .LeftCol <> Leftcolte
  1294.                 Leftcolte = .LeftCol
  1295.                 .LeftCol = .LeftCol + 1
  1296.             Loop
  1297.         End If
  1298.     End With
  1299. End Sub
  1300. Private Function pdhwk(sjh As Long)                                     '判断网格行是否为空行(所有录入字段均为空*非录入字段除外)
  1301.     
  1302.     With WglrGrid
  1303.         For Coljsq = Qslz To .Cols - 1
  1304.             If Len(Trim(.TextMatrix(sjh, Coljsq))) <> 0 And GridBoolean(Coljsq, 1) Then
  1305.                 pdhwk = False
  1306.                 Exit Function
  1307.             End If
  1308.         Next Coljsq
  1309.         pdhwk = True
  1310.     End With
  1311. End Function
  1312. Private Sub Xyxhbz(sjh As Long)                                         '写行有效性标志,并判断是否增行
  1313.     
  1314.     With WglrGrid
  1315.         If .TextMatrix(sjh, 0) = "*" Then
  1316.             Exit Sub
  1317.         End If
  1318.         .TextMatrix(sjh, 0) = "*"
  1319.         If sjh >= .Rows - Fzxwghs - 1 Then
  1320.             .AddItem ""
  1321.             .RowHeight(.Rows - 1) = Sjhgd
  1322.         End If
  1323.     End With
  1324. End Sub
  1325. '*****************************以下为文本框录入处理程序(固定不变部分)*******************************'
  1326. Private Sub Wbklrwbcl(Index As Integer)    '文本框录入事后处理程序
  1327.     '以下为依据实际情况自定义部分[
  1328.     
  1329.     '在此填写文本框录入事后处理程序
  1330.     Dim Rectemp As Recordset
  1331.     
  1332.     If Index = 3 Then
  1333.     
  1334.         If PriceMode = "计划价法" Then
  1335.            WglrGrid.ColHidden(Sydz("006", GridStr(), Szzls)) = False
  1336.            WglrGrid.ColHidden(Sydz("007", GridStr(), Szzls)) = False
  1337.         Else
  1338.            WglrGrid.ColHidden(Sydz("006", GridStr(), Szzls)) = True
  1339.            WglrGrid.ColHidden(Sydz("007", GridStr(), Szzls)) = True
  1340.         End If
  1341.          
  1342.          '初始化合计网格(Fixed)
  1343.         Call Cshhjwg
  1344.         
  1345.         WglrGrid.LeftCol = HjGrid.LeftCol
  1346.         
  1347.         LrText(0).Text = CreatBillCode(BillCode, False, , , Trim(LrText(Index).Tag))
  1348.         
  1349.          '清空单据号
  1350.         If Trim(LrText(Index)) = "" Then
  1351.             LrText(0) = ""
  1352.         End If
  1353.     End If
  1354.     
  1355.     ']以上为依据实际情况自定义部分
  1356. End Sub
  1357. Private Sub LrText_Change(Index As Integer)
  1358.     '屏蔽程序改变控制
  1359.     If TextChangeLock Then
  1360.         Exit Sub
  1361.     End If
  1362.    
  1363.     TextValiJudgeLock(Index) = False    '打开有效性判断锁
  1364.         
  1365.     '限制字段录入长度
  1366.           
  1367.     TextChangeLock = True  '加锁(防止执行Lrtext_Change)
  1368.       
  1369.       Call TextChangeLimit(LrText(Index), Textint(Index, 1))  '去掉无效字符
  1370.       
  1371.       Select Case Textint(Index, 1)
  1372.             Case 8, 11       '金额型
  1373.                 Call Sjgskz(LrText(Index), Xtjezws - Xtjexsws - 1, Xtjexsws)
  1374.             Case 9, 12       '数量型
  1375.                 Call Sjgskz(LrText(Index), Xtslzws - Xtslxsws - 1, Xtslxsws)
  1376.             Case 10          '单价型
  1377.                 Call Sjgskz(LrText(Index), Xtdjzws - Xtdjxsws - 1, Xtdjxsws)
  1378.             Case Else        '其他小数类型控制
  1379.                 If Textint(Index, 6) <> 0 Or Textint(Index, 7) <> 0 Then
  1380.                     Call Sjgskz(LrText(Index), Textint(Index, 6), Textint(Index, 7))
  1381.                 End If
  1382.         End Select
  1383.         
  1384.         TextChangeLock = False '解锁
  1385.      
  1386. End Sub
  1387. Private Sub LrText_GotFocus(Index As Integer)                                                 '文本框得到焦点,显示相应信息
  1388.     Call TextShow(Index)
  1389. End Sub
  1390. Private Sub LrText_KeyDown(Index As Integer, KeyCode As Integer, Shift As Integer)            '字段按F2键提供帮助
  1391.     
  1392.     Select Case KeyCode
  1393.         Case vbKeyF2
  1394.             Call Text_Help(Index)
  1395.     End Select
  1396. End Sub
  1397. Private Sub LrText_KeyPress(Index As Integer, KeyAscii As Integer)                            '文本框录入事中控制
  1398.     Call InputFieldLimit(LrText(Index), Textint(Index, 1), KeyAscii)
  1399. End Sub
  1400. Private Sub LrText_LostFocus(Index As Integer)                                                '文本框失去焦点进行有效性判断及相应处理
  1401.     
  1402.     If Textint(Index, 9) = 0 Or Textint(Index, 9) = 1 Then '事中判断
  1403.         Call TextYxxpd(Index)
  1404.     End If
  1405. End Sub
  1406. Private Sub Ydcommand1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single) '点击按钮
  1407.     Call Text_Help(Ydcommand1.Tag)
  1408. End Sub
  1409. Private Sub Text_Help(Index As Integer)                                                       '录入字段帮助
  1410.     
  1411.     If Not Ydcommand1.Visible Then
  1412.         Exit Sub
  1413.     End If
  1414.     TextValiLock = True
  1415.     Call Drbmhelp(Textint(Index, 2), Textstr(Index, 4), Trim(LrText(Index).Text))
  1416.     If Len(Xtfhcs) <> 0 Then
  1417.         If Textint(Index, 3) = 1 Then
  1418.             LrText(Index).Text = Xtfhcsfz
  1419.             LrText(Index).Tag = Xtfhcs
  1420.         Else
  1421.             LrText(Index).Text = Xtfhcs
  1422.             LrText(Index).Tag = Xtfhcsfz
  1423.         End If
  1424.     End If
  1425.     TextValiLock = False
  1426.     LrText(Index).SetFocus
  1427. End Sub
  1428. Private Sub TextShow(Index As Integer)        '文本框得到焦点,显示相应信息
  1429.     '如果文本框有帮助,则显示帮助按钮
  1430.     If Textboolean(Index, 1) Then
  1431.         Ydcommand1.Visible = True
  1432.         Ydcommand1.Move LrText(Index).Left + LrText(Index).Width, LrText(Index).Top
  1433.         Ydcommand1.Tag = Index
  1434.     Else
  1435.         Ydcommand1.Tag = ""
  1436.         Ydcommand1.Visible = False
  1437.     End If
  1438.     
  1439.     '[>>
  1440.     '可在此处定义其他处理动作
  1441.     '<<]
  1442. End Sub
  1443. Private Sub Wbkcsh()                          '录入文本框初始化
  1444.     Dim Int_TabIndex As Integer         'Tab焦点计数器
  1445.   
  1446.     '单据录入中文本框焦点由0开始
  1447.     LrText(0).TabIndex = 0
  1448.   
  1449.     '最大录入文本框索引值
  1450.     Max_Text_Index = Textvar(1)
  1451.   
  1452.     ReDim TextValiJudgeLock(Max_Text_Index)
  1453.     For Jsqte = 0 To Max_Text_Index
  1454.         
  1455.         '判断此文本框录入索引号是否存在,如存在则对其进行初始化
  1456.         If Len(Trim(Textstr(Jsqte, 1))) <> 0 Then
  1457.         
  1458.             '自动装入录入文本框和其解释标签
  1459.             If Jsqte <> 0 Then
  1460.                 Load LrText(Jsqte)
  1461.                 Load tsLabel(Jsqte)
  1462.            
  1463.                 '判断录入文本框是否显示
  1464.                 If Textboolean(Jsqte, 4) Then
  1465.                     LrText(Jsqte).Visible = True
  1466.                     tsLabel(Jsqte).Visible = True
  1467.                 Else
  1468.                     LrText(Jsqte).Visible = False
  1469.                     tsLabel(Jsqte).Visible = False
  1470.                 End If
  1471.             
  1472.                 '判断文本框是否可编辑
  1473.                 If Textboolean(Jsqte, 5) Then
  1474.                     LrText(Jsqte).Enabled = True
  1475.                 Else
  1476.                     LrText(Jsqte).Enabled = False
  1477.                 End If
  1478.             End If
  1479.            
  1480.            '初始化其内容
  1481.             TextChangeLock = True
  1482.             LrText(Jsqte).Text = ""
  1483.             LrText(Jsqte).Tag = ""
  1484.             If Textint(Jsqte, 5) <> 0 Then
  1485.                 LrText(Jsqte).MaxLength = Textint(Jsqte, 5)
  1486.             End If
  1487.             TextChangeLock = False
  1488.         
  1489.             '设置文本框位置及大小,并设置相应标签内容及其位置
  1490.             LrText(Jsqte).Move Textint(Jsqte, 13), Textint(Jsqte, 12), Textint(Jsqte, 11), Textint(Jsqte, 10)
  1491.             tsLabel(Jsqte).Caption = Textstr(Jsqte, 7) & ":"
  1492.             tsLabel(Jsqte).Move Textint(Jsqte, 13) - tsLabel(Jsqte).Width - 20, Textint(Jsqte, 12) + (Textint(Jsqte, 10) - tsLabel(Jsqte).Height) / 2 - 30
  1493.             
  1494.         End If
  1495.      
  1496.         '将文本框有效性判断进行加锁,在文本框内容发生变化时将锁打开
  1497.         TextValiJudgeLock(Jsqte) = True
  1498.         
  1499.     Next Jsqte
  1500.     
  1501.     '设置文本框焦点转移顺序(前提文本焦点从0至Max_Text_Index)
  1502.     For Int_TabIndex = 0 To Max_Text_Index
  1503.         For Jsqte = 0 To Max_Text_Index
  1504.             If Textint(Jsqte, 14) = Int_TabIndex Then
  1505.                LrText(Jsqte).TabIndex = Int_TabIndex
  1506.             End If
  1507.         Next Jsqte
  1508.     Next Int_TabIndex
  1509.   
  1510. End Sub
  1511. Private Function TextYxxpd(Index As Integer) As Boolean           '文本框有效性判断
  1512.   
  1513.     Dim SqlStr As String
  1514.     Dim Findrec As New ADODB.Recordset
  1515.   
  1516.     '按帮助不进行有效性判断
  1517.   
  1518.     If TextValiLock Then
  1519.         TextValiLock = False
  1520.         TextYxxpd = True
  1521.         Exit Function
  1522.     End If
  1523.   
  1524.     '文本框内容未曾改变不进行有效性判断
  1525.     If Index <> 3 Then
  1526.         If TextValiJudgeLock(Index) Then
  1527.             Ydcommand1.Visible = False
  1528.             TextYxxpd = True
  1529.             Exit Function
  1530.         End If
  1531.     End If
  1532.     
  1533.     '文本框内容为空认为有效,并清空其Tag值
  1534.   
  1535.     If Trim(LrText(Index)) = "" Then
  1536.         LrText(Index).Tag = ""
  1537.         Call Wbklrwbcl(Index)
  1538.         Ydcommand1.Visible = False
  1539.         TextValiJudgeLock(Index) = True
  1540.         TextYxxpd = True
  1541.         Exit Function
  1542.     End If
  1543.    
  1544.     '[>>
  1545.       
  1546.     '可在此加入不做有效性判断的理由(参照上面程序)
  1547.       
  1548.     '<<]
  1549.   
  1550.     Select Case Textint(Index, 4)
  1551.         Case 1      '编码型
  1552.             SqlStr = Trim(Textstr(Index, 5))
  1553.             SqlStr = Replace(SqlStr, "@", "'" + Trim(LrText(Index).Text) + "'")
  1554.             SqlStr = Replace(SqlStr, "$$", "'" + Trim(Xtczybm) + "'")
  1555.             Set Findrec = Cw_DataEnvi.DataConnect.Execute(SqlStr)
  1556.             If Findrec.EOF Then
  1557.                 Call Xtxxts(Trim(Textstr(Index, 6)), 0, 1)
  1558.                 LrText(Index).SetFocus
  1559.                 Exit Function
  1560.             Else
  1561.                 Select Case Textint(Index, 3)
  1562.                     Case 0
  1563.                         If Len(Trim(Textstr(Index, 2))) <> 0 Then
  1564.                             LrText(Index).Text = Trim(Findrec.Fields(Trim(Textstr(Index, 2))))
  1565.                         End If
  1566.                         If Len(Trim(Textstr(Index, 3) & "")) <> 0 Then
  1567.                             LrText(Index).Tag = Trim(Findrec.Fields(Trim(Textstr(Index, 3))))
  1568.                         End If
  1569.                     Case 1
  1570.                         If Len(Trim(Textstr(Index, 3) & "")) <> 0 Then
  1571.                             LrText(Index).Text = Trim(Findrec.Fields(Trim(Textstr(Index, 3))))
  1572.                         End If
  1573.                         If Len(Trim(Textstr(Index, 2))) <> 0 Then
  1574.                             LrText(Index).Tag = Trim(Findrec.Fields(Trim(Textstr(Index, 2))))
  1575.                         End If
  1576.                 End Select
  1577.             End If
  1578.         Case 2      '日期型
  1579.             If IsDate(LrText(Index).Text) Then
  1580.                 LrText(Index).Text = Format(LrText(Index).Text, "yyyy-mm-dd")
  1581.                 If Val(Mid(LrText(Index), 1, 4)) < 1900 Then
  1582.                     LrText(Index).Text = "1900" + Mid(LrText(Index), 5, 6)
  1583.                 End If
  1584.             Else
  1585.                 Tsxx = "非法公历日期!(格式:" + Format(Date, "yyyy-mm-dd") + ")"
  1586.                 Call Xtxxts(Tsxx, 0, 1)
  1587.                 LrText(Index).SetFocus
  1588.                 Exit Function
  1589.             End If
  1590.         Case 3      '其他类型
  1591.     End Select
  1592.     
  1593.     If Index = 3 Then
  1594.         
  1595.         '期初单据的仓库已期初记帐,则不能增加此仓库的期初单据
  1596.         Set Rectemp = Cw_DataEnvi.DataConnect.Execute("select chalkitupman from Chhs_StartInputMain " & _
  1597.                 " where whcode='" & Trim(LrText(Index).Tag) & "' and len(chalkitupman)<>0 ")
  1598.         If Not Rectemp.EOF Then
  1599.             Tsxx = "仓库已期初记帐,不允许增加单据!"
  1600.             TextValiJudgeLock(Index) = False
  1601.             LrText(Index).SetFocus
  1602.             Ydcommand1.Visible = True
  1603.             Call Xtxxts(Tsxx, 0, 1)
  1604.             Exit Function
  1605.         End If
  1606.         
  1607.         '此仓库已期末处理,不允许增加单据
  1608.         Set Rectemp = Cw_DataEnvi.DataConnect.Execute("select whcode,whname,pricemode from Gy_warehouse " & _
  1609.                 " where whcode='" & Trim(LrText(Index).Tag) & "' and enddealflagchhs=0 ")
  1610.         If Rectemp.EOF Then
  1611.             Tsxx = "此仓库已期末处理,不允许增加单据!"
  1612.             TextValiJudgeLock(Index) = False
  1613.             LrText(Index).SetFocus
  1614.             Ydcommand1.Visible = True
  1615.             Call Xtxxts(Tsxx, 0, 1)
  1616.             Exit Function
  1617.         Else
  1618.             PriceMode = Trim(Rectemp.Fields("pricemode"))
  1619.         End If
  1620.     End If
  1621.     
  1622.     '隐藏帮助按钮
  1623.     Ydcommand1.Visible = False
  1624.    
  1625.     '如果有效则加锁,用户不改变内容则不再进行有效性判断
  1626.     TextValiJudgeLock(Index) = True
  1627.     '调用文本框事后处理程序
  1628.     Call Wbklrwbcl(Index)
  1629.    
  1630.     '有效性判断通过则返回True
  1631.     TextYxxpd = True
  1632.     
  1633. End Function