以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]先进的先出  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=86739)

--  作者:huhu
--  发布时间:2016/6/24 15:48:00
--  [求助]先进的先出

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

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

出库的原则是先进先出。

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

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

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

 

这个怎么写呢?


--  作者:大红袍
--  发布时间:2016/6/24 15:56:00
--  

 思路:统计出库总数,比如已出库1234,现在要出库100。循环入库每一行,累加每一行的值,直到大于1234,然后接着循环,减去100的值

 

 参考

 

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

 


--  作者:大红袍
--  发布时间:2016/6/24 15:56:00
--  
 不会做请上传实例。
--  作者:huhu
--  发布时间: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


--  作者:大红袍
--  发布时间:2016/6/24 16:14:00
--  
 看2、3楼。不会做,单独做个例子发上来。
--  作者:huhu
--  发布时间:2016/6/24 16:38:00
--  

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

 

例子简单。

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

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


--  作者:大红袍
--  发布时间:2016/6/24 17:05:00
--  

直接新增行测试。

 

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


--  作者:huhu
--  发布时间:2016/6/24 17:12:00
--  
一定要升级到最新版本才能打开吗?我的是老ft版本,还没敢升级。
--  作者:大红袍
--  发布时间:2016/6/24 17:14:00
--  

 安装最新版,然后拷贝最新的文件出来,重新安装你的旧版本。

 

 要打开新版,就先启动那个拷贝出来的文件夹exe


--  作者:huhu
--  发布时间: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在库存明细管理表里得到物料编码和订单号,然后与销售出库单比较,是否一致。如果一致,那么先进先出。