以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 能否补齐“未交数量” (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=68250) |
||||
-- 作者:瞩望星空 -- 发布时间:2015/5/13 11:24:00 -- 能否补齐“未交数量” 现有“出库明细表”有2个订单的6个出库单号的“未交数量”为空值 第一个问题: \'加载未交数量为空的数据 DataTables("出库明细表").LoadFilter = "[未交数量] Is Null" DataTables("出库明细表").Load DataTables("出库明细表").LoadChildren("订单明细表", "客户订单号", "客户订单号") ‘这样利用关联子表去加载父表的写法是否有错?因为“订单_出库”关联字段为二个:客户订单号与物料编号。 第二个问题: 为了补齐这6行数据,写了以下代码: SystemReady = False For Each r As Row In Tables("订单明细表").rows ’经上述加载后,只保留出库明细中未交数量为空值的数据 Dim ss,dd,ee As Integer For Each r2 As Row In Tables("订单明细表.出库明细表").rows ‘对关联表的行进行操作 If ss = 0 Then \'第一次循环直接行到订单数量 r2("未交数量") = r("订单数量") Else r2("未交数量") = ee - dd \'上次未交一上次实送数量 End If dd = r2("实交数量") ee = r2("未交数量") ss = ss +1 Next Next SystemReady = True MessageBox.Show("补齐未交数量") 但上述结果不对,是不是不能对关联表的行进行操作?
[此贴子已经被作者于2015/5/13 11:26:51编辑过]
|
||||
-- 作者:大红袍 -- 发布时间:2015/5/13 11:29:00 -- 1、
DataTables("出库明细表").LoadFilter = "[未交数量] Is Null" |
||||
-- 作者:大红袍 -- 发布时间:2015/5/13 11:32:00 -- 2、这个意思?
For Each r As Row In Tables("订单明细表").rows \'经上述加载后,只保留出库明细中未交数量为空值的数据 |
||||
-- 作者:瞩望星空 -- 发布时间:2015/5/13 11:53:00 -- 对,第二个问题是这样。但是计算结果出错。 但是,第一个问题改了后,反而出错了: \'加载未交数量为空的数据 DataTables("出库明细表").LoadFilter = "[未交数量] Is Null" DataTables("出库明细表").Load DataTables("出库明细表").LoadChildren("订单明细表","[客户订单号]+[物料编号]","[客户订单号]+[物料编号]") .NET Framework 版本:2.0.50727.5477 Foxtable 版本:2014.11.11.1 错误所在事件:加载[订单明细表]失败! 详细错误信息: 语法错误。 在查询表达式 \'([客户订单号]+[物料编号] in (Select DISTINCT [[客户订单号]+[物料编号]] F rom (Select [_Identify], * F rom [~TMPCLP出库明细表] Where ([未交数量] Is Null)) FoxTempaX))\' 中。 For Each r2 As DataRow In r.DataRow.GetChildRows("出库明细表")
|
||||
-- 作者:大红袍 -- 发布时间:2015/5/13 11:54:00 -- 1、注意细节啊;
2、计算出错,那你的计算逻辑是什么? |
||||
-- 作者:瞩望星空 -- 发布时间:2015/5/13 12:22:00 -- 1、不知道为何,前一个关联列少一个“[”就能执行了,我以为大师漏写了。 2、出库明细表的未交数量: 指还没有处理本次出库前,应该出货的数量,即如果是第一次出货,则直接为该订单-产品编号的订单数量 以后是上次的未交数量,减去上次的出货数量。
|
||||
-- 作者:瞩望星空 -- 发布时间:2015/5/13 12:36:00 -- ‘加入数值初始值就对了 。 SystemReady = False For Each r As Row In Tables("订单明细表").rows Dim ss,dd,ee As Integer ss = 0 dd = 0 ee = 0 For Each r2 As DataRow In r.DataRow.GetChildRows("出库明细表") If ss = 0 Then \'第一次循环直接到订单数量 r2("未交数量") = r("订单数量") Else r2("未交数量") = ee - dd \'上次未交一上次实送数量 End If dd = r2("实交数量") ee = r2("未交数量") ss = ss +1 Next Next SystemReady = True MessageBox.Show("补齐未交数量")
|
||||
-- 作者:瞩望星空 -- 发布时间:2015/5/13 19:10:00 -- 请版主解释一下从子表加载父表数据时,出现二个列关联情况下, 前一个关联要各去掉一个中括号,这些在帮助中有提到吗? DataTables("出库明细表").LoadFilter = "[未交数量] Is Null" DataTables("出库明细表").Load DataTables("出库明细表").LoadChildren("订单明细表", "客户订单号]+[物料编号", "[客户订单号]+[物料编号]") 这种只写一半中括号的写法是第一次遇到。
|
||||
-- 作者:大红袍 -- 发布时间:2015/5/13 19:43:00 -- LoadChildren函数,实际上就是合成sql语句,当有多个字段的时候,就应该把多个字段合并成一个字段来处理。
但是sql语句它是这样写的 Select DISTINCT [你参数的值] F rom
所以红色地方就必须处理一下。 |
||||
-- 作者:瞩望星空 -- 发布时间:2015/5/13 20:08:00 -- 我只知道在SQL中字段要加前后中括号,象这样只在中间加中括号,确实不能理解,只是记住这个用法了,谢谢! |