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

企业管理

开发平台:

Visual Basic

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