以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  按条件统计子表  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=101064)

--  作者:cd_tdh
--  发布时间:2017/5/24 13:46:00
--  按条件统计子表

关联表,根据”产品名称“列关联,当”规格型号“不一致时,根据规格型号统计数量,当规格型号为空时,根据产品名称统计数量,用表达式Sum(Child(po).数量)有没办法实现,还是只能用代码啊?

[此贴子已经被作者于2017/5/24 13:51:54编辑过]

--  作者:有点色
--  发布时间:2017/5/24 14:09:00
--  

 你的逻辑是什么?父表如果产品名称、规格型号都不为空,就根据两列统计,否者,就根据产品名称统计?

 

 跨表统计,用代码处理 http://www.foxtable.com/webhelp/scr/1454.htm

 


--  作者:cd_tdh
--  发布时间:2017/5/25 14:11:00
--  

色大师,代码统计没问题了,自动更新这儿怎么修改?

按照当产品名称,按照规格型号统计数量、金额

If e.DataCol.Name = "产品名称" Then
    Dim
Filter As String = "[产品名称] = \'" & e.NewValue & "\'"
    e.
DataRow("入库_数量") = DataTables("入库").Compute("Sum(数量)", Filter)
    e.
DataRow("入库_金额") = DataTables("入库").Compute("Sum(金额)", Filter)
End
If

 


--  作者:cd_tdh
--  发布时间:2017/5/25 14:36:00
--  

当我第一次在库存表输入一个产品时,金额不会自动统计,如果在修改一下数量,金额才会自动统计。

 


--  作者:有点色
--  发布时间:2017/5/25 16:17:00
--  

统计代码这样写

 

If e.DataCol.Name = "产品名称" OrElse e.DataCol.Name = "规格型号" Then 
    Dim Filter As String = "1=1"

    If e.DataRow.IsNull("产品名称") = False Then filter &= " and 产品名称 = \'" & e.datarow("产品名称") & "\'" 

    If e.DataRow.IsNull("规格型号") = False Then filter &= " and 规格型号 = \'" & e.datarow("规格型号") & "\'" 
    e.DataRow("入库_数量") = DataTables("入库").Compute("Sum(数量)", Filter)
    e.DataRow("入库_金额") = DataTables("入库").Compute("Sum(金额)", Filter)
End If

 

自动更新的话,你就重置列就好了

 

http://www.foxtable.com/webhelp/scr/1472.htm

 


--  作者:cd_tdh
--  发布时间:2017/5/25 16:39:00
--  

色大师,数量会自动汇总,金额不自动汇总呢,重新输入数量,库存才会汇总金额?

订单截图

 


图片点击可在新窗口打开查看此主题相关图片如下:1.png
图片点击可在新窗口打开查看

 

库存截图

 


图片点击可在新窗口打开查看此主题相关图片如下:2.png
图片点击可在新窗口打开查看

 

 

还是加个刷新按钮吧。

[此贴子已经被作者于2017/5/25 16:44:33编辑过]

--  作者:有点色
--  发布时间:2017/5/25 17:36:00
--  
 你datacolchanged事件怎么写,贴出全部代码。
--  作者:cd_tdh
--  发布时间:2017/5/26 9:27:00
--  

入库表:

Dim tns() As String = {"入库"}
Dim dt As DataTable = DataTables("库存")
For Each tn As String In tns
    For Each r As Row In Tables(tn).Rows
        If r.IsNull("产品名称") OrElse r.IsNull("规格型号") = False Then
            Dim fdr As DataRow = dt.Find("产品名称 = \'" & r("产品名称") & "\' And 规格型号 = \'" & r("规格型号") & "\'")
            If fdr Is Nothing Then
                Dim nr As DataRow = dt.AddNew
                nr("产品名称") = r("产品名称")
                nr("规格型号") = r("规格型号")
            End If
        End If
    Next
Next

 

Select Case e.DataCol.Name
     Case  "数量","金额"
          Dim pr  As  DataRow
         pr =  DataTables("库存").Find("产品名称 = \'" & e.DataRow("产品名称") & "\'And 规格型号 = \'" & e.DataRow("规格型号") & "\'")
         If pr  IsNot  Nothing  Then
             DataTables("库存").DataCols("产品名称").RaiseDataColChanged(pr)
         End  If
 End Select

 

库存表:

If e.DataCol.Name = "产品名称" OrElse e.DataCol.Name = "规格型号" Then
    Dim Filter As String = "1=1"
    If e.DataRow.IsNull("产品名称") = False Then filter &= " and 产品名称 = \'" & e.DataRow("产品名称") & "\'"
    If e.DataRow.IsNull("规格型号") = False Then filter &= " and 规格型号 = \'" & e.DataRow("规格型号") & "\'"
    e.DataRow("入库_数量") = DataTables("入库").Compute("Sum(数量)", Filter)
    e.DataRow("入库_金额") = DataTables("入库").Compute("Sum(金额)", Filter)
    e.DataRow("入库_快递费") = DataTables("入库").Compute("Sum(快递费)", Filter)
End If

 


--  作者:有点蓝
--  发布时间:2017/5/26 11:00:00
--  
很多地方都要判断“规格型号”是否是空值,上传完整例子测试一下
--  作者:cd_tdh
--  发布时间:2017/5/26 12:05:00
--  
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目2.table

有点蓝老师,示例已上传
[此贴子已经被作者于2017/5/26 14:42:12编辑过]