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

企业管理

开发平台:

Visual Basic

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