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

企业管理

开发平台:

Visual Basic

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