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


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

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

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


加好友 发短信
等级:五尾狐 帖子:1165 积分:8129 威望:0 精华:0 注册:2015/3/30 10:44:00
  发帖心情 Post By:2016/6/25 16:58:00 [显示全部帖子]

物料编码就是设备的标示。理解为型号。

比如笔记本,型号为E460,这个就是我说的物料编码。同一个物料编码肯定有多个不重复的序列号SN。

然后呢,这个物料编码123是给订单aaa在上个月做了50台。这个月又给做了100台。

由于某些原因,这次只能发100台。那么就要求,上个月的50必须出掉,这个月100台随便出50台就可以了。扫描不用管先后顺序,随便扫。

 

你的代码。这个集合,涉及到SN,那不就是仅有一行么。SN都是不同的啊。不会出现重复的。

Dim drs As List(Of DataRow) = DataTables("库存明细表").Select(CExp("SN='{0}' and 订单号='{1}' and 物料编码='{2}' and 状态='入库完成'", e.NewValue,e.DataRow("订单号") ,e.DataRow("物料编码")),"在库生命周期 desc")

[此贴子已经被作者于2016/6/25 16:59:10编辑过]

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


加好友 发短信
等级:五尾狐 帖子:1165 积分:8129 威望:0 精华:0 注册:2015/3/30 10:44:00
  发帖心情 Post By:2016/6/26 6:18:00 [显示全部帖子]

我想到了一种思路,在配置整理表扫描SN。

首先先把,在库存明细表里面找出物料编码,订单号与销售出库单要求的物料编码,订单号一致,且状态为入库完成,在库周期DESC的所有行作为一个集合。

然后找出销售出库单要求的发货数量在这个集合的第多少行,比如销售出库单要求发货100,那么在这个集合里面找到第100行,那么就知道了这个第100行对应的在库时间周期了,比如是2.

然后在这个集合里面找在库生命周期是否有大于2的。如果有,那么在库生命周期大于2的SN肯定是要都是符合发货要求的且是必须要发走的。

那么如果扫到的SN,对应的的在库周期确实是大于2,那么就是符合要求的,状态变为配货完成。

然后计算出在库生命周期大于2的行有多少,比如有50,那么销售要求的发货数量100减去必须要发走的50,剩下的50那么必须是要求在在库生命周期为2的里找,只要扫的SN,对应的在库生命周期为2,且累计起来小于等于50.那都是符合发货要求,如果超过50了,那么扫到的SN是不符合发货要求的。

如果扫到的SN,对应的在库生命周期小于2,那么都是不符合发货要求的。只要是不符合发货要求的,状态都改为不符合出库要求。

 

这个思路应该是对的吧。就是怎么写合适了。

 

 


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


加好友 发短信
等级:五尾狐 帖子:1165 积分:8129 威望:0 精华:0 注册:2015/3/30 10:44:00
  发帖心情 Post By:2016/6/26 14:25:00 [显示全部帖子]

你是说12楼的代码没问题?还是你发我例子的代码没问题?

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


加好友 发短信
等级:五尾狐 帖子:1165 积分:8129 威望:0 精华:0 注册:2015/3/30 10:44:00
  发帖心情 Post By:2016/6/26 14:51:00 [显示全部帖子]

一个前提条件我没说。

就是配货的时候,我已经做了,哪个物料编码,针对哪个订单,共计有多少台,在哪个库位编码上,库位编码就是物理位置。

扫描员是很精确的知道要找的设备在哪个位置的。不是随便乱找的。


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


加好友 发短信
等级:五尾狐 帖子:1165 积分:8129 威望:0 精华:0 注册:2015/3/30 10:44:00
  发帖心情 Post By:2016/6/28 14:40:00 [显示全部帖子]

If e.DataCol.name = "SN" Then
    Dim nms2() As String = {"生产订单号码","工单行号","物料编码","物料名称","类别说明","产品批次","订单号","订单行号","客户","备注","软件版本","状态","数量","MAC","HW","入库单号","库位类别","库位编码","收货完成时间","体态","SN"}
    If Not e.DataRow.IsNull("SN")  Then
        Dim mr As DataRow = DataTables("库存明细表").SQLFind("SN = '" & e.DataRow("SN") & "'")
        If mr IsNot Nothing Then
            For Each nm2 As String In nms2
                e.DataRow(nm2) = mr(nm2)
            Next
        Next
        Dim rs As List(Of DataRow) = DataTables("库存明细表").SQLGetValues("在库生命周期","订单号 = '" & Vars("xsddh") & "' And  物料编码 = '" & vars("chbm") & "' and (状态='入库完成' or 状态='配货完成')","在库生命周期" )
        Dim drs As List(Of DataRow) = DataTables("库存明细表").Select(CExp("订单号='{0}' and 物料编码='{1}' and 状态='入库完成'", Vars("xsddh") ,vars("chbm")),"在库生命周期 desc")
        For Each dr As DataRow In drs
            Dim sum  As Integer
            sum = sum + dr("数量")
            If sum = '" & vars("zsl") & "' Then 'vars("zsl") 是需要发货的数量
                For cach r As Row In rs
                    If r("在库生命周期") > dr("在库生命周期") Then
                        Dim rts1 As List(of DataRow) = DataTables("库存明细表").SQLSelect("订单号 = '" & Vars("xsddh") & "' And  物料编码 = '" & vars("chbm") & "' and 状态='入库完成' and 在库生命周期 > = r("在库生命周期") ")
                        Dim rts2 As List(of DataRow) = DataTables("库存明细表").SQLSelect("订单号 = '" & Vars("xsddh") & "' And  物料编码 = '" & vars("chbm") & "' and 状态='入库完成' and 在库生命周期  = dr("在库生命周期") ")
                        Dim ct1 As Integer
                        ct1 = rtsl.count
                        Dim ct2 As Integer
                        ct2 = vars("zsl") - ct1
                    End If
                    Return
                Next
            End If
            If rts1.Contains(e.DataRow) Then
                e.DataRow("数量") = 1
                e.DataRow("状态") = "配货完成"
                e.DataRow.save
                Dim nr As DataRow = DataTables("库存明细表").SQLFind("SN = '" & e.DataRow("SN")")
                If nr IsNot Nothing Then
                    nr("状态") = "配货完成"
                End If
                Dim sum2 As Integer
                sum2 = sum2 + 1
                If sum2 > ct1 Then
                    e.DataRow("数量") = 0
                    e.DataRow("状态") = "重复扫描"
                End If
            End If
            If rts2.Contains(e.DataRow) Then
                Dim sum3 As Integer
                sum3 = sum3 + 1
                If sum3 < = ct2 Then
                    Dim lr As DataRow = DataTables("配货扫描").find("SN = '" & e.DataRow("SN") & "'", "_Identify <> '" & e.DataRow("_Identify") & "'" )
                    If lr IsNot Nothing Then
                        e.DataRow("数量") = 0
                        e.DataRow("状态") = "重复扫描"
                        e.DataRow.save
                    Else
                        e.DataRow("数量") = 1
                        e.DataRow("状态") = "配货完成"
                        e.DataRow.save
                    End If
                Else
                    e.DataRow("数量") = 0
                    e.DataRow("状态") = "不属于配货发货条件"
                    e.DataRow.save
                End If
                If rts1.Contains(e.DataRow) = False Or rts2.Contains(e.DataRow) = False Then
                    e.DataRow("数量") = 0
                    e.DataRow("状态") = "不属于配货发货条件"
                    e.DataRow.save
                End If
            End If
        End If
    Next
    Return
End If
Next
End If
End If

 

 我就按照这个思路来写,写不下去了。能帮忙给看看么。怎么写简单直观明了呢。一看就明白,我上面写的看着就头疼。


 


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


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

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

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


 回到顶部
帅哥哟,离线,有人找我吗?
huhu
  17楼 | 信息 | 搜索 | 邮箱 | 主页 | 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


 回到顶部
帅哥哟,离线,有人找我吗?
huhu
  18楼 | 信息 | 搜索 | 邮箱 | 主页 | 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

 回到顶部
帅哥哟,离线,有人找我吗?
huhu
  19楼 | 信息 | 搜索 | 邮箱 | 主页 | 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编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
huhu
  20楼 | 信息 | 搜索 | 邮箱 | 主页 | 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的一台就可以了。


 回到顶部
总数 25 上一页 1 2 3 下一页