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

企业管理

开发平台:

Visual Basic

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