以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  表的问题  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=62940)

--  作者:utcxray
--  发布时间:2015/1/10 14:46:00
--  表的问题
如图:
图片点击可在新窗口打开查看此主题相关图片如下:无标题.png
图片点击可在新窗口打开查看
图中是合同明细,如李文娟在1月8号与甲公司签了两笔合同,对应的合同号不同,“金额”通过数量*单价计算得出,1月8号与乙公司签了合同,也有对应的合同号,此合同号是自动编号,依据日期和公司不同编制。
目的:在合同明细中每增加一个新的合同号,在下图应收账款表中能自动添加一行,作一笔应收账款,将合同明细表中每个合同号对应的“合同号”,“金额”,“客户名称”分别作为应收账款表的“单据号”,“借方“,“客户”记录下来
图片点击可在新窗口打开查看此主题相关图片如下:无标题1.png
图片点击可在新窗口打开查看

--  作者:utcxray
--  发布时间:2015/1/10 14:47:00
--  

参考帮助中的下列代码,没成功

If e.DataCol.Name = "型号" Then \'如果内容发生变动的是品名列

    If e.NewValue Is Nothing Then \'如果新值是空白,也就是品名列的内容为空

        e.DataRow("成本") = Nothing \'那么清空此行单价列的内容

    Else

        Dim dr As DataRow

        \'否则在产品表查找同名的产品行,将找到的行赋值给变量dr

        dr = DataTables("采购明细").SQLFind("[型号] = \'" & e.NewValue & "\'")

        If dr IsNot Nothing Then \'如果找到了同名的产品行,也就是dr不是Nothing

            e.DataRow("成本") = dr("单价")

        End If

    End If

End If

 

. 如果列名不同,或者只需复制部分列,可以参考下面的代码:

If e.DataCol.Name = "逻辑列名" AndAlso e.DataRow("逻辑列名") = True Then
    Dim nma() As String = {"A1","A2","A3","A4"} \'A
表数据来源列
   
Dim nmb() As String = {"B1","B2","B3","B4"} \'B表数据接收列
   
Dim dr As DataRow = DataTables("B").AddNew
    For i As Integer = 0 To nma.Length - 1
        dr(nmb(i)) = e.DataRow(nma(i))
    Next
End
If

 


--  作者:Bin
--  发布时间:2015/1/10 14:51:00
--  
图太小,看不到.

你把SQLFIND 改为 FIND

--  作者:utcxray
--  发布时间:2015/1/10 14:52:00
--  
图片点击可以放大
--  作者:utcxray
--  发布时间:2015/1/10 14:53:00
--  
我的是外部表,要后台找
--  作者:Bin
--  发布时间:2015/1/10 14:53:00
--  
上例子吧
--  作者:utcxray
--  发布时间:2015/1/10 14:58:00
--  
上述代码仅是帮助中可能与此项操作有关的大概能用到的代码,复制部分列我可以搞定,难在要后台统计每个合同号的金额,好像要用到类似Dim Sum1 As Double = Tables("订单").Compute("Sum(数量)", "产品 = \'PD01\'")

Dim Sum2 As Double = DataTables("订单").Compute("Sum(数量)", "产品 = \'PD01\'")这样的计算。


--  作者:Bin
--  发布时间:2015/1/10 15:10:00
--  
你上个例子,描述清楚你要实现的需求.
--  作者:utcxray
--  发布时间:2015/1/10 15:14:00
--  

If e.DataCol.Name = "合同号"   Then
    Dim nma() As String = {"合同号","客户","金额"} \'A
表数据来源列
   
Dim nmb() As String = {"单据号","客户","借方"} \'B表数据接收列
   
Dim dr As DataRow = DataTables("应收账款").AddNew
    For i As Integer = 0 To nma.Length - 1
        dr(nmb(i)) = e.DataRow(nma(i))
    Next
End
If


上述代码中第二行的“金额”应该是统计每个合同号的金额,就是这个“金额”应如何写代码不知道


--  作者:Bin
--  发布时间:2015/1/10 15:19:00
--  
7楼的思路是对的