以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  数据合并  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=85352)

--  作者:爱相随
--  发布时间:2016/5/23 22:29:00
--  数据合并
老师,我有这样的问题,请帮助:
表A有5行数据,左边分别有原材料、数量、金额等列、右边是新产品的名称、产品批号列,就是左边5行原材料经过加工生产右边一种产品,左边5行是5种原材料,右边5行是一个产品和它的批号。现在要求在表A选择这5行数据,通过某个按钮,在表B增加一行,同时将表A右边的产品名称和批号填列在表B对应的列(因表A右边5行都是同一个产品的名称 和同一个批号),且数量和金额列是表A对应的数量及金额列的5行之和,求控件按钮的代码,谢谢。
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目1.foxdb

实例中,要求表“提取产品成本表”中的“存货名称、存货编码、批号属性、产品批次、产品批号”列的内容通过菜单功能区的“成本归集-提取工艺产品成本“按钮从表”提取工艺“表中对应的”产出信息“列。在提取工艺表中可以是多行,在提取工艺产品成本表中是合并成一行的。”提取工艺产品成本表“金额列来自表”提取工艺“表中对应的”金额“列、以产品批号为依据的合计数。
[此贴子已经被作者于2016/5/23 23:20:50编辑过]

--  作者:大红袍
--  发布时间:2016/5/23 22:34:00
--  
上传实例。
--  作者:Hyphen
--  发布时间:2016/5/24 8:41:00
--  
参考一下代码,自己改改

With Tables("提取工艺")
    If .Rows.Count > 0 Then
        Dim dr As Row = .Rows( .TopPosition )
        Dim drnew As Row = Tables("提取产品成本表").AddNew
        drnew("存货名称") = dr("存货名称")
        \'其它字段赋值
        Dim acount As Double
        For i As Integer = .TopPosition To .BottomPosition
            acount += .Rows(i)("金额")
        Next
        drnew("流转金额") = acount
    End If
End With


--  作者:爱相随
--  发布时间:2016/5/25 21:27:00
--  
代码可以用,感谢老师的帮助,谢谢
--  作者:爱相随
--  发布时间:2016/5/25 21:45:00
--  
老师,增加条件判断代码后(红色部分),后面(ELSE后)的代码就不是原来合并增加到目标表了,而按行添加(来源表有多少行就添加多少行)的目标表了。条件语句有错?测试情况是条件语句没有错了,当目标表已经有相同记录的行时,就不再执后面的了

With Tables("提取工艺")
    For Each r As Row In Tables("提取工艺").Rows
        If r("选择") = True Then
            If DataTables("提取产品成本表").Find("产品批号 = \'" & r("产品批号") & "\'AND 存货编码 = \'" & r("存货编码") & "\'") IsNot Nothing Then
                Messagebox.Show("提取产品成本表已经存在相同批号且编码相同的记录","提示", MessageBoxButtons.YesNo,MessageBoxIcon.Information)
                Return \'那么返回             
            Else
                If .Rows.Count > 0 Then
                    Dim dr As Row = .Rows( .TopPosition )
                    Dim drnew As Row = Tables("提取产品成本表").AddNew
                    drnew("存货名称") = dr("产品名称")
                    drnew("存货编码") = dr("产品编码")
                    drnew("产品批号") = dr("产品批号")
                    drnew("产品批次") = dr("产品批次")
                    \'其它字段赋值
                    Dim acount As Double
                    For i As Integer = .TopPosition To .BottomPosition
                        acount += .Rows(i)("金额")
                    Next
                    drnew("流转金额") = acount
                End If
                MainTable = Tables("提取产品成本表")
            End If
        End If
    Next
End With

--  作者:大红袍
--  发布时间:2016/5/25 23:25:00
--  
With Tables("提取工艺")
    If .Rows.Count > 0 Then
        Dim dr As Row = .Rows( .TopPosition )
        If DataTables("提取产品成本表").Find("产品批号 = \'" & dr("产品批号") & "\'AND 存货编码 = \'" & dr("存货编码") & "\'") IsNot Nothing Then
            Messagebox.Show("提取产品成本表已经存在相同批号且编码相同的记录","提示", MessageBoxButtons.YesNo,MessageBoxIcon.Information)
            Return \'那么返回
        End If
       
        Dim drnew As Row = Tables("提取产品成本表").AddNew
        drnew("存货名称") = dr("产品名称")
        drnew("存货编码") = dr("产品编码")
        drnew("产品批号") = dr("产品批号")
        drnew("产品批次") = dr("产品批次")
        \'其它字段赋值
        Dim acount As Double
        For i As Integer = .TopPosition To .BottomPosition
            acount += .Rows(i)("金额")
        Next
        drnew("流转金额") = acount
    End If
    MainTable = Tables("提取产品成本表")
   
   
End With

--  作者:爱相随
--  发布时间:2016/5/26 0:11:00
--  
非常感谢,这种方法解决了我的重大问题。