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

企业管理

开发平台:

Visual Basic

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