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

企业管理

开发平台:

Visual Basic

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