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

企业管理

开发平台:

Visual Basic

  1. VERSION 5.00
  2. Begin VB.Form JC_Expressions 
  3.    BorderStyle     =   3  'Fixed Dialog
  4.    Caption         =   "公式选定"
  5.    ClientHeight    =   3075
  6.    ClientLeft      =   45
  7.    ClientTop       =   330
  8.    ClientWidth     =   5550
  9.    Icon            =   "基础设置_公式选定.frx":0000
  10.    LinkTopic       =   "Form1"
  11.    MaxButton       =   0   'False
  12.    MinButton       =   0   'False
  13.    ScaleHeight     =   3075
  14.    ScaleWidth      =   5550
  15.    ShowInTaskbar   =   0   'False
  16.    StartUpPosition =   1  '所有者中心
  17.    Begin VB.OptionButton OptUnAdd 
  18.       Caption         =   "减项"
  19.       Height          =   375
  20.       Left            =   4620
  21.       TabIndex        =   8
  22.       Top             =   1665
  23.       Width           =   840
  24.    End
  25.    Begin VB.OptionButton OptAdd 
  26.       Caption         =   "加项"
  27.       Height          =   270
  28.       Left            =   4650
  29.       TabIndex        =   7
  30.       Top             =   1035
  31.       Value           =   -1  'True
  32.       Width           =   810
  33.    End
  34.    Begin VB.TextBox txtExp 
  35.       Height          =   315
  36.       Left            =   60
  37.       TabIndex        =   5
  38.       Top             =   2235
  39.       Width           =   5385
  40.    End
  41.    Begin VB.CommandButton cmdCancel 
  42.       Caption         =   "取消(&C)"
  43.       Height          =   300
  44.       Left            =   4335
  45.       TabIndex        =   4
  46.       Top             =   2700
  47.       Width           =   1120
  48.    End
  49.    Begin VB.CommandButton cmdOK 
  50.       Caption         =   "确定(&O)"
  51.       Height          =   300
  52.       Left            =   3120
  53.       TabIndex        =   3
  54.       Top             =   2700
  55.       Width           =   1120
  56.    End
  57.    Begin VB.CommandButton cmdSel 
  58.       Caption         =   "选定"
  59.       Height          =   300
  60.       Left            =   4425
  61.       TabIndex        =   2
  62.       Top             =   375
  63.       Width           =   1035
  64.    End
  65.    Begin VB.ListBox LstCodeList 
  66.       Height          =   1500
  67.       ItemData        =   "基础设置_公式选定.frx":1042
  68.       Left            =   60
  69.       List            =   "基础设置_公式选定.frx":1049
  70.       TabIndex        =   1
  71.       Top             =   360
  72.       Width           =   4290
  73.    End
  74.    Begin VB.Label labList 
  75.       AutoSize        =   -1  'True
  76.       BackStyle       =   0  'Transparent
  77.       Caption         =   "---------------"
  78.       Height          =   180
  79.       Left            =   615
  80.       TabIndex        =   6
  81.       Top             =   75
  82.       Width           =   1350
  83.    End
  84.    Begin VB.Label Label1 
  85.       AutoSize        =   -1  'True
  86.       Caption         =   "科目:"
  87.       Height          =   180
  88.       Left            =   60
  89.       TabIndex        =   0
  90.       Top             =   75
  91.       Width           =   540
  92.    End
  93. End
  94. Attribute VB_Name = "JC_Expressions"
  95. Attribute VB_GlobalNameSpace = False
  96. Attribute VB_Creatable = False
  97. Attribute VB_PredeclaredId = True
  98. Attribute VB_Exposed = False
  99. '*************************************************************
  100. '*    模 块 名 称 :基础设置公式选定
  101. '*    功 能 描 述 :提供生成公式
  102. '*    程序员姓名  : 魏永生
  103. '*    最后修改人  :
  104. '*    最后修改时间:2002/01/21
  105. '*    备        注:
  106. '*    提供生成公式:公式设定方法:
  107. '*    系统提示总帐系统的会计科目和编码,用户选择相应的编码确定计算公式。
  108. '*************************************************************
  109. Option Explicit
  110. Public bExpChange As Boolean                '如果确认公式所做的修改 则此值为True
  111.                                             '否则为False
  112. Private Const ME_CAPTION = "公式选定"
  113. Private Const ME_CODE = "cwfx_Expressions"
  114. Private CodeListRs As New ADODB.Recordset
  115. Private Sub cmdCancel_Click()
  116.     Me.bExpChange = False
  117.     Me.Hide
  118.     
  119. End Sub
  120. Private Sub cmdOK_Click()
  121.     If CheckExp = False Then
  122.         Xtxxts "公式不合法!", 0, 1
  123.         Exit Sub
  124.     End If
  125.                                             '返回解析后的公式(正向解析)
  126.     Me.Tag = ExpTranslate(True, txtExp.Text)
  127.     Me.bExpChange = True
  128.     Me.Hide
  129. End Sub
  130. Private Sub cmdSel_Click()
  131.     Call lstCodeList_DblClick               '默认为相加
  132. End Sub
  133. Private Sub Form_Activate()
  134.     With Me
  135.                                             '公式文本框内容为解析后的公式 (反向解析)
  136.         txtExp.Text = ExpTranslate(False, Me.Tag)
  137.         .Tag = ""
  138.         .labList.Caption = ""
  139.         bExpChange = False
  140.         .Caption = ME_CAPTION
  141.         txtExp.SetFocus
  142.         txtExp.SelStart = 0
  143.         txtExp.SelLength = Len(txtExp.Text)
  144.     End With
  145. End Sub
  146. Private Sub Form_Load()
  147.     
  148.     Call FullCodeList                       ' 填充科目列表
  149.     
  150. End Sub
  151. '=================自定义程序开始====================================
  152. Private Function CheckExp() As Boolean
  153.                                             '公式检察,如果公式合法返加TRUE,否则返回FALSE
  154.     Dim strTem As String
  155.     Dim strTem2 As String
  156.     Dim strTemLast As String
  157.     Dim bOK As Boolean                      '公式合法,则为True
  158.     Dim i As Integer
  159.     Dim j As Integer
  160.     Dim codeColl As New Collection          '用于存放科目编码的集合
  161.     Dim iLen As Integer
  162.     Dim iWordBegin As Integer               '用于确定一个科目在字符串中的
  163.     Dim iWordEnd As Integer                 '开始位置和结束位置
  164.     strTem = Trim(txtExp.Text)
  165.     
  166.     
  167.                                             '去除字符串中的不合法字符
  168.     Dim strLastWord As String
  169.     For i = 1 To Len(strTem)
  170.         strTem2 = Mid(strTem, i, 1)
  171.         If strTem2 = "+" And strLastWord = "+" Then
  172.                                             '不合法,去除此字符
  173.         ElseIf strTem2 = "-" And strLastWord = "-" Then
  174.                                             '不合法,去除此字符
  175.         ElseIf strTem2 = "+" And strLastWord = "-" Then
  176.                                             '不合法,去除此字符
  177.         ElseIf strTem2 = "-" And strLastWord = "+" Then
  178.                                             '不合法,去除此字符
  179.         ElseIf strTem2 = " " Then
  180.                                             '不合法,去除此字符
  181.         ElseIf (Asc(strTem2) < Asc("0") Or Asc(strTem2) > Asc("9")) And (strTem2 <> "+" And strTem2 <> "-") Then
  182.                                             '不合法,去除此字符
  183.         Else
  184.             strTemLast = strTemLast & strTem2
  185.         End If
  186.         strLastWord = strTem2
  187.     Next
  188.                                             '去除字符串右边多余的符号
  189.     If Right(strTemLast, 1) = "+" Or Right(strTemLast, 1) = "-" Then
  190.         strTemLast = Left(strTemLast, Len(strTemLast) - 1)
  191.     End If
  192.                                             '去除字符串左边多余的符号
  193.     If Left(strTemLast, 1) = "+" Or Left(strTemLast, 1) = "-" Then
  194.         strTemLast = Right(strTemLast, Len(strTemLast) - 1)
  195.     End If
  196.     txtExp.Text = strTemLast
  197.     
  198.     If strTemLast = "" Then                 '如果公式为空
  199.         CheckExp = True
  200.         Exit Function
  201.     End If
  202.     
  203.     
  204.                                             '得到科目列表集合
  205.     iLen = Len(strTemLast)
  206.     iWordBegin = 1
  207.     iWordEnd = 1
  208.     For i = 1 To iLen
  209.         
  210.         strTem = Mid(strTemLast, i, 1)
  211.         If strTem = "+" Or strTem = "-" Or i = iLen Then
  212.             strTem = Mid(strTemLast, iWordBegin, i - iWordBegin + 1)
  213.             strTem = IIf(Right(strTem, 1) = "+" Or Right(strTem, 1) = "-", Left(strTem, Len(strTem) - 1), strTem)
  214.             codeColl.Add strTem
  215.             iWordBegin = i + 1
  216.         End If
  217.     Next
  218.     
  219.                                             '验公式是否合法
  220.     For i = 1 To codeColl.count
  221.         bOK = False
  222.         For j = 0 To LstCodeList.ListCount
  223.             strTem2 = Trim(Left(LstCodeList.List(j), 20))
  224.             Debug.Print codeColl.Item(i)
  225.             If codeColl.Item(i) = strTem2 Then
  226.                 bOK = True
  227.                 Exit For
  228.             End If
  229.             
  230.         Next
  231.         If bOK = False Then
  232.             CheckExp = bOK
  233.             txtExp.SetFocus
  234.             '----------------------------------------------------------
  235.             '此处代码有待改进,
  236.             'i的值为不合法的科目位置,如i=2则第二个科目不合法。
  237.             '找出第(i-1)个符号与第i个符号之间的字符串,就为不合法字符串
  238.             '“符号”指“+”或“-”
  239.             txtExp.SelStart = InStr(1, strTemLast, codeColl.Item(i)) - 1
  240.             txtExp.SelLength = Len(codeColl.Item(i))
  241.             '---------------------------------------------------
  242.             Exit Function
  243.         End If
  244.     Next
  245.     CheckExp = bOK
  246. End Function
  247. Private Sub FullCodeList()
  248.     Dim strSql As String
  249.     Dim strCodeList As String
  250.     strSql = "SELECT cCode,cClass,cName,EndFlag,cGrade FROM Cwzz_AccCode ORDER BY cCode"
  251.     Set CodeListRs = Cw_DataEnvi.DataConnect.Execute(strSql)
  252.     LstCodeList.Clear
  253.                                             '格式化字符串
  254.     With CodeListRs
  255.         Do Until .EOF
  256.             strCodeList = Trim(CodeListRs!cCode)
  257.             strCodeList = strCodeList & Space(20 - Len(strCodeList))
  258.             strCodeList = strCodeList & Trim(CodeListRs!cName)
  259.             LstCodeList.AddItem strCodeList
  260.             .MoveNext
  261.         Loop
  262.     End With
  263. End Sub
  264. Private Function ExpTranslate(ByVal bWay As Boolean, ByVal strExp As String) As String
  265.     '公式解析过程序,参数bWay为TRUE则为正向解析,由科目代码->文字
  266.     '                          FALSE 为反向解析,由文字->科目代码
  267.     'strExp 为传递的公式字符串
  268.     
  269.     
  270.     ExpTranslate = strExp
  271. End Function
  272. '=================自定义程序结束====================================
  273. Private Sub Form_Unload(Cancel As Integer)
  274.     On Error Resume Next
  275.     CodeListRs.Close
  276.     Set CodeListRs = Nothing
  277. End Sub
  278. Private Sub lstCodeList_Click()
  279.     Dim strTem As String
  280.     strTem = Right(LstCodeList.List(LstCodeList.ListIndex), Len(LstCodeList.List(LstCodeList.ListIndex)) - 20)
  281.     labList.Caption = strTem
  282. End Sub
  283. Private Sub lstCodeList_DblClick()
  284.     Dim strTem As String
  285.     Dim iWhere As Integer                   '用于截取字符
  286.     Dim strSign As String                   '符号,+ 或 - 或 ""
  287.     If LstCodeList.ListIndex = -1 Then Exit Sub
  288.     iWhere = InStr(1, LstCodeList.List(LstCodeList.ListIndex), " ") - 1
  289.     strTem = Left(LstCodeList.List(LstCodeList.ListIndex), iWhere)
  290.     If Trim(txtExp.Text) = "" Then
  291.         strSign = ""
  292.     ElseIf OptAdd.Value = True Then
  293.         strSign = "+"
  294.     ElseIf OptAdd.Value = False Then
  295.         strSign = "-"
  296.     End If
  297.     
  298.     txtExp.Text = txtExp.Text & strSign & strTem
  299. End Sub
  300. Private Sub lstCodeList_KeyPress(KeyAscii As Integer)
  301.     If KeyAscii = 13 Then
  302.         Call lstCodeList_DblClick
  303.     End If
  304. End Sub
  305. Private Sub txtExp_KeyPress(KeyAscii As Integer)
  306.     Select Case KeyAscii
  307.     Case 13
  308.         Call cmdOK_Click
  309.     End Select
  310. End Sub