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

企业管理

开发平台:

Visual Basic

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