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

企业管理

开发平台:

Visual Basic

  1. Attribute VB_Name = "XtsyModule"
  2. '*********************************************************************
  3. '*    模 块 名 称 :财务分析私有模块
  4. '*    功 能 描 述 :
  5. '*    程序员姓名  :魏永生
  6. '*    最后修改人  :
  7. '*    最后修改时间:2002/1/21
  8. '*    备        注:程序中所有依实际情况自定义部分均用[>>  <<]括起
  9. '*
  10. '*********************************************************************
  11. '系统私有模块用来放置一些子系统独有的过程与函数
  12. Public str_Code As String                               '存储列内容参数
  13. '/*
  14. '-------------------bsj-------------------------------------
  15. Public Const DEBUG_FLAG = False '  调试标志,发布时设为false
  16. Public Type TAG_TYPE
  17.     strType As String '指标类别
  18.     strName As String '指标名称
  19.     strUnit As String '单位
  20.     sigCurrentV As Double '本期实际数据
  21.     sigYearBeginV As Double '本年年初数据
  22.     strTagAdd1 As String '指标增减
  23.     strCompDate As String '比较期间
  24.     sigComPareV As Single '比较期数据
  25.     strTagAdd2 As String '指标增减
  26. End Type
  27. Public TagArry() As TAG_TYPE  '自定义数组
  28. Public Type PRO_TYPE
  29.     strName As String '产品名称
  30.     sigComeIn As Double '销售收入
  31.     sigCost As Double '销售成本
  32.     sigMaoLi As Double '销售毛利
  33.     sigMaoLiLv As Double '销售毛利率
  34. End Type
  35. Public ProArry() As PRO_TYPE  '自定义数组(产品毛利分析)
  36. Public Type ITE_TYPE
  37.     strItemClass As String '项目大类
  38.     strItemName As String '项目名称
  39.     lngInCome As Double '项目收入
  40.     lngCost As Double ' 项目成本
  41.     lngMaoLi As Double '项目毛利
  42.     lngMaoLiLv As Double '项目毛利率
  43. End Type
  44. Public IteArry() As ITE_TYPE  '自定义数组(项目毛利分析)
  45. Public mySeachForm As New Bbfx_SelDate
  46. '----------------------------------------------------------
  47. Public g_code As String             '传递单据号
  48. Public g_status As String           '传递单据状态
  49. Public g_help_infor() As String     '用以返回帮助窗体的信息
  50. Public m, n As Long                 '公用计数器
  51. Public StrString As String
  52. '在预算设置中使用
  53. Public Str_DeptCode                                '预算部门代码
  54. Public Str_DeptName                                '预算部门名称
  55. Public Str_ItemCode                                '项目代码
  56. Public Str_ItemName                                '项目名称
  57. Public Str_ItemClassCode                           '项目类别代码
  58. Public Str_ItemClassName                           '项目类别名称
  59. Public Str_Ccode As String                         '预算科目
  60. Public Int_OriYear As Integer                      '条件选择的会计年度
  61. Public Int_Month As Integer                        '月份
  62. Public Str_Show As String                          '追加金额提示信息
  63. Public Str_TableAdd As String                      '追加金额表名
  64. Public Cur_TableAdd As Currency                    '追加金额表合计值回写主表单元格
  65. Public Int_I_Id As Integer                         '主表记录标识,供从表使用
  66. Public Str_Title As String                         '从表标题
  67. Public Str_ReportSubTitle As String                '从表子标题
  68. Public Frm_AnalysisC As Form                       '预算分析查询条件窗体
  69. Public Frm_AnalysisA As Form                       '预算分析查询结果窗体
  70. 'Public Str_ReportSubTitle As String               '预算分析表子标题,使用上面定义的变量
  71. 'Public Str_Title As String                        '预算分析表主标题,使用上面定义的变量
  72. Public str_BudgetProc As String                    '预算分析存贮过程字串
  73. Public str_AnalysisProc As String                  '预算分析存贮过程字串
  74. Public bln_FrmBudgetA As Boolean                   '代表窗体是否已经存在
  75. Public Function FnBln_RefreshArray(int_StartCol As Long, int_FinishCol As Long, GridStr() As String, GridInf()) As Boolean
  76.     '功能:实现网格的列移动
  77.     '说明:本函数是在模式工程的基础上创建的,请确认你的窗体中的网格是通过
  78.     '     BzWgcsh(CxbbGrid, GridCode, GridInf(), GridBoolean(), GridInt(), GridStr()) 函数来定义的
  79.     '参数:int_StartCol——网格开始移动列
  80.     '参数:int_FinishCol——网格移动结束列
  81.     '参数:GridStr()——网格的信息数组
  82.     '思路:对于要移动的网格来说,所有的信息都保存在几个系统数组中,其中GridStr()数组保存着逻辑定位和
  83.     '       物理定位之间的转换关系,使我们可以通过逻辑值找到物理值,由于我们通常通过逻辑值来定位网格的
  84.     '       物理列(sydz(zdbmte as String,GridStr() as String,szzls as Integer)函数),所以我们只需要
  85.     '       改变GridStr()数组中物理列和逻辑列之间的对应关系,从而达到改变列的目的。
  86.     '扩展:虽然本程序只是针对数据显示网格而作,但是此程序给大家提供了一个思路,通过交换GridBoolean()、
  87.     ' GridInt()、网格列标题wglbt()等数组,就可以实现输入的列移动
  88.     On Error GoTo Err_Ctrl
  89.     
  90.     Dim int_Temp As Integer
  91.     Dim str_temp() As String '用来保存移动开始列的GridStr()信息
  92.     Dim i, j As Long
  93.     
  94.     
  95.     
  96.     '保存移动开始列的GridStr()信息
  97.     ReDim str_temp(0, UBound(GridStr, 2))
  98.     For j = 1 To UBound(GridStr, 2)
  99.         str_temp(0, j) = GridStr(int_StartCol, j)
  100.     Next
  101.     '[[在此加入你的代码,保存当前开始移动列的其他信息]]
  102.     
  103.     '依次移动各列的信息
  104.     If int_StartCol < int_FinishCol Then
  105.         For i = int_StartCol To int_FinishCol - 1
  106.             For j = 1 To UBound(GridStr, 2)
  107.                 GridStr(i, j) = GridStr(i + 1, j)
  108.             Next j
  109.         Next i
  110.     Else
  111.         For i = int_StartCol To int_FinishCol + 1 Step -1
  112.             For j = 1 To UBound(GridStr, 2)
  113.                 GridStr(i, j) = GridStr(i - 1, j)
  114.             Next j
  115.         Next i
  116.     End If
  117.     '[[在此加入你的代码,依照上面的代码格式,移动列的其他信息]]
  118.     
  119.     '恢复开始移动列的信息到结束列上
  120.     For j = 1 To UBound(GridStr, 2)
  121.         GridStr(int_FinishCol, j) = str_temp(0, j)
  122.     Next j
  123.     
  124.     '[[在此加入你的代码,恢复开始移动列的其他信息到结束列上]]
  125.     
  126.     FnBln_RefreshArray = True
  127.     
  128. Err_Ctrl:
  129.     FnBln_RefreshArray = False
  130. End Function
  131. Public Function Sfyxzx() As Boolean                                '判断是否允许执行某项功能
  132.     Dim Ztxxrec As New ADODB.Recordset
  133.     Dim Tsxx As String
  134.     Sfyxzx = False
  135.     Set Ztxxrec = Cw_DataEnvi.DataConnect.Execute("Select * From Gdzc_ztxx")
  136.     With Ztxxrec
  137.         If Not .EOF Then
  138.             If (Xtyear <> .Fields("ztdqyear")) Or (Xtmm <> .Fields("ztdqmm")) Then
  139.                 Tsxx = "选择期间非帐套当前会计期间,此项功能模块不能使用!"
  140.                 Call Xtxxts(Tsxx, 0, 4)
  141.                 Exit Function
  142.             Else
  143.                 If .Fields("sfjtzj") Then
  144.                     Tsxx = "当前会计期间已计提折旧,此项功能模块不能使用!"
  145.                     Tsxx = Tsxx + Chr(10) + "请先将本月执行月末结帐!"
  146.                     Call Xtxxts(Tsxx, 0, 4)
  147.                     Exit Function
  148.                 End If
  149.             End If
  150.         End If
  151.     End With
  152.     Sfyxzx = True
  153. End Function
  154. '*/
  155. Public Sub Drxtztcs()                                   '读入系统帐套参数
  156.     
  157.     Dim Ztcsbrec As New ADODB.Recordset
  158.     Dim RecTemp As New ADODB.Recordset
  159.     Dim SqlStr As String
  160.     
  161.     With Ztcsbrec
  162.         '金额总位数
  163.         .Open "Select * From Gy_AccInformation Where SystemCode='Cwzz'", Cw_DataEnvi.DataConnect, adOpenDynamic, adLockOptimistic
  164.         .MoveFirst
  165.         .Find "itemcode='cwjezws'"
  166.         If Not Ztcsbrec.EOF Then
  167.             Xtjezws = Val(Trim(Ztcsbrec.Fields("itemvalue")))
  168.         End If
  169.         
  170.         '数量总位数
  171.         .MoveFirst
  172.         .Find "itemcode='cwslzws'"
  173.         If Not Ztcsbrec.EOF Then
  174.             Xtslzws = Val(Trim(Ztcsbrec.Fields("itemvalue")))
  175.         End If
  176.         
  177.         '单价总位数
  178.         .MoveFirst
  179.         .Find "itemcode='cwdjzws'"
  180.         If Not Ztcsbrec.EOF Then
  181.             Xtdjzws = Val(Trim(Ztcsbrec.Fields("itemvalue")))
  182.         End If
  183.         
  184.         '金额小数位数
  185.         .MoveFirst
  186.         .Find "itemcode='cwjexsws'"
  187.         If Not Ztcsbrec.EOF Then
  188.             Xtjexsws = Val(Trim(Ztcsbrec.Fields("itemvalue")))
  189.         End If
  190.         
  191.         '数量小数位数
  192.         .MoveFirst
  193.         .Find "itemcode='cwslxsws'"
  194.         If Not Ztcsbrec.EOF Then
  195.             Xtslxsws = Val(Trim(Ztcsbrec.Fields("itemvalue")))
  196.         End If
  197.         
  198.         '单价小数位数
  199.         .MoveFirst
  200.         .Find "itemcode='cwdjxsws'"
  201.         If Not Ztcsbrec.EOF Then
  202.             Xtdjxsws = Val(Trim(Ztcsbrec.Fields("itemvalue")))
  203.         End If
  204.         .Close
  205.     End With
  206.     
  207. End Sub
  208. Public Sub fill_tv(tv As TreeView, flbm As ADODB.Recordset, field1 As String, field2 As String, bmjc_bz As Boolean, tree_name As String, Treeprant As String, Treechr As String)
  209.     '---------------------------------------------
  210.     '填充TREEVIEW
  211.     Dim fllb, lsbl(), lsbl1(), remlayer, nodX, tem, count
  212.     On Error GoTo ERRORCL
  213.     tv.Nodes.Clear
  214.     flbm.Requery
  215.     If flbm.EOF Then
  216.         Set nodX = tv.Nodes.Add(, 4, "r", tree_name, Treeprant)
  217.         Exit Sub
  218.     Else
  219.         Set nodX = tv.Nodes.Add(, 4, "r", tree_name, Treeprant)
  220.     End If
  221.     flbm.MoveFirst
  222.     count = 1
  223.     If bmjc_bz Then
  224.         Do While Not flbm.EOF
  225.             fllb = "(" + Trim(flbm.Fields(field1)) + ")" + Trim(flbm.Fields(field2))
  226.             remlayer = flbm.Fields("code_level")
  227.             tem = Trim(flbm.Fields(field1))
  228.             Select Case remlayer
  229.             Case 1
  230.                 ReDim Preserve lsbl(remlayer)
  231.                 ReDim Preserve lsbl1(remlayer)
  232.                 lsbl(remlayer) = "p" & tem
  233.                 Set nodX = tv.Nodes.Add("r", 4, lsbl(remlayer), fllb, Treechr)
  234.             Case 2
  235.                 ReDim Preserve lsbl1(remlayer)
  236.                 ReDim Preserve lsbl1(remlayer)
  237.                 lsbl1(remlayer) = "p" & tem
  238.                 Set nodX = tv.Nodes.Add(lsbl(remlayer - 1), tvwChild, lsbl1(remlayer), fllb)
  239.             Case 3
  240.                 ReDim Preserve lsbl(remlayer)
  241.                 ReDim Preserve lsbl1(remlayer)
  242.                 lsbl(remlayer) = lsbl1(remlayer - 1)
  243.                 lsbl1(remlayer) = "p" & tem
  244.                 Set nodX = tv.Nodes.Add(lsbl(remlayer), tvwChild, lsbl1(remlayer), fllb)
  245.             Case Else
  246.                 ReDim Preserve lsbl(remlayer)
  247.                 ReDim Preserve lsbl1(remlayer)
  248.                 lsbl(remlayer) = lsbl1(remlayer - 1)
  249.                 lsbl1(remlayer) = "p" & tem
  250.                 Set nodX = tv.Nodes.Add(lsbl(remlayer), tvwChild, lsbl1(remlayer), fllb)
  251.             End Select
  252.             tv.Nodes(count).Expanded = True
  253.             count = count + 1
  254.             flbm.MoveNext
  255.         Loop
  256.     Else
  257.         Do While Not flbm.EOF
  258.             fllb = "(" + Trim(flbm.Fields(field1)) + ")" + Trim(flbm.Fields(field2))
  259.             tem = Trim(flbm.Fields("flbm"))
  260.             lsbl(remlayer) = "p" & tem
  261.             Set nodX = tv.Nodes.Add(, 4, lsbl(remlayer), fllb)
  262.             flbm.MoveNext
  263.         Loop
  264.     End If
  265.     Exit Sub
  266. ERRORCL:
  267.     MsgBox "程序出现错误", vbExclamation, title_bar
  268.     Exit Sub
  269. End Sub
  270. Public Sub BalFx(ByVal strItem As String, Optional sHelpID As String)
  271.     If DEBUG_FLAG = False Then On Error Resume Next
  272.     '此过程由系统主面板,树型菜单在单击“资产负债表分析”时调用,参数为模块标识
  273.     '财务分析-资产负债表分析
  274.     'BBFX_FrmBalFx.Show
  275.     
  276.     Dim temRs As New ADODB.Recordset
  277.     Dim mySeachForm As New Bbfx_SelDate
  278.     mySeachForm.Show vbModal
  279.     If mySeachForm.bSeach = True Then '如果单击查询窗体的“确定”按钮则:
  280.         Set temRs = Cw_DataEnvi.DataConnect.Execute("SELECT gnmc FROM xt_xtgnb where gnsy='" & strItem & "'")
  281.         DoEvents
  282.         With Bbfx_FrmBalFx
  283.             If DEBUG_FLAG = False Then
  284.                 XT_Wait.Show
  285.                 XT_Wait.Refresh
  286.             End If
  287.             DoEvents
  288.             .Caption = "资产负债表分析-" & Trim(temRs!gnmc)
  289.             .TsLabel(4).Caption = "资产负债表分析(" & Trim(temRs!gnmc) & ")"
  290.             .intType = mySeachForm.intType '传递查询参数
  291.             .strBegin = mySeachForm.strBegin '
  292.             .strEnd = mySeachForm.strEnd
  293.             .strItem = strItem
  294.             .bSeach = mySeachForm.bSeach
  295.             .HelpContextID = sHelpID
  296.             Call .FormInit
  297.             .Show '并显示窗体
  298.             If DEBUG_FLAG = False Then
  299.                 XT_Wait.Hide
  300.             End If
  301.             
  302.         End With
  303.     End If
  304.     '否则(即击“取消”按钮)退出过程
  305. End Sub
  306. Public Sub BalFx2(ByVal strItem As String, Optional sHelpID As String)
  307.     If DEBUG_FLAG = False Then On Error Resume Next
  308.     '此过程由系统主面板,树型菜单在单击“资产负债表分析”时调用,参数为模块标识
  309.     '财务分析-资产负债表分析
  310.     'BBFX_FrmBalFx.Show
  311.     
  312.     Dim mySeachForm As New Bbfx_SelDate2
  313.     
  314.     
  315.     Dim temRs As New ADODB.Recordset
  316.     mySeachForm.Show vbModal
  317.     If mySeachForm.bSeach = True Then '如果单击查询窗体的“确定”按钮则:
  318.         Set temRs = Cw_DataEnvi.DataConnect.Execute("SELECT gnmc FROM xt_xtgnb where gnsy='" & strItem & "'")
  319.         With Bbfx_FrmBalFx2
  320.             If DEBUG_FLAG = False Then
  321.                 XT_Wait.Show
  322.                 XT_Wait.Refresh
  323.             End If
  324.             DoEvents
  325.             .Caption = "资产负债表分析-" & Trim(temRs!gnmc)
  326.             .TsLabel(4).Caption = "资产负债表分析(" & Trim(temRs!gnmc) & ")"
  327.             .intType = mySeachForm.intType '传递查询参数
  328.             '----------------------时间传递-----------------
  329.             .iThisYear = mySeachForm.iThisYear
  330.             .iThisMonthBegin = mySeachForm.iThisMonthBegin
  331.             .iThisMonthEnd = mySeachForm.iThisMonthEnd
  332.             .iCompYear = mySeachForm.iCompYear
  333.             .iCompMonthBegin = mySeachForm.iCompMonthBegin
  334.             .iCompMonthEnd = mySeachForm.iCompMonthEnd
  335.             .bSeach = mySeachForm.bSeach
  336.             .HelpContextID = sHelpID
  337.             
  338.             '------------------------------------------------
  339.             .strItem = strItem
  340.             Call .FormInit
  341.             
  342.             
  343.             
  344.             .Show '并显示窗体
  345.             If DEBUG_FLAG = False Then
  346.                 XT_Wait.Hide
  347.                 ' .Enabled = True
  348.             End If
  349.         End With
  350.     Else
  351.         Bbfx_FrmBalFx2.bSeach = False
  352.     End If
  353.     '否则(即击“取消”按钮)退出过程
  354. End Sub
  355. Public Sub IncFx(ByVal strItem As String, Optional sHelpID As String)
  356.     '负债表分析
  357.     If DEBUG_FLAG = False Then On Error Resume Next
  358.     Dim mySeachForm1 As New Bbfx_SelDate
  359.     Dim mySeachForm2 As New Bbfx_SelDate2
  360.     Dim temRs As New ADODB.Recordset
  361.     Select Case strItem
  362.     Case "cwfx_IncJds", "cwfx_IncDj", "cwfx_IncHb" '绝对数、定基、环比
  363.         mySeachForm1.Show vbModal
  364.     Case "cwfx_IncDb", "cwfx_IncJg" '对比、结构
  365.         mySeachForm2.Show vbModal
  366.     End Select
  367.     
  368.     If mySeachForm1.bSeach = True Or mySeachForm2.bSeach = True Then
  369.         '-----根据不同参数给不同窗体赋值------------------------
  370.         
  371.         Select Case strItem
  372.         Case "cwfx_IncJds", "cwfx_IncDj", "cwfx_IncHb" '绝对数、定基、环比
  373.             With Bbfx_FrmIncFx
  374.                 .iThisYear = mySeachForm1.iThisYear
  375.                 .iCompYear = mySeachForm1.iCompYear
  376.                 .intType = mySeachForm1.intType
  377.                 .iThisMonthBegin = mySeachForm1.iThisMonthBegin
  378.                 .iThisMonthEnd = mySeachForm1.iThisMonthEnd
  379.                 .strBegin = mySeachForm1.strBegin
  380.                 .strEnd = mySeachForm1.strEnd
  381.                 .bSeach = mySeachForm1.bSeach
  382.                 .HelpContextID = sHelpID
  383.                 
  384.             End With
  385.         Case "cwfx_IncDb", "cwfx_IncJg" '对比、结构
  386.             With Bbfx_FrmIncFx
  387.                 .iThisYear = mySeachForm2.iThisYear
  388.                 .intType = mySeachForm2.intType
  389.                 .iThisMonthBegin = mySeachForm2.iThisMonthBegin
  390.                 .iThisMonthEnd = mySeachForm2.iThisMonthEnd
  391.                 .iCompYear = mySeachForm2.iCompYear
  392.                 .iCompMonthBegin = mySeachForm2.iCompMonthBegin
  393.                 .iCompMonthEnd = mySeachForm2.iCompMonthEnd
  394.                 .bIFComp = mySeachForm2.chk_ComSel.Value
  395.                 If .bIFComp = False Then
  396.                     .iCompMonthBegin = 0
  397.                     .iCompMonthEnd = 0
  398.                 End If
  399.                 If .intType = 1 Then
  400.                     .strBegin = .iThisYear & "." & .iThisMonthBegin & "-" & .iThisYear & "." & .iThisMonthEnd
  401.                     If .bIFComp = True Then
  402.                         .strEnd = .iCompYear & "." & .iCompMonthBegin & "-" & .iCompYear & "." & .iCompMonthEnd
  403.                     Else
  404.                         .strEnd = ""
  405.                     End If
  406.                 Else
  407.                     .strBegin = ""
  408.                     .strEnd = ""
  409.                 End If
  410.                 .bSeach = mySeachForm2.bSeach
  411.                 .HelpContextID = sHelpID
  412.             End With
  413.         End Select
  414.         '---------------------------------------------------------
  415.         With Bbfx_FrmIncFx
  416.             If DEBUG_FLAG = False Then
  417.                 XT_Wait.Show
  418.                 XT_Wait.Refresh
  419.             End If
  420.             DoEvents
  421.             .strItem = strItem
  422.             Set temRs = Cw_DataEnvi.DataConnect.Execute("SELECT gnmc FROM xt_xtgnb where gnsy='" & strItem & "'")
  423.             .Caption = "损益表分析-" & Trim(temRs!gnmc)
  424.             .TsLabel(4).Caption = "损益表分析(" & Trim(temRs!gnmc) & ")"
  425.             
  426.             Call .FormInit
  427.             .Show
  428.             If DEBUG_FLAG = False Then
  429.                 XT_Wait.Hide
  430.             End If
  431.             If temRs.State = adStateOpen Then temRs.Close
  432.         End With
  433.     Else
  434.         Bbfx_FrmIncFx.bSeach = False
  435.     End If
  436. End Sub