ERP恐怖小说之屠宰物料分类帐.docx
《ERP恐怖小说之屠宰物料分类帐.docx》由会员分享,可在线阅读,更多相关《ERP恐怖小说之屠宰物料分类帐.docx(35页珍藏版)》请在冰豆网上搜索。
ERP恐怖小说之屠宰物料分类帐
有人给一作家看一篇文章,作家看了后道:
谁写的文章这样烂,来人告诉他是他自己N年前写的。
有人给一书法家看某人写的字然后问,字写成这样能成为书法家吗?
书法家道:
这样也能成为书法家就太没天理了,结果被告知是自己小学的墨宝。
某天,本人看了一处理物料帐记录,有人直接往SAP数据库表写数据,于是道:
哪鸟人如此胆的做这样的事情,结果旁人告诉俺就是俺干的。
俺于是道:
是这样的,如果是你搞表属于胡搞,如果是本屠夫整表,那就属于高技术活儿。
通常如果出现各种C+错误
C+019:
没有找到物料****的物料帐簿表头数据(就是往CKMLHD补充数据)
C+065:
错误阅读物料明西帐表头记录
C+072:
读取物料价格表CKMLPR时的错误
(1).物料帐屠宰数据表实例:
某物料在2009/07月收货,但是物料帐主数据由于某种原因缺失,2009/12月供应商来发票,Tccode:
MIRO发票校验出现C+507错误,提示MLBECR表货币数据缺失,见下图,怎么办呢,补充数据,补充哪些表呢?
Lotsoftables.
补充数据由于涉及很多表,看采购订单4500021207,恰好10/20行物料单价一致(实际物料同类,就是型号不同),而物料帐缺失的是10行,只需要读取并参考20行的数据将其补全就可以。
*CKML:
显示所有物料分类帐Tcode
错误原因是因为2009/12月发票校验时读2009/07的收货历史,但2009/07的物料帐历史不完整。
CALLFUNCTION'CKMW_READ_PO_HISTORY'
EXPORTING
EBELN=POT-EBELN
EBELP=POT-EBELP
BNK=LD_BNK
*no_curtp_00=gd_mlwere-no_00_ml"(del)RHP40K036986
*no_curtp_10=gd_mlwere-no_10_ml"(del)RHP40K036986
NO_CURTP_00=GD_MLWERE-NO_00_ML-BOOLE"RHP40K036986
NO_CURTP_10=GD_MLWERE-NO_10_ML-BOOLE"RHP40K036986
TABLES
T_EKBE_CR=LD_EKBE_ALL_TBL[]
T_EKBZ_CR=LD_EKBZ_ALL_TBL[]
EXCEPTIONS
DATA_NOT_FOUND=0
OTHERS=1.
也就是说,以下3个和采购订单相关连的物料帐表无10行的数据。
MLWERE:
采购和物料分类帐之间的转换表
MLBE:
GR/IR相关交易的商品分类帐FS项表
MLBECR:
GR/IR相关交易商品分类帐编号表
note817210:
C+072中,建议使用函数CREATE_NEW_ML_MASTER_DATA补充物料帐数据,由于SAP考虑的是各种业务,如物料帐是否存在多货币,多货币之间的汇率转换;是否存在销售订单或项目库存,SAP那帮鸟人的思维非常缜密,这点俺还是非常佩服的,如某物料期初无库存,本期采购普通库存1000吨,采购差异10万,3个销售单分别销售出1万,则10万差异分到销售为3万,遗留7万由期末库存承担,其中由销售承担的3万还能继续下分到具体获利段,如3个销售订单对应3个不同客户,则每个客户获利段1万,不过这样做应该会造成性能严重下降,因为要去找订单历史;
假设同时有2个PTO(PurchasetoOrder),假设其中采购100吨为1个销售订单(销售订单库存),差异5万,销售50吨,该销售订单期末库存50吨,则差异5万均分,并且和普通库存1000吨的10万差异是分开的,因为分别是普通库存(MBEW/MBEWH)和销售订单库存(EBEW/EBEWH)。
企业实际业务可能非常简单,那就直接插入修改表,往最少7个表中写入数据,参考程序如下:
注,其中0表示采购订单行20物料对应的成本估算号,而0199为缺失主数据的物料对应的成本估算号。
REPORTZML_LS.
data:
i_mlwerelikemlwere,
i_mlbelikemlbe,
i_mlbecrlikemlbecr.
*updatehistorytablemlwere
selectsingle*intoi_mlwerefrommlwere
whereebeln='4500021207'
andebelp='00020'.
i_mlwere-mlvnr='4'.
i_mlwere-ebelp='00010'.
updatemlwerefromi_mlwere.
*updatehistorytablemlbe.
selectsingle*intoi_mlbefrommlbe
wherebelnr='5000036980'
andbuzei='0002'
andgjahr='2009'.
i_mlbe-mlvnr='4'.
i_mlbe-buzei='0001'.
updatemlbefromi_mlbe.
*updatehistorytablemlbecr
selectsingle*intoi_mlbecrfrommlbecr
wherebelnr='5000036980'
andbuzei='0002'
andgjahr='2009'.
i_mlbecr-mlvnr='4'.
i_mlbecr-buzei='0001'.
updatemlbecrfromi_mlbecr.
******************************************
*更新物料帐主数据表
data:
i_ckmlhdlikeckmlhdoccurs0withheaderline,
i_ckmlpplikeckmlppoccurs0withheaderline,
i_ckmlcrlikeckmlcroccurs0withheaderline.
*更新ckmlhd表
select*intotablei_ckmlhdfromckmlhd
wherebwkey='CHJ1'
andkalnr='1'.
loopati_ckmlhd.
i_ckmlhd-KALNR='9'.
modifyi_ckmlhdtransportingKALNR.
endloop.
insertckmlhdfromtablei_ckmlhdACCEPTINGDUPLICATEKEYS.
*更新CKMLPR物料帐-价格控制表,分货币种类,10/32
*更新CKMLPR表,省略.
*更新CKMLPP物料帐-期间值汇总表,分年度期间货币类型保存存货数量
deletefromckmlpp
whereKALNR='9'.
select*intotablei_ckmlppfromckmlpp
wherekalnr='1'.
loopati_ckmlpp.
i_ckmlPP-KALNR='9'.
modifyi_ckmlPPtransportingKALNR.
endloop.
insertckmlPPfromtablei_ckmlPPACCEPTINGDUPLICATEKEYS.
*更新CKMLCR物料帐-期间值汇总表,按年度期间保存货币类型存货金额
*最少更新当期11/上期10/去年12月
deletefromckmlcr
whereKALNR='9'.
select*intotablei_ckmlcrfromckmlcr
wherekalnr='1'.
loopati_ckmlcr.
i_ckmlcr-KALNR='9'.
modifyi_ckmlcrtransportingKALNR.
endloop.
insertckmlCRfromtablei_ckmlCRACCEPTINGDUPLICATEKEYS.
messagei001(00)with'updateOK!
'.
上回有个女士问俺是如何将什么上期期末和本期期初不平抹平的,俺告诉她是用标准程序,实际上俺真的不知道有没有什么标准程序,那堆破程序就是俺写的,主要是怕恐怖动作吓坏人家,就好比内科手术,俺杀猪的自己将SAP开膛破肚玩玩就可以,你见过医生将人胸膛破开然后抬到大街上晒吗?
对于改表这东西,慎之又慎,有时候,必须的,该出刀时就出刀!
数据插入完毕后,错误消失,最后需要提醒的是,如果不非常熟悉业务和技术的顾问,千万不要玩弄这种恐怖游戏!
有一天,1个ERP小青年跑来很严肃地问俺如何学SAP,俺说每天早上起来不但要想流程想业务,更要背表背字段的关联,他听到一半就吓跑了,实际上俺还没告诉他前3年每天包括周末最少花10个小时看ABAP代码,估计听了他要一头撞死!
(2).涉及物料明细帐的系统表格:
行项目表:
汇总表:
成本估算号:
CKMLHD
(1)对于初始库存(类别为AB):
初始库存一般可以通过上期的期末库存得到。
帐项目类型:
(2)对于收据――》采购、生产(数量、初级评估、价格差异)
类别(ZU-收据)+处理类型(B+-采购)
类别(ZU-收据)+处理类型(VF-生产)
(3)对于消耗量――》生产、库存转储(数量、初级评估、价格差异)
类别(VN-消耗量)+处理类型(VF-生产)
类别(VN-消耗量)+处理类型(VU-库存转储)
EI:
单级价格差异和EI:
多级价格差异为期末分得的单层和多层差异。
RCPT:
M-LVLPRDIF指跑物料帐从上层传过来的差异。
(5)CKM3行项目的查询:
如查询收据+采购价格差异:
(1)根据成本估算号+类别(ZU-收据)+处理类型PrcCat-Pr/Cnalt(B+采购、BF生产)去查询表MLIT得到物料分类帐凭证编号+项目号。
(2)根据物料凭证编号1000000037+1去查询表MLCRF可以得到价格差异。
(3)根据物料凭证编号1000000037+1去查询表MLCR可以得到初级评估。
(4)根据物料凭证编号1000000037+1去查询表MLPP可以得到数量。
物料凭证和物料分类帐凭证的联系可以去查询表MLHD。
期末库存的查询:
根据成本估算号查询表CKMLCR可以得到初级评估(+价格差异(EI:
单级价格差异+EI:
多级价格差异)
EI:
单级价格差异和EI:
多级价格差异为期末分得的单层和多层差异。
查询表MBEW/MBEWH可以得到初级评估(总价值):
查询表CKMLPP可以得到数量:
产成品库存明细表:
期初数(上期的期末数)+收据-期末=本期消耗
差如何查询消耗量的生产、库存转储的汇总数(数量、初级评估、价格差异)
通过表MLCD:
(VN+BF\VU)
差如何查询收据的采购、生产的汇总数(数量、初级评估、价格差异)
通过表MLCD:
(ZU+B+/BF)
(3).平行货币类型和多级评估
物料分类帐的多货币类型
物料分类帐可以最多使用3个货币类型记录物料移动交易数据,在相应工厂激活物料分类帐后(Tcode:
OMX1),然后需要分配货币类型给物料分类帐类型(Tcode:
OMX2),物料分类帐作为物料交易明细账,其业务也是允许采用多个货币记录的,FI/CO最后将物料分类帐类型分配到评估区域(Tcode:
OMX3),通常情况下评估区域实际上对应的就是工厂(Tcode:
OX14),这两次分配决定了启用物料分类帐的工厂业务数据记录的货币类型,如下图。
上图是分配货币类型的典型配置,多数情况下是复制默认ML类型000,也就是说物料分类帐将同时使用FIcurrencytype和COcurrencytype两个货币类型,通俗地讲,就是物料分类帐将同时使用FI本位币和CO控制范围货币两个货币类型同时记录业务数据,但,国内企业这两者都是本位币,企业真的一定需要同时启动两个货币类型吗?
后续影响是什么?
货币类型是什么?
“货币计量”是会计四大假设之一,作为一个能适应全球不同国家业务和处理跨国集团业务的管理软件,如果不能有效处理货币计量,肯定是行不通的,隐藏在货币计量之后最重要的实际上是来自不同国家的庞大组织架构的各种业务数据集成问题。
SAP系统引入了货币类型这么个东西,那么系统有多少个货币类型呢?
请看下图(Tcode:
OMX6)
下面简单回顾一下这些货币类型:
00:
凭证货币/记帐货币/交易货币
10:
公司代码货币/第一本位币,公司代码货币设置Tcode:
OBY6,为什么说本位币还要加上”第一”这个词呢?
因为SAP最多允许3个本位币,另两个将作为附加本位币,附加本位币设置Tcode:
OB22,说到公司代码货币,接下来详细介绍一下FICurrencyType。
FIcurrencytype是什么?
FI货币类型首先包括本位币currencetype10,你还可以根据业务需求定义第2和第3附加
本位币,如果这样,FI货币就有3种货币,如果物料分类帐选择了FIcurrencetype,则物料
分类帐将同时使用这3个货币。
在财务模块,如果包括凭证货币,一个FI凭证行项目中就记录有4个货币金额,下图展示的是公司代码SSSS的一个同时启动3个本位币的设置。
如上图,公司代码SSSS使用了集团货币(Currencytype30)做第二附加本位币,这有重要意义,它可以根据历史汇率实时记录转换到集团货币的金额。
公司代码SSSS还启动了第3本位币硬通货货币(Currencytype40),启动硬通货必须在公司代码对应的国家设置硬通货(Tcode:
OY01),例如,某集团在墨西哥有业务,这个国家通货膨胀相对严重,所以设置了美元做硬通货,并作为第三本位币。
你还可以为第2和第3本位币设置不同的评估,法律评估,集团评估还是利润中心评估?
多级评估稍后会详细剖析;你还可以为第2/3本位币的转换设置换算的源货币和转换汇率,源货币可以是凭证货币或第1本位币,通常采用第一本位货币进行转换,汇率类型也可采用不同的汇率类型和汇率转换日期。
什么意思呢?
现在检查一下FI会计凭证BSEG相关货币的字段内容。
会计凭证如何记录FI货币?
从设计上来分析一下,在会计凭证行项目中可以记录4种类货币:
.BSEG-DMBTR:
本位币金额
.BSEG-WRBTR:
凭证/记帐货币金额
.BSEG-DMBE2:
以第二本币计的金额
.BSEG-DMBE3:
以第三本币计的金额
假设公司代码SSSS本位币为RMB,记帐货币为HKD,第二本位币为USD,以第二本币计的金额可以通过本位币RMB或记帐货币HKD进行汇率转换,通常使用第一本位币进行转换,汇率默认也采用平均汇率M。
新增FI分类帐
在SAP47或以下版本,如果启动了第3本位货,则必须配置第2套FI总帐,为什么呢?
虽然会计凭证能记录多达到4个货币,但FI总帐SummarytableGLT0却只有3组字段:
.GLT0-TSL01->16:
凭证货币余额
.GLT0-HSL01->16:
本位币余额
.GLT0-KSL01->16:
集团货币余额.
所以必须为第三本位币设置专门一套总帐。
同样以为公司代码SSSS为例,必须为第3本位币硬通货币40启动第2套FI总帐,此时在相应报表上必须注意第2总帐,总帐余额结转F.16也必须保证两个总帐都被结转。
在ECC新总帐版本中,其新总帐科目余额总计表FAGLFLEXT:
(取代GLT0)已包含4组货币:
TSL:
业务货币/凭证货币总计
HSL:
本位币币总计
KSL:
集团货币总计
OSL:
第四货币总计(即第三本位币),凭证货币+3本位币共计四货币
MSL:
业务数量总计(新总帐新增,满足数量金额帐需求)
因此,在新总帐中,启动第3本位币不再需要增加FI账套。
20:
CO控制范围货币,即CO货币。
30:
集团公司货币,集团是什么?
集团是Client?
是的,有时你基本上可以这样认为,一个集团
可能将各个地区不同业务集中在同一Client,基本上,很少项目会在集中服务器上同时运行
两个生产Client,集团货币30就是Client标准货币,在SCC4中设置,一个Client只有一个
标准货币。
40/50:
物价指数货币和硬通货在国家中设置(Tcode:
OY01)。
60:
公司货币,公司在SAP被用做法定合并的最小单元。
A0:
财务管理范围货币,集团预算使用的货币。
B0:
经营范围货币,经营范围为获利分析的最高组织结构,集团中多个控制范围可属于同一经营范围。
什么是CO货币类型?
CO的货币包括业务货币,(成本)对象货币和CO控制范围货币,也就是说,Co凭证的行项目记录这3种货币,在此特别强调一下CO货币之控制范围货币,控制范围货币在Tcode:
OKKP中设置,通常,可使用currencytype20或集团货币Currencytype30做控制范围货币,如果一个client中只有一个公司代码或所有的公司代码本位币一致,你甚至可以使用CurrencyType10做控制范围货币。
控制范围货币设置实际上和控制范围如何设置息息相关,比如,某家台资集团在一个Client上使用了两个控制范围,目的是可以使台湾地区和中国使用不同的会计科目表和设置两个不同的控制范围货币,实际上保证控制范围货币与其包含的公司代码位币一致;再如,另一家美资公司控制范围使用了集团货币Type30USD,只设置一个控制范围,日本/香港/中国/法国/德国等多家使用不同本位币的公司代码被分配到该统一的控制范围下。
简单地说,控制范围货币类似CO模块的本位币,也就是说CO模块的”法定货币”是控制范围货币,分配分摊工重过帐工单结算等是以控制范围货币为基准的,现在回顾一下分配分摊循环的货币选择,如下图。
在CO分配分摊地字段组中可以选择其它两种CO货币->成本对象货币和业务货币,如果你对该两字段按帮助,系统会给你如下解释:
“Asarule,onlyamountsincontrollingareacurrencyareusedinperiodicreposting,assessmentanddistribution.”
如此设计动因何在,举个例子,如果有着多个不同本位币的公司代码的集中服务器只有一个控制范围,跨公司代码的费用分摊或任何跨公司代码交易过帐到CO模块,以什么货币金额为准?
当然是统一的控制范围货币。
正因为如此,为了避免FI过帐到CO时出现复杂的货币转换,这就是为什么有人喜欢建立多个控制范围货币的原因,目的就是尽量是FI/CO货币一致,在整个集团的获利分析时,多个控制范围在统一到一个经营范围,控制范围货币各异,但经营范围货币又是一致的,通过这种方式,轻易解决了跨国公司复杂的货币转换业务。
现在,应该对FI/CO货币类型有着非常清晰的认识了,还是以公司代码SSSS为例,如果使同时启动了FI/CO货币类型,则其将包括FI货币类型10/30/40和CO类型30,合并为10/30/40,在物料主数据中你必须为此种货币维护3个价格,如下图,假设3个价格是不同的。
现在会出现一些小问题,以两个最基本的业务来说明。
I.采购业务,假设采购价格为105元/个,则公司代码层100元收货,抛出借方5元差异,集团货币层/CO凭证层110元收货,抛出贷方5元差异,收货价格都是105元,也就是说,从外部而来的采购收货统一从FI过帐,3个价格此时尚可以保持一致。
II.工单收货,公司代码层100元收货,CO层110元收货,内部收货不抛差异,价格是不一致的,这样造成的后果是FI/CO数据不一致。
在上图中,公司代码SSSS的10/30都是RMB,两个价格不一致一目了然,在价格变更时,用户
往往忽略了CO货币类型,风险巨大,如果30是其它货币,检查价格错误将更加困难,FI/CO价
格的不一致将直接导致财务分析和成本分析报表取数无所适从,究竟那边才是正确的数据?
因为到目前为止,只讨论了多种货币/平行货币,SAP还提供了所谓的多级评估,多级评估的
设计初衷是为了解决集团和利润中心转移价格问题,稍后会有讨论。
ML单一/多级货币讨论
如果公司代码和控制范围货币一致,并且利润中心转移价格(物料互供)未采用ML默认方式,实际上可以考虑只使用单一货币类型,即FI本位币类型,这样可以有效保证FI/CO/ML/PCA的物料交易数据只有一个统一口径。
平行货币错误处理实例
某物料10层(FI层)标准价格为100465.19元吨,期间物料交易价格分析CKM3图如下:
集团公司30层(CO凭证层),当期标准单价为12174.79元/吨,30层的收据不产生差异,CKM3价格交易如下:
上两图期末库存为负(允许负库存),是月平衡前预跑物料分类帐的截图,注意期初差异10/30就不一致,原因是4月底修改5月初的价格时只变更了10层,30层保持不变,造成的后果是4月份开始FICO的物料交易数据开始不一,如果是原料,多层差异已上卷,因ML10/30层是分开计算的,则整个产品层10/30都混乱了,问题是如何更正?
更正存在的问题有:
I.假设现在是第5期,因为有交易,MR21已经不能更改S+3的物料单价,只能从第6期开始统一10/30两层价格。
II.即使第6期的标准价格被修正为一致,同时,还必须保证10/30两层的期初差异也完全一致,才能保证以后FICO层的数据是统一的。
*为了简化成本核算工作,企业在ERP系统中月末平衡后才统一对成品进行收货处理,期中的销售为负库存交货,即计数时为先发后收,月平衡后期末库存不出现负库存。
平行货币切换单一货币步骤
从平行货币切换回单一货币,可以使用以下方式:
A.8KEU:
取消多级评估方法
B.8KEQ:
去除分配到控制范围的多级评估参数文件
C.SE38:
运行SAPRCKMJX取消ML
D.OMX2:
只分配FI货币类型到物料分类帐类型,如果FI包括多个货币类型,则选择“人工的“选项手工分配货币类型的方法,如下图。
E.CKMSTART:
重新设置ML工厂为生产性质
其中AB两个步骤是针对启动了多级评估的企业,最好在一个新期间切换。
切换建议:
在从平行货币切换回单一货币,建议从后勤和财务方面进行充分测试,保证ML使用单一货
币后FI/CO/ML/PCA的数据绝对一致,对相关分析报表无影响。
广义的物料交易包括后勤
和财务两个模块的业务:
a.后勤模块的各种物料移动
I.物料的收发领退废等业务又可简单分为两种:
进货/出货,反映在ML即为收据/消耗。
b.财务模块的存货价值变更
I.发票价格变化或汇率引起的存货价值变更。
II.MR21/MR22,CKMPRPN/CKME价格变更引起的存货价值变更。
III.工单结算引起的存货价值变更。
ML多级评估
在ML中使用多个货币类型