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


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

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

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


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

在库存明细里面都是按照序列号来进行管理的。

每个序列号都有自己的在库生命周期,单位是天。

出库的原则是先进先出。

比如现有一个订单号为123的订单需要发货100台。在库存明细里面有50台在库时间是2天的,100台在库时间是1天的。

也就是说在库时间为2天的50台必须出掉,同时在在库时间为1天的100台里面随便出50台出就行。

不能为了方便直接把在库时间为1天的100台出掉。

 

这个怎么写呢?


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


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

思路我还是不懂,能再说明白一下么。

比如我现在已经找出来可以满足发货要求的行,然后在这些行里面挑出先进的先出。没搞懂。

Dim drs As List(of DataRow) = DataTables("库存明细表").SQLSelect("订单号 = '" & Vars("xsddh") & "' and 状态 = '入库完成'")
Dim sum As Integer
sum = DataTables("库存明细表").SQLCompute("Sum(数量)","订单号 = '" & Vars("xsddh") & "' and 状态 = '入库完成'")
If sum > vars("发货数量") Then

End If


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


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

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

 

例子简单。

问题说一下。在销售出库单双击发货单号,会打开配货整理窗体,里面绑定了配货明细表。

现在每扫一个SN,就需要到库存明细里面找符合要求的,物料编码相等,订单号相等,然后按照先进先出的原则出库。当出库总数量和预发货数量相等,销售发货单的配货状态就变为true。再扫到序列号都不能出库,


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


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

一定要升级到最新版本才能打开吗?我的是老ft版本,还没敢升级。

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


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

Select Case e.DataCol.name
    Case "订单号", "物料编码"
        If e.DataRow.IsNull("订单号") = False AndAlso e.DataRow.IsNull("物料编码") = False Then
            Dim fdr As DataRow = DataTables("库存明细表").find("订单号='" & e.DataRow("订单号") & "' and 物料编码='" & e.DataRow("物料编码") & "' and 状态='入库完成'", "在库生命周期 desc")
            If fdr IsNot Nothing Then
                e.DataRow("sn") = fdr("sn")
                fdr("状态") = "出库"

                Dim count As Integer = e.DataTable.Compute("count(sn)","订单号='" & e.DataRow("订单号") & "' and 物料编码='" & e.DataRow("物料编码") & "'")
                Dim dr As DataRow = DataTables("销售出库单").find("订单号='" & e.DataRow("订单号") & "' and 物料编码='" & e.DataRow("物料编码") & "'")
                If dr IsNot Nothing Then
                    If count >= dr("预发货数量") Then
                        dr("配货状态") = True
                    End If
                End If
            End If
        End If
End Select

单从看代码,我觉得有问题。你是先得到物料编码和订单号,然后得到SN。

正常情况SN不是得到的,是扫描枪扫出来的,根据SN在库存明细管理表里得到物料编码和订单号,然后与销售出库单比较,是否一致。如果一致,那么先进先出。


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


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

好像我并没有把问题描述清楚。

配货和扫描顺序无关。只要保证扫到的这批货,不能有比他们其中任何一个在库生命周期长的。

比如需要配货100台。50台在库生命周期3天,100台在库生命周期2天。

那么在库生命周期为3天的50台是必须要全部扫到的。

然后还差50台,只能在在库生命周期为2天的100台找,随便找到了50台就可以了。

这样合起来就是100台。就符合要求。


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


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

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

 

 

If Not e.DataRow.IsNull("SN")应该和If  (e.DataRow.IsNull("SN") = false) then 一样的吧。

 

Dim drs As List(Of DataRow) = DataTables("库存明细表").Select(CExp("SN='{0}' and 订单号='{1}' and 物料编码='{2}' and 状态='入库完成'", e.NewValue,e.DataRow("订单号") ,e.DataRow("物料编码")),"在库生命周期 desc")----这一句是什么意思?怎么个用法?CExp

 


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


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

有仓位信息啊。就是库位编码。

有一个表在库数量统计。涉及到库位编码,物料编码,订单号,总数量。

就是系统已经告诉了扫描员应该到某几个库位编码去找设备,然后通过扫描的方式,系统提示是否符合出库要求。


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


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

Dim drs As List(Of DataRow) = DataTables("库存明细表").Select(CExp("SN='{0}' and 订单号='{1}' and 物料编码='{2}' and 状态='入库完成'", e.NewValue,e.DataRow("订单号") ,e.DataRow("物料编码")),"在库生命周期 desc")----这一句是什么意思?怎么个用法?CExp

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


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

有2个需求。

1.符合发货要求的,配置扫描表,那个SN,状态改为配货完成。不符合出库要求的,状态改为不符合出库条件。

2.符合出库条件的SN,在库存明细表找到那个SN,状态改为配货完成,数量改为0.

 

问题。这个动态合成表达式,没扫一个SN,符合条件的不应该就一行么,不会有多行,用list合适么。因为后面你有用了for each 循环。

Dim drs As List(Of DataRow) = DataTables("库存明细表").Select(CExp("SN='{0}' and 订单号='{1}' and 物料编码='{2}' and 状态='入库完成'", e.NewValue,e.DataRow("订单号") ,e.DataRow("物料编码")),"在库生命周期 desc")
For i As Integer = 0 To drs.Count-1
                        fdr = drs(i)
                        fdr("状态") = "出库"
                        count += fdr("数量")
                        If count >= dr("预发货数量") Then
                            dr("配货状态") = True
                            Return
                        End If
                    Next


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