以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  如何在规定的日期范围内执行预定的产品价格  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=37595)

--  作者:tj-pacer
--  发布时间:2013/7/6 6:25:00
--  如何在规定的日期范围内执行预定的产品价格

父表是产品表,列名包括产品名称、销售价格。子表是价格变动表,列名包括产品名称,调整价格, 开始执行日期,如:

 

产品名称  调整价格 开始执行日期

P001      5            2013-3-25

P001      4.9         2013-5-25

P001      4.8         2013-7-8

 

何在父表销售价格列显示当前日期应执行的价格?表达式代码都可以,谢谢!

 

[此贴子已经被作者于2013-7-6 6:27:59编辑过]

--  作者:lsy
--  发布时间:2013/7/6 8:06:00
--  

朋友,咨询问题,最好附上与问题密切相关的实例,不然别人要么看不明白,要么费力从头做一遍实例,浪费时间。

更好一点嘞,用试用版做实例,可能帮到你的人,又稍多几个。


--  作者:tj-pacer
--  发布时间:2013/7/6 9:28:00
--  

谢谢指教!请见事例,目前的产品表中的价格是手工输入的,P001的价格为0.6元,客户已经要求到8月15日降价到0.5员,我们已在价格变动表中录入了,如何实现在8月15日那天,将产品表中的价格自动更新为0.5元。

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:事例1.table

[此贴子已经被作者于2013-7-6 9:31:27编辑过]

--  作者:夕然
--  发布时间:2013/7/6 9:42:00
--  

我给你做了案例,你看看

 

 

 

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目7.table

[此贴子已经被作者于2013-7-6 9:48:57编辑过]

--  作者:Bin
--  发布时间:2013/7/6 9:43:00
--  
.
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:事例1.table


--  作者:lsy
--  发布时间:2013/7/6 10:01:00
--  

 

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:当前价格.table

[此贴子已经被作者于2013-7-6 10:57:56编辑过]

--  作者:gsnake
--  发布时间:2013/7/6 11:08:00
--  
以下是引用lsy在2013-7-6 10:01:00的发言:
 下载信息  [文件大小:296.0 KB  下载次数:0]
图片点击可在新窗口打开查看点击浏览该文件:当前价格.table

If e.DataCol.Name = "价格" OrElse e.DataCol.Name = "生效日期" Then
    If e.DataRow.IsNull("价格") = False AndAlso e.DataRow.IsNull("生效日期") = False Then
        Dim dt As Date = DataTables("价格变动表").Compute("Max(生效日期)","产品编号 = \'" & e.DataRow("产品编号") & "\'")
        Dim dr As DataRow = DataTables("价格变动表").Find("生效日期 = #" & dt & "#")
        Dim dr1 As DataRow = DataTables("产品表").Find("产品编号 = \'" & e.DataRow("产品编号") & "\'")
        dr1("当前售价") = dr("价格")
    End If
End If

 

最大生效日期的啊!呵呵!


--  作者:gsnake
--  发布时间:2013/7/6 11:09:00
--  
以下是引用Bin在2013-7-6 9:43:00的发言:
.
 下载信息  [文件大小:296.0 KB  下载次数:3]
图片点击可在新窗口打开查看点击浏览该文件:事例1.table

For Each dr As DataRow In DataTables("产品表").DataRows
    If dr.IsNull("产品编号")=False Then
        Dim ilist As List(of DataRow) = dr.GetChildRows("价格变动表")
        If ilist IsNot Nothing Then
            For i As Integer=0 To ilist.count-1
                If ilist(i)("生效日期")<=Date.Today Then
                    dr("当前售价")=ilist(i)("价格")
                End If
            Next
        End If
    End If
Next

 

这个是对的!可是要有两个 If ilist(i)("生效日期")<=Date.Today 呢?

[此贴子已经被作者于2013-7-6 11:14:27编辑过]

--  作者:lsy
--  发布时间:2013/7/6 11:13:00
--  
以下是引用gsnake在2013-7-6 11:08:00的发言:

If e.DataCol.Name = "价格" OrElse e.DataCol.Name = "生效日期" Then
    If e.DataRow.IsNull("价格") = False AndAlso e.DataRow.IsNull("生效日期") = False Then
        Dim dt As Date = DataTables("价格变动表").Compute("Max(生效日期)","产品编号 = \'" & e.DataRow("产品编号") & "\'")
        Dim dr As DataRow = DataTables("价格变动表").Find("生效日期 = #" & dt & "#")
        Dim dr1 As DataRow = DataTables("产品表").Find("产品编号 = \'" & e.DataRow("产品编号") & "\'")
        dr1("当前售价") = dr("价格")
    End If
End If

 

最大生效日期的啊!呵呵!

你下载的不是最新的。

 

我们在用的数据库调价,遵循以下原则:

第一,肯定是要最大生效日期,一般是当日调价、当日生效,不会提前调价,以后生效。难道还要早前日期?调价当然是最大日期有效,该不会提前调好以后多个日期的价格吧?

第二,不到生效日期不生效,你看到的没照顾到这一点,现在的OK了。

[此贴子已经被作者于2013-7-6 11:18:55编辑过]

--  作者:lsy
--  发布时间:2013/7/6 11:23:00
--  

经过反复测试,我这个是对的。