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

企业管理

开发平台:

Visual Basic

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