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

企业管理

开发平台:

Visual Basic

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