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

企业管理

开发平台:

Visual Basic

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