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

企业管理

开发平台:

Visual Basic

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