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

企业管理

开发平台:

Visual Basic

  1. VERSION 1.0 CLASS
  2. BEGIN
  3.   MultiUse = -1  'True
  4.   Persistable = 0  'NotPersistable
  5.   DataBindingBehavior = 0  'vbNone
  6.   DataSourceBehavior  = 0  'vbNone
  7.   MTSTransactionMode  = 0  'NotAnMTSObject
  8. END
  9. Attribute VB_Name = "AccSum"
  10. Attribute VB_GlobalNameSpace = False
  11. Attribute VB_Creatable = True
  12. Attribute VB_PredeclaredId = False
  13. Attribute VB_Exposed = False
  14. '****************************************************************
  15. '*    模 块 名 称 :系统总帐查询的类模块
  16. '*    功 能 描 述 :
  17. '*    程序员姓名  :白石军
  18. '*    最后修改人  :
  19. '*    最后修改时间:2001/12/30
  20. '*    调用方法:
  21. '*     Dim clsAccSum As New AccSum
  22. '*     With clsAccSum
  23. '*       .iGrade_Begin = Val(ZB_Frmkmyebtj.LrText(2).Text)
  24. '*       .iGrade_End = Val(ZB_Frmkmyebtj.LrText(3).Text)
  25. '*       .sCode_Begin = Trim(ZB_Frmkmyebtj.LrText(0).Text)
  26. '*       .sCode_End = Trim(ZB_Frmkmyebtj.LrText(1).Text)
  27. '*       .sClass = Trim(ZB_Frmkmyebtj.Combo_Class.Text)
  28. '*       .iPeriod_Begin = Int_BPeriod
  29. '*       .iPeriod_End = Int_EPeriod
  30. '*       .iPeriod_Year = Int_Year
  31. '*       .b_Keep_Business_Records = Bln_IncluNotBook
  32. '*     End With
  33. '*     Set Rec_Query = clsAccSum.GetNewRs
  34. '*    在 Form_UnLoad 中销毁对象 Set clsAccSum=Nothing
  35. '*    备        注:程序中所有依实际情况自定义部分均用[>>  <<]括起
  36. '****************************************************************
  37. Option Explicit
  38. Const DEBUG_FLAG = True '调试标志,发布时设为False
  39. Const QI_CU_YU_E = &H500 '表示期初余额的常量
  40. Const BEN_QI_FA_SHENG_E = &H600 '表示本期发生额的常量
  41. Const LEI_JI_FA_SHENG_E = &H700 '表示累计发生额的常量
  42. Public SumRs As New ADODB.Recordset '核算基记录集,也是最终返回的记录集,可对其数值进行加减
  43. Private AddRs As New ADODB.Recordset '相加记录集,将此记录集累加到基记录集上,几次累加后得到最终结果
  44. Public iPeriod_Begin As Integer '起始会计期间
  45. Public iPeriod_End As Integer '终止会计期间
  46. Public iPeriod_Year As Integer '会计年度
  47. Public b_Keep_Business_Records As Boolean '是否包含末记帐凭证 True包含,False不包含
  48. Public sCode_Begin As String  '起始会计科目
  49. Public sCode_End As String  '终止会计科目
  50. Public iGrade_Begin As Integer '起始科目级次
  51. Public iGrade_End As Integer  '终止科目级次
  52. Public sClass As String  '科目类型
  53. Private sCodingPlan As String '科目编码方案
  54. Private Enum Account_Book_Type '帐类型,如期初余额、期末余额等
  55.     QiCu = QI_CU_YU_E '期初余额
  56.     BenQi = BEN_QI_FA_SHENG_E '本期发生额
  57.     LeiJi = LEI_JI_FA_SHENG_E '累计发生额
  58. End Enum
  59. Private AccType As Account_Book_Type  '类型,期初、期末、本期等
  60. Public Function GetNewRs() As ADODB.Recordset
  61.     '供外部程序调用的方法,并返回新的记录集
  62.     
  63.     '------------生成期初数据------------------------------------
  64.     AccType = QiCu '标记设为“期初”
  65.     
  66.     Call MakePayRs '生成基记录集
  67.     
  68.     Call GetSum '生成期初数据
  69.     Call AddTowRsNew '相加已取得的两个记录集
  70.     
  71.     If b_Keep_Business_Records = True Then '如果包含末记帐凭证
  72.         Call GetVouchRs '则取末记帐凭证生成相加记录集
  73.         Call AddTowRs '相加已取得的两个记录集
  74.     End If
  75.     '------------------------------------------------------------
  76.     
  77.     '------------生成本期发生数据--------------------------------
  78.     AccType = BenQi '标记设为“本期”
  79.     
  80.     Call GetSum '生成本期数据
  81.     Call AddTowRsNew '相加已取得的两个记录集
  82.     
  83.     If b_Keep_Business_Records = True Then '如果包含末记帐凭证
  84.         Call GetVouchRs '则取末记帐凭证生成相加记录集
  85.         Call AddTowRs '相加已取得的两个记录集
  86.     End If
  87.     '--------------------------------------------------------------
  88.     
  89.     '--------------生成累计发生额----------------------------------
  90.     AccType = LeiJi '标记设为“累计”
  91.     
  92.     Call GetSum '生成累计数据
  93.     Call AddTowRsNew '相加已取得的两个记录集
  94.     
  95.     If b_Keep_Business_Records = True Then '如果包含末记帐凭证
  96.         Call GetVouchRs '则取末记帐凭证生成相加记录集
  97.         Call AddTowRs '相加已取得的两个记录集
  98.     End If
  99.     '----------------------------
  100.     
  101.     Set GetNewRs = SumRs '返回最新的记录集
  102. End Function
  103. Private Sub Class_Initialize()
  104.     '取得科目代码编码方案
  105.     If DEBUG_FLAG = False Then On Error Resume Next
  106.     
  107.     Dim temRs As ADODB.Recordset
  108.     Set temRs = Cw_DataEnvi.DataConnect.Execute("select * from Gy_CodeScheme where ItemCode='Cwzz_Kmcode'")
  109.     sCodingPlan = Trim(temRs!codescheme)
  110.     temRs.Close
  111.     Set temRs = Nothing
  112. End Sub
  113. Private Sub MakePayRs()
  114.     If DEBUG_FLAG = False Then On Error Resume Next
  115.     Dim strTemSql As String
  116.     strTemSql = ""
  117.     strTemSql = "SELECT  Cwzz_AccCode.cCode," '    /* 科目代码 */
  118.     strTemSql = strTemSql & "Cwzz_AccCode.cName," '   /* 科目名称*/
  119.     strTemSql = strTemSql & "Cwzz_AccCode.cClass," '   /* 科目类型*/
  120.     strTemSql = strTemSql & "Cwzz_AccCode.CodeLevel," '    /*科目级次 */
  121.     strTemSql = strTemSql & "Cwzz_AccCode.EndFlag," '   /*末级标志*/
  122.     strTemSql = strTemSql & "Cwzz_AccCode.ForeignFlag," '  /*外币核算标志*/
  123.     strTemSql = strTemSql & "Cwzz_AccCode.BalanceOri," '  /* 余额方向*/
  124.     strTemSql = strTemSql & "Cwzz_AccCode.ParentCode," '/*上级科目代码*/
  125.     strTemSql = strTemSql & "IsNull(Period,0) As Period," '/*上级科目代码*/
  126.     
  127.     strTemSql = strTemSql & "Qcye as QcyeHj," ' /* 期初余额*/
  128.     strTemSql = strTemSql & "Qcsl as QcslHj," '/*期初数量*/
  129.     strTemSql = strTemSql & "Qcwb as QcwbHj," '/*期初外币*/
  130.     
  131.     strTemSql = strTemSql & "Byjfljje as ByjfljjeHj," ' /*本月借方累计金额合计*/
  132.     strTemSql = strTemSql & "Bydfljje as BydfljjeHj," ' /*本月贷方累计金额合计*/
  133.     strTemSql = strTemSql & "Byjfljwb as ByjfljwbHj," ' /*本月借方累计外币合计*/
  134.     strTemSql = strTemSql & "Bydfljwb as BydfljwbHj," ' /*本月贷方累计外币合计*/
  135.     strTemSql = strTemSql & "Byjfljsl as ByjfljslHj," ' /*本月借方累计数量合计*/
  136.     strTemSql = strTemSql & "Bydfljsl as BydfljslHj," ' /*本月贷方累计数量合计*/
  137.     
  138.     strTemSql = strTemSql & "Mjje as Mjjehj," ' /* 本期借方发生额*/
  139.     strTemSql = strTemSql & "Mjsl as Mjslhj," ' /*本期借方数量发生额*/
  140.     strTemSql = strTemSql & "Mjwb as Mjwbhj," ' /*本期借方外币发生额*/
  141.     strTemSql = strTemSql & "Mdje as Mdjehj," ' /* 本期贷方发生额*/
  142.     strTemSql = strTemSql & "Mdsl as Mdslhj," ' /*本期贷方数量发生额*/
  143.     strTemSql = strTemSql & "Mdwb as Mdwbhj," ' /*本期贷方外币发生额*/
  144.     
  145.     strTemSql = strTemSql & "Xt_combolist.Item_Index "
  146.     
  147.     strTemSql = strTemSql & " From Cwzz_AccCode "
  148.     strTemSql = strTemSql & " LEFT OUTER JOIN Cwzz_AccSum "
  149.     strTemSql = strTemSql & " ON Cwzz_AccCode.cCode=Cwzz_AccSum.cCode "
  150.     strTemSql = strTemSql & " AND Period=" & iPeriod_Begin
  151.     strTemSql = strTemSql & " AND Year=" & iPeriod_Year
  152.     strTemSql = strTemSql & " LEFT OUTER JOIN "
  153.     strTemSql = strTemSql & " Xt_combolist ON Cwzz_AccCode.CClass = Xt_combolist.item_content  "
  154.     strTemSql = strTemSql & " AND Xt_combolist.combo_code='Cwzz_kmlx' "
  155.     strTemSql = strTemSql & " AND Xt_combolist.system_code='cwzz' "
  156.     strTemSql = strTemSql & " Where "
  157.     strTemSql = strTemSql & " codelevel BETWEEN '" & iGrade_Begin & "' AND '" & iGrade_End & "' "
  158.     
  159.     If sCode_Begin <> "" And sCode_End <> "" Then
  160.         strTemSql = strTemSql & " AND Cwzz_AccCode.cCode>='" & sCode_Begin & "' AND Cwzz_AccCode.cCode<='" & sCode_End & "' "
  161.     ElseIf sCode_Begin <> "" And sCode_End = "" Then
  162.         strTemSql = strTemSql & " AND Cwzz_AccCode.cCode>='" & sCode_Begin & "' "
  163.     ElseIf sCode_Begin = "" And sCode_End <> "" Then
  164.         strTemSql = strTemSql & " AND Cwzz_AccCode.cCode<='" & sCode_End & "' "
  165.     End If
  166.     
  167.     If sClass <> "" Then
  168.         strTemSql = strTemSql & " AND Cwzz_AccCode.cClass='" & sClass & "' "
  169.     End If
  170.     
  171.     With SumRs
  172.         If .State <> adStateClosed Then .Close
  173.         .ActiveConnection = Cw_DataEnvi.DataConnect
  174.         .Source = strTemSql
  175.         .Open , , adOpenStatic, adLockBatchOptimistic
  176.         Set .ActiveConnection = Nothing
  177.         
  178.         
  179.         Do Until .EOF
  180.             !QcyeHj = 0
  181.             !QcslHj = 0
  182.             !QcwbHj = 0
  183.             
  184.             !Mjjehj = 0
  185.             !Mdjehj = 0
  186.             !Mjslhj = 0
  187.             !Mdslhj = 0
  188.             !Mjwbhj = 0
  189.             !Mdwbhj = 0
  190.             
  191.             !ByjfljjeHj = 0
  192.             !BydfljjeHj = 0
  193.             !ByjfljwbHj = 0
  194.             !BydfljwbHj = 0
  195.             !ByjfljslHj = 0
  196.             !BydfljslHj = 0
  197.             .Update
  198.             .MoveNext
  199.         Loop
  200.         If Not (.EOF And .BOF) Then
  201.             .MoveFirst
  202.         End If
  203.     End With
  204.     
  205.     
  206. End Sub
  207. Private Sub Class_Terminate()
  208.     If DEBUG_FLAG = False Then On Error Resume Next
  209.     
  210.     If SumRs.State <> adStateClosed Then SumRs.Close
  211.     If AddRs.State <> adStateClosed Then AddRs.Close
  212.     
  213.     Set SumRs = Nothing
  214.     Set AddRs = Nothing
  215. End Sub
  216. Private Sub GetSum()
  217.     If DEBUG_FLAG = False Then On Error Resume Next
  218.     
  219.     Dim strTemSql As String
  220.     Dim i As Integer
  221.     strTemSql = ""
  222.     strTemSql = "SELECT  Cwzz_AccSum.cCode," '    /* 科目代码 */
  223.     
  224.     Select Case AccType
  225.     Case QI_CU_YU_E '期初
  226.         strTemSql = strTemSql & "IsNull(Qcye,0) as QcyeHj," '/*期初余额*/
  227.         strTemSql = strTemSql & "IsNull(Qcsl,0) as QcslHj," '/*期初数量*/
  228.         strTemSql = strTemSql & "IsNull(Qcwb,0) as QcwbHj," '/*期初外币*/
  229.     Case BEN_QI_FA_SHENG_E  '本期发生
  230.         strTemSql = strTemSql & "Sum(Mjje) as Mjjehj," ' /*本期借方发生额*/
  231.         strTemSql = strTemSql & "Sum(Mjsl) as Mjslhj," ' /*本期借方数量发生额*/
  232.         strTemSql = strTemSql & "Sum(Mjwb) as Mjwbhj," ' /*本期借方外币发生额*/
  233.         strTemSql = strTemSql & "Sum(Mdje) as Mdjehj," ' /*本期贷方发生额*/
  234.         strTemSql = strTemSql & "Sum(Mdsl) as Mdslhj," ' /*本期贷方数量发生额*/
  235.         strTemSql = strTemSql & "Sum(Mdwb) as Mdwbhj " ' /*本期贷方外币发生额*/
  236.     Case LEI_JI_FA_SHENG_E '  累计发生
  237.         strTemSql = strTemSql & "Byjfljje as ByjfljjeHj," ' /*本月借方累计金额合计*/
  238.         strTemSql = strTemSql & "Bydfljje as BydfljjeHj," ' /*本月贷方累计金额合计*/
  239.         strTemSql = strTemSql & "Byjfljwb as ByjfljwbHj," ' /*本月借方累计外币合计*/
  240.         strTemSql = strTemSql & "Bydfljwb as BydfljwbHj," ' /*本月贷方累计外币合计*/
  241.         strTemSql = strTemSql & "Byjfljsl as ByjfljslHj," ' /*本月借方累计数量合计*/
  242.         strTemSql = strTemSql & "Bydfljsl as BydfljslHj," ' /*本月贷方累计数量合计*/
  243.     End Select
  244.     If Right(strTemSql, 1) = "," Then strTemSql = Left(strTemSql, Len(strTemSql) - 1)
  245.     strTemSql = strTemSql & " From "
  246.     strTemSql = strTemSql & " Cwzz_AccSum "
  247.     strTemSql = strTemSql & " RIGHT OUTER JOIN Cwzz_AccCode "
  248.     strTemSql = strTemSql & " ON Cwzz_AccSum.cCode=Cwzz_AccCode.cCode "
  249.     strTemSql = strTemSql & " AND CodeLevel BETWEEN '" & iGrade_Begin & "' AND '" & iGrade_End & "' "
  250.     
  251.     If sCode_Begin <> "" And sCode_End <> "" Then
  252.         strTemSql = strTemSql & " AND Cwzz_AccCode.cCode>='" & sCode_Begin & "' AND Cwzz_AccCode.cCode<='" & sCode_End & "' "
  253.     ElseIf sCode_Begin <> "" And sCode_End = "" Then
  254.         strTemSql = strTemSql & " AND Cwzz_AccCode.cCode>='" & sCode_Begin & "' "
  255.     ElseIf sCode_Begin = "" And sCode_End <> "" Then
  256.         strTemSql = strTemSql & " AND Cwzz_AccCode.cCode<='" & sCode_End & "' "
  257.     End If
  258.     
  259.     If sClass <> "" Then
  260.         strTemSql = strTemSql & " AND Cwzz_AccCode.cClass='" & sClass & "' "
  261.     End If
  262.     
  263.     
  264.     
  265.     strTemSql = strTemSql & " Where "
  266.     
  267.     If AccType = QiCu Then
  268.         strTemSql = strTemSql & " Period = " & iPeriod_Begin & " AND Year=" & iPeriod_Year & " "
  269.     ElseIf AccType = BenQi Then
  270.         strTemSql = strTemSql & " Period BETWEEN " & iPeriod_Begin & " AND " & iPeriod_End & " AND Year=" & iPeriod_Year & " "
  271.     ElseIf AccType = LeiJi Then
  272.         strTemSql = strTemSql & " Period = " & iPeriod_End & " AND Year=" & iPeriod_Year & " "
  273.     End If
  274.     
  275.     strTemSql = strTemSql & " "
  276.     
  277.     If AccType = BenQi Then
  278.         strTemSql = strTemSql & " Group By Cwzz_AccSum.cCode"
  279.     End If
  280.     With AddRs
  281.         If .State <> adStateClosed Then .Close
  282.         .ActiveConnection = Cw_DataEnvi.DataConnect
  283.         .Source = strTemSql
  284.         .Open , , adOpenStatic, adLockBatchOptimistic
  285.         Set .ActiveConnection = Nothing
  286.     End With
  287. End Sub
  288. Private Sub GetVouchRs()
  289.     If DEBUG_FLAG = False Then On Error Resume Next
  290.     
  291.     Dim strTemSql As String
  292.     Dim i As Integer
  293.     strTemSql = ""
  294.     strTemSql = strTemSql & "SELECT Cwzz_AccVouchSub.cCode,"
  295.     Select Case AccType
  296.     Case QI_CU_YU_E '期初
  297.         strTemSql = strTemSql & " (Sum(Jfje)-Sum(Dfje)) as Qcye,"
  298.         strTemSql = strTemSql & " (Sum(Jfsl)-Sum(Dfsl)) as Qcsl,"
  299.         strTemSql = strTemSql & " (Sum(wbJfje)-Sum(wbDfje)) as Qcwb"
  300.         strTemSql = strTemSql & " FROM "
  301.         strTemSql = strTemSql & " Cwzz_AccVouchSub "
  302.         strTemSql = strTemSql & " ,Cwzz_AccVouchMain "
  303.         
  304.         strTemSql = strTemSql & " WHERE "
  305.         strTemSql = strTemSql & " Cwzz_AccVouchMain.Period<" & iPeriod_Begin
  306.         strTemSql = strTemSql & " AND Cwzz_AccVouchMain.Year=" & iPeriod_Year
  307.         strTemSql = strTemSql & " AND Cwzz_AccVouchMain.BookFlag=0 "
  308.         
  309.     Case BEN_QI_FA_SHENG_E      '本期发生
  310.         strTemSql = strTemSql & "Sum(jfje) as Mjjehj," ' /* 本期借方发生额*/
  311.         strTemSql = strTemSql & "Sum(jfsl) as Mjslhj," ' /*本期借方数量发生额*/
  312.         strTemSql = strTemSql & "Sum(wbjfje) as Mjwbhj," ' /*本期借方外币发生额*/
  313.         strTemSql = strTemSql & "Sum(dfje) as Mdjehj," ' /* 本期贷方发生额*/
  314.         strTemSql = strTemSql & "Sum(dfsl) as Mdslhj," ' /*本期贷方数量发生额*/
  315.         strTemSql = strTemSql & "Sum(wbdfje) as Mdwbhj " ' /*本期贷方外币发生额*/
  316.         strTemSql = strTemSql & " FROM Cwzz_AccVouchSub,Cwzz_AccVouchMain"
  317.         strTemSql = strTemSql & " WHERE "
  318.         strTemSql = strTemSql & " Cwzz_AccVouchSub.VouchId=Cwzz_AccVouchMain.VouchId "
  319.         strTemSql = strTemSql & " AND Cwzz_AccVouchMain.Period BETWEEN " & iPeriod_Begin & " AND " & iPeriod_End
  320.         strTemSql = strTemSql & " AND Cwzz_AccVouchMain.Year=" & iPeriod_Year
  321.         strTemSql = strTemSql & " AND Cwzz_AccVouchMain.BookFlag=0 "
  322.         strTemSql = strTemSql & " AND Cwzz_AccVouchMain.Period BETWEEN " & iPeriod_Begin & " AND " & iPeriod_End
  323.         strTemSql = strTemSql & " AND Cwzz_AccVouchMain.Year=" & iPeriod_Year
  324.         
  325.     Case LEI_JI_FA_SHENG_E      '累计发生
  326.         strTemSql = strTemSql & "Sum(jfje) as ByjfljjeHj," ' /*本月借方累计金额合计*/
  327.         strTemSql = strTemSql & "Sum(dfje) as BydfljjeHj," ' /*本月贷方累计金额合计*/
  328.         strTemSql = strTemSql & "Sum(jfsl) as ByjfljwbHj," ' /*本月借方累计外币合计*/
  329.         strTemSql = strTemSql & "Sum(dfsl) as BydfljwbHj," ' /*本月贷方累计外币合计*/
  330.         strTemSql = strTemSql & "Sum(wbjfje) as ByjfljslHj," ' /*本月借方累计数量合计*/
  331.         strTemSql = strTemSql & "Sum(wbdfje) as BydfljslHj" ' /*本月贷方累计数量合计*/
  332.         strTemSql = strTemSql & " FROM Cwzz_AccVouchSub,Cwzz_AccVouchMain"
  333.         strTemSql = strTemSql & " WHERE "
  334.         strTemSql = strTemSql & " Cwzz_AccVouchSub.VouchId=Cwzz_AccVouchMain.VouchId "
  335.         strTemSql = strTemSql & " AND Cwzz_AccVouchMain.Period BETWEEN " & iPeriod_Begin & " AND " & iPeriod_End
  336.         strTemSql = strTemSql & " AND Cwzz_AccVouchMain.Year=" & iPeriod_Year
  337.         strTemSql = strTemSql & " AND Cwzz_AccVouchMain.BookFlag=0 "
  338.     End Select
  339.     
  340.     strTemSql = strTemSql & " Group By Cwzz_AccVouchSub.cCode"
  341.     
  342.     With AddRs
  343.         If .State <> adStateClosed Then .Close
  344.         .ActiveConnection = Cw_DataEnvi.DataConnect
  345.         .Source = strTemSql
  346.         .Open , , adOpenStatic, adLockBatchOptimistic
  347.         Set .ActiveConnection = Nothing
  348.     End With
  349. End Sub
  350. '===============================================================================
  351. Private Sub AddSingleNew()
  352.     If DEBUG_FLAG = False Then On Error Resume Next
  353.     'AddSingle 的相似过程序,与AddSingle不同的是,不累加上级科目
  354.     '所以累加语句被注消
  355.     With SumRs
  356.         Select Case AccType
  357.         Case QI_CU_YU_E
  358.             !QcyeHj = !QcyeHj + AddRs!QcyeHj
  359.             !QcslHj = !QcslHj + AddRs!QcslHj
  360.             !QcwbHj = !QcwbHj + AddRs!QcwbHj
  361.             .Update
  362.         Case BEN_QI_FA_SHENG_E
  363.             !Mjjehj = !Mjjehj + AddRs!Mjjehj '本期发生借方金额
  364.             !Mdjehj = !Mdjehj + AddRs!Mdjehj '本期发生贷方金额
  365.             !Mjslhj = !Mjslhj + AddRs!Mjslhj '本期发生借方数量
  366.             !Mdslhj = !Mdslhj + AddRs!Mdslhj '本期发生贷方数量
  367.             !Mjwbhj = !Mjwbhj + AddRs!Mjwbhj '本期发生借方外币
  368.             !Mdwbhj = !Mdwbhj + AddRs!Mdwbhj '本期发生贷方外币
  369.             .Update
  370.         Case LEI_JI_FA_SHENG_E
  371.             !ByjfljjeHj = !ByjfljjeHj + AddRs!ByjfljjeHj ' /*本月借方累计金额合计*/"
  372.             !BydfljjeHj = !BydfljjeHj + AddRs!BydfljjeHj ' /*本月贷方累计金额合计*/"
  373.             !ByjfljwbHj = !ByjfljwbHj + AddRs!ByjfljwbHj ' /*本月借方累计外币合计*/"
  374.             !BydfljwbHj = !BydfljwbHj + AddRs!BydfljwbHj ' /*本月贷方累计外币合计*/"
  375.             !ByjfljslHj = !ByjfljslHj + AddRs!ByjfljslHj ' /*本月借方累计数量合计*/"
  376.             !BydfljslHj = !BydfljslHj + AddRs!BydfljslHj ' /*本月贷方累计数量合计*/"
  377.             .Update
  378.         End Select
  379.     End With
  380. End Sub
  381. Sub AddTowRsNew()
  382.     '与AddTowRsNew 相似,不同的是,此过程直接相加,
  383.     '不累加上级科目
  384.     If DEBUG_FLAG = False Then On Error Resume Next
  385.     
  386.     Dim strTemParent As String
  387.     With AddRs
  388.         If Not (.EOF And .BOF) Then
  389.             .MoveFirst
  390.             Do Until .EOF
  391.                 strTemParent = Trim(!Ccode)
  392.                 If strTemParent <> "" Then SeachParentNew (strTemParent)
  393.                 .MoveNext
  394.             Loop
  395.         End If
  396.     End With
  397. End Sub
  398. Private Sub SeachParentNew(strParend As String)
  399.     '查询上级科目
  400.     
  401.     If DEBUG_FLAG = False Then On Error Resume Next
  402.     
  403.     With SumRs
  404.         If Not (.BOF And .EOF) Then
  405.             .MoveFirst
  406.             .Find "cCode='" & strParend & "'"
  407.             If Not .EOF Then
  408.                 Call AddSingleNew
  409.             End If
  410.         End If
  411.         
  412.     End With
  413. End Sub
  414. Sub AddSingle()
  415.     '汇总一条记录到上级科目
  416.     '此模块被SeachParent 调用
  417.     '1.汇总记录
  418.     '2.科目级次是否为1
  419.     '  2.1如果为1则无上级科目,过程结束
  420.     '  2.2不为1则继续查询上级科目,调用SeachParent过程
  421.     '3.结束
  422.     
  423.     If DEBUG_FLAG = False Then On Error Resume Next
  424.     
  425.     With SumRs
  426.         Select Case AccType
  427.         Case QI_CU_YU_E
  428.             !QcyeHj = !QcyeHj + AddRs!Qcye
  429.             !QcslHj = !QcslHj + AddRs!Qcsl
  430.             !QcwbHj = !QcwbHj + AddRs!Qcwb
  431.             .Update
  432.         Case BEN_QI_FA_SHENG_E
  433.             !Mjjehj = !Mjjehj + AddRs!Mjjehj '本期发生借方金额
  434.             !Mdjehj = !Mdjehj + AddRs!Mdjehj '本期发生贷方金额
  435.             !Mjslhj = !Mjslhj + AddRs!Mjslhj '本期发生借方数量
  436.             !Mdslhj = !Mdslhj + AddRs!Mdslhj '本期发生贷方数量
  437.             !Mjwbhj = !Mjwbhj + AddRs!Mjwbhj '本期发生借方外币
  438.             !Mdwbhj = !Mdwbhj + AddRs!Mdwbhj '本期发生贷方外币
  439.             .Update
  440.         Case LEI_JI_FA_SHENG_E
  441.             !ByjfljjeHj = !ByjfljjeHj + AddRs!ByjfljjeHj ' /*本月借方累计金额合计*/"
  442.             !BydfljjeHj = !BydfljjeHj + AddRs!BydfljjeHj ' /*本月贷方累计金额合计*/"
  443.             !ByjfljwbHj = !BydfljwbHj + AddRs!BydfljwbHj ' /*本月借方累计外币合计*/"
  444.             !BydfljwbHj = !BydfljwbHj + AddRs!BydfljwbHj ' /*本月贷方累计外币合计*/"
  445.             !ByjfljslHj = !BydfljslHj + AddRs!BydfljslHj ' /*本月借方累计数量合计*/"
  446.             !BydfljslHj = !BydfljslHj + AddRs!BydfljslHj ' /*本月贷方累计数量合计*/"
  447.             
  448.             
  449.             .Update
  450.         End Select
  451.         If Val(!CodeLevel) > 1 Then SeachParent (Trim(!ParentCode))
  452.     End With
  453. End Sub
  454. Sub AddTowRs()
  455.     '相加科目总帐记录集与末记帐凭证记录集
  456.     '此模块被MakeRs调用
  457.     '如果此记录为顶级科目,则继续对下一条记录进行累加,
  458.     '否则追朔查询上级科目
  459.     
  460.     If DEBUG_FLAG = False Then On Error Resume Next
  461.     
  462.     Dim strTemParent As String
  463.     With AddRs
  464.         If Not (.EOF And .BOF) Then
  465.             .MoveFirst
  466.             Do Until .EOF
  467.                 strTemParent = Trim(!Ccode)
  468.                 If strTemParent <> "" Then SeachParent (strTemParent)
  469.                 .MoveNext
  470.             Loop
  471.         End If
  472.     End With
  473. End Sub
  474. Sub SeachParent(strParend As String)
  475.     '查询上级科目
  476.     '此模块被AddTowRs 调用
  477.     '1.保存记录书签
  478.     '2.根据strParend在Rec_Query中找到myTemRs当前记录的上级科目位置
  479.     '3.汇总记录,调用AddSingle
  480.     '4.恢复书签
  481.     
  482.     If DEBUG_FLAG = False Then On Error Resume Next
  483.     
  484.     Dim myBookMark  '用于保存记录集(Rec_Query)书签
  485.     Dim temRs As New ADODB.Recordset
  486.     With SumRs
  487.         If Not (.BOF And .EOF) Then
  488.             myBookMark = .Bookmark '保存记录书签
  489.             .MoveFirst
  490.             .Find "cCode='" & strParend & "'"
  491.             If Not .EOF Then
  492.                 Call AddSingle
  493.             Else
  494.                 .MoveFirst
  495.                 With temRs
  496.                     If .State <> adStateClosed Then .Close
  497.                     .ActiveConnection = Cw_DataEnvi.DataConnect
  498.                     .Source = "select * from Cwzz_AccCode WHERE cCode='" & strParend & "'"
  499.                     .Open , , adOpenStatic, adLockBatchOptimistic
  500.                     Set .ActiveConnection = Nothing
  501.                 End With
  502.                 If Not (temRs.EOF And temRs.BOF) Then
  503.                     If temRs!CodeLevel > 1 Then
  504.                         strParend = temRs!ParentCode
  505.                         .Find "cCode='" & strParend & "'"
  506.                         If Not .EOF Then
  507.                             Call AddSingle
  508.                         End If
  509.                     End If
  510.                 Else
  511.                     MsgBox "发现科目表中有缺少科目!" & Chr(13) & Chr(13) & "科目代码为:" & strParend, vbCritical, "系统提示"
  512.                 End If
  513.             End If
  514.             .Bookmark = myBookMark
  515.         End If
  516.         
  517.     End With
  518. End Sub
  519. '===============================================================================