+
Upload User: zhpu1995
Upload Date: 2013-09-06
Package Size: 61151k
Code Size: 148k
Development Platform:

Visual Basic

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