论坛首页 编程语言技术论坛

【vb6.0】关于集合的一个应用

浏览 2530 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-05-26   最后修改:2010-05-26
我写的个类,想要实现这么个意思:
就是抽取一个集合中的内容中的一个字符串和对应数值作为一个新的集合的内容,将相同字符串的巷的对应数值合并为一项,总跑不对,大家帮看看,叩谢:
Public Actr_gp As New Collection
Dim ces As CSCtr_gp_Amt
Dim cesa As CSCtr_gp_Amt
Private Sub Class_Initialize()
On Error GoTo codeError
        Set Actr_gp = New Collection
        Set cesa = New CSCtr_gp_Amt'这个类中只有两项 SCtr_Gp_Code (string)和curctr_amt(currency)
        Call Allctr_amt
        Exit Sub
codeError:
    POS.Common.ShowMessage Err.Description, Err.Number
End Sub

Public Sub AddctrDtls(ByVal cs As CSCtr_gp_Amt)  '输入保存
        Actr_gp.Add cs
End Sub
Public Property Get Allctr_gp(ByVal Index As Integer) As CSCtr_gp_Amt
If Actr_gp Is Nothing Then
    Set Allctr_gp = Nothing
Else
    If Actr_gp.Count > 0 Then
        Set Allctr_gp = Actr_gp(Index)
    Else
        Set Allctr_gp = Nothing
    End If
End If
End Property

Public Property Get Allctr_gpCount() As Integer
If Actr_gp Is Nothing Then
    Allctr_gpCount = 0
Else
    Allctr_gpsCount = Actr_gp.Count
End If
End Property

Public Sub Allctr_gpb()'做大集合中的项合并
Dim c As Integer
Dim k As Integer
Dim j As Integer
If Allctr_gpCount = 0 Then

    cesa.SCtr_Gp_Code = POS.Sales.TrnHdr.TrnDtls(1).TDCtr_Gp_Code
    cesa.CurCtr_Amt = 0
    Me.AddctrDtls cesa
End If
c = 1
For c = 1 To POS.Sales.TrnHdr.TrnDtlsCount
        k = 1

      For j = 1 To Actr_gp.Count
            If InStr(1, POS.Sales.TrnHdr.TrnDtls(c).TDCtr_Gp_Code, Me.Actr_gp(j).SCtr_Gp_Code) > 0 Then
                k = k + 1
            End If
      Next
            If Not k > 1 Then
                cesa.SCtr_Gp_Code = POS.Sales.TrnHdr.TrnDtls(c).TDCtr_Gp_Code
                cesa.CurCtr_Amt = 0
                Me.AddctrDtls cesa
                k = 1
            End If
Next
End Sub
Public Sub Allctr_amt()'将合并后的集合的项的curctr_amt设为对应大集合中具有相同TDCtr_Gp_Code的和
Call Allctr_gpb
Dim i As Integer
Dim j As Integer
For i = 1 To Actr_gp.Count
    For j = 1 To POS.Sales.TrnHdr.TrnDtlsCount
        If InStr(1, POS.Sales.TrnHdr.TrnDtls(j).TDCtr_Gp_Code, Me.Actr_gp(i).SCtr_Gp_Code) > 0 Then
            Me.Actr_gp(i).CurCtr_Amt = Me.Actr_gp(i).CurCtr_Amt + POS.Sales.TrnHdr.TrnDtls(j).TDSub_Total
        Else
            Me.Alctr_gp(i).CurCtr_Amt = Me.Actr_gp(i).CurCtr_Amt
        End If
        
    Next
Next
End Sub


比如

比如这么内容(1002,500),(2112,300),(1002,300),想让合并成(1002,500+300),(2112,300),但我的这个好像合并结果有差错
   发表时间:2010-05-27   最后修改:2010-05-27
更正下啊,刚才错了
:)
0 请登录后投票
   发表时间:2010-06-04   最后修改:2010-06-04
自己做了几点修正,可以满足要求了
将Class_Initialize() 中的
Set cesa = New CSCtr_gp_Amt 放在合并相同第一个属性的项的相应位置,
这主要是由于,每次再新集合中增加项的时候当然需要新建一个CSCtr_gp_Amt的对象,才能保持值的对应,不然就是在集合中增加了n个相同的cesa了
并对一些细节做了些调整,比如比较数字字符串的方法等
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics