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

企业管理

开发平台:

Visual Basic

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