以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  同表查找价格与跨表查找价格  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=118830)

--  作者:DLW77
--  发布时间:2018/5/11 18:21:00
--  同表查找价格与跨表查找价格
老师,我想在这个表中填入单价,有两种条件,1.如果“来源”列中是销货单、领料单时,查找同表中上一行的单价,就是3.2元的单价填入第5行的单价中。2.如果“来源”列是生产入库单、进货单时,在生产入库明细表或进货明细表中,查找与“单据”列相同的单据号的产品单价。
请老师指导一下,这个代码怎么写?想了很久也没想明白。
图片点击可在新窗口打开查看此主题相关图片如下:o(ekp8)dr1zt$y9s%i)h5y9.png
图片点击可在新窗口打开查看

--  作者:有点甜
--  发布时间:2018/5/11 19:01:00
--  

找上一行,参考代码

 

http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=118797&skin=0

 

跨表引用,参考

 

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

 


--  作者:DLW77
--  发布时间:2018/5/14 17:35:00
--  代码是否有错?重置后没数据
Select Case e.DataCol.Name
    Case "品号","单据"
        Dim dr As DataRow = e.DataRow
        Dim pr As DataRow
        If dr.IsNull("品号") OrElse dr.IsNull("单据") Then
            dr("单价") = Nothing
        Else
            Dim filter1 As String
            filter1 = "品号 = \'" & dr("品号") & "\' And 进退货单号 = \'" & dr("单据")  & "\'"
            pr = DataTables("进退货明细").Find(filter1)
            If pr IsNot Nothing Then
                dr("单价") = pr("单价")
            End If
            If dr.IsNull("品号") OrElse dr.IsNull("单据") Then
                dr("单价") = Nothing
            Else
                Dim filter2 As String
                filter2 = "主件品号 = \'" & dr("品号") & "\' And 生产入库单号 = \'" & dr("单据")  & "\'"
                pr = DataTables("生产日报表").Find(filter2)
                If pr IsNot Nothing Then
                    dr("单价") = pr("材料单价")
                End If
                If dr.IsNull("品号") OrElse dr.IsNull("单据") Then
                    dr("单价") = Nothing
                Else
                    Dim filter3 As String
                    filter3 = "主件品号 = \'" & dr("品号") & "\' And 进退货单号 = \'" & dr("单据")  & "\'"
                    pr = DataTables("委外日报表").Find(filter3)
                    If pr IsNot Nothing Then
                        dr("单价") = pr("单价")
                    End If
                    If dr.IsNull("品号") OrElse dr.IsNull("单据") Then
                        dr("单价") = Nothing
                    Else
                        Dim filter4 As String
                        filter4 = "品号 = \'" & dr("品号") & "\' And 单据 = \'" & dr("单据")  & "\'"
                        pr = DataTables("期初结存").Find(filter4)
                        If pr IsNot Nothing Then
                            dr("单价") = pr("单价")
                        End If
                        If dr("单价") Is Nothing Then
                            pr = DataTables("出入库明细").Find("品号 = \'" & dr("品号") & "\' and _Identify < " & dr("_Identify"), "_Identify desc")
                            dr("单价") = pr("单价")
                        End If
                    End If
                End If
            End If
        End If
End Select

代码红色前面的,都按代码填入了,但是红色部份,按重置键后,都没反映。我这个代码想要的效果是:如果单价列为空值的,就查找上一行的单价,并填到空值行的单价中。图中有一行的销售单,可以填入单价8.0795,但后面的都没填入。还有,我这些代码能简化吗?19303902
图片点击可在新窗口打开查看此主题相关图片如下:%~@64g$hyk1u6y@ngg_c.png
图片点击可在新窗口打开查看
[此贴子已经被作者于2018/5/14 17:37:51编辑过]

--  作者:有点甜
--  发布时间:2018/5/14 17:43:00
--  

单独写代码


Select Case e.DataCol.Name
    Case "品号","单据", "来源", "单价"
        msgbox(123)
        Dim dr As DataRow = e.DataRow
        If dr("来源") = "销货单" OrElse dr("来源") = "领料单" Then
            Dim pr = DataTables("出入库明细").Find("品号 = \'" & dr("品号") & "\' and _Identify < " & dr("_Identify"), "_Identify desc")
            If pr IsNot Nothing Then
                dr("单价") = pr("单价")
            End If
        End If
End Select

[此贴子已经被作者于2018/5/15 15:27:17编辑过]

--  作者:DLW77
--  发布时间:2018/5/15 15:17:00
--  写代码重置列后,出现了错误信息
写代码重置列后,出现的错误信息是:

错误所在事件:表,出入库明细, DataColChanged
详细错误信息:
调用的目标发生了异常。
未将对象引用设置到对象的实例。


MSGBOX(123)是什么意思?弹出了这个窗口,但我是要把值填到当前行的单价中,不是要弹出窗口显示。

[此贴子已经被作者于2018/5/15 15:19:45编辑过]

--  作者:有点甜
--  发布时间:2018/5/15 15:27:00
--  

代码改成这样

 

Select Case e.DataCol.Name
    Case "品号","单据", "来源", "单价"
        msgbox(123)
        Dim dr As DataRow = e.DataRow
        If dr("来源") = "销货单" OrElse dr("来源") = "领料单" Then
            Dim pr = DataTables("出入库明细").Find("品号 = \'" & dr("品号") & "\' and _Identify < " & dr("_Identify"), "_Identify desc")
            If pr IsNot Nothing Then
                dr("单价") = pr("单价")
            End If
        End If
End Select


--  作者:DLW77
--  发布时间:2018/5/15 16:05:00
--  填入重置后,没显示单价

图片点击可在新窗口打开查看此主题相关图片如下:l)1gjhxl1b}m`459fh7px6.png
图片点击可在新窗口打开查看

--  作者:DLW77
--  发布时间:2018/5/15 16:08:00
--  明白哪里有问题了,谢谢
明白哪里有问题了,谢谢
--  作者:DLW77
--  发布时间:2018/5/18 15:49:00
--  同表中需要跨两个表引用数据,但只能显示一个表的内容
我先做了个跨表引用“出入库成本表”引用了数据出来,但在另一个跨表引用数据时,就没办法引出数据。是不是我代码哪里出错了?
图片点击可在新窗口打开查看此主题相关图片如下:xj76v5ka827x8t(gtvuhnuh.png
图片点击可在新窗口打开查看

Select Case e.DataCol.Name
    Case "生产入库单号","子件品号","主件品号"
        Dim dr As DataRow = e.DataRow
        Dim pr As DataRow
        If dr.IsNull("子件品号") OrElse dr.IsNull("耗用量") Then
            dr("单价") = Nothing
        Else
            Dim filter1 As String
            filter1 = "品号 = \'" & dr("子件品号") & "\' And 单号 = \'" & dr("生产入库单号")  & "\'"
            pr = DataTables("出入库成本").Find(filter1)
            If pr IsNot Nothing Then
                dr("单价") = pr("结存单价")
            End If
            If dr.IsNull("子件品号") OrElse dr.IsNull("耗用量") Then
                dr("单价") = Nothing
            Else
                Dim filter2 As String
                filter2 = "成品品号 = \'" & dr("主件品号") & "\' And 半成品品名 = \'" & dr("子件品号")  & "\'"
                pr = DataTables("半成品成本").Find(filter2)
                If pr IsNot Nothing Then
                    dr("单价") = pr("成本单价")
                End If
            End If
        End If


--  作者:有点甜
--  发布时间:2018/5/18 16:06:00
--  

Select Case e.DataCol.Name
    Case "生产入库单号","子件品号","主件品号"
        Dim dr As DataRow = e.DataRow
        Dim pr As DataRow
       
        Dim filter1 As String
        filter1 = "品号 = \'" & dr("子件品号") & "\' And 单号 = \'" & dr("生产入库单号")  & "\'"
        pr = DataTables("出入库成本").Find(filter1)
        If pr IsNot Nothing Then
            dr("单价") = pr("结存单价")
        Else
            Dim filter2 As String
            filter2 = "成品品号 = \'" & dr("主件品号") & "\' And 半成品品名 = \'" & dr("子件品号")  & "\'"
            pr = DataTables("半成品成本").Find(filter2)
            If pr IsNot Nothing Then
                dr("单价") = pr("成本单价")
            Else
                dr("单价") = Nothing
            End If
        End If
End Select