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

企业管理

开发平台:

Visual Basic

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