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

企业管理

开发平台:

Visual Basic

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