开发者社区> 问答> 正文

有熟悉数据库和ERP相关的大V嘛? - 服务报错

"

<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


"

展开
收起
kun坤 2020-06-05 21:10:23 548 0
1 条回答
写回答
取消 提交回答
  • "这里做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="""" /> "

    2020-06-05 21:10:41
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
DTCC 2022大会集锦《云原生一站式数据库技术与实践》 立即下载
阿里云瑶池数据库精要2022版 立即下载
2022 DTCC-阿里云一站式数据库上云最佳实践 立即下载