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

企业管理

开发平台:

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 = "AccAssi"
  10. Attribute VB_GlobalNameSpace = False
  11. Attribute VB_Creatable = True
  12. Attribute VB_PredeclaredId = False
  13. Attribute VB_Exposed = False
  14. Attribute VB_Ext_KEY = "SavedWithClassBuilder6" ,"Yes"
  15. Attribute VB_Ext_KEY = "Top_Level" ,"Yes"
  16. '****************************************************************
  17. '*    模 块 名 称 :系统用于辅助核算中的查询
  18. '*    功 能 描 述 :
  19. '*    程序员姓名  :白石军
  20. '*    最后修改人  :
  21. '*    最后修改时间:2001/12/30
  22. '*
  23. '*    1。部门总帐
  24. '*    2。个人余额表
  25. '*    3。客户余额表
  26. '*    4。供应商余额表
  27. '*
  28. '*    调用方法:在写入网格前
  29. '*    Dim clsAccAss As New AccAssi
  30. '*    With clsAccAss
  31. '*      .iPeriod_Begin = Int_BPeriod  '查询会计期开始
  32. '*      .iPeriod_End = Int_EPeriod    '查询会计期结束
  33. '*      .iPeriod_Year = Int_Year      '查询会计年
  34. '*      .b_Keep_Business_Records = Bln_IncluNotBook  '是否包含记帐凭证
  35. '*      .PayTypes = Dep   '常量,Dep:部门,Per个人,Cur:客户,Ven:供应商
  36. '*      .sPayCode = Str_FzCode  '部门、个人、客户或供应商代码,不分类。
  37. '*    End With
  38. '*    Set Rec_Query = clsAccAss.GetNewRs()
  39. '*    最后在Form_UnLoad() 中销毁此对象 Set clsAccAssi=Nothing
  40. '*    备        注:程序中所有依实际情况自定义部分均用[>>  <<]括起
  41. '****************************************************************
  42. Option Explicit
  43. Const DEBUG_FLAG = True '调试标志,发布时设为False
  44. Const FIRST_MEMBER = 1 '第一个成员,用于集合的循环变量
  45. Const DEPT_CODE = &H100 '表示部门往来的常量
  46. Const CURS_CODE = &H200 '表示客户往来的常量
  47. Const VEND_CODE = &H300 '表示供应商往来的常量
  48. Const PERS_CODE = &H400 '表示个人往来的常量
  49. '-------------------------------------------
  50. Const QI_CU_YU_E = &H500 '表示期初余额的常量
  51. Const BEN_QI_FA_SHENG_E = &H600 '表示本期发生额的常量
  52. Const LEI_JI_FA_SHENG_E = &H700 '表示累计发生额的常量
  53. '-------------------------------------------
  54. Public 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. '-------------------------------------------
  60. Public Enum PAST_VALUE '用于传递参数据的数据类型
  61.     Dep = DEPT_CODE '部门往来
  62.     Cur = CURS_CODE '客户往来
  63.     Per = PERS_CODE '个人往来
  64.     Ven = VEND_CODE '供应商往来
  65. End Enum
  66. '------------------------------------------------------
  67. Private AccType As Account_Book_Type  '类型,期初、期末、本期等
  68. Public iPeriod_Begin As Integer '起始会计期间
  69. Public iPeriod_End As Integer '终止会计期间
  70. Public iPeriod_Year As Integer '会计年度
  71. Public b_Keep_Business_Records As Boolean '是否包含末记帐凭证 True包含,False不包含
  72. Public PayTypes As PAST_VALUE '辅助核算类型,如:部门往来、客户往来等
  73. Public sPayCode As String '核算代码,如部门代码、客户代码等
  74. '--------------------------------------------------------
  75. Public PayRs As New ADODB.Recordset '核算基记录集,也是最终返回的记录集,可对其数值进行加减
  76. Private AddRs As New ADODB.Recordset '相加记录集,将此记录集累加到基记录集上,几次累加后得到最终结果
  77. '-------------------------------------------
  78. Private sCodingPlan As String '科目编码方案
  79. '---由于字段名可能不同,而此模块要应用于四个查询窗体,及数据表中,所以引入此法-----------
  80. '   在 MeInit 过程中根据传递参数 AccType 设置这些值
  81. Private CodeFlagFerldName As String 'Cwzz_AccCode(科目表)中标记往来的字段名
  82. Private AssiCodeFeildName As String 'Cwzz_SumAssi(辅助帐)中标记往来代码的字段名
  83. Private VouchCodeFeildName As String 'Cwzz_Vouch(凭证子表)中标记往来代码的字段名
  84. '--------------------------------------------------------------------------------
  85. Private CodeList As New Collection '用于存放会计科目列表的集合(最终数据)
  86. Private TemCodeListAssi As New Collection '临时存放会计科目列表的集合
  87. Private TemCodeListVouch As New Collection '临时存放会计科目列表的集合
  88. Public Function GetNewRs() As ADODB.Recordset
  89.     '公共接口
  90.     '供外部程序调用的方法,并返回新的记录集
  91.     If DEBUG_FLAG = False Then On Error Resume Next
  92.     
  93.     Call MeInit '初始化字段名
  94.     
  95.     Call GetAssiCodeList '取辅助核算表中有记录的科目列表
  96.     
  97.     If b_Keep_Business_Records = True Then '如果包含末记帐凭证
  98.         Call GetVouchCodeList '则取凭证表中有发生的科目列表
  99.     End If
  100.     
  101.     Call MakeCodeList '由临时集合1、2生成新的会计科目列表(集合中科目有唯一性)
  102.     
  103.     '------------生成期初数据------------------------------------
  104.     AccType = QiCu '标记设为“期初”
  105.     
  106.     Call MakePayRs '生成基记录集
  107.     
  108.     Call GetSumAssi '生成期初数据
  109.     Call AddTowRs '相加已取得的两个记录集
  110.     
  111.     
  112.     If b_Keep_Business_Records = True Then '如果包含末记帐凭证
  113.         Call GetVouchRs '则取末记帐凭证生成相加记录集
  114.         Call AddTowRs '相加已取得的两个记录集
  115.     End If
  116.     '------------------------------------------------------------
  117.     
  118.     '------------生成本期发生数据--------------------------------
  119.     AccType = BenQi '标记设为“本期”
  120.     
  121.     Call GetSumAssi '生成本期数据
  122.     Call AddTowRs '相加已取得的两个记录集
  123.     
  124.     If b_Keep_Business_Records = True Then '如果包含末记帐凭证
  125.         Call GetVouchRs '则取末记帐凭证生成相加记录集
  126.         Call AddTowRs '相加已取得的两个记录集
  127.     End If
  128.     '--------------------------------------------------------------
  129.     
  130.     '--------------生成累计发生额----------------------------------
  131.     AccType = LeiJi '标记设为“累计”
  132.     
  133.     Call GetSumAssi '生成累计数据
  134.     Call AddTowRs '相加已取得的两个记录集
  135.     
  136.     If b_Keep_Business_Records = True Then '如果包含末记帐凭证
  137.         Call GetVouchRs '则取末记帐凭证生成相加记录集
  138.         Call AddTowRs '相加已取得的两个记录集
  139.     End If
  140.     '----------------------------
  141.     
  142.     Set GetNewRs = PayRs '返回最新的记录集
  143. End Function
  144. Private Sub Class_Initialize()
  145.     '取得科目代码编码方案
  146.     If DEBUG_FLAG = False Then On Error Resume Next
  147.     Dim temRs As ADODB.Recordset
  148.     Set temRs = Cw_DataEnvi.DataConnect.Execute("select * from Gy_CodeScheme where ItemCode='Cwzz_kmcode'")
  149.     sCodingPlan = Trim(temRs!codescheme)
  150.     temRs.Close
  151.     Set temRs = Nothing
  152.     
  153. End Sub
  154. Private Sub Class_Terminate()
  155.     '销毁对象
  156.     On Error Resume Next
  157.     
  158.     Set CodeList = Nothing
  159.     Set TemCodeListAssi = Nothing
  160.     Set TemCodeListVouch = Nothing
  161.     
  162.     If PayRs.State <> adStateClosed Then PayRs.Close
  163.     If AddRs.State <> adStateClosed Then AddRs.Close
  164.     
  165.     Set PayRs = Nothing
  166.     Set AddRs = Nothing
  167.     
  168. End Sub
  169. Private Sub GetAssiCodeList() '取辅助核算表中有记录的科目列表
  170.     '有过发生额的科目被取出,并存放于临时集合“TemCodeListAssi”中,
  171.     '此集合中的科目将最终被加入到“CodeList”中用来生成查询语句
  172.     '生成的查询语名格式为:cCode='xxx1" or cCode='xxx2" or cCode='xxx3" ……
  173.     
  174.     If DEBUG_FLAG = False Then On Error Resume Next
  175.     Dim temRs As New ADODB.Recordset
  176.     Dim strSql As String
  177.     strSql = "SELECT DISTINCT cCode FROM Cwzz_AccSumAssi WHERE " & AssiCodeFeildName & " like '" & sPayCode & "%'"
  178.     
  179.     Set temRs = Cw_DataEnvi.DataConnect.Execute(strSql)
  180.     
  181.     With temRs
  182.         If .EOF And .BOF Then Exit Sub
  183.         
  184.         Dim strCode As String
  185.         Dim iLen As Integer
  186.         Dim iCutLen As Integer
  187.         Dim strTem As String
  188.         Do Until .EOF
  189.             '--根据编码方案取出科目代码及其上级科目代码---------
  190.             strCode = Trim(!Ccode)
  191.             iLen = 1
  192.             iCutLen = 0
  193.             Do While (iCutLen < Len(strCode))
  194.                 iCutLen = iCutLen + Mid(sCodingPlan, iLen, 1) 'sCodingPlan 为编码方案
  195.                 strTem = Left(strCode, iCutLen)
  196.                 TemCodeListAssi.Add Trim(strTem)
  197.                 iLen = iLen + 1
  198.             Loop
  199.             '-------------------------------------------------
  200.             .MoveNext
  201.         Loop
  202.     End With
  203.     temRs.Close
  204.     Set temRs = Nothing
  205. End Sub
  206. Private Sub GetVouchCodeList() '则取凭证表中有发生的科目列表
  207.     If DEBUG_FLAG = False Then On Error Resume Next
  208.     Dim temRs As New ADODB.Recordset
  209.     Dim strSql As String
  210.     strSql = "SELECT DISTINCT cCode FROM Cwzz_AccVouchSub WHERE " & AssiCodeFeildName & " like '" & sPayCode & "%'"
  211.     
  212.     Set temRs = Cw_DataEnvi.DataConnect.Execute(strSql)
  213.     
  214.     With temRs
  215.         If .EOF And .BOF Then Exit Sub
  216.         
  217.         Dim strCode As String
  218.         Dim iLen As Integer
  219.         Dim iCutLen As Integer
  220.         Dim strTem As String
  221.         Do Until .EOF
  222.             '---------------------------------------------------
  223.             strCode = Trim(!Ccode)
  224.             iLen = 1
  225.             iCutLen = 0
  226.             Do While (iCutLen < Len(strCode))
  227.                 iCutLen = iCutLen + Mid(sCodingPlan, iLen, 1)
  228.                 strTem = Left(strCode, iCutLen)
  229.                 TemCodeListVouch.Add Trim(strTem)
  230.                 iLen = iLen + 1
  231.             Loop
  232.             '-------------------------------------------------
  233.             .MoveNext
  234.         Loop
  235.     End With
  236.     temRs.Close
  237.     Set temRs = Nothing
  238. End Sub
  239. Private Sub MakeCodeList() '由临时集合1、2生成新的会计科目列表(集合中科目有唯一性)
  240.     If DEBUG_FLAG = False Then On Error Resume Next
  241.     Dim i As Integer
  242.     Dim j As Integer
  243.     Dim temRs As New ADODB.Recordset
  244.     Dim strSql As String
  245.     
  246.     Dim bIsHere As Boolean
  247.     '-----------------------------------------------------
  248.     For i = FIRST_MEMBER To TemCodeListAssi.count
  249.         bIsHere = False
  250.         For j = FIRST_MEMBER To CodeList.count
  251.             If CodeList.Item(j) = TemCodeListAssi.Item(i) Then
  252.                 bIsHere = True
  253.                 Exit For
  254.             End If
  255.         Next j
  256.         
  257.         If bIsHere = False Then
  258.             CodeList.Add TemCodeListAssi.Item(i)
  259.         End If
  260.     Next i
  261.     '-----------------------------------------------------
  262.     For i = FIRST_MEMBER To TemCodeListVouch.count
  263.         bIsHere = False
  264.         For j = FIRST_MEMBER To CodeList.count
  265.             If CodeList.Item(j) = TemCodeListVouch.Item(i) Then
  266.                 bIsHere = True
  267.                 Exit For
  268.             End If
  269.         Next j
  270.         If bIsHere = False Then
  271.             CodeList.Add TemCodeListVouch.Item(i)
  272.         End If
  273.         
  274.     Next i
  275.     
  276.     For i = CodeList.count To FIRST_MEMBER Step -1
  277.         strSql = "SELECT " & CodeFlagFerldName & " FROM Cwzz_AccCode WHERE cCode='" & CodeList.Item(i) & "'"
  278.         If temRs.State <> adStateClosed Then temRs.Close
  279.         Set temRs = Cw_DataEnvi.DataConnect.Execute(strSql)
  280.         If temRs.Fields(CodeFlagFerldName).Value = False Then
  281.             CodeList.Remove (i)
  282.         End If
  283.     Next
  284.     
  285. End Sub
  286. Private Sub MakePayRs() '生成基记录集
  287.     If DEBUG_FLAG = False Then On Error Resume Next
  288.     Dim strTemSql As String
  289.     Dim i As Integer
  290.     strTemSql = ""
  291.     strTemSql = "SELECT  Cwzz_AccCode.cCode," '    /* 科目代码 */
  292.     strTemSql = strTemSql & "Cwzz_AccCode.cName," '   /* 科目名称*/
  293.     strTemSql = strTemSql & "Cwzz_AccCode.EndFlag," '   /*末级标志*/
  294.     strTemSql = strTemSql & "IsNull(Cwzz_AccSum.Period,1) as Period," '/*/
  295.     
  296.     strTemSql = strTemSql & "Cwzz_AccSum.Qcye as QcyeHj," ' /* 期初余额*/
  297.     strTemSql = strTemSql & "Cwzz_AccSum.Qcsl as QcslHj," '/*期初数量*/
  298.     strTemSql = strTemSql & "Cwzz_AccSum.Qcwb as QcwbHj," '/*期初外币*/
  299.     
  300.     strTemSql = strTemSql & "Byjfljje as ByjfljjeHj," ' /*本月借方累计金额合计*/
  301.     strTemSql = strTemSql & "Bydfljje as BydfljjeHj," ' /*本月贷方累计金额合计*/
  302.     strTemSql = strTemSql & "Byjfljwb as ByjfljwbHj," ' /*本月借方累计外币合计*/
  303.     strTemSql = strTemSql & "Bydfljwb as BydfljwbHj," ' /*本月贷方累计外币合计*/
  304.     strTemSql = strTemSql & "Byjfljsl as ByjfljslHj," ' /*本月借方累计数量合计*/
  305.     strTemSql = strTemSql & "Bydfljsl as BydfljslHj," ' /*本月贷方累计数量合计*/
  306.     
  307.     strTemSql = strTemSql & "Mjje as Mjjehj," ' /* 本期借方发生额*/
  308.     strTemSql = strTemSql & "Mjsl as Mjslhj," ' /*本期借方数量发生额*/
  309.     strTemSql = strTemSql & "Mjwb as Mjwbhj," ' /*本期借方外币发生额*/
  310.     strTemSql = strTemSql & "Mdje as Mdjehj," ' /* 本期贷方发生额*/
  311.     strTemSql = strTemSql & "Mdsl as Mdslhj," ' /*本期贷方数量发生额*/
  312.     strTemSql = strTemSql & "Mdwb as Mdwbhj " ' /*本期贷方外币发生额*/
  313.     
  314.     strTemSql = strTemSql & " From "
  315.     strTemSql = strTemSql & " Cwzz_AccCode LEFT OUTER JOIN  Cwzz_AccSum ON "
  316.     strTemSql = strTemSql & " Cwzz_AccCode.Ccode =Cwzz_AccSum.Ccode "
  317.     strTemSql = strTemSql & " Where "
  318.     If CodeList.count > 0 Then
  319.         For i = FIRST_MEMBER To CodeList.count - 1
  320.             strTemSql = strTemSql & " Cwzz_AccCode.cCode='" & CodeList.Item(i) & "' OR "
  321.         Next
  322.         
  323.         strTemSql = strTemSql & " Cwzz_AccCode.cCode='" & CodeList.Item(i) & "'" '这样做是为了去除最后的“OR”
  324.     Else
  325.         strTemSql = strTemSql & "1=2"
  326.     End If
  327.     With PayRs
  328.         .ActiveConnection = Cw_DataEnvi.DataConnect
  329.         .Source = strTemSql
  330.         .Open , , adOpenStatic, adLockBatchOptimistic
  331.         Set .ActiveConnection = Nothing
  332.         
  333.         '删除多余的记录
  334.         Do Until .EOF
  335.             If !Period <> 1 Then
  336.                 .Delete
  337.             Else
  338.                 '--------清空记录----------------
  339.                 !QcyeHj = 0
  340.                 !QcslHj = 0
  341.                 !QcwbHj = 0
  342.                 
  343.                 !Mjjehj = 0
  344.                 !Mdjehj = 0
  345.                 !Mjslhj = 0
  346.                 !Mdslhj = 0
  347.                 !Mjwbhj = 0
  348.                 !Mdwbhj = 0
  349.                 
  350.                 !ByjfljjeHj = 0
  351.                 !BydfljjeHj = 0
  352.                 !ByjfljwbHj = 0
  353.                 !BydfljwbHj = 0
  354.                 !ByjfljslHj = 0
  355.                 !BydfljslHj = 0
  356.             End If
  357.             '------------------------
  358.             .MoveNext
  359.         Loop
  360.         If Not (.EOF And .BOF) Then
  361.             .MoveFirst
  362.         End If
  363.     End With
  364. End Sub
  365. Private Sub GetVouchRs() '取末记帐凭证生成相加记录集
  366.     '此过程根据“标志”来生成SQL语句
  367.     If DEBUG_FLAG = False Then On Error Resume Next
  368.     Dim strTemSql As String
  369.     Dim i As Integer
  370.     strTemSql = ""
  371.     strTemSql = strTemSql & "SELECT cCode,"
  372.     Select Case AccType  '此为全局变量
  373.     Case QI_CU_YU_E '期初
  374.         
  375.         strTemSql = strTemSql & " (Sum(Jfje)-Sum(Dfje)) as QcyeHj,"
  376.         strTemSql = strTemSql & " (Sum(Jfsl)-Sum(Dfsl)) as QcslHj,"
  377.         strTemSql = strTemSql & " (Sum(wbJfje)-Sum(wbDfje)) as QcwbHj"
  378.         strTemSql = strTemSql & " FROM Cwzz_AccVouchSub,Cwzz_AccVouchMain"
  379.         strTemSql = strTemSql & " WHERE "
  380.         strTemSql = strTemSql & " Cwzz_AccVouchMain.BookFlag=0 "
  381.         strTemSql = strTemSql & " And Cwzz_AccVouchMain.VouchId=Cwzz_AccVouchSub.VouchId "
  382.         strTemSql = strTemSql & " And Period<" & iPeriod_Begin
  383.         strTemSql = strTemSql & " And Cwzz_AccVouchSub." & VouchCodeFeildName & " like '" & sPayCode & "%'"
  384.         strTemSql = strTemSql & " group by cCode"
  385.         strTemSql = strTemSql & ""
  386.         
  387.     Case BEN_QI_FA_SHENG_E      '本期发生
  388.         strTemSql = strTemSql & "Sum(jfje) as Mjjehj," ' /* 本期借方发生额*/
  389.         strTemSql = strTemSql & "Sum(jfsl) as Mjslhj," ' /*本期借方数量发生额*/
  390.         strTemSql = strTemSql & "Sum(wbjfje) as Mjwbhj," ' /*本期借方外币发生额*/
  391.         strTemSql = strTemSql & "Sum(dfje) as Mdjehj," ' /* 本期贷方发生额*/
  392.         strTemSql = strTemSql & "Sum(dfsl) as Mdslhj," ' /*本期贷方数量发生额*/
  393.         strTemSql = strTemSql & "Sum(wbdfje) as Mdwbhj " ' /*本期贷方外币发生额*/
  394.         strTemSql = strTemSql & " FROM Cwzz_AccVouchSub,Cwzz_AccVouchMain"
  395.         strTemSql = strTemSql & " WHERE "
  396.         strTemSql = strTemSql & " Cwzz_AccVouchSub.VouchId=Cwzz_AccVouchMain.VouchId "
  397.         strTemSql = strTemSql & " AND Cwzz_AccVouchMain.Period BETWEEN " & iPeriod_Begin & " AND " & iPeriod_End
  398.         strTemSql = strTemSql & " AND Cwzz_AccVouchMain.Year=" & iPeriod_Year
  399.         strTemSql = strTemSql & " AND " & VouchCodeFeildName & " like '" & sPayCode & "%'"
  400.         strTemSql = strTemSql & " AND Cwzz_AccVouchMain.BookFlag=0 AND ("
  401.         
  402.         
  403.     Case LEI_JI_FA_SHENG_E      '累计发生
  404.         strTemSql = strTemSql & "Sum(jfje) as ByjfljjeHj," ' /*本月借方累计金额合计*/
  405.         strTemSql = strTemSql & "Sum(dfje) as BydfljjeHj," ' /*本月贷方累计金额合计*/
  406.         strTemSql = strTemSql & "Sum(jfsl) as ByjfljwbHj," ' /*本月借方累计外币合计*/
  407.         strTemSql = strTemSql & "Sum(dfsl) as BydfljwbHj," ' /*本月贷方累计外币合计*/
  408.         strTemSql = strTemSql & "Sum(wbjfje) as ByjfljslHj," ' /*本月借方累计数量合计*/
  409.         strTemSql = strTemSql & "Sum(wbdfje) as BydfljslHj" ' /*本月贷方累计数量合计*/
  410.         strTemSql = strTemSql & " FROM Cwzz_AccVouchSub,Cwzz_AccVouchMain"
  411.         strTemSql = strTemSql & " WHERE "
  412.         strTemSql = strTemSql & " Cwzz_AccVouchSub.VouchId=Cwzz_AccVouchMain.VouchId "
  413.         '-----------------2001年7月26日 11:15 分修改 (bsj)--------------------------
  414.         '问题:累计发生应为“查询期期末”以前的所有末记帐凭证,即小于“查询期期末”所有凭证
  415.         '原程序为:“查询期期初”——“查询期期末”的所有凭证
  416.         '此行为原程序:strTemSql = strTemSql & " AND Cwzz_AccVouchMain.Period BETWEEN " & iPeriod_Begin & " AND " & iPeriod_End
  417.         '下一行为修改后程序:strTemSql = strTemSql & " AND Cwzz_AccVouchMain.Period <" & iPeriod_End
  418.         strTemSql = strTemSql & " AND Cwzz_AccVouchMain.Period <" & iPeriod_End
  419.         '---------------------修改结束-----------------------------------------
  420.         strTemSql = strTemSql & " AND Cwzz_AccVouchMain.Year=" & iPeriod_Year
  421.         strTemSql = strTemSql & " AND " & VouchCodeFeildName & " like '" & sPayCode & "%'"
  422.         strTemSql = strTemSql & " AND Cwzz_AccVouchMain.BookFlag=0 AND ("
  423.     End Select
  424.     
  425.     If AccType <> QiCu Then
  426.         If CodeList.count > 0 Then
  427.             For i = FIRST_MEMBER To CodeList.count - 1
  428.                 strTemSql = strTemSql & " Cwzz_AccVouchSub.cCode='" & CodeList.Item(i) & "' OR "
  429.             Next
  430.             strTemSql = strTemSql & " Cwzz_AccVouchSub.cCode='" & CodeList.Item(i) & "')" '这样做是为了去除最后的“OR”
  431.         Else
  432.             strTemSql = strTemSql & "1=2)"
  433.         End If
  434.         strTemSql = strTemSql & " Group By cCode"
  435.     End If
  436.     '---------------------------------------
  437.     
  438.     With AddRs
  439.         If .State <> adStateClosed Then .Close
  440.         .ActiveConnection = Cw_DataEnvi.DataConnect
  441.         .Source = strTemSql
  442.         .Open , , adOpenStatic, adLockBatchOptimistic
  443.         Set .ActiveConnection = Nothing
  444.     End With
  445.     
  446. End Sub
  447. Private Sub GetSumAssi() '生成期初、本期发生、累计发生数据
  448.     If DEBUG_FLAG = False Then On Error Resume Next
  449.     Dim strTemSql As String
  450.     Dim i As Integer
  451.     strTemSql = ""
  452.     strTemSql = "SELECT  Cwzz_AccSumAssi.cCode," '    /* 科目代码 */
  453.     
  454.     Select Case AccType '此变量为全局变量
  455.     Case QI_CU_YU_E '期初
  456.         strTemSql = strTemSql & "Qcye as QcyeHj," ' /* 期初余额*/
  457.         strTemSql = strTemSql & "Qcsl as QcslHj," '/*期初数量*/
  458.         strTemSql = strTemSql & "Qcwb as QcwbHj," '/*期初外币*/
  459.         
  460.         
  461.         If Right(strTemSql, 1) = "," Then strTemSql = Left(strTemSql, Len(strTemSql) - 1)
  462.         strTemSql = strTemSql & " From "
  463.         strTemSql = strTemSql & " Cwzz_AccSumAssi "
  464.         strTemSql = strTemSql & " Where "
  465.         strTemSql = strTemSql & " Period = " & iPeriod_Begin & " AND Year=" & iPeriod_Year & " AND "
  466.         strTemSql = strTemSql & AssiCodeFeildName & " like '" & sPayCode & "%' AND ("
  467.         
  468.     Case LEI_JI_FA_SHENG_E     '  累计发生
  469.         strTemSql = strTemSql & "Byjfljje as ByjfljjeHj," ' /*本月借方累计金额合计*/
  470.         strTemSql = strTemSql & "Bydfljje as BydfljjeHj," ' /*本月贷方累计金额合计*/
  471.         strTemSql = strTemSql & "Byjfljwb as ByjfljwbHj," ' /*本月借方累计外币合计*/
  472.         strTemSql = strTemSql & "Bydfljwb as BydfljwbHj," ' /*本月贷方累计外币合计*/
  473.         strTemSql = strTemSql & "Byjfljsl as ByjfljslHj," ' /*本月借方累计数量合计*/
  474.         strTemSql = strTemSql & "Bydfljsl as BydfljslHj," ' /*本月贷方累计数量合计*/
  475.         
  476.         If Right(strTemSql, 1) = "," Then strTemSql = Left(strTemSql, Len(strTemSql) - 1)
  477.         strTemSql = strTemSql & " From "
  478.         strTemSql = strTemSql & " Cwzz_AccSumAssi "
  479.         strTemSql = strTemSql & " Where "
  480.         strTemSql = strTemSql & " Period < " & iPeriod_End & " AND Year=" & iPeriod_Year & " AND "
  481.         strTemSql = strTemSql & AssiCodeFeildName & " like '" & sPayCode & "%' AND ("
  482.         
  483.         
  484.     Case BEN_QI_FA_SHENG_E  '本期发生
  485.         strTemSql = strTemSql & "Sum(Mjje) as Mjjehj," ' /* 本期借方发生额*/
  486.         strTemSql = strTemSql & "Sum(Mjsl) as Mjslhj," ' /*本期借方数量发生额*/
  487.         strTemSql = strTemSql & "Sum(Mjwb) as Mjwbhj," ' /*本期借方外币发生额*/
  488.         strTemSql = strTemSql & "Sum(Mdje) as Mdjehj," ' /* 本期贷方发生额*/
  489.         strTemSql = strTemSql & "Sum(Mdsl) as Mdslhj," ' /*本期贷方数量发生额*/
  490.         strTemSql = strTemSql & "Sum(Mdwb) as Mdwbhj " ' /*本期贷方外币发生额*/
  491.         
  492.         
  493.         If Right(strTemSql, 1) = "," Then strTemSql = Left(strTemSql, Len(strTemSql) - 1)
  494.         strTemSql = strTemSql & " From "
  495.         strTemSql = strTemSql & " Cwzz_AccSumAssi "
  496.         strTemSql = strTemSql & " Where "
  497.         strTemSql = strTemSql & " Period BETWEEN " & iPeriod_Begin & " AND " & iPeriod_End & " AND Year=" & iPeriod_Year & " AND "
  498.         strTemSql = strTemSql & AssiCodeFeildName & " like '" & sPayCode & "%' AND ("
  499.         
  500.     End Select
  501.     
  502.     If CodeList.count > 0 Then
  503.         For i = FIRST_MEMBER To CodeList.count - 1
  504.             strTemSql = strTemSql & " Cwzz_AccSumAssi.cCode='" & CodeList.Item(i) & "' OR "
  505.         Next
  506.         strTemSql = strTemSql & " Cwzz_AccSumAssi.cCode='" & CodeList.Item(i) & "')" '这样做是为了去除最后的“OR”
  507.     Else
  508.         strTemSql = strTemSql & "1=2)"
  509.     End If
  510.     If AccType = BenQi Then
  511.         strTemSql = strTemSql & " Group By cCode"
  512.     End If
  513.     With AddRs
  514.         If .State <> adStateClosed Then .Close
  515.         .ActiveConnection = Cw_DataEnvi.DataConnect
  516.         .Source = strTemSql
  517.         .Open , , adOpenStatic, adLockBatchOptimistic
  518.         Set .ActiveConnection = Nothing
  519.     End With
  520.     
  521. End Sub
  522. Private Sub AddSingle() '相加已取得的两个记录集
  523.     If DEBUG_FLAG = False Then On Error Resume Next
  524.     Select Case AccType
  525.     Case QI_CU_YU_E '期初
  526.         PayRs!QcyeHj = PayRs!QcyeHj + IIf(IsNull(AddRs!QcyeHj), 0, AddRs!QcyeHj)
  527.         PayRs!QcslHj = PayRs!QcslHj + IIf(IsNull(AddRs!QcslHj), 0, AddRs!QcslHj)
  528.         PayRs!QcwbHj = PayRs!QcwbHj + IIf(IsNull(AddRs!QcwbHj), 0, AddRs!QcwbHj)
  529.         PayRs.Update
  530.     Case BEN_QI_FA_SHENG_E '本期发生
  531.         PayRs!Mjjehj = PayRs!Mjjehj + IIf(IsNull(AddRs!Mjjehj), 0, AddRs!Mjjehj) ' /* 本期借方发生额*/"
  532.         PayRs!Mdjehj = PayRs!Mdjehj + IIf(IsNull(AddRs!Mdjehj), 0, AddRs!Mdjehj) ' /*本期借方数量发生额*/"
  533.         PayRs!Mjslhj = PayRs!Mjslhj + IIf(IsNull(AddRs!Mjslhj), 0, AddRs!Mjslhj) ' /*本期借方外币发生额*/"
  534.         PayRs!Mdslhj = PayRs!Mdslhj + IIf(IsNull(AddRs!Mdslhj), 0, AddRs!Mdslhj) ' /* 本期贷方发生额*/"
  535.         PayRs!Mjwbhj = PayRs!Mjwbhj + IIf(IsNull(AddRs!Mjwbhj), 0, AddRs!Mjwbhj) ' /*本期贷方数量发生额*/"
  536.         PayRs!Mdwbhj = PayRs!Mdwbhj + IIf(IsNull(AddRs!Mdwbhj), 0, AddRs!Mdwbhj) ' /*本期贷方外币发生额*/"
  537.         PayRs.Update
  538.     Case LEI_JI_FA_SHENG_E '累计发生
  539.         PayRs!ByjfljjeHj = PayRs!ByjfljjeHj + IIf(IsNull(AddRs!ByjfljjeHj), 0, AddRs!ByjfljjeHj)
  540.         PayRs!BydfljjeHj = PayRs!BydfljjeHj + IIf(IsNull(AddRs!BydfljjeHj), 0, AddRs!BydfljjeHj)
  541.         PayRs!ByjfljslHj = PayRs!ByjfljslHj + IIf(IsNull(AddRs!ByjfljslHj), 0, AddRs!ByjfljslHj)
  542.         PayRs!BydfljslHj = PayRs!BydfljslHj + IIf(IsNull(AddRs!BydfljslHj), 0, AddRs!BydfljslHj)
  543.         PayRs!ByjfljwbHj = PayRs!ByjfljwbHj + IIf(IsNull(AddRs!ByjfljwbHj), 0, AddRs!ByjfljwbHj)
  544.         PayRs!BydfljwbHj = PayRs!BydfljwbHj + IIf(IsNull(AddRs!BydfljwbHj), 0, AddRs!BydfljwbHj)
  545.         PayRs.Update
  546.     End Select
  547. End Sub
  548. Private Sub MeInit() '初始化字段名
  549.     If DEBUG_FLAG = False Then On Error Resume Next
  550.     Select Case PayTypes
  551.     Case DEPT_CODE '部门
  552.         CodeFlagFerldName = "DeptFlag"
  553.         AssiCodeFeildName = "DeptCode"
  554.         VouchCodeFeildName = "DeptCode"
  555.     Case CURS_CODE '客户
  556.         CodeFlagFerldName = "CusFlag"
  557.         AssiCodeFeildName = "CusCode"
  558.         VouchCodeFeildName = "CusCode"
  559.     Case VEND_CODE '供应商
  560.         CodeFlagFerldName = "SupplierFlag"
  561.         AssiCodeFeildName = "SupplierCode"
  562.         VouchCodeFeildName = "SupplierCode"
  563.     Case PERS_CODE '个人
  564.         CodeFlagFerldName = "PersonFlag"
  565.         AssiCodeFeildName = "PersonCode"
  566.         VouchCodeFeildName = "PersonCode"
  567.     End Select
  568. End Sub
  569. '----------------------------------------------
  570. Sub AddTowRs()
  571.     '相加科目总记录集与末记帐凭证记录集
  572.     '此模块被MakeRs调用
  573.     '如果此记录为顶级科目,则继续对下一条记录进行累加,
  574.     '否则追朔查询上级科目
  575.     If DEBUG_FLAG = False Then On Error Resume Next
  576.     
  577.     Dim strTemParent As String
  578.     With AddRs
  579.         If Not (.EOF And .BOF) Then
  580.             .MoveFirst
  581.             Do Until .EOF
  582.                 strTemParent = Trim(!Ccode)
  583.                 If strTemParent <> "" Then SeachParent (strTemParent)
  584.                 .MoveNext
  585.             Loop
  586.         End If
  587.     End With
  588. End Sub
  589. Sub SeachParent(strParend As String)
  590.     '查询上级科目
  591.     '此模块被AddTowRs 调用
  592.     '1.保存记录书签
  593.     '2.根据strParend在Rec_Query中找到myTemRs当前记录的上级科目位置
  594.     '3.汇总记录,调用AddSingle
  595.     '4.恢复书签
  596.     
  597.     If DEBUG_FLAG = False Then On Error Resume Next
  598.     
  599.     Dim myBookMark  '用于保存记录集(Rec_Query)书签
  600.     
  601.     With PayRs
  602.         If Not (.BOF And .EOF) Then
  603.             myBookMark = .Bookmark '保存记录书签
  604.             .MoveFirst
  605.             .Find "cCode='" & strParend & "'"
  606.             If Not .EOF Then
  607.                 Call AddSingle
  608.             End If
  609.             .Bookmark = myBookMark
  610.         End If
  611.         
  612.     End With
  613. End Sub