Foxtable(狐表)用户栏目专家坐堂 → [求助]跨表的条件汇总


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

主题:[求助]跨表的条件汇总

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


加好友 发短信
等级:婴狐 帖子:92 积分:654 威望:0 精华:0 注册:2016/3/25 11:27:00
[求助]跨表的条件汇总  发帖心情 Post By:2016/6/2 12:32:00 [显示全部帖子]

研究了半天,一方面思路还停留在EXCEL上(以下问题在EXCEL是已解决了的),另一方面对FT的逻辑、语法还是不熟悉。下面这个问题,还请老师赐教,看看怎么把思路变成代码。
目的一:汇总料件表中的每一个料件的备案数量
汇总条件:在单耗表中,把每一个成品的备案数量*该成品所用料件的单耗(就是每一个料件在该成品中的耗量),然后,汇总每一个料件在相同手册中每一个成品的耗量总和,就是料件表中每一个料件的备案数量。(不知我表述明白没有,在单耗表中,比如成品1,备案数量是30000,在单耗表中用了5个料件,那每个料件在这个成品中的耗量分别为30000*每个料件的对应单耗=该料件在此成品的耗量,汇总每个料件在每个成品的耗量(手册号要相同),就是料件表中的每个料件和备案数量。
目的二:汇总成品表中每一个成品的净重核算
汇总条件:每一个料件都有净重(重量换算系数),有主料辅料之分。在单耗表中,汇总每个料件在每一个成品中的单耗*当前料件的换算系数= 该成品的净重,然后把结果填充在成品表中的净重核算中。但是,不能包辅料件单耗算在里面,也就是说,辅料(包材)是不参与计算的。
哎呀,好累。。。

下面这些代码跟上述问题没多大关系,只是证明,1、上述几个表的一些数据是由此得来的(项目实际上更复杂一些),2、曾努力想过在单耗表中的DataColChanged实现。(也就是想,数据在一旦在单耗表的中生成,料件表和成品表中的数量就马上更新出来),3、代码中备注后的代码有运行错误
Dim drLJ As DataRow,drCP As DataRow ',Bsum As Double
Dim dl As Integer = e.DataRow("料件序号")
Dim dc As Integer = e.DataRow("成品序号")
Dim dj As Single = e.DataRow("净耗")
drLJ = DataTables("料件").find("[手册号] = 'C53076150488' And [序号] = '" & dl & "'")
drCP = DataTables("成品").find("[手册号] = 'C53076150488' And [序号] = '" & dc & "'")
If drLJ IsNot Nothing And drCP IsNot Nothing Then
    e.DataRow("料件名称") = drLJ("料件名称")
    e.DataRow("规格描述") = drLJ("规格描述")
    e.DataRow("单位") = drLJ("单位")
    e.DataRow("成品净重核算") = drLJ("重量换算") * dj
    e.DataRow("当前备案成品耗量") = drCP("备案数量") * dj
    'DataTables("料件").DataCols("备案数量") = DataTables("单耗").Compute("Sum(成品净重核算)", "成品序号 = '" & dc & "'")
    'MessageBox.Show(Bsum)
End If

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


加好友 发短信
等级:婴狐 帖子:92 积分:654 威望:0 精华:0 注册:2016/3/25 11:27:00
  发帖心情 Post By:2016/6/2 12:33:00 [显示全部帖子]

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目1.table


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


加好友 发短信
等级:婴狐 帖子:92 积分:654 威望:0 精华:0 注册:2016/3/25 11:27:00
  发帖心情 Post By:2016/6/2 14:57:00 [显示全部帖子]

不明白,不上传文件你能理解吗?

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


加好友 发短信
等级:婴狐 帖子:92 积分:654 威望:0 精华:0 注册:2016/3/25 11:27:00
  发帖心情 Post By:2016/6/2 15:00:00 [显示全部帖子]

如果你认为无用,不看它就是了

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


加好友 发短信
等级:婴狐 帖子:92 积分:654 威望:0 精华:0 注册:2016/3/25 11:27:00
  发帖心情 Post By:2016/6/2 15:04:00 [显示全部帖子]

不好意思,附件发错了

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


加好友 发短信
等级:婴狐 帖子:92 积分:654 威望:0 精华:0 注册:2016/3/25 11:27:00
  发帖心情 Post By:2016/6/2 15:06:00 [显示全部帖子]

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目1.table


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


加好友 发短信
等级:婴狐 帖子:92 积分:654 威望:0 精华:0 注册:2016/3/25 11:27:00
  发帖心情 Post By:2016/6/2 15:21:00 [显示全部帖子]

这个上传的文件,就是一楼所述我所要解决的问题,谢谢!

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


加好友 发短信
等级:婴狐 帖子:92 积分:654 威望:0 精华:0 注册:2016/3/25 11:27:00
  发帖心情 Post By:2016/6/2 15:50:00 [显示全部帖子]

老师的思路明白了,代码有些变动需调试中。期间,无意又搜了一中帮助”跨表“,发现下面的帮助不知是不是也是个方法,当然还未认真研究
http://www.foxtable.com/help/

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


加好友 发短信
等级:婴狐 帖子:92 积分:654 威望:0 精华:0 注册:2016/3/25 11:27:00
  发帖心情 Post By:2016/6/2 15:57:00 [显示全部帖子]

晕,我怎么复制不上我搜到的帮助连接
[此贴子已经被作者于2016/6/2 15:59:21编辑过]

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


加好友 发短信
等级:婴狐 帖子:92 积分:654 威望:0 精华:0 注册:2016/3/25 11:27:00
  发帖心情 Post By:2016/6/2 15:58:00 [显示全部帖子]

物料需求统计

假定有下面三个

生产计划,用于输入每个产品计划的生产数量:

图片点击可在新窗口打开查看

零件用量,用户输入每单个产品使用各零件的数量:

图片点击可在新窗口打开查看

零件需求,用于根据生产计划和零件需求,统计出各种零件总的需求数量:

图片点击可在新窗口打开查看

这是一个很经典的统计的实例,下面我们用三种不同的方法,来得到这个需求统计

方法一

SQLGroupTableBuilder,在窗口或者菜单新建一个按钮,将其代码设置为:

Dim gb As new SQLGroupTableBuilder("统计","零件用量"
gb.AddTable(
"零件用量","产品","生产计划","产品"
gb.Groups.AddDef(
"零件"
gb.Totals.AddExp(
"需求数量","[生产数量] * [用量]"
gb.Build() 

MainTable = Tables(
"统计")

方法二

SQLJoinTableBuilder,在窗口或者菜单新建一个按钮,将其代码设置为:

Dim jb As new SQLJoinTableBuilder("统计","零件用量"
jb
.AddTable("零件用量","产品","生产计划","产品"
jb
.AddCols("零件",True
jb
.AddExp("需求数量","sum([生产数量] * [用量])"
jb
.Build() 
MainTable
 = Tables("统计")

方法三

我们也可以自己直接编码实现,步骤:

1、需要事先设计一个名为“零件需求”的,包括零件和需求数量两列。
2、然后新建一个菜单或窗口按钮,将其代码设置为:

Dim dic As new Dictionary(of String,Integer)
DataTables
("零件需求").DataRows.Clear()
For
 Each dr1 As DataRow In DataTables("生产计划").DataRows
    For
 Each dr2 As DataRow In DataTables("零件用量").Select("[产品] = '" & dr1("产品") & "'")
        Dim
 nm As String = dr2("零件")
        Dim
 vl As Integer = dr1("生产数量") * dr2("用量")
        If
 dic.ContainsKey(nm) = False
            dic.Add(nm,vl)

        Else

            dic(nm) = dic(nm)+ vl

        End
 If
    Next
Next
For
 Each key As String In dic.keys
    Dim
 dr As DataRow = DataTables("零件需求").AddNew()
    dr(
"零件") = key
    dr(
"需求数量") = dic(key)
Next


 回到顶部
总数 14 1 2 下一页