以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  如何在代码中组合条件  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=119843)

--  作者:DLW77
--  发布时间:2018/6/1 22:35:00
--  如何在代码中组合条件
有个代码没想明白,请老师指点一下。
上传的是表“出入库成本表",表中的生产入库单+成品仓的行,我从”入库成本表“中提取了”结存单价“
但表中的生产入库单+现场仓的行,如果我在代码这里加入生产入库单If dr("单据类型") = "退料单" OrElse dr("单据类型") = "领料单" OrElse dr("单据类型") = "出库单" OrElse dr("单据类型") = "入库单" OrElse dr("单据类型") = "调整单"  OrElse dr("单据类型") = "调拨单"  OrElse dr("单据类型") = "委外送料单"  OrElse dr("单据类型") = "委外退料单"  OrElse dr("单据类型") = "退货单"  OrElse dr("单据类型") = "销货单"  OrElse dr("单据类型") = "销退单" OrElse dr("单据类型") = "生产入库单" Then
前面从”入库成本表“中提取了”结存单价“,就会给这个代码算出来的复盖。我用什么代码区分,”生产入库单+成品“  及 ”生产入库单+现场仓“  这两个条件并能提取到相应的”结存单价“
图片点击可在新窗口打开查看此主题相关图片如下:%2)na1jfx9qwf(ofub8kyy.png
图片点击可在新窗口打开查看

Select Case e.DataCol.Name
    Case "品号","单号"
        Dim dr As DataRow = e.DataRow
        Dim pr As DataRow
        Dim filter1 As String
        filter1 = "品号 = \'" & dr("品号") & "\' And 单号 = \'" & dr("单号") & "\' And 入库数量 = \'" & dr("入库数量") & "\'"
        pr = DataTables("入库成本表").Find(filter1)
        If pr IsNot Nothing Then
            dr("结存单价") = pr("结存单价")
        End If
End Select
msgbox(123)
Select Case e.DataCol.Name
    Case "品号","单据类型", "单号"
        Dim dr As DataRow = e.DataRow
        If dr("单据类型") = "退料单" OrElse dr("单据类型") = "领料单" OrElse dr("单据类型") = "出库单" OrElse dr("单据类型") = "入库单" OrElse dr("单据类型") = "调整单"  OrElse dr("单据类型") = "调拨单"  OrElse dr("单据类型") = "委外送料单"  OrElse dr("单据类型") = "委外退料单"  OrElse dr("单据类型") = "退货单"  OrElse 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/6/1 22:51:00
--  
Select Case e.DataCol.Name
    Case "品号","单号","单据类型","仓库名称"
        Dim dr As DataRow = e.DataRow
        Dim filter1 As String
        Dim pr As DataRow
        If dr("仓库名称") = "成品" Then
            filter1 = "品号 = \'" & dr("品号") & "\' And 单号 = \'" & dr("单号") & "\' And 入库数量 = \'" & dr("入库数量") & "\'"
            pr = DataTables("入库成本表").Find(filter1)
            If pr IsNot Nothing Then
                dr("结存单价") = pr("结存单价")
            End If
        ElseIf dr("仓库名称") = "现场仓" Then
            If dr("单据类型") = "退料单" OrElse dr("单据类型") = "领料单" OrElse dr("单据类型") = "出库单" OrElse dr("单据类型") = "入库单" OrElse dr("单据类型") = "调整单"  OrElse dr("单据类型") = "调拨单"  OrElse dr("单据类型") = "委外送料单"  OrElse dr("单据类型") = "委外退料单"  OrElse dr("单据类型") = "退货单"  OrElse dr("单据类型") = "销货单"  OrElse dr("单据类型") = "销退单" Then
                Dim pr = e.DataTable.Find("品号 = \'" & dr("品号") & "\' and _Identify < " & dr("_Identify"), "_Identify desc")
                If pr IsNot Nothing Then
                    dr("结存单价") = pr("结存单价")
                End If
            End If
        Else 
            \'其它类型
        End If
End Select


--  作者:DLW77
--  发布时间:2018/6/2 9:35:00
--  出现错误信息

图片点击可在新窗口打开查看此主题相关图片如下:3klk_3xwd_tf__ukzw070w.png
图片点击可在新窗口打开查看

--  作者:有点蓝
--  发布时间:2018/6/2 9:53:00
--  
Dim pr = e.DataTable.Find("品号 = \'" & dr("品号") & "\' and _Identify < " & dr("_Identify"), "_Identify desc")

改为

pr = e.DataTable.Find("品号 = \'" & dr("品号") & "\' and _Identify < " & dr("_Identify"), "_Identify desc")

--  作者:DLW77
--  发布时间:2018/6/2 10:01:00
--  可以了,谢谢
老师太利害了,昨天想了几个小时都没想明白,老师一出手就搞定了,看来我也要好好再学习学习,希望到时能有您的水平图片点击可在新窗口打开查看
--  作者:DLW77
--  发布时间:2018/6/2 10:37:00
--  我再测试了一下,还不行。
老师,我刚看错了,代码还是不行。因为设定了提取“入库成本表”只能仓库是“成品”的,所以其他仓库的都没办法提取, If dr("仓库名称") = "成品" Then。本表中设定了只有现场仓的,其他仓库就没办法显示出来ElseIf dr("仓库名称") = "现场仓" Then。但我只是想,如果通过“生产入库单+现场仓”这个条件,就可以提取上一个相同品号的结存单价。
图片点击可在新窗口打开查看此主题相关图片如下:nezor1p$h7j06z1oyg~t8sh.png
图片点击可在新窗口打开查看
[此贴子已经被作者于2018/6/2 10:37:19编辑过]

--  作者:有点蓝
--  发布时间:2018/6/2 11:10:00
--  
去掉这个判断:If dr("单据类型") = "退料单" OrElse.......

或者增加一个类型