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

企业管理

开发平台:

Visual Basic

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