Foxtable(狐表)用户栏目专家坐堂 → [求助]先进的先出


  共有5003人关注过本帖树形打印复制链接

主题:[求助]先进的先出

帅哥哟,离线,有人找我吗?
大红袍
  31楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/6/28 15:21:00 [只看该作者]

最简单,按照顺序出货,先理解这个,再去做根据天数的。

 

Select Case e.DataCol.name
    Case "SN"
        If Not e.DataRow.IsNull("SN")  Then
            Dim dr As Row = Tables("销售出库单").current
            Dim drs As List(Of DataRow) = DataTables("库存明细表").Select(CExp("订单号='{0}' and 物料编码='{1}' and 状态='入库完成'", dr("订单号") ,dr("物料编码")),"在库生命周期 desc")
            If dr IsNot Nothing Then
                Dim count As Integer = e.DataTable.Compute("count(sn)","订单号='" & dr("订单号") & "' and 物料编码='" & dr("物料编码") & "' and SN is not null")
               
                If count >= dr("预发货数量") Then
                    dr("配货状态") = True
                    msgbox("已经扫描完")
                    Return
                End If
               
                For Each fdr As DataRow In drs
                    If fdr("SN") = e.DataRow("SN") Then
                        fdr("状态") = "出库"
                        e.DataRow("订单号") = fdr("订单号")
                        e.DataRow("物料编码") = fdr("物料编码")
                        msgbox("SN可以出货")
                        Return
                    End If
                    count += fdr("数量")
                    If count >= dr("预发货数量") Then
                        msgbox("SN不能出货")
                        Return
                    End If
                Next
            End If
        End If
End Select


 回到顶部
帅哥哟,离线,有人找我吗?
huhu
  32楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1165 积分:8129 威望:0 精华:0 注册:2015/3/30 10:44:00
  发帖心情 Post By:2016/6/28 15:42:00 [只看该作者]

老师,我看了,你这个还是有可能会把刚入进去的设备发出去的。

如何能把在库生命周期加上来处理呢。麻烦你帮帮我。


 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  33楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/6/28 15:46:00 [只看该作者]

 31楼代码,测试没问题。请看懂代码啊

 回到顶部
帅哥哟,离线,有人找我吗?
huhu
  34楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1165 积分:8129 威望:0 精华:0 注册:2015/3/30 10:44:00
  发帖心情 Post By:2016/7/31 9:38:00 [只看该作者]

我把代码改了一下,发现不能按照在库时间先后出库了。请帮忙看看。
Dim yphsl As WinForm.Button = e.Form.Controls("Button5")
Dim bfhfh As WinForm.Button = e.Form.Controls("Button6")
Dim phwc As  WinForm.Button = e.Form.Controls("配货完成")
Select Case e.DataCol.name
    Case "SN"
        If Not e.DataRow.IsNull("SN")  Then
            e.DataRow. save
            Dim dr As Row = Tables("销售出库单列表").current
            Dim drs As List(Of DataRow) = DataTables("库存明细表").SQLSelect("订单号 = '" & dr("销售订单号") & "' and 物料编码 = '" & dr("存货编码") & "' and 状态 = '入库完成'","","在库生命周期 DESC")
            If dr IsNot Nothing Then
                Dim count As Integer = e.DataTable.Compute("count(sn)","订单号='" & dr("销售订单号") & "' and 物料编码='" & dr("存货编码") & "' and 状态 = '配货完成' and SN is not null")
                If count >= dr("数量") Then
                    dr("配货状态") = True
                    dr.save
                    Tables("配货整理_table1").Filter = "发货单号 = '" & Vars("u8fhdh") & "' and 存货编码 = '" & Vars("chbm") & "'"
                    Return
                End If
                Dim mr As DataRow = DataTables("配货扫描").SQLFind("SN = '" & e.DataRow("SN") & "' And  _Identify <> '" & e.DataRow("_Identify") & "'")
                msgbox(mr IsNot Nothing)
                If mr IsNot Nothing Then
                    If mr("状态") = "配货完成" Then
                        e.DataRow("状态") = "配货重复扫描"
                        e.DataRow("数量") = 0
                        e.DataRow.save
                    End If
                Else
                    For Each fdr As DataRow In drs
                        If  fdr("SN") = e.DataRow("SN") Then
                            fdr("状态") = "配货完成"
                            fdr("配货完成时间") = Date.now
                            fdr("U8发货单号") = Vars("u8fhdh")
                            fdr("业务员") = dr("业务员")
                            fdr("货运单号") = dr("货运单号")
                            fdr("发货地址") = dr("发货地址")
                            fdr("数量") = 0
                            fdr.Save
                            Dim nms() As String = {"生产订单号码","工单行号","物料编码","物料名称","类别说明","产品批次","订单号","订单行号","客户","备注","软件版本","MAC","HW","入库单号","库位类别","库位编码","入库完成时间","入库方式","在库生命周期"}
                            For Each nm As String In nms
                                e.DataRow(nm) = fdr(nm)
                            Next
                            e.DataRow("数量") = 1
                            e.DataRow("状态") = "配货完成"
                            e.DataRow("配货完成时间") = Date.now
                            e.DataRow("U8发货单号") = Vars("u8fhdh")
                            e.DataRow.save
                            Dim sum2 As Integer
                            sum2 = DataTables("配货扫描").SQLCompute("Sum(数量)","订单号='" & dr("销售订单号") & "' and 物料编码='" & dr("存货编码") & "' and 状态 = '配货完成'")
                            yphsl.text = "订单号:" & dr("销售订单号") & "+"  & "物料编码:" & dr("存货编码") & "已完成配货数量" & "=" & sum2
                            Dim count1 As Integer = e.DataTable.Compute("count(sn)","订单号='" & dr("销售订单号") & "' and 物料编码='" & dr("存货编码") & "' and 状态 = '配货完成' and SN is not null")
                            If count1 >= dr("数量") Then
                                dr("配货状态") = True
                                dr.save
                                Tables("配货整理_table1").Filter = "发货单号 = '" & Vars("u8fhdh") & "' and 存货编码 = '" & Vars("chbm") & "'"
                                Dim r As Row = Tables("销售出库单列表").Current
                                If r("配货状态") = False Then
                                    phwc.Enabled = False
                                Else
                                    phwc.Enabled = True
                                End If
                                Return
                            End If
                        End If
                        Dim count2 As Integer = e.DataTable.Compute("count(sn)","订单号='" & dr("销售订单号") & "' and 物料编码='" & dr("存货编码") & "' and 状态 = '配货完成' and SN is not null")
                        If count2 >= dr("数量") Then
                            e.DataRow("数量") = 0
                            e.DataRow("物料编码") = dr("存货编码")
                            e.DataRow("订单号") = dr("销售订单号")
                            e.DataRow("状态") = "不符合出库条件"
                            e.DataRow.save
                            bfhfh.text = "不符合出库SN有" & count2
                            Tables("配货整理_table4").Filter = "订单号='" & dr("销售订单号") & "' and 物料编码='" & dr("存货编码") & "' and 状态 = '不符合出库条件'"
                            Return
                        End If
                    Next
                End If
            End If
        End If
End Select


 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  35楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/7/31 10:09:00 [只看该作者]

 看不懂你的逻辑。请看懂31楼的代码。

 

 不会做,就单独做个例子发上来,说明逻辑。


 回到顶部
帅哥哟,离线,有人找我吗?
huhu
  36楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1165 积分:8129 威望:0 精华:0 注册:2015/3/30 10:44:00
  发帖心情 Post By:2016/7/31 10:26:00 [只看该作者]

请帮我解释一下,下面2个return意思,是退出整个循环还是本次循环,然后接着执行后面的代码。一直没看到这个。
For Each fdr As DataRow In drs
                    If fdr("SN") = e.DataRow("SN") Then
                        fdr("状态") = "出库"
                        e.DataRow("订单号") = fdr("订单号")
                        e.DataRow("物料编码") = fdr("物料编码")
                        msgbox("SN可以出货")
                        Return
                    End If
                    count += fdr("数量")
                    If count >= dr("预发货数量") Then
                        msgbox("SN不能出货")
                        Return
                    End If
                Next

 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  37楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/7/31 11:39:00 [只看该作者]

return 的意思,是退出整个事件。


 回到顶部
帅哥哟,离线,有人找我吗?
huhu
  38楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1165 积分:8129 威望:0 精华:0 注册:2015/3/30 10:44:00
  发帖心情 Post By:2016/7/31 13:25:00 [只看该作者]

还是上例子
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目1.foxdb



[此贴子已经被作者于2016/7/31 13:32:55编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  39楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/7/31 14:53:00 [只看该作者]

 看不懂你的逻辑。

 回到顶部
帅哥哟,离线,有人找我吗?
huhu
  40楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1165 积分:8129 威望:0 精华:0 注册:2015/3/30 10:44:00
  发帖心情 Post By:2016/7/31 15:25:00 [只看该作者]

就是发货数量是2的话,那么只能发在库生命周期为8和7的这2台。
如果发货数量为3的话,那么必须发在库生命周期为8和7这2台,同时随便发在库生命周期为5的一台就可以了。


 回到顶部
总数 47 上一页 1 2 3 4 5 下一页