Foxtable(狐表)用户栏目专家坐堂 → 再次讨教:三表汇总-已解决


  共有9525人关注过本帖树形打印复制链接

主题:再次讨教:三表汇总-已解决

帅哥哟,离线,有人找我吗?
fjlclxj
  51楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:321 积分:2468 威望:0 精华:2 注册:2013/1/16 19:33:00
  发帖心情 Post By:2013/6/3 21:22:00 [只看该作者]

看了don的代码,大体思路是
1、顺序加载三张分表到汇总表里,并按表、时间列顺序重置_SortKey。
2、逐行查找电镀表每个日期的最大行,并将找到的当日汇总表电镀行部分复制到毛坯表(表 < '" & dr("表") & "'")部分对应时间行的对应字段里(复制行数为两部分的较小行数),并标记“del”。
3、出库表类同2。
4、删除“del”标记行。
不晓得是不是这个意思。
说说我的思路。
1、设置时间字典表,键为时间,值为数字。
统计毛坯表的时间列及其个数,填入时间字典表里。统计电镀表的时间列及其个数,逐行查找电镀时间列每个不同日期是否在时间字典表里,不在则加入,在的话,判断个数是否比字典表里对应时间键的值大,大的话,更新该值。出库表类同电镀表。
2、排序时间,保证排列按时间顺序;根据时间顺序及各个时间的个数在汇总表中生成行。
3、将三个表按时间顺序逐行填入汇总表即可。
个人觉得,jon的代码在于先填充数据再比较筛选,我的则是先筛选时间生成行,再填充。
看了jon的比较筛选的代码,还是挺有意思的。

 回到顶部
帅哥哟,离线,有人找我吗?
jspta
  52楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1731 积分:11255 威望:0 精华:0 注册:2011/12/15 22:06:00
  发帖心情 Post By:2013/6/4 13:25:00 [只看该作者]

既然参与了,我也来凑凑热闹

应该比较完美了,完美排序,日期调用,只需要增加一表作为临时存储即可

如果泡泡能把字段弄的有规律的话,代码应该可以很简洁

 

主要循环代码:

For Each str As String In lstdate
    Dim lstMP As List(of DataRow) = dt.Select("日期 = #" & str & "# and 单号 like 'MP%'","单号")
    Dim lstRK As List(of DataRow) = dt.Select("日期 = #" & str & "# and 单号 like 'RK%'","单号")
    Dim lstCK As List(of DataRow) = dt.Select("日期 = #" & str & "# and 单号 like 'CK%'","单号")
    Dim Max As Integer = math.Max(math.Max(lstMP.Count,lstRK.Count),lstCK.Count)
    t.AddNew(max)
    For IntA As Integer = 0 To Max - 1
        Dim r As Row = t.Rows(IntA + Int)
        r("日期") = cdate(str)
        If lstMP.Count - 1 >= IntA Then
            r("毛胚入库单号") = lstMP(IntA)("单号")
            r("毛胚入库数量") = lstMP(IntA)("数量")
            r("毛胚单价") = lstMP(IntA)("单价")
            IntMP = IntMP  + r("毛胚入库数量")
        End If
        If lstRK.Count - 1 >= IntA Then
            r("电镀入库单号") = lstRK(IntA)("单号")
            r("电镀入库数量") = lstRK(IntA)("数量")
            r("电镀单价") = lstRK(IntA)("单价")
            IntMP = IntMP - r("电镀入库数量")
            IntRK = IntRK + r("电镀入库数量")
        End If
        r("毛胚库存") = intMP  ''若每行显示,移到条件外
        If lstCK.Count - 1 >= IntA Then
            r("出库单号") = lstCK(IntA)("单号")
            r("出库数量") = lstCK(IntA)("数量")
            r("出库单价") = lstCK(IntA)("单价")
            IntRK = IntRK - r("出库数量")
        End If
        r("电镀库存") = intRK  '若每行显示,移到条件外
    Next IntA
    Int = Int + max
Next

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:三表汇总.rar


 回到顶部
帅哥哟,离线,有人找我吗?
泡泡
  53楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:316 积分:2628 威望:0 精华:0 注册:2013/3/4 20:21:00
  发帖心情 Post By:2013/6/4 13:48:00 [只看该作者]

都是高人

 回到顶部
总数 53 上一页 1 2 3 4 5 6