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

企业管理

开发平台:

Visual Basic

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