ERP 从业小结.docx
- 文档编号:7315359
- 上传时间:2023-01-22
- 格式:DOCX
- 页数:15
- 大小:25.67KB
ERP 从业小结.docx
《ERP 从业小结.docx》由会员分享,可在线阅读,更多相关《ERP 从业小结.docx(15页珍藏版)》请在冰豆网上搜索。
ERP从业小结
制造业ERP从业小结(载)
1.SlowMovingReport(DeadStockReport)/低流动性存货报表(呆料报表)
根据企业的定义,对当前存货进行流动性分析。
例如:
基于当前日期,6个月内没有流动的存货定义为低流动性存货(SlowMovingStocks)。
而把1年内都没有流动的存货定义为呆料(ObsoleteStocks)。
重点/难点:
1)日期范围的确定
2)流动的区分:
一般是以调整性交易(Movement)作为判断标准。
如果在定义的时间区间内没有调整性交易即为低流动性存货。
调整性交易一般包括采购及其他方式入库和生产消耗及出货/出库等。
调整性交易会造成在公司层面上的存货增加或减少。
而其他例如转移性交易(Transfer)则为非流动性交易,不应纳入此报表的考虑范围。
转移性交易一般是指存货在不同仓库/区位的转移,不会造成在公司层面上的存货增加或减少,而只是从左口袋转到右口袋的概念。
另外像盘点调整,报废交易等均不应纳入流动性计算。
3)在报表中不仅要列出低流动性存货的数量,还要列出金额
4)报表可以让用户选择针对哪一个仓库/区位进行分析,以及针对怎样的流动性(存货交易)进行分析。
2.StockAgingReport/货龄报表
货龄分析的主要目的是让企业了解其存货的年龄结构,一般分为原材料的货龄分析和成品的货龄分析。
例如:
基于当前日期,针对某一物料,分别报告1个月前进来的存货数量,3个月前进来的存货数量,6个月前进来的存货数量,以及1年前进来的存货数量等。
重点/难点:
1)日期范围的确定,根据企业的物料类型及采购和生产周期等进行分析后设定出来
2)何谓货龄?
即存货的年龄,一般是基于先进先出的假设,将存货在某一日期的结存数量为依据往前倒推计算,针对每一笔存货增加的交易(MoveIn)进行比对,得出所定义的货龄区间的对应存货数量。
具体计算过程请参见以下举例。
3)货龄计算举例:
已知数据:
ItemA
2009-01-01采购1000pcs
2009-01-07发出500pcs
2009-01-28采购1200pcs
2009-02-10发出1000pcs
2009-03-28采购800pcs
2009-04-01发出200pcs
------------------------------------
2009-04-28结存1300pcs
计算过程:
第一步:
以2009-04-28的结存为计算基础,即在4月28日有存货1300pcs
第二步:
往前倒推,找到于3月28日发生的第一笔存货增加的交易(在本例中为采购收货,下同),数量为800pcs。
根据先进先出的假设,目前的存货为1300,那么这1300当中,有800是在3月28日进来的。
所以属于1个月货龄的情况。
剩余的500pcs是在此之前进来的。
第三步:
再继续往前倒推,找到于1月28日发生的第二笔存货增加的交易,数量为1200pcs。
由此可推断第二步中剩余的500pcs是跟这一笔交易有关。
即500pcs属于3个月货龄的情况。
因全部数量已经分配完毕,所以不再继续倒推计算。
第四步:
产生报告如下:
Item?
?
?
?
On-Hand?
?
?
?
Aging(1Month)?
?
?
?
Aging(3Months)?
?
?
?
Aging(6Months)?
?
?
?
Aging(1Year)?
?
?
?
?
----------------------------------------------------------------------------------------------------------------------------------
A?
?
?
?
?
?
?
?
1300?
?
?
?
?
?
?
?
800?
?
?
?
?
?
?
?
?
?
?
?
500?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
0?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
0
4)在报表中不仅要列出针对每一货龄区间的存货的数量,还要列出金额
5)报表可以让用户选择针对哪一个仓库/区位进行分析
3.StockAvailabilityandShortageReport/存货可用性及短缺报表
此报表的主要目的是,在没有运行MRP的情况下,或者在MRP的结果无法得到总览的情况下,在某一限定的时间区间内,将所有物料(或选定物料)的需求与供应进行比较计算,得出可用存货数量和短缺情况,提供给物料管理部门参考。
重点/难点:
1)销售预测与销售订单的考虑及对冲
2)成品、半成品存货的考虑
3)成品、半成品需求的展开(展BOM)
4)需求的范围定义,即哪些是属于需求
5)供应的范围定义,即哪些是属于供应
6)仓库/区位的层次结构,即考虑的优先顺序。
比如说,某一仓库/区位的存货最先拿来供应,另一仓库/区位的存货次之,以此类推。
存货可用性及短缺都按此层次结构逐一计算和反映。
7)不良品一般单列出来仅供参考及人为决定,不参与系统自动计算
8)待检品及在检品一般纳入供应的范围
9)计算物料短缺既可考虑需求与供应的时间对应,也可不考虑时间关系。
例如将于2009-5-20送货的在途PO是否可以作为2009-04-29日生产的工单需求的供应。
一般来说在MTO的环境下不考虑时间关系,尽一切能力来安排供应以配合需求。
4.MaterialStatusReport/物料状况表
根据当前存货数量情况,针对未来不同时间点(例如每周,每10天,每15天,每月等)分别考虑其在途PO数量及工单等需求数量,计算存货剩余数量或短缺情况。
此报表一般只考虑原材料。
重点/难点:
1)未来时间点的定义
2)提供其他辅助信息,例如采购提前期,单价,Where-used(AffectedModel),采购员组别等
3)此报表一般采用灵活的参数式设计,由用户自定义时间点,然后据此自动分段计算
5.ReceiveandIssueStockTotalReport/物料收发汇总表
计算指定时间区间内的物料总收入与总发出数量。
包括期初数,收入数,发出数,以及结存数。
仓库利用此报表核对他们的收发记录账。
重点/难点:
1)时间区间的选择
2)仓库/区位的选择
3)期初数的计算
4)特殊交易的排除,例如在有些系统中在途订单或工单也会有交易记录在交易表中,需要排除这些记录。
另外,有些专用于冲销的调整性交易记录,比如,昨天收入(MoveIn)1000pcs,发现做错了,于是今天又发出(MoveOut)1000pcs以作冲销,这样的情况也需要通过特殊的标记将其排除。
注:
对于采购入库类的交易,可以采用负数收货来处理冲销,但对于本身就是调整性交易(Movement)记录则无法按此处理。
6.财务相关报表
6.1AccountsPayable(应付)
6.1.1APAgingReport/应付账龄报表
以本位币计算的应付账龄分析报表。
重点/难点:
1)余额截止日期的选择
2)起始日期的选择
3)以供应商发票到期日计算还是以交易日期计算
4)时间间隔(即账龄分析时段)的选择
5)可以选择需要进行分析的供应商范围
6.1.2APAgingReportMultiCurrency/多币别应付账龄报表
以本位币和原币计算的应付账龄分析报表。
重点/难点:
1)余额截止日期的选择
2)起始日期的选择
3)以供应商发票到期日计算还是以交易日期计算
4)时间间隔(即账龄分析时段)的选择
5)可以选择需要进行分析的供应商范围
6.1.3VendorBalanceList/供应商余额表
针对每一个供应商的应付余额报表。
重点/难点:
1)余额截止日期的选择(即并不是只能以当前日期开始计算,而是具有回溯功能)
2)可以选择供应商范围进行查询/打印
6.1.4VendorAccountStatement/供应商对账单
针对每一个供应商的已付、应付情况报表,用于与供应商进行对账。
重点/难点:
1)起始与截止日期的选择
2)可以选择供应商范围进行查询/打印
3)可以结合付款排期表产生报表
6.1.5PrepaymentReport/供应商预付款报表
针对每一个供应商的预付款情况的报表。
重点/难点:
1)截止日期的选择
2)可以选择供应商范围进行查询/打印
6.1.6VendorTransactions/供应商交易报表
针对每一个供应商的交易(从财务的角度讲即发票)的报表。
重点/难点:
1)可以选择Open的或者全部的供应商发票
2)对于汇率的处理,可以选择是以调汇日期计算还是以发票日期计算
3)可以选择供应商范围进行查询/打印
6.1.7APOpenPackingSlipReport/供应商已送货但未开发票报表
针对那些已经送货但未开发票的情况的报表。
重点/难点:
1)可以选择明细或者汇总表
2)可以选择供应商范围进行查询/打印
6.2AccountsReceivable(应收)
6.3GeneralLedger(总账)
?
PartII:
CriticalProgramLogic
1.BOMExplosion/展BOM
BOM表的结构抽象化之后一般如下:
A
|
--------------------------
|?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
|
B
(2)?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
C
(1)
|
-----------------------
|?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
|
D
(1)?
?
?
?
?
?
?
?
?
?
?
?
?
?
E
(1)
|
--------------------
|?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
|
F
(1)?
?
?
?
?
?
?
?
?
?
?
?
G
(1)
TableName:
BOM
BOMId?
?
?
?
?
?
ItemId?
?
?
?
?
?
ItemType?
?
?
?
?
?
BOMType?
?
?
?
?
?
BOMQty?
?
?
?
?
?
FromDate?
?
?
?
?
?
ToDate
A?
?
?
?
?
?
?
?
?
?
B?
?
?
?
?
?
?
?
?
?
?
?
BOM?
?
?
?
?
?
?
?
?
?
Item?
?
?
?
?
?
?
?
?
?
2?
?
?
?
?
?
?
?
?
?
?
A?
?
?
?
?
?
?
?
?
?
C?
?
?
?
?
?
?
?
?
?
?
?
Item?
?
?
?
?
?
?
?
?
?
Item?
?
?
?
?
?
?
?
?
?
1?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
2009-05-31
B?
?
?
?
?
?
?
?
?
?
D?
?
?
?
?
?
?
?
?
?
?
?
BOM?
?
?
?
?
?
?
?
?
?
Phantom?
?
?
?
?
?
1?
?
?
?
?
?
?
?
?
?
?
B?
?
?
?
?
?
?
?
?
?
E?
?
?
?
?
?
?
?
?
?
?
?
Item?
?
?
?
?
?
?
?
?
?
Item?
?
?
?
?
?
?
?
?
?
1?
?
?
?
?
?
?
?
?
?
?
D?
?
?
?
?
?
?
?
?
?
F?
?
?
?
?
?
?
?
?
?
?
?
Item?
?
?
?
?
?
?
?
?
?
Item?
?
?
?
?
?
?
?
?
?
1?
?
?
?
?
?
?
?
?
?
?
D?
?
?
?
?
?
?
?
?
?
G?
?
?
?
?
?
?
?
?
?
?
?
Item?
?
?
?
?
?
?
?
?
?
Item?
?
?
?
?
?
?
?
?
?
1?
?
?
?
?
?
?
?
?
?
?
经典的展BOM程序如下:
voidBOMExplosion(_TopBOMId,_BOMId,_BOMDate=today(),_BOMQty=1)
{
?
?
whileselectBOM
?
?
?
?
?
?
?
?
whereBOM.BOMId==_BOMId
?
?
?
?
?
?
?
?
?
?
&&(!
BOM.FromDate||BOM.FromDate<=_BOMDate)
?
?
?
?
?
?
?
?
?
?
&&(!
BOM.ToDate?
?
?
?
||BOM.ToDate?
?
?
?
>=_BOMDate)
?
?
{
?
?
?
?
?
?
if(BOM.ItemType!
=BOM)
?
?
?
?
?
?
{
?
?
?
?
?
?
?
?
TmpBOM.TopBOMId?
?
=_TopBOMId;
?
?
?
?
?
?
?
?
TmpBOM.ItemId?
?
?
?
=BOM.ItemId;
?
?
?
?
?
?
?
?
TmpBOM.BOMQty?
?
?
?
=BOM.BOMQty*_BOMQty;
?
?
?
?
?
?
?
?
TmpBOM.insert();
?
?
?
?
?
?
}
?
?
?
?
?
?
else
?
?
?
?
?
?
{
?
?
?
?
?
?
?
?
if(BOM.BOMType==Item)
?
?
?
?
?
?
?
?
{
?
?
?
?
?
?
?
?
?
?
TmpBOM.TopBOMId?
?
=_TopBOMId;
?
?
?
?
?
?
?
?
?
?
TmpBOM.ItemId?
?
?
?
=BOM.ItemId;
?
?
?
?
?
?
?
?
?
?
TmpBOM.BOMQty?
?
?
?
=BOM.BOMQty*_BOMQty;
?
?
?
?
?
?
?
?
?
?
TmpBOM.insert();
?
?
?
?
?
?
?
?
}
?
?
?
?
?
?
?
?
BOMExplosion(_TopBOMId,BOM.ItemId,_BOMDate,BOM.BOMQty*_BOMQty);
?
?
?
?
?
?
}
?
?
}
}
根据以上程序展开的BOM结果如下:
TableName:
TmpBOM
TopBOMId?
?
?
?
?
?
ItemId?
?
?
?
?
?
BOMQty
A?
?
?
?
?
?
?
?
?
?
?
?
?
?
B?
?
?
?
?
?
?
?
?
?
?
?
2
A?
?
?
?
?
?
?
?
?
?
?
?
?
?
C?
?
?
?
?
?
?
?
?
?
?
?
1
A?
?
?
?
?
?
?
?
?
?
?
?
?
?
D?
?
?
?
?
?
?
?
?
?
?
?
2
A?
?
?
?
?
?
?
?
?
?
?
?
?
?
E?
?
?
?
?
?
?
?
?
?
?
?
2
A?
?
?
?
?
?
?
?
?
?
?
?
?
?
F?
?
?
?
?
?
?
?
?
?
?
?
2
A?
?
?
?
?
?
?
?
?
?
?
?
?
?
G?
?
?
?
?
?
?
?
?
?
?
?
2
2.Where-used(TopWhere-used)/用途(父件产品及顶层产品)
Where-used一般用于查询物料的用途,即在哪些BOM中用到了该物料。
而TopWhere-used则用于查询该物料所用于的最终产品信息。
在制造业中,这些都是非常有用的资料,比如在一个ECN中需要更改一个物料,那么通过TopWhere-used即可以马上知道这个ECN会影响到哪些产品。
在Where-used的算法中,关键是是否要考虑BOM的版本,以及生效/失效日期等。
以下是一个经典的Where-used(TopWhere-used)的示例程序。
其中用到了Container来储存信息,其实用数据表(Table)也是同样可以的。
voidWhereused(sourceItemId,bomDate=today())
{
?
?
BOM?
?
?
?
?
?
?
?
?
?
?
?
BOM_A,BOM_B;
?
?
BOMVersion?
?
?
?
bomVersion;
?
?
Set?
?
?
?
?
?
?
?
?
?
?
?
?
?
tmpContainer,tmpWhereusedItems,tmpWhereusedTopItems;
?
?
SetEnumerator?
?
se;
?
?
ItemId?
?
?
?
?
?
?
?
?
?
tmpItemId;
?
?
;
?
?
//Initialization
?
?
tmpContainer?
?
?
?
?
?
?
?
?
?
?
?
=newSet(Types:
:
String);
?
?
tmpWhereusedItems?
?
?
?
=newSet(Types:
:
String);
?
?
tmpWhereusedTopItems=newSet(Types:
:
String);
?
?
//Getalltheactiveboms
?
?
whileselectBOM_A
?
?
?
?
?
?
?
?
whereBOM_A.ItemId==sourceItemId
?
?
?
?
?
?
?
?
?
?
&&(!
BOM_A.ToDate?
?
||BOM_A.ToDate?
?
>=bomDate)
?
?
?
?
?
?
?
?
?
?
&&(!
BOM_A.FromDate||BOM_A.FromDate<=bomDate)
?
?
{
?
?
?
?
?
?
selectfirstonlybomVersion
?
?
?
?
?
?
?
?
?
?
?
?
?
?
wherebomVersion.BOMId?
?
==BOM_A.BOMId
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
&&bomVersion.Active?
?
==true
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
&&bomVersion.Approved==true
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
&&(!
bomVersion.FromDate||bomVersion.FromDate<=bomDate)
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
&&(!
bomVersion.ToDate?
?
||bomVersion.ToDate?
?
>=bomDate);
?
?
?
?
?
?
if(bomVersion?
?
?
?
?
?
?
?
?
&&(!
tmpWhereusedItems.in(bomVersion.ItemId)
?
?
?
?
?
?
?
?
&&!
tmpContainer.in(bomVersion.ItemId)))
?
?
?
?
?
?
{
?
?
?
?
?
?
?
?
tmpContainer.add(bomVersion.ItemId);
?
?
?
?
?
?
}
?
?
}
?
?
//looptheprogramwhilethetemporarycontainerhaveItemId
?
?
se=tmpContainer.getEnumerator();
?
?
while(!
tmpContainer.empty())
?
?
{
?
?
?
?
?
?
//getthefirstone
?
?
?
?
?
?
se.moveNext();
?
?
?
?
?
?
tmpItemId=se.current();
?
?
?
?
?
?
//remove->reducetheelementcount
?
?
?
?
?
?
tmpContainer.remove(tmpItemId);
?
?
?
?
?
?
tmpWhereusedItems.add(tmpItemId);
?
?
?
?
?
?
se.reset();
?
?
?
?
?
?
selectfirstonlyBOM_B
?
?
?
?
?
?
?
?
?
?
?
?
whereBOM_B.ItemId==tmpItemId
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
&&(!
BOM_B.ToDate?
?
||BOM_B.ToDate?
?
>=bomDate)
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
&&(!
BOM_B.FromDate||BOM_B.FromDate<=bomDate);
?
?
?
?
?
?
if(BOM_B)//ifthetmpItemIdisstillusedinotherboms
?
?
?
?
?
?
{
?
?
?
?
?
?
?
?
//getallItemIdswhichconsiststhetmpItemId
?
?
?
?
?
?
?
?
whileselectBOM_B
?
?
?
?
?
?
?
?
?
?
?
?
whereBOM_B.ItemId==tmpItemId
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
&&(!
BOM_B.ToDate?
?
||BOM_B.ToDate?
?
>=bomDate)
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
&&(!
BOM_B.FromDate||BOM_B.FromDate<=bomDate)
?
?
?
?
?
?
?
?
{
?
?
?
?
?
?
?
?
?
?
selectfirstonlybomVersion
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
wherebomVersion.BOMId?
?
==BOM_B.BOMId
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
&&bomVersion.Active?
?
==true
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
&&bomVersion.Approved==true
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
&&(!
bomVersion.FromDate||bomVersion.FromDate<=bomDate)
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
&&(!
bomVersion.ToDate?
?
||bomVersion.ToDate?
?
>=bomDate);
?
?
?
?
?
?
?
?
?
?
if(bomVersion?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
&&(!
tmpWhereusedItems.in(bomVersion.ItemId)
?
?
?
?
?
?
?
?
?
?
?
?
?
?
&&!
tmpContainer.in(bomVersion.ItemId)))
?
?
?
?
?
?
?
?
?
?
{
?
?
?
?
?
?
?
?
?
?
?
?
?
?
//forSET,therewillensurenoduplication
?
?
?
?
?
?
?
?
?
?
?
?
?
?
tmpContainer.add(bomVersion.ItemId);
?
?
?
?
?
?
?
?
?
?
}
?
?
?
?
?
?
?
?
}
?
?
?
?
?
?
}
?
?
?
?
?
?
else//ifthetmpItemIdisnotusedinotherboms,thisisthetopestlayerItemId
?
?
?
?
?
?
{
?
?
?
?
?
?
?
?
selectfirstonlybomVersion
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
wherebomVersion.ItemId?
?
==tmpItemId
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
&&bomVer
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ERP 从业小结 从业 小结