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

企业管理

开发平台:

Visual Basic

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