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

企业管理

开发平台:

Visual Basic

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