Foxtable(狐表)用户栏目专家坐堂 → 能否补齐“未交数量”


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

主题:能否补齐“未交数量”

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


加好友 发短信
等级:二尾狐 帖子:531 积分:4727 威望:0 精华:0 注册:2013/4/20 20:08:00
能否补齐“未交数量”  发帖心情 Post By: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("补齐未交数量")

但上述结果不对,是不是不能对关联表的行进行操作?
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:补齐数量.table

[此贴子已经被作者于2015/5/13 11:26:51编辑过]

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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/5/13 11:29:00 [只看该作者]

1、

 

DataTables("出库明细表").LoadFilter = "[未交数量] Is Null"
DataTables("出库明细表").Load
DataTables("出库明细表").LoadChildren("订单明细表", "客户订单号]+[物料编号", "[客户订单号]+[物料编号]")


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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/5/13 11:32:00 [只看该作者]

2、这个意思?

 

For Each r As Row In Tables("订单明细表").rows   '经上述加载后,只保留出库明细中未交数量为空值的数据
    Dim ss,dd,ee As Integer
    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("补齐未交数量")


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


加好友 发短信
等级:二尾狐 帖子:531 积分:4727 威望:0 精华:0 注册:2013/4/20 20:08:00
  发帖心情 Post By: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("出库明细表")

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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/5/13 11:54:00 [只看该作者]

1、注意细节啊;

 

2、计算出错,那你的计算逻辑是什么?


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


加好友 发短信
等级:二尾狐 帖子:531 积分:4727 威望:0 精华:0 注册:2013/4/20 20:08:00
  发帖心情 Post By:2015/5/13 12:22:00 [只看该作者]

1、不知道为何,前一个关联列少一个“[”就能执行了,我以为大师漏写了。

2、出库明细表的未交数量:
    指还没有处理本次出库前,应该出货的数量,即如果是第一次出货,则直接为该订单-产品编号的订单数量
   以后是上次的未交数量,减去上次的出货数量。

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


加好友 发短信
等级:二尾狐 帖子:531 积分:4727 威望:0 精华:0 注册:2013/4/20 20:08:00
  发帖心情 Post By: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("补齐未交数量")

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


加好友 发短信
等级:二尾狐 帖子:531 积分:4727 威望:0 精华:0 注册:2013/4/20 20:08:00
  发帖心情 Post By:2015/5/13 19:10:00 [只看该作者]

请版主解释一下从子表加载父表数据时,出现二个列关联情况下,
前一个关联要各去掉一个中括号,这些在帮助中有提到吗?

DataTables("出库明细表").LoadFilter = "[未交数量] Is Null"
DataTables("出库明细表").Load
DataTables("出库明细表").LoadChildren("订单明细表", "客户订单号]+[物料编号", "[客户订单号]+[物料编号]")

这种只写一半中括号的写法是第一次遇到。

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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/5/13 19:43:00 [只看该作者]

 LoadChildren函数,实际上就是合成sql语句,当有多个字段的时候,就应该把多个字段合并成一个字段来处理。

 

 但是sql语句它是这样写的 Select DISTINCT [你参数的值] F rom

 

 所以红色地方就必须处理一下。


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


加好友 发短信
等级:二尾狐 帖子:531 积分:4727 威望:0 精华:0 注册:2013/4/20 20:08:00
  发帖心情 Post By:2015/5/13 20:08:00 [只看该作者]

我只知道在SQL中字段要加前后中括号,象这样只在中间加中括号,确实不能理解,只是记住这个用法了,谢谢!

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