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

企业管理

开发平台:

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 = "clsTag"
  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. '------------------------------------------------------------------
  25. Private Const compDate = &H100              '比较期
  26. Private Const baseDate = &H200              '本期
  27. Private Const firstDate = &H300             '年初
  28. Private Enum FLAG_DATE
  29.     COMP_DATE = compDate
  30.     BASE_DATE = baseDate
  31.     FIRST_DATE = firstDate
  32. End Enum
  33. Private myDate As FLAG_DATE                 '期间标识(年初,比较期,本期)
  34. '-----------------------------------------------------------------
  35. Private clsmyBal As New clsBal              '资产负债表类
  36. Private clsmyInc As New clsInc              '损益表类
  37. '-----------------------------------------------------------------
  38. Private SumRs As New ADODB.Recordset        '科目总帐表记录集
  39. Private CodeRs As New ADODB.Recordset       '科目表记录集
  40. Private BalRs As New ADODB.Recordset        '报表设置中的资产负债表
  41. Private IncRs As New ADODB.Recordset        '报表设置中的损益表
  42. Private TagRs As New ADODB.Recordset        '指标设置表
  43. '------------------------------------------------------------------
  44. Private iThisYear As Integer                '本年
  45. Private iCompYear As Integer                '比较期年
  46. Private iThisMonthBegin As Integer          '本期间首月
  47. Private iThisMonthEnd As Integer            '本期间尾月
  48. Private iCompMonthBegin As Integer          '比较期间首月
  49. Private iCompMonthEnd As Integer            '比较期间尾月
  50. '----------------------------------------------------------------
  51. Private iYear As Integer                    '查询年
  52. Private iMonthBegin As Integer              '查询月
  53. Private iMonthEnd As Integer                '查询月
  54. '------------------------------------------------------------------
  55. Private strSubExp As String                 '当前资产负债表公式,用来保存用户设定的公式
  56. Public iRecordCount As Integer              '数组记录条数
  57. Private codeColl As New Collection          '公式中的科目集合
  58. '----------股票数据--------------------
  59. Private lrTextVal(5) As Single
  60. '-----------------------------
  61. Private Sub Class_Initialize()
  62.     If DEBUG_FLAG = False Then On Error Resume Next
  63.     Set CodeRs = Cw_DataEnvi.DataConnect.Execute("select * from Cwzz_AccCode") '科目表记录集
  64.     Set BalRs = Cw_DataEnvi.DataConnect.Execute("select * from cwfx_BalanceInitial") '报表设置中的资产负债表
  65.     Set IncRs = Cw_DataEnvi.DataConnect.Execute("select * from cwfx_IncomeCostInitial") '报表设置中的损益表
  66.     Set TagRs = Cw_DataEnvi.DataConnect.Execute("select * from cwfx_TagInital where Selected=1") '指标设置表
  67.     Call GetParm
  68.     clsmyBal.Init Cw_DataEnvi.DataConnect
  69.     clsmyInc.Init Cw_DataEnvi.DataConnect
  70. End Sub
  71. Private Sub GetParm()
  72.     '得到查询参数
  73.     If DEBUG_FLAG = False Then On Error Resume Next
  74.     With Zbfx_BaseGuideLineSeach
  75.         Select Case .Combo_Type.ListIndex
  76.         Case 0                              '按年
  77.             iThisYear = Xtyear                                                         '本年
  78.             If .Combo_SelYear.ListIndex <> -1 And .Combo_SelYear.ListIndex <> 0 Then
  79.                 iCompYear = .Combo_SelYear.Text                                        '比较期年
  80.             End If
  81.             iThisMonthBegin = 1                                                        '本期间首月
  82.             iThisMonthEnd = 12                                                         '本期间尾月
  83.             
  84.             iCompMonthBegin = 1                                                        '比较期间首月
  85.             iCompMonthBegin = 12                                                       '比较期间尾月
  86.         Case 1                              '按月
  87.             iThisYear = Xtyear              '本年
  88.             iThisMonthBegin = CInt(Right(.Combo_BaseDate.Text, 2))  '本期间首月
  89.             iThisMonthEnd = iThisMonthBegin                         '本期间尾月
  90.             If .Combo_CompDate.ListIndex <> -1 And .Combo_CompDate.Enabled = True Then
  91.                 iCompYear = .Combo_SelYear.Text                     '比较期年
  92.                 iCompMonthBegin = CInt(Right(.Combo_CompDate.Text, 2)) '比较期间首月
  93.                 iCompMonthEnd = iCompMonthBegin                     '比较期间尾月
  94.             End If
  95.         Case 2                              '按季
  96.             iThisYear = Xtyear              '本年
  97.             iThisMonthBegin = CInt(Mid(.Combo_BaseDate.Text, 6, 2)) '本期间首月
  98.             iThisMonthEnd = CInt(Right(.Combo_BaseDate.Text, 2))    '本期间尾月
  99.             If .Combo_CompDate.ListIndex <> -1 And .Combo_CompDate.Enabled = True Then
  100.                 iCompYear = .Combo_SelYear.Text
  101.                 iCompMonthBegin = CInt(Mid(.Combo_CompDate.Text, 6, 2)) '比较期间首月
  102.                 iCompMonthEnd = CInt(Right(.Combo_CompDate.Text, 2)) '比较期间尾月
  103.             End If
  104.         End Select
  105.         
  106.                                             '股票数据
  107.         Dim i As Integer
  108.         For i = .lrText.LBound To .lrText.UBound
  109.             lrTextVal(i) = Val(.lrText(i).Text)
  110.         Next
  111.         
  112.     End With
  113. End Sub
  114. Public Function MakeData() As Boolean
  115.     '此过程为公共接口
  116.     If DEBUG_FLAG = False Then On Error Resume Next
  117.     Dim i As Integer
  118.     iRecordCount = TagRs.RecordCount - 1
  119.     If iRecordCount < 0 Then
  120.         MakeData = False
  121.         Exit Function
  122.     End If
  123.     ReDim TagArry(iRecordCount)
  124.     
  125.     For i = 0 To iRecordCount
  126.         With TagRs
  127.             TagArry(i).strType = Trim(!RatioType)
  128.             TagArry(i).strName = Trim(!RatioName)
  129.             TagArry(i).strUnit = Trim(!Unit)
  130.             
  131.             '------------------------------------------------------------------------
  132.             myDate = BASE_DATE              '本期
  133.             iYear = iThisYear
  134.             iMonthBegin = iThisMonthBegin
  135.             iMonthEnd = iThisMonthEnd
  136.             
  137.             TagArry(i).sigCurrentV = MakeFormula(Trim(!RatioName))
  138.             '------------------'比较期------------------------------------------------------
  139.             If Zbfx_BaseGuideLineSeach.Combo_SelYear.ListIndex <> -1 And Zbfx_BaseGuideLineSeach.Combo_SelYear.ListIndex <> 0 Then '比较期
  140.                 iYear = iCompYear
  141.                 iMonthBegin = iCompMonthBegin
  142.                 iMonthEnd = iCompMonthEnd
  143.                 
  144.                 TagArry(i).sigComPareV = MakeFormula(Trim(!RatioName))
  145.                 
  146.                 If TagArry(i).sigComPareV <> 0 And TagArry(i).sigCurrentV <> 0 Then
  147.                     TagArry(i).strTagAdd2 = ((TagArry(i).sigCurrentV - TagArry(i).sigComPareV) * 100 / TagArry(i).sigComPareV)
  148.                 End If
  149.             End If
  150.             '---------------------------------------------------------------------------
  151.             myDate = FIRST_DATE             '年初
  152.             TagArry(i).sigYearBeginV = MakeFormula(Trim(!RatioName))
  153.             
  154.             If TagArry(i).sigYearBeginV <> 0 And TagArry(i).sigCurrentV <> 0 Then
  155.                 TagArry(i).strTagAdd1 = ((TagArry(i).sigCurrentV - TagArry(i).sigYearBeginV) * 100 / TagArry(i).sigYearBeginV)
  156.             End If
  157.             '------------------------------------------------------------------------------
  158.             .MoveNext
  159.         End With
  160.     Next
  161.     MakeData = True
  162. End Function
  163. Private Function MakeFormula(ByVal strItem As String) As Double
  164.     If DEBUG_FLAG = False Then On Error Resume Next
  165.     Dim dbl_TemValue As Double
  166.     Select Case strItem
  167.     Case "流动比率"
  168.         dbl_TemValue = GetPeriodValue("流动负债合计", False)
  169.         If dbl_TemValue <> 0 Then
  170.             MakeFormula = GetPeriodValue("流动资产合计", False) / dbl_TemValue
  171.         End If
  172.     Case "速动比率"
  173.         dbl_TemValue = GetPeriodValue("流动负债合计", False)
  174.         If dbl_TemValue <> 0 Then
  175.             MakeFormula = (GetPeriodValue("流动资产合计", False) - GetPeriodValue("存货", False)) / dbl_TemValue
  176.         End If
  177.     Case "存货周转率"
  178.         dbl_TemValue = GetPeriodValue("存货", True)
  179.         If dbl_TemValue <> 0 Then
  180.             MakeFormula = GetPeriodValueInc("产品销售成本", False) / dbl_TemValue
  181.         End If
  182.     Case "存货周转天数"
  183.         dbl_TemValue = GetPeriodValueInc("产品销售成本", False)
  184.         If dbl_TemValue <> 0 Then
  185.             With Zbfx_BaseGuideLineSeach
  186.                 Select Case .Combo_Type.ListIndex
  187.                 Case 0
  188.                     MakeFormula = (360 / dbl_TemValue) * GetPeriodValue("存货", True)
  189.                 Case 1
  190.                     MakeFormula = (360 / dbl_TemValue) * GetPeriodValue("存货", True)
  191.                 Case 2
  192.                     MakeFormula = (360 / dbl_TemValue) * GetPeriodValue("存货", True)
  193.                 End Select
  194.             End With
  195.         Else
  196.             MakeFormula = 0
  197.         End If
  198.     Case "应收账款周转率"
  199.         dbl_TemValue = GetPeriodValue("应收账款净额", True) + GetPeriodValue("应收票据", True)
  200.         If dbl_TemValue <> 0 Then
  201.             MakeFormula = GetPeriodValueInc("产品销售收入", False) / dbl_TemValue
  202.         Else
  203.             MakeFormula = 0
  204.         End If
  205.     Case "应收账款周转天数"
  206.         dbl_TemValue = GetPeriodValue("应收账款净额", True) + GetPeriodValue("应收票据", True)
  207.         If dbl_TemValue <> 0 Then
  208.             dbl_TemValue = GetPeriodValueInc("产品销售收入", False) / dbl_TemValue
  209.         Else
  210.             MakeFormula = 0
  211.         End If
  212.         If dbl_TemValue <> 0 Then
  213.             With Zbfx_BaseGuideLineSeach
  214.                 Select Case .Combo_Type.ListIndex
  215.                 Case 0
  216.                     MakeFormula = 360 / dbl_TemValue
  217.                 Case 1
  218.                     MakeFormula = 360 / dbl_TemValue
  219.                 Case 2
  220.                     MakeFormula = 360 / dbl_TemValue
  221.                 End Select
  222.             End With
  223.         Else
  224.             MakeFormula = 0
  225.         End If
  226.         
  227.     Case "营业周期"
  228.         MakeFormula = 360 * ((GetPeriodValueInc("产品销售收入", False) / (GetPeriodValue("应收账款净额", True) + GetPeriodValue("应收票据", True))) + (GetPeriodValue("存货", True) / GetPeriodValueInc("产品销售成本", False)))
  229.         
  230.     Case "流动资产周转率"
  231.         dbl_TemValue = GetPeriodValue("流动资产合计", True)
  232.         If dbl_TemValue <> 0 Then
  233.             MakeFormula = GetPeriodValueInc("产品销售收入", False) / dbl_TemValue
  234.         Else
  235.             MakeFormula = 0
  236.         End If
  237.     Case "资产负债率"
  238.         dbl_TemValue = GetPeriodValue("资产合计", False)
  239.         If dbl_TemValue <> 0 Then
  240.             MakeFormula = GetPeriodValue("负债合计", False) / dbl_TemValue
  241.         Else
  242.             MakeFormula = 0
  243.         End If
  244.     Case "产权比率"
  245.         dbl_TemValue = GetPeriodValue("所有者权益合计", False)
  246.         If dbl_TemValue <> 0 Then
  247.             MakeFormula = GetPeriodValue("负债合计", False) / dbl_TemValue
  248.         Else
  249.             MakeFormula = 0
  250.         End If
  251.     Case "销售毛利率"
  252.         dbl_TemValue = GetPeriodValueInc("产品销售收入", False)
  253.         If dbl_TemValue <> 0 Then
  254.             MakeFormula = (GetPeriodValueInc("产品销售收入", False) - GetPeriodValueInc("产品销售成本", False)) / dbl_TemValue
  255.         Else
  256.             MakeFormula = 0
  257.         End If
  258.     Case "销售净利率"
  259.         dbl_TemValue = GetPeriodValueInc("产品销售收入", False)
  260.         If dbl_TemValue <> 0 Then
  261.             MakeFormula = GetPeriodValueInc("净利润", False) / dbl_TemValue
  262.         Else
  263.             MakeFormula = 0
  264.         End If
  265.     Case "销售成本毛利率"
  266.         dbl_TemValue = GetPeriodValueInc("产品销售成本", False)
  267.         If dbl_TemValue <> 0 Then
  268.             MakeFormula = (GetPeriodValueInc("产品销售收入", False) - dbl_TemValue) / dbl_TemValue
  269.         Else
  270.             MakeFormula = 0
  271.         End If
  272.     Case "销售成本净利率"
  273.         dbl_TemValue = GetPeriodValueInc("产品销售成本", False)
  274.         If dbl_TemValue <> 0 Then
  275.             MakeFormula = GetPeriodValueInc("净利润", False) / dbl_TemValue
  276.         Else
  277.             MakeFormula = 0
  278.         End If
  279.     Case "总资产报酬率"
  280.         dbl_TemValue = GetPeriodValue("资产合计", True)
  281.         If dbl_TemValue <> 0 Then
  282.             MakeFormula = (GetPeriodValueInc("利润总额", False) + GetPeriodValueInc("财务费用", False)) / dbl_TemValue
  283.         Else
  284.             MakeFormula = 0
  285.         End If
  286.     Case "净值报酬率"
  287.         dbl_TemValue = GetPeriodValue("所有者权益合计", True)
  288.         If dbl_TemValue <> 0 Then
  289.             MakeFormula = (GetPeriodValueInc("净利润", False) + GetPeriodValueInc("财务费用", False)) / dbl_TemValue
  290.         Else
  291.             MakeFormula = 0
  292.         End If
  293.     Case "每股收益"
  294.         dbl_TemValue = Val(Zbfx_BaseGuideLineSeach.lrText(0).Text)
  295.         If dbl_TemValue <> 0 Then
  296.             MakeFormula = GetPeriodValueInc("净利润", False) / dbl_TemValue
  297.         Else
  298.             MakeFormula = 0
  299.         End If
  300.     Case "市盈率"
  301.         dbl_TemValue = Val(Zbfx_BaseGuideLineSeach.lrText(2).Text)
  302.         If dbl_TemValue <> 0 Then
  303.             MakeFormula = Val(Zbfx_BaseGuideLineSeach.lrText(1).Text) / dbl_TemValue
  304.         Else
  305.             MakeFormula = 0
  306.         End If
  307.     Case "每股账面价值"
  308.         dbl_TemValue = Val(Zbfx_BaseGuideLineSeach.lrText(0).Text)
  309.         If dbl_TemValue <> 0 Then
  310.             MakeFormula = (GetPeriodValueInc("股东权益总额", False) - Val(Zbfx_BaseGuideLineSeach.lrText(3).Text)) / dbl_TemValue
  311.         Else
  312.             MakeFormula = 0
  313.         End If
  314.     Case "产权比率"
  315.         dbl_TemValue = GetPeriodValue("股东权益总额", False)
  316.         If dbl_TemValue <> 0 Then
  317.             MakeFormula = (GetPeriodValue("负债总额", False) + GetPeriodValueInc("财务费用", False)) / dbl_TemValue
  318.         Else
  319.             MakeFormula = 0
  320.         End If
  321.     Case "净值报酬率"
  322.         dbl_TemValue = GetPeriodValue("股东权益总额", True)
  323.         If dbl_TemValue <> 0 Then
  324.             MakeFormula = GetPeriodValue("净利润", False) / dbl_TemValue
  325.         Else
  326.             MakeFormula = 0
  327.         End If
  328.     Case "每股净资产"
  329.         dbl_TemValue = Val(Zbfx_BaseGuideLineSeach.lrText(0).Text)
  330.         If dbl_TemValue <> 0 Then
  331.             MakeFormula = GetPeriodValue("股东权益总额", False) / dbl_TemValue
  332.         Else
  333.             MakeFormula = 0
  334.         End If
  335.     End Select
  336. End Function
  337. Private Function GetPeriodValue(ByVal strItem As String, ByVal bPingJun As Boolean) As Double
  338.     '按年、按月、按季
  339.     If DEBUG_FLAG = False Then On Error Resume Next
  340.     If myDate = FIRST_DATE Then             '年初
  341.         GetPeriodValue = clsmyBal.GetFristValue(strItem, Xtyear)
  342.     Else
  343.         With Zbfx_BaseGuideLineSeach
  344.             Select Case .Combo_Type.ListIndex
  345.             Case 0                          '按年
  346.                 If bPingJun = True Then
  347.                     GetPeriodValue = clsmyBal.GetAveragePeriodValue(strItem, 1, 12, iThisYear)
  348.                 Else
  349.                     GetPeriodValue = clsmyBal.GetPeriodValue(strItem, 12, iYear)
  350.                 End If
  351.             Case 1                          '按月
  352.                 If bPingJun = True Then
  353.                     GetPeriodValue = clsmyBal.GetAveragePeriodValue(strItem, iThisMonthBegin, iThisMonthEnd, iThisYear)
  354.                 Else
  355.                     GetPeriodValue = clsmyBal.GetPeriodValue(strItem, iMonthEnd, iYear)
  356.                 End If
  357.             Case 2                          '按季
  358.                 If bPingJun = True Then
  359.                     GetPeriodValue = clsmyBal.GetAveragePeriodValue(strItem, iThisMonthBegin, iThisMonthEnd, iThisYear)
  360.                 Else
  361.                     GetPeriodValue = clsmyBal.GetPeriodValue(strItem, iMonthEnd, iYear)
  362.                 End If
  363.             End Select
  364.         End With
  365.     End If
  366. End Function
  367. Private Function GetPeriodValueInc(ByVal strItem As String, ByVal bPingJun As Boolean) As Double
  368.     '按年、按月、按季
  369.     If DEBUG_FLAG = False Then On Error Resume Next
  370.     If myDate = FIRST_DATE Then             '年初
  371.         GetPeriodValueInc = clsmyBal.GetFristValue(strItem, Xtyear)
  372.     Else
  373.         With Zbfx_BaseGuideLineSeach
  374.             Select Case .Combo_Type.ListIndex
  375.             Case 0                          '按年
  376.                 If bPingJun = True Then
  377.                     GetPeriodValueInc = clsmyInc.GetAveragePeriodValue(strItem, 1, 12, iThisYear)
  378.                 Else
  379.                     GetPeriodValueInc = clsmyInc.GetPeriodValue(strItem, 1, 12, iYear)
  380.                 End If
  381.             Case 1                          '按月
  382.                 If bPingJun = True Then
  383.                     GetPeriodValueInc = clsmyInc.GetAveragePeriodValue(strItem, iThisMonthBegin, iThisMonthEnd, iThisYear)
  384.                 Else
  385.                     GetPeriodValueInc = clsmyInc.GetPeriodValue(strItem, iMonthBegin, iMonthEnd, iYear)
  386.                 End If
  387.             Case 2                          '按季
  388.                 If bPingJun = True Then
  389.                     GetPeriodValueInc = clsmyInc.GetAveragePeriodValue(strItem, iThisMonthBegin, iThisMonthEnd, iThisYear)
  390.                 Else
  391.                     GetPeriodValueInc = clsmyInc.GetPeriodValue(strItem, iMonthBegin, iMonthEnd, iYear)
  392.                 End If
  393.             End Select
  394.         End With
  395.     End If
  396. End Function
  397. Private Sub Class_Terminate()
  398.     If DEBUG_FLAG = False Then On Error Resume Next
  399.     If SumRs.State = adStateOpen Then SumRs.Close
  400.     If CodeRs.State = adStateOpen Then CodeRs.Close
  401.     If BalRs.State = adStateOpen Then BalRs.Close
  402.     If IncRs.State = adStateOpen Then IncRs.Close
  403.     If TagRs.State = adStateOpen Then TagRs.Close
  404.     Set CodeRs = Nothing
  405.     Set SumRs = Nothing
  406.     Set BalRs = Nothing
  407.     Set IncRs = Nothing
  408.     Set TagRs = Nothing
  409.     
  410.     Set codeColl = Nothing
  411.     
  412.     Set clsmyBal = Nothing
  413.     Set clsmyInc = Nothing
  414. End Sub