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

企业管理

开发平台:

Visual Basic

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