"
<span style=""font-family:Microsoft YaHei;"">事先声明:由于本款产品是终身免费的,故有些功能并不是很全,目前只含有OA/财务/进销存功能。客户有些需求只能通过二次开发的方式去解决。<span style=""font-family:'Microsoft YaHei';line-height:1.5;font-size:10pt;"">本人对于数据库知识也是一知半解,三脚猫的工夫都算不上。
好了言归正传:事情是酱紫的,之前接到某客户的需求:销售订单生成采购订单(并且通过bom的组件方式去采购半成品和原材料)
接到这个需求的时候,老大让我尝试去做一次,美其名曰为了锻炼我,实际上是他懒!!!
没办法,硬着头皮上。我大概分析了下这个需求:
销售订单生成采购订单(并且通过BOM的组件方式去采购半成品和原材料)
①BOM物料清单(标准版没有)——需自定义业务单据 (这个简单直接忽略)
②通过查询配合EDI的方式去生成采购订单(所以要做一个查询&EDI)
查询&EDI
查询需要查出哪些列,是否分情况采购。直接采购和生产采购的区别。
直接采购:
因为查询出来的数量是不可以更改的,如果直接在EDI的界面更改数量的话又没有可以参考的值。所以,现在在查询里面定义一个公式,结合库存量,算出需采购数量。同时有些企业可能会有安全库存。我们也要把这个数量考虑进去:
故:【成品需采购数】= 销售订单的数量 – 库存量 + 安全库存
因为安全库存可能会经常变动,每种物料的安全库存设置可能都会不一样,在后台维护比较繁琐,所以我在【物料信息】上面加一个控件【安全库存】。查询直接从【物料信息】里面取值。
若【成品需采购数】< 0 表明库存里面的成品量足够发货,且高于安全库存。这时候则不需要再生成采购订单了。 所以,上述查询结果 满足的条件是【成品需采购数】> 0才显示。
生产采购:
如果【成品需采购数】< 0 则生产采购也就没必要了,所以生产采购的数量跟【成品需采购数】挂钩
故:【子件需采购数】=【成品需采购数】* 基础数量(BOM子件)- 库存量 + 安全库存
若【子件需采购数】< 0 表名库存里面的子件足够生产,且高于安全库存。这时候则不需要再生成采购订单了。所以上述的查询结果 满足的条件是【子件需采购数】> 0 才显示。
那么现在问题来了:①我这个逻辑是否有问题,企业实际会这样去采购嘛? ②这离简单的MRP物料需求还差多远? ③可以通过查询配合EDI的方式去实现MRP的需求嘛?查询语句应该怎么改?
下面是测试地址:http://www.aio5.com:8182/AIO5_4/Login.aspx
账号:A01 密码:aio5
该功能测试路径:采购——工具——销售订单生成采购订单辅助查询。
再追问一个:这款产品整体的利弊在哪里?哪方面是硬伤?能否在市场上运用起来?虽然不指望这条产品线去赚钱,但也想提升点品牌知名度。
另附查询语句:
Select S.*
From
(
Select '直接采购' PurType, cast(TD.LineNum as nvarchar(3)) LineNum, TM.CrdID CltID, TM.CrdName CltName, TM.DocDate, TM.DocNum,
TB.ObjType, TD.ItmID, TD.ItmName, TD.ItmSpec,
TD.BaseQty/TB.PurCvtRate Qty, TB.PurUomID UomID, TD.PriceFC,
TD.UomID SaleUomID, TD.Qty as SaleQty, TB.PurCvtRate, '' CrdID, IsNull(TB.Z_Aqkc,0) Z_Aqkc, TB1.OnHand, (TD.Qty - TB1.OnHand + IsNull(TB.Z_Aqkc,0)) As PurQty
From SAOrd TM
Left Join SAOrdA TD On TM.DocEntry = TD.DocEntry
Left Join MDItm TB On TB.ItmID = TD.ItmID
Left Join BCStk TB1 On TB1.ItmID = TD.ItmID and TB1.WhsID = TD.WhsID
where (TD.Qty - TB1.OnHand + IsNull(TB.Z_Aqkc,0)) >0
union all
Select '生产采购' PurType, cast(TD.LineNum as nvarchar(3)) + '-' + cast(T2.LineNum as nvarchar(3)) LineNum, TM.CrdID CltID, TM.CrdName CltName, TM.DocDate, TM.DocNum,
TB.ObjType, TB.ItmID, TB.ItmName, TB.ItmSpec,
TD.BaseQty/TB.PurCvtRate*T2.NetQty Qty, TB.PurUomID UomID, TD.PriceFC,
TB.UomID SaleUomID, TD.Qty SaleQty, TB.PurCvtRate, ''CrdID, IsNull(TB.Z_Aqkc,0) Z_Aqkc, TB1.OnHand, ((TD.Qty-T3.OnHand + IsNull(T4.Z_Aqkc,0))* T2.NetQty - TB1.OnHand + IsNull(TB.Z_Aqkc,0)) As PurQty
From SAOrd TM
Left Join SAOrdA TD On TM.DocEntry = TD.DocEntry
Left Join ZZBom1 T1 On T1.ItmID = TD.ItmID and T1.IsClose = 'N'
Left Join BCStk T3 On T3.ItmID = T1.ItmID and T3.WhsID = TD.WhsID --成品库存
Left Join MDItm T4 On T4.ItmID = T1.ItmID --成品安全库存
Left Join ZZBomA1 T2 On T2.DocEntry = T1.DocEntry
Left Join MDItm TB On TB.ItmID = T2.ItmIDA --子件安全库存
Left Join BCStk TB1 On TB1.ItmID = TB.ItmID and TB1.WhsID = TB.WhsID --子件库存
where ((TD.Qty-T3.OnHand + IsNull(T4.Z_Aqkc,0))* T2.NetQty - TB1.OnHand + IsNull(TB.Z_Aqkc,0)) >0
)S
Where S.CrdID like @CrdID and
S.CrdName like @CrdName and
S.DocDate >= @DocDateFr and S.DocDate <= @DocDateTo and
S.PurType in (@PurType)
Order By S.DocNum, S.LineNum
"这里做ERP的好少啊 <img src=""http://www.oschina.net/js/ke/plugins/emoticons/images/10.gif"" alt="""" /> <img src=""http://www.oschina.net/js/ke/plugins/emoticons/images/10.gif"" alt="""" /> <img src=""http://www.oschina.net/js/ke/plugins/emoticons/images/10.gif"" alt="""" /> "
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。