屠夫,能不能和俺说说sap的数据流机制啊?

对abap的原理不明白。比如,创建了FI凭证,假定是费用凭证,这样系统会产生FI凭证,spl凭证,CO凭证和PCA凭证,如果按照我所掌握的知识去做这件事(我只会delphi+SQLserver)有两种方法,1就是delphi程序中建几个函数,FI-CO-PCA,只要触发了FI,就嵌套调用其它的函数,2是在SQLserver中定义触发器,这样有个好处,就是数据完整性的保证,如果有一个出问题,就rollback。我不知道sap是怎么的机制,因为我们的系统有这样的问题,就是grir科目,GLT0和GLPCT是等的,GLT0和bseg的明细加起来不等,但glpca和bseg的明细合计是等的,所以grir的明细报表和总帐对不上,后来问sap,他们的研发人员给了几个程序,一个是检查凭证的不一致性的,一个是修复的。就是说sap会存在总帐和明细账不一致性的问题(也会存在物流凭证和财务凭证不一致的情况),所以我想知道是这样数据传的吗:mseg->bseg,bseg->glpca ,bseg->cope,glt0->glpct,系统如果没有数据库的事务回滚机制就保证不了glt0和bseg的一致性。

这个问题太难了,试试看能不能说清楚。就你所说的FI的凭证同时产生很多其他凭证的例子而言,SAP是先调用函数,把各种凭证都产生出来,例如该FI凭证与CO有关,就调用函数把CO的凭证产生好,以此类推。所有的凭证都产生了之后,在通过Commit Work把缓存中的数据更新到数据表中,是一起更新的,例如FI凭证同时产生了5张其他的凭证,那这5张凭证就同时更新到相应的数据表中。只要任何一个表更新失败,程序都将Rollback。所以,逻辑上不会出现模块或者是相关表之间数据对不上的情况。但在理论上,是有可能出现Rollback失败的情况的,例如系统不可控的一些因素(外部系统错误、停电等)。这种情况下,就有可能出现你所说的问题。再回归到你所讲的情况,GLT0和BSEG出现不一致的情况是非常罕见的。当然,并不是所有BSEG中的记录都会更新GLT0(例如以前帖子里讲到的备注项目等),去除了这些因素之后,仍然出现了BSEG和GLT0不一致的情况,就属于数据更新上出现的问题(就象上面所说的那样),以前在企业也看到过这种情况。的确,出现了这种情况之后,SAP提供了检查和修复的程序,这个处理起来也不难,在SAP的Notes里面也可以找到相关的内容。以上个人拙见。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-06-27
另:你应该向你家ABAP要那个全国人民都知道的什么SAP COMMON USED tables的那个文章.俺说过虽然SAP tables有数万,但是每个module只要抓住最常用的可能还不超过10个表(可惜SAP懒人们连这都不愿记,也就100来个表吧,每天背一遍背上一年总记的住吧),SAP理解就基本差不多了(永远要记住咱们只是用别人的东西而已),现在俺对这些表和字段关联是倒背如流...
第2个回答  2013-06-27
1)总帐和明细账不一致性的问题,正常情况下应该不大会.GLT0应该等于BSEG amount total up,除非有些FI doc不要去rollup GLT0,你看SAPMF05A看个100遍,产生会计凭证时一般会rollup GLT0.也会存在物流凭证和财务凭证不一致的情况),这个就太正常了,我可以举N个case出来,贴出doc怕把着坛子撑爆了.随便小花5分钟做一个给你看,只要你对SAP的这几大module基本的设计逻辑理解,要再现一个错误是很easy的..CO03 check documented goods movement .物料凭证金额为0.注意是backflush 工单header material的. 物料凭证无金额,会计凭证有..
第3个回答  2013-06-27
我认为你觉得这个例子不太妥当。这样的处理在流程上的对的。
相似回答
大家正在搜