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

企业管理

开发平台:

Visual Basic

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