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

企业管理

开发平台:

Visual Basic

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