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

企业管理

开发平台:

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 = "clsInc"
  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. '*    最后修改时间:2002/1/21
  20. '*    备        注:程序中所有依实际情况自定义部分均用[>>  <<]括起
  21. '*
  22. '*********************************************************************
  23. Option Explicit
  24. Private Const SQL = "SELECT * FROM cwfx_IncomeCostInitial"
  25. Private bSomeThingWrong As Boolean '有错误
  26. Private CodeRs As New ADODB.Recordset '会计科目
  27. Private Conn As New ADODB.Connection '数据连接
  28. Private Rs As New ADODB.Recordset '记录集
  29. Private sItem As String '项目
  30. Private iMonthBegin As Integer '月首
  31. Private iMonthEnd As Integer '月末
  32. Private iYear As Integer '年
  33. Private iThisMonthBegin As Integer
  34. Private iThisMonthEnd As Integer
  35. Private iCompMonthBegin As Integer
  36. Private iCompMonthEnd As Integer
  37. Private iThisYear As Integer
  38. Private iCompYear As Integer
  39. Public Sub Init(ByVal PastConn As ADODB.Connection)
  40.     If DEBUG_FLAG = False Then On Error Resume Next
  41.     Set Conn = PastConn
  42.     With Rs
  43.         If .State = adStateOpen Then .Close
  44.         .ActiveConnection = PastConn
  45.         .Source = SQL
  46.         .Open , , adOpenKeyset, adLockBatchOptimistic
  47.         Set .ActiveConnection = Nothing
  48.     End With
  49.     
  50.     With CodeRs
  51.         If .State = adStateOpen Then .Close
  52.         .ActiveConnection = Conn
  53.         .Source = "SELECT * FROM Cwzz_AccCode"
  54.         .Open , , adOpenKeyset, adLockBatchOptimistic
  55.         Set .ActiveConnection = Nothing
  56.     End With
  57. End Sub
  58. Public Function GetFristValue(ByVal strItem As String, ByVal intYear As Integer) As Double
  59.     '取年初值
  60.     If DEBUG_FLAG = False Then On Error Resume Next
  61.     GetFristValue = GetPeriodValue(strItem, 0, 0, iYear)
  62. End Function
  63. Public Function GetPeriodValue(ByVal strItem As String, ByVal intPeriodBegin As Integer, ByVal intPeriodEnd As Integer, ByVal intYear As Integer) As Double
  64.     '取期间值
  65.     If DEBUG_FLAG = False Then On Error Resume Next
  66.     iMonthBegin = intPeriodBegin
  67.     iMonthEnd = intPeriodEnd
  68.     iYear = intYear
  69.     GetPeriodValue = GetVal(strItem)
  70. End Function
  71. Public Function GetAveragePeriodValue(ByVal strItem As String, ByVal intPeriodBegin As Integer, ByVal intPeriodEnd As Integer, ByVal intYear As Integer) As Double
  72.     '取期间平均值
  73.     If DEBUG_FLAG = False Then On Error Resume Next
  74.     Dim dbl_FirstValue As Double
  75.     Dim dbl_EndValue As Double
  76.     dbl_FirstValue = GetPeriodValue(strItem, intPeriodBegin, intPeriodEnd, iYear)
  77.     dbl_EndValue = GetPeriodValue(strItem, intPeriodBegin, intPeriodEnd, iYear)
  78.     GetAveragePeriodValue = (dbl_FirstValue + dbl_EndValue) / 2
  79. End Function
  80. '=====================普通取值开始============================
  81. Private Function GetVal(ByVal strItem As String) As Double
  82.     '取出某项目的值(项目值由设定的公式决定)
  83.     '参数:
  84.     'strItem:项目,表中的标识
  85.     If DEBUG_FLAG = False Then On Error Resume Next
  86.     Dim dbl_ReturnVal As Double '返回值
  87.     
  88.     Dim iLen As Integer
  89.     Dim iWordBegin As Integer
  90.     Dim iWordEnd As Integer
  91.     Dim strTem As String
  92.     Dim opTem As String '加减号
  93.     Dim dbl_RetVal As Double '加数或减数
  94.     Dim strSubExp As String
  95.     Dim i As Integer
  96.     With Rs
  97.         If Not (.EOF And .BOF) Then '表不能为空记录集
  98.             .MoveFirst
  99.             .Find "Item='" & strItem & "'"
  100.             If Not .EOF Then '如果找到
  101.                 
  102.                 strSubExp = Trim(!account) & "" '取得公式
  103.                 
  104.                 If !AccntOrItem = 0 Then '如果为固定公式则拆分此公式,
  105.                     '对每个拆分的项目再次调用此过程
  106.                     '------------------------------------------------------
  107.                     
  108.                     iLen = Len(strSubExp)
  109.                     iWordBegin = 1
  110.                     iWordEnd = 1
  111.                     For i = 1 To iLen
  112.                         
  113.                         strTem = Mid(strSubExp, i, 1)
  114.                         If strTem = "+" Or strTem = "-" Or i = iLen Then
  115.                             If iWordBegin = 1 Then
  116.                                 opTem = "+"
  117.                             Else
  118.                                 opTem = Mid(strSubExp, iWordBegin - 1, 1)
  119.                             End If
  120.                             
  121.                             
  122.                             strTem = Mid(strSubExp, iWordBegin, i - iWordBegin + 1)
  123.                             strTem = IIf(Right(strTem, 1) = "+" Or Right(strTem, 1) = "-", Left(strTem, Len(strTem) - 1), strTem)
  124.                             
  125.                             dbl_RetVal = GetVal(strTem)
  126.                             
  127.                             If opTem = "+" Then
  128.                                 dbl_ReturnVal = dbl_ReturnVal + dbl_RetVal  'ReCall
  129.                             ElseIf opTem = "-" Then
  130.                                 dbl_ReturnVal = dbl_ReturnVal - dbl_RetVal 'ReCall
  131.                             End If
  132.                             '--------------
  133.                             iWordBegin = i + 1
  134.                         End If
  135.                     Next
  136.                     
  137.                     '------------------------------------------------------
  138.                 Else '调用取得公式值的过程
  139.                     dbl_ReturnVal = dbl_ReturnVal + GetSubVal(strSubExp)
  140.                 End If
  141.             End If
  142.         End If
  143.     End With
  144.     GetVal = dbl_ReturnVal
  145. End Function
  146. Private Function GetSubVal(ByVal strExp As String) As Double
  147.     '取得最终公式值,由GetVal调用
  148.     If DEBUG_FLAG = False Then On Error Resume Next
  149.     Dim dbl_Return As Double '返回值
  150.     Dim iLen As Integer
  151.     Dim iWordBegin As Integer
  152.     Dim iWordEnd  As Integer
  153.     Dim strTem As String
  154.     Dim strSubExp As String
  155.     Dim strSql As String
  156.     Dim i As Integer
  157.     Dim SumRs As New ADODB.Recordset
  158.     strSubExp = Trim(strExp) '取得公式
  159.     
  160.     iLen = Len(strSubExp)
  161.     iWordBegin = 1
  162.     iWordEnd = 1
  163.     For i = 1 To iLen
  164.         
  165.         strTem = Mid(strSubExp, i, 1)
  166.         If strTem = "+" Or strTem = "-" Or i = iLen Then
  167.             strTem = Mid(strSubExp, iWordBegin, i - iWordBegin + 1)
  168.             strTem = IIf(Right(strTem, 1) = "+" Or Right(strTem, 1) = "-", Left(strTem, Len(strTem) - 1), strTem)
  169.             '----------------------------------------------
  170.             
  171.             
  172.             
  173.             If SumRs.State = adStateOpen Then SumRs.Close
  174.             
  175.             
  176.             strSql = "SELECT IsNull(Sum(Mjje),0) AS jje ,IsNull(Sum(Mdje),0) AS dje FROM Cwzz_AccSum Where cCode='" & strTem & "'"
  177.             strSql = strSql & " AND Year=" & iYear
  178.             strSql = strSql & " AND Period BETWEEN " & iMonthBegin & " AND " & iMonthEnd
  179.             
  180.             
  181.             Set SumRs = Cw_DataEnvi.DataConnect.Execute(strSql)
  182.             
  183.             If Not (SumRs.EOF And SumRs.BOF) Then
  184.                 CodeRs.MoveFirst
  185.                 CodeRs.Find "cCode='" & strTem & "'"
  186.                 If Not CodeRs.EOF Then
  187.                     If iWordBegin > 1 Then
  188.                         If Mid(strSubExp, iWordBegin - 1, 1) = "+" Then
  189.                             '----------------------
  190.                             dbl_Return = dbl_Return + Val(IIf(Trim(CodeRs!BalanceOri) = "借", SumRs!jje & "", SumRs!dje & ""))
  191.                             '----------------------
  192.                         ElseIf Mid(strSubExp, iWordBegin - 1, 1) = "-" Then
  193.                             '------------------
  194.                             dbl_Return = dbl_Return - Val(IIf(Trim(CodeRs!BalanceOri) = "借", SumRs!jje & "", SumRs!dje & ""))
  195.                             '----------------
  196.                         End If
  197.                     Else
  198.                         '-----------------------
  199.                         dbl_Return = dbl_Return + Val(IIf(Trim(CodeRs!BalanceOri) = "借", SumRs!jje & "", SumRs!dje & ""))
  200.                         '-----------------------
  201.                     End If
  202.                 End If
  203.             End If
  204.             iWordBegin = i + 1
  205.         End If
  206.     Next
  207.     GetSubVal = dbl_Return
  208. End Function
  209. '========================普通取值结束======================================================
  210. Private Sub Class_Terminate()
  211.     If DEBUG_FLAG = False Then On Error Resume Next
  212.     If Rs.State = adStateOpen Then Rs.Close
  213.     Set Rs = Nothing
  214.     Set Conn = Nothing
  215. End Sub