Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

毛需求减库存变净需求

黑夜  发表于:2016-07-27 09:46:54  
复制

MRP需求是有时间轴的,库存为某个时间点的值,如何把库存扣减掉只保留净需求?那位大神可以给个具体思路与操作方法?谢谢!

需求的简单示例如下:

原始数据交叉表(库存即库存,需求即需求,无计算):

qry订单交叉表
摘要 2010/2/1 2010/2/11 2010/2/15 2010/2/20 2010/3/7
MRP
1500 300 200 100
库存RAW 100




希望得到的结果(2/11的需求从1500变为1400,后续需求不变):

qry订单交叉表
摘要 2010/2/1 2010/2/11 2010/2/15 2010/2/20 2010/3/7
MRP
1400 300 200 100
库存RAW 100



如果库存是1600,2/11的需求变为0,2/15的需求变为200,后续需求不变:


qry订单交叉表
摘要 2010/2/1 2010/2/11 2010/2/15 2010/2/20 2010/3/7
MRP
0 200 200 100
库存RAW 1600



原始数据如下:


订单日记账
ID 日期 类别 摘要 金额 备注
1 2010/2/1 收入 库存RAW 100.00
2 2010/2/11 支出 MRP 1,500.00
3 2010/2/15 支出 MRP 300.00
4 2010/2/20 支出 MRP 200.00
7 2010/3/7 支出 MRP 100.00


 

Top
黑夜 发表于:2016-08-03 08:55:06

 如果按累计值计算,扣掉库存可以,但是需求也都变成累计值了,还是不方便。

 

qry订单交叉表
摘要 2010/2/1 2010/2/11 2010/2/15 2010/2/20 2010/3/7
MRP
-1400 -1700 -1900 -2000
库存RAW 100



 



朱先生 发表于:2016-08-04 08:22:24

供参考

Private Sub Command0_Click()

    Dim rs1 As New ADODB.Recordset
    rs1.Open "表1", CurrentProject.Connection, adOpenKeyset, adLockOptimistic
    For I = 2 To rs1.RecordCount - 1
        strsql1 = DLookup("[金额]", "表1", "[ID]= 1")
        strsql2 = DLookup("[金额]", "表1", "[ID]= " & I & "")
        If syrsql2 > strsql1 Then
            DoCmd.RunSQL "UPDATE 表1 SET 金额= 金额-VAL(" & strsql1 & ") WHERE ID=" & I & ""
            Exit Sub
        Else
            DoCmd.RunSQL "UPDATE 表1 SET 金额= -金额+VAL(" & strsql1 & ") WHERE ID=" & I & ""
            strsql3 = DLookup("[金额]", "表1", "[ID]= " & I & "")
            If cc = 0 Then
                Exit Sub
            Else
                DoCmd.RunSQL "UPDATE 表1 SET 金额= 金额-VAL(" & strsql3 & ") WHERE ID=" & I & "+1"
                DoCmd.RunSQL "UPDATE 表1 SET 金额= 0 WHERE ID=" & I & ""
                Exit Sub
            End If
        End If
    Next
End Sub



黑夜 发表于:2016-08-04 10:39:06


黑夜 发表于:2016-08-04 10:50:14
点击下载此附件

 

朱先生,谢谢您的代码及思路!

附件已上传,目前的问题是如果第一个MRP需求大于库存,可以正常扣减!

如果第一个MRP需求小于库存,则出问题:

运行前:

表1
ID 日期 类别 摘要 金额 备注
1 2010/2/1 收入 库存RAW 1,500.00
2 2010/2/11 支出 MRP 700.00
3 2010/2/15 支出 MRP 300.00
4 2010/2/20 支出 MRP 200.00
7 2010/3/7 支出 MRP 100.00
8 2016/5/1 支出 MRP 2,000.00

 

运行后:

表1
ID 日期 类别 摘要 金额 备注
1 2010/2/1 收入 库存RAW 1,500.00
2 2010/2/11 支出 MRP 800.00 这里应该为0
3 2010/2/15 支出 MRP 300.00 这里应该为0
4 2010/2/20 支出 MRP 200.00 这里应该为0
7 2010/3/7 支出 MRP 100.00 这里应该为0
8 2016/5/1 支出 MRP 2,000.00 这里应该为1800

 



朱先生 发表于:2016-08-04 17:03:21
SELECT 表1.ID, 表1.日期, 表1.类别, 表1.摘要, 表1.金额, 表1.备注, IIf([id]=1,[金额],IIf([金额]<DLookUp("金额","表1","ID=1"),0,DSum("金额","表1","摘要='mrp'")-DLookUp("金额","表1","ID=1"))) AS 需求 INTO 表2
FROM 表1;
上图的结果 ,用表2做交叉表查询即可

黑夜 发表于:2016-08-04 21:25:28

谢谢大神!

可能要求确实复杂了点,对于举例来讲,是OK的,但实际库存与需求会有好多种情况,比如把库存修改为1000,得到的结果(结果是把数据汇总)就不是想要的:


摘要 日期 需求 备注
库存RAW 2010/2/1 1000
MRP 2010/2/11 0 结果0是正确的
MRP 2010/2/15 0 结果0是正确的
MRP 2010/2/20 0 这里应该是200
MRP 2010/3/7 0 这里应该是100
MRP 2016/5/1 2300 这里应该是2000,公式的结果把数据汇总了




黑夜 发表于:2016-08-04 22:49:58

对于含时间轴的订单,汇总就没有意义了,见下图,而难就难在时间及数量的判断上面



摘要 日期 金额 需求 备注
库存RAW 2010/2/1 2,000.00 2000
MRP 2010/2/11 2,700.00 15300
MRP 2010/2/15 2,300.00 15300
MRP 2010/2/20 200.00 0
MRP 2010/3/7 100.00 0
MRP 2016/5/1 2,000.00 15300
MRP 2016/8/4 10,000.00 15300




黑夜 发表于:2016-08-18 23:12:07

终于搞定了,在备注列用IIF函数对需求列逐行汇总(DSUM)的结果与金额列按一定条件做判断即可计算净需求!



总记录:8篇  页次:1/1 9 1 :