以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]库存先进先出,一直错误,求教高手  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=106851)

--  作者:yds
--  发布时间:2017/9/16 17:10:00
--  [求助]库存先进先出,一直错误,求教高手
DataTables("产品库").load()
DataTables("产品出入明细").load()
Dim ssck As String = e.Form.Controls("所属仓库").Value
Dim rq As Date = e.Form.Controls("日期").Value
Dim cpmc As String = e.Form.Controls("产品名称").Value
Dim cplx As String = e.Form.Controls("产品类型").Value
Dim lqry As String = e.Form.Controls("领取人员").Value
Dim ddbh As String = e.Form.Controls("订单编号").Value
Dim lqsl As Integer = e.Form.Controls("领取数量").Value
Dim kc As Double = DataTables("产品库").SQLCompute("Sum(库存数量)", "产品类型 = \'" & cplx & "\' And 产品名称 = \'" & cpmc & "\' And 所属仓库 = \'" & ssck & "\'")
If lqsl > 0 Then
    If kc >= lqsl Then
        Dim count As Integer = 0
        Dim drs As List(Of DataRow) = DataTables("产品库").Select("产品类型 = \'" & cplx & "\' And 产品名称 = \'" & cpmc & "\' And 库存数量  > 0 And 所属仓库 = \'" & ssck & "\'", "产品批次, 存储位置_架,存储位置_层")
        For i As Integer = 0 To drs.count - 1
            Dim dr As DataRow = drs(i)
            Dim sy As Integer = lqsl - dr("库存数量")
            If sy > 0 Then
                Dim cr As DataRow = DataTables("产品出入明细").AddNew()
                cr("方向") = "出库"
                cr("所属仓库") = ssck
                cr("日期") = rq
                cr("产品批次") = dr("产品批次")
                cr("产品名称") = cpmc
                cr("产品类型") = cplx
                cr("交接人") = lqry
                cr("数量") = dr("库存数量")
                cr("存储位置_架") = dr("存储位置_架")
                cr("存储位置_层") = dr("存储位置_层")
                cr("订单编号") = ddbh
                dr("库存数量") = 0
                lqsl = lqsl - dr("库存数量")
            Else
                Dim cr As DataRow = DataTables("产品出入明细").AddNew()
                cr("方向") = "出库"
                cr("所属仓库") = ssck
                cr("日期") = rq
                cr("产品批次") = dr("产品批次")
                cr("产品名称") = cpmc
                cr("产品类型") = cplx
                cr("交接人") = lqry
                cr("数量") = lqsl
                cr("存储位置_架") = dr("存储位置_架")
                cr("存储位置_层") = dr("存储位置_层")
                cr("订单编号") = ddbh
                dr("库存数量") = dr("库存数量") - lqsl
                Exit For
            End If
        Next
    Else
        msgbox("库存不够")
    End If
Else
    msgbox("领取数量必须大于零")
End If
DataTables("产品库").load()
DataTables("产品出入明细").load()

--  作者:YDS
--  发布时间:2017/9/16 17:11:00
--  

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

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

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


--  作者:YDS
--  发布时间:2017/9/16 17:11:00
--  

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

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

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



--  作者:有点蓝
--  发布时间:2017/9/16 17:41:00
--  
上传实例测试
--  作者:YDS
--  发布时间:2017/9/17 8:00:00
--  
以下是引用有点蓝在2017/9/16 17:41:00的发言:
上传实例测试

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



--  作者:YDS
--  发布时间:2017/9/17 8:00:00
--  
请大神帮帮忙,看看程序哪里错了!
--  作者:有点甜
--  发布时间:2017/9/17 14:18:00
--  

修改红色代码

 

                Dim cr As DataRow = DataTables("产品出入明细").AddNew()
                cr("方向") = "出库"
                cr("所属仓库") = ssck
                cr("日期") = rq
                cr("产品批次") = dr("产品批次")
                cr("产品名称") = cpmc
                cr("产品类型") = cplx
                cr("交接人") = lqry
                cr("数量") = dr("库存数量")
                cr("存储位置_架") = dr("存储位置_架")
                cr("存储位置_层") = dr("存储位置_层")
                cr("订单编号") = ddbh
                lqsl = lqsl - dr("库存数量")
                dr("库存数量") = 0

--  作者:YDS
--  发布时间:2017/9/20 12:14:00
--  
非常感谢,问题完美解决
--  作者:aizaishuzui
--  发布时间:2017/9/20 18:39:00
--  
Select 是针对已经加载进来的行,如果是要后台的用 SQLSelect吗?怎么改写呢?老师能帮忙写个例子让参考一下
--  作者:aizaishuzui
--  发布时间:2017/9/20 18:55:00
--  
测试了一下   SQLSelect(Filter,“”,Sort) 是可以的,但好像要加DataTables("表").SQLUpdate(drs)
目前还在测试应该放在哪个位置,Exit For上面?

脑子短路了,应该放在 Next 下一行
[此贴子已经被作者于2017/9/20 19:55:33编辑过]