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

企业管理

开发平台:

Visual Basic

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