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

企业管理

开发平台:

Visual Basic

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