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

企业管理

开发平台:

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