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

企业管理

开发平台:

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 = "clsPro"
  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 costCode = &H100
  25. Private Const comeInCode = &H200
  26. Private Enum FLAG_CODE
  27.     COST_CODE = costCode
  28.     COMEIN_CODE = comeInCode
  29. End Enum
  30. Private SumRs As New ADODB.Recordset '科目总帐表记录集
  31. Private ProRs As New ADODB.Recordset '产品毛利率设置表
  32. Private iCompYear As Integer '比较期年
  33. Private iCompMonth As Integer  '比较期月
  34. Private iThisMonth As Integer '本年月
  35. Private iThisThreeMonthBegin As Integer '本年查询季开始
  36. Private iThisThreeMonthEnd As Integer '本年查询季结束
  37. Private myCode As FLAG_CODE
  38. Private strSubExp As String '当前资产负债表公式,用来保存用户设定的公式
  39. Public iRecordCount As Integer '数组记录条数
  40. Public iSeachType As Integer 'year or month or day ?
  41. Private codeColl As New Collection  '公式中的科目集合
  42. Private Sub Class_Initialize()
  43.     If DEBUG_FLAG = False Then On Error Resume Next
  44.     Set ProRs = Cw_DataEnvi.DataConnect.Execute("select * from cwfx_ProductGrossProfitSet") '产品毛利率设置表
  45.     Call GetParm
  46. End Sub
  47. Private Sub GetParm()
  48.     '得到查询参数
  49.     If DEBUG_FLAG = False Then On Error Resume Next
  50.     With Zbfx_ProFxSeach
  51.         Select Case .Combo_Type.ListIndex
  52.         Case 0 '按年
  53.             
  54.         Case 1 '按月
  55.             iThisMonth = CInt(Right(.Combo_BaseDate.Text, 2))
  56.         Case 2 '按季
  57.             iThisThreeMonthBegin = Mid(.Combo_BaseDate.Text, 6, 2)
  58.             iThisThreeMonthEnd = CInt(Right(.Combo_BaseDate.Text, 2))
  59.         End Select
  60.     End With
  61. End Sub
  62. Public Function MakeData() As Boolean
  63.     '此过程为公共接口
  64.     If DEBUG_FLAG = False Then On Error Resume Next
  65.     Dim i As Integer
  66.     iRecordCount = ProRs.RecordCount - 1
  67.     If iRecordCount < 0 Then
  68.         MakeData = False
  69.         Exit Function
  70.     End If
  71.     ReDim ProArry(iRecordCount)
  72.     
  73.     For i = 0 To iRecordCount
  74.         With ProRs
  75.             ProArry(i).strName = Trim(!Name)
  76.             myCode = COMEIN_CODE '设置标志:收入科目
  77.             ProArry(i).sigComeIn = GetVal(Trim(!InComeCode))
  78.             myCode = COST_CODE '设置标志:成本科目
  79.             ProArry(i).sigCost = GetVal(Trim(!costCode))
  80.             ProArry(i).sigMaoLi = ProArry(i).sigComeIn - ProArry(i).sigCost
  81.             If ProArry(i).sigComeIn <> 0 Then
  82.                 ProArry(i).sigMaoLiLv = (ProArry(i).sigMaoLi / ProArry(i).sigComeIn) * 100
  83.             Else
  84.                 ProArry(i).sigMaoLiLv = 0
  85.             End If
  86.             .MoveNext
  87.         End With
  88.     Next
  89.     MakeData = True
  90. End Function
  91. Private Function GetVal(ByVal strItem As String) As Long
  92.     If DEBUG_FLAG = False Then On Error Resume Next
  93.     Dim sigReturn As Long '返回数
  94.     Dim strTem As String
  95.     Dim iLen As Integer
  96.     Dim iWordBegin As Integer
  97.     Dim iWordEnd As Integer
  98.     Dim i As Integer
  99.     Dim j As Integer
  100.     Dim strSql As String
  101.     
  102.     strSubExp = strItem '公式
  103.     
  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.         'iWordEnd = i - 1
  114.         If strTem = "+" Or strTem = "-" Or i = iLen Then
  115.             strTem = Mid(strSubExp, iWordBegin, i - iWordBegin + 1)
  116.             strTem = IIf(Right(strTem, 1) = "+" Or Right(strTem, 1) = "-", Left(strTem, Len(strTem) - 1), strTem)
  117.             '用SQL语句,找出科目代码及期间相符的记录
  118.             '下一步再加入对年/月/季的选择
  119.             If SumRs.State = adStateOpen Then SumRs.Close
  120.             strSql = MakeSQL(strTem)
  121.             Set SumRs = Cw_DataEnvi.DataConnect.Execute(strSql)
  122.             '=============================
  123.             If Not (SumRs.EOF And SumRs.BOF) Then
  124.                 '如果是收入则
  125.                 If myCode = COMEIN_CODE Then
  126.                     sigReturn = sigReturn + IIf(IsNull(SumRs!dje), 0, SumRs!dje)
  127.                 ElseIf myCode = COST_CODE Then  '是成本则
  128.                     sigReturn = sigReturn + IIf(IsNull(SumRs!jje), 0, SumRs!jje)
  129.                 End If
  130.             End If
  131.             
  132.             '---------------------------
  133.             iWordBegin = i + 1
  134.         End If
  135.     Next
  136.     '-----------------------------------------------
  137.     
  138.     GetVal = sigReturn
  139. End Function
  140. Private Function MakeSQL(ByVal strItem As String) As String
  141.     '根据查询条件,生成SQL语句
  142.     If DEBUG_FLAG = False Then On Error Resume Next
  143.     Dim strTemSql As String
  144.     '---------------------------------------------------------------------------
  145.     strTemSql = ""
  146.     Select Case Zbfx_ProFxSeach.Combo_Type.ListIndex
  147.     Case 0 '按年
  148.         strTemSql = "SELECT Sum(Mjje) as jje,Sum(Mdje) as dje FROM Cwzz_AccSum WHERE cCode='" & strItem & "' AND  Year=" & Xtyear
  149.     Case 1 '按月
  150.         strTemSql = "SELECT Mjje as jje,Mdje as dje FROM Cwzz_AccSum WHERE Period=" & iThisMonth & " AND cCode='" & strItem & "' AND  Year=" & Xtyear
  151.     Case 2 '按季
  152.         strTemSql = "SELECT Sum(Mjje) as jje,Sum(Mdje) as dje FROM Cwzz_AccSum WHERE Period  Between " & iThisThreeMonthBegin & " AND " & iThisThreeMonthEnd & " AND cCode='" & strItem & "' AND Year=" & Xtyear
  153.     End Select
  154.     '-----------------------------------------------------------------------------
  155.     MakeSQL = strTemSql
  156. End Function
  157. Private Sub Class_Terminate()
  158.     If DEBUG_FLAG = False Then On Error Resume Next
  159.     If SumRs.State = adStateOpen Then SumRs.Close
  160.     If ProRs.State = adStateOpen Then ProRs.Close
  161.     
  162.     Set SumRs = Nothing
  163.     Set ProRs = Nothing
  164.     
  165.     Set codeColl = Nothing
  166.     
  167. End Sub