以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]对每天变动的库存余量进行统计汇总问题  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=50562)

--  作者:cnyoung
--  发布时间:2014/5/9 7:18:00
--  [求助]对每天变动的库存余量进行统计汇总问题
我有库存表--记录着A、B、C三种商品的每天库存余量(来自于子表的sum求和,有时候出现空值),如下表:

   日期     商品编号    余量
2014-2-1  A  500
2014-2-2  B  600
2014-2-3  C  700
2014-2-6  B  500
2014-2-7  A   400
2014-2-9 B  350

现在想每当一种商品余量发生变化后都统计A、B、C三种商品总的余量(每种商品最近一天的记录)到总库存表中:
日期                总余量
2014-2-1           500
2014-2-2           1100
2014-2-3           1800
2014-2-6           1700
2014-2-7           1600
2014-2-9           1450

实现上述目的,我在库存余量表中表属性DataRowAdded中编写代码:
1、用sp = dt.GetValues("商品编号")取得不同商品编号
2、用dr1=DataTables("库存余量").find("商品编号=\'" & sp & "\'","时间 desc")找到每种商品的最近一天的记录
3、用For Each sp1 As String In sp统计总余量:total=total+dr1("余量")
4、然后在总库存表中新增一行dr,把统计总余量total的值赋给dr("总余量")

出现错误信息:Exception has been thrown by the target of an invocation.
Object reference not set to an instance of an object.

我怀疑sum出现空值,导致的,于是加了一条:iif(dr1("余量") Is Nothing ,total,total=total+dr1("余量")  )

我应该怎么实现上述目的?









[此贴子已经被作者于2014-5-9 7:28:39编辑过]

--  作者:Bin
--  发布时间:2014/5/9 8:48:00
--  
应该在DataColChanged事件中计算才对,请上个例子吧
--  作者:cnyoung
--  发布时间:2014/5/9 9:09:00
--  
 我描述的就是这个例子
全代码如下:
Dim dt As DataTable = DataTables("库存余量")
Dim Total As Double=0

Dim sp As List(Of String)
sp = dt.GetValues("商品编号")
Dim dr As DataRow=DataTables("总库存").addnew

For Each sp1 As String In sp
    Dim dr1 As DataRow
    dr1=DataTables("库存余量").find("客户编号=\'" & sp1 & "\'","时间 desc")
   Total=Total+dr("余量")    
iif(dr1("余量") Is Nothing ,total,=total+dr1("余量")  )
Next

dr("时间")=Date.Today
dr("总余量")=Total



--  作者:Bin
--  发布时间:2014/5/9 9:13:00
--  
YOU文件例子直观一点
--  作者:cnyoung
--  发布时间:2014/5/9 9:15:00
--  


加了那个判断还是出现那个错误

[此贴子已经被作者于2014-5-9 11:25:54编辑过]

--  作者:有点甜
--  发布时间:2014/5/9 9:28:00
--  

 加一个判断

 

Dim dt As DataTable = DataTables("库存余量")
Dim Total As Double=0


Dim sp As List(Of String)
Customers = dt.GetValues("商品编号")
Dim dr As DataRow=DataTables("总库存").addnew


For Each sp1 As String In sp
    Dim dr1 As DataRow
    dr1=DataTables("资产变动").find("客户编号=\'" & sp1 & "\'","日期 desc")
    If dr1 IsNot Nothing Then
        iif(dr1("余量") Is Nothing ,total,total=total+dr1("余量")  )
    End If
Next


dr("日期")=Date.Today
dr("总余量")=Total


--  作者:cnyoung
--  发布时间:2014/5/9 11:44:00
--  
请帮助解决啊
--  作者:cnyoung
--  发布时间:2014/5/9 12:03:00
--  
也许我写的代码用的命令不对,有更好的命令来筛选
--  作者:cnyoung
--  发布时间:2014/5/9 12:09:00
--  
当用A代替dr1=DataTables("库存余量").find("商品编号=\'A\'","时间 desc")中的SP进行调试时,for each 统计了4次,可是总共才A/B/C 三个商品编号啊,应该循环3次啊?
--  作者:有点甜
--  发布时间:2014/5/9 12:11:00
--  
以下是引用cnyoung在2014-5-9 12:03:00的发言:
也许我写的代码用的命令不对,有更好的命令来筛选

 

问题没头没尾,谁知道怎么帮你写代码啊

 

要么,上传一个例子;

 

要么,用下面的代码测试一下

 

Dim dt As DataTable = DataTables("库存余量")
Dim Total As Double=0

Dim sp As List(Of String)
sp = dt.GetValues("商品编号")
Dim dr As DataRow=DataTables("总库存").addnew

For Each sp1 As String In sp
    Dim dr1 As DataRow
    dr1=DataTables("资产变动").find("商品编号=\'" & sp1 & "\'","日期 desc")
    If dr1 IsNot Nothing Then
        iif(dr1("余量") Is Nothing ,total,total=total+dr1("余量")  )
    End If
Next


dr("日期")=Date.Today
dr("总余量")=Total