以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  单价自动显示  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=9249)

--  作者:佛光普照
--  发布时间:2011/3/18 20:53:00
--  单价自动显示
各位帮一下忙,材料基础表和入库表中的单价,自动在库存表中进行显示出来,要求入库单没有的单价,自动从基础表读入,对于入库表的单价的日期超过材料基础表的日期,自动从入库表中读入单价,表达式如何写
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目2.table


--  作者:qtcks
--  发布时间:2011/3/18 21:38:00
--  

搞的这么复杂根本不合理,

获取信息的来源最好采用唯一制度,其他地方需要调用与修改都方便很多,也容易扩展。代码也简单很多


--  作者:mr725
--  发布时间:2011/3/18 22:33:00
--  

表达式只能在表达式列中来写,你又没有表达式列,怎么写呢? 

 

用代码这样看看:

Dim r As Row = Tables("库存表").current  \' rows(Tables("库存表").position)
Dim dr,dr1 As DataRow
dr = DataTables("基础材料").Find("材料编码 = \'" & r("材料编码") & "\'")
dr1 = DataTables("入库单").Find("材料编码 = \'" & r("材料编码") & "\'")
If dr1 IsNot Nothing And dr IsNot Nothing Then
    If dr1("日期") > dr("日期")
        r("单价") = dr1("单价")
    Else
        r("单价") = dr("单价")
    End If
Else
    If dr IsNot Nothing Then
        r("单价") = dr("单价")
    End If
End If


--  作者:佛光普照
--  发布时间:2011/3/19 8:37:00
--  

非常感谢


--  作者:狐狸爸爸
--  发布时间:2011/3/19 9:28:00
--  

我在mr725兄的基础上改一下,设置库存表的DAtaColChanged事件:

 

Dim r As DataRow = e.DataRow
Dim dr1,dr2 As DataRow
dr1 = DataTables("基础材料").Find("材料编码 = \'" & r("材料编码") & "\'")
dr2 = DataTables("入库单").Find("材料编码 = \'" & r("材料编码") & "\'")
If dr1 IsNot Nothing AndAlso dr2 IsNot Nothing Then
    If dr2("日期") > dr1("日期")
        r("单价") = dr2("单价")
    Else
        r("单价") = dr1("单价")
    End If
ElseIf dr1 IsNot Nothing Then
        r("单价") = dr1("单价")
    End If
End If


--  作者:佛光普照
--  发布时间:2011/3/19 12:09:00
--  
又出现一个问题,假设入库单的价格有两个,要显示最近入库的单价,在库存表中自动显示,该如何解决
--  作者:佛光普照
--  发布时间:2011/3/19 12:18:00
--  

入库单价格随市场一直在变,那该如何解决,请各位帮忙


--  作者:狐狸爸爸
--  发布时间:2011/3/19 12:34:00
--  

好办,建议你参考一下下面的帮助,里面有说明如何找出最近一条记录:

http://help.foxtable.com/topics/0396.htm

尝试自己修改一下我给你的代码,如果搞不定,再发帖提问,我帮你写一下。


--  作者:佛光普照
--  发布时间:2011/3/19 19:38:00
--  
搞不定,请师傅帮我写一下
--  作者:佛光普照
--  发布时间:2011/3/19 20:58:00
--  

Dim r As DataRow = e.DataRow
Dim dr1,dr2 As DataRow
dr1 = DataTables("基础材料").Find("材料编码 = \'" & r("材料编码") & "\'")
dr2 = DataTables("入库单").Find("材料编码 = \'" & r("材料编码") & "\'","日期 Desc")
If dr1 IsNot Nothing AndAlso dr2 IsNot Nothing Then
    If dr2("日期") > dr1("日期")
        r("单价") = dr2("单价")
    Else
        r("单价") = dr1("单价")
    End If
ElseIf dr1 IsNot Nothing Then
        r("单价") = dr1("单价")
    End If

如果这样写的可以,但出现需要输入一下才能执行,这如何解决?