浏览 2530 次
锁定老帖子 主题:【vb6.0】关于集合的一个应用
精华帖 (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),但我的这个好像合并结果有差错 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-05-27
最后修改:2010-05-27
更正下啊,刚才错了
:) |
|
返回顶楼 | |
发表时间:2010-06-04
最后修改:2010-06-04
自己做了几点修正,可以满足要求了
将Class_Initialize() 中的 Set cesa = New CSCtr_gp_Amt 放在合并相同第一个属性的项的相应位置, 这主要是由于,每次再新集合中增加项的时候当然需要新建一个CSCtr_gp_Amt的对象,才能保持值的对应,不然就是在集合中增加了n个相同的cesa了 并对一些细节做了些调整,比如比较数字字符串的方法等 |
|
返回顶楼 | |