郑重声明:本博客所发文章全部为原创,其他地方所看到同样文章如无授权,均为盗用!以下为本篇正文(文章是多年以来积累所写,以前主要发布于知乎,后续陆续发布到此博客):
开头语:实战篇尽量把自己以往记录的几百篇日常记录和解决的各种问题进行汇总整理,这个过程也是再次梳理的一个过程,大家一起学习吧!另外,实战篇中的测试和内容演示有些内容在ECC6.0版本上进行的,有些是S4的版本的,笔者尽量做了说明,请大家注意区分!
我们都知道SAP中每个模块都需要对号码段进行定义,从主数据到业务单据、到各类凭证,下面以财务的FI凭证和CO凭证为例进行号码段的说明。
备注:联系我们在《SAP那些事-理论篇-11-SAP核心设计逻辑》中“面向对象的设计”的核心设计思路,号码其实就是对各类对象的编码。号码其实就是各类对象的“身份证”。
号码段最常用的事物代码为SNRO/SNUM,这两个事物代码可查看号码段对应的对象(在理论篇中我们谈过对象的SAP的核心设计逻辑就是面向对象的概念,我们从实战篇中会到看到很多地方都体现这个核心设计逻辑)。以FI凭证号码和CO凭证号码为例截图如下(如下截图来自为ECC系统中,S4中变化不大):
点击“概览”按钮,可查看对象概览(即需要定义号码段的各类对象)。
我们对主要的字段进行说明如下(在栏位中按F1按钮,系统也会给出说明):
子对象数据元素:BUKRS,表示这个号码范围是按公司代码维护的,公司代码的字段名称就是BUKRS;
到期年标记:表示这个号码范围按年维护;
编号长度域:表示号码范围的长度,这里的10表示长度;
编号范围处理:变式号码范围维护的事物代码;
警告百分比:表示号码段还剩多少的时候系统给出一个警告信息,比如号码是1-1000,那么用到900了,系统就给出一个警告信息。
上图中是CO凭证号码段的截图,和FI的不同在于,“到期年标记”未打钩,说明CO凭证号码段不按年维护。
多了一个“主内存缓冲”,表示是否使用缓冲,使用缓冲的话,当前号码段会等于当前最新的号码加上和面的“缓冲区的数量号”,笔者理解是事先预留一定数量的号码段出来,按照SAP的说明,设置缓冲,可能造成号码断号。反过来说,就是如果出现断号,可禁止缓冲试下能否解决。
另外就是下方有“组规则”的一个视图,有几个字段,这里也有对应的组相关的表,这里表明CO号码段是按照组维护的。
通过菜单“转到-编号范围”就转到了号码范围维护的界面。
SNRO和SNUM对应的表为TNRO,所有号码段的存储表为NRIV。
关于号码段经常遇到的几个问题(FAQ):
1. 号码段用完了怎么办?
答:尽量在设置号码段时考虑企业实际情况,留足号码范围,如果号码段真的用完了,而且我们也没有更新对象使用的号码段。
从实际项目经验来看,SAP默认会从头开始编起,即从这个号码段的第一个开始重新使用,这里说的从头开始编起,至少是年度不同了(比如发票校验的号码段),这点要注意。
比如会计凭证号码段在一年内就用完了,SAP逻辑上是不允许同一个公司代码下同一年度存在两个相同的会计凭证号码的,这个时候恐怕只有更改号码范围。所以说呢,号码段耗用完,基本的方法也就两个,一个是配置新的号码段,一个是让SAP自动从头开始编号。
2. 有的客户要求业务号码和财务号码要一致怎么处理?
答:这个要求最常见的是后勤发票校验和销售发票要和对应的财务凭证编码一致,网上有朋友给出过方案,大家可以搜索下。
Note:452127描述了如何在三种情形下使发票校验(MIRO)号码和会计凭证号码保持一致,销售发票号码和财务凭证号码保持一致。
记得比较简单的方法就是设置销售发票号码段和财务凭证号码段是同一个号码段,销售号码段设置为外部编号就可以了。
在笔者看来,保持这种一致性,是没太大意义和价值的。以前遇到过财务会提类似的需求(是受到传统财务核算观念的影响吧),后来就慢慢很少遇到了这样的需求了。
3. 财务凭证号如果不想按年度维护,怎么办?
答:直接全部统一维护到9999年即可,系统就不会按照每一年去取数了,下一年会按照上一年的继续往下编,国内客户基本都是按年度编,即每年从头编起,有的国外用户则一直使用下去。
4. CO凭证号码段和CO结算号码段是在一个地方维护吗?
答:不是的,这是两个概念。
CO结算凭证(KO88/CO88等产生的结算凭证)需要单独维护一个号码段,使用事务代码KO8N维护,按控制范围(控制范围作为组)分配。
CO凭证(日常CO过账)是KANK维护的,按照控制范围加业务交易(业务交易作为元素)分配的。
5. 如何查找号码段在哪里维护?
在相应模块的配置点下都有,可自行查找,有兴趣的可总结下到底有多少个号码段要维护。
通过SNRO下看对象数量的话,是要300多个地方维护号码段吧。
在维护号码段时,如不清楚维护哪个号码段,可点击配置点前的“帮助”按钮看一下系统的说明。
6. 号码段到底要不要传输?
答:一句话,别贪图那点便利要传输号码段,因为这事本不应出现的问题很多了,维护一下能费多大劲啊,所以不要传输!
7. KANK维护CO凭证号码段时不显示CO业务交易的清单,如何解决?
答:如果Not assigned下不显示业务交易的清单,可使用SE38/SA38运行程序RKTKA04C,那么此处就可以显示业务交易清单了,OKC1可查看CO的所有业务交易(四位字母加描述),业务交易和号码段的关系存储在表TKA04中。
说明:CO凭证号码段有一点特殊,这个01/02号码范围并非我们创建的时候输入的,而是我们创建组的时候自动生成的。
8. KANK维护CO号码段组的时候提示“号码段XX不存”,如何处理?
答:相关表为TNRGT,这个表中有号码对象、子对象元素、号码段的对应关系(XX),如果这个表中存在对应的号码段,而维护的时候提示没有,可考虑从表中删除这个号码段,在前台重新创建,如果这个表中无法删除,可考虑从表NRIV中删除重新创建,表NRIV存储所有对象和对应的号码段以及当前号码。
9. KANK无法保存组文本(保存时提示保存了),怎么办?
答:SAP note:2233325专门说了这个事,记得有个程序要运行,可以自动生成并修改文本。
10. 编码到底采取内部编号还是外部编号呢?
答:使用外部编码,其实是很多企业想对一些主数据编一些有意义的编码,比如哪几位代表什么,哪个字母是什么含义。
笔者强烈建议是:非特别情况,不建议使用所谓有意义的编码,实际业务变化后,经常会导致原来认为有意义的编码变得无意义。也就是说,大部分情况下,使用流水号就可以了,最简单的反而是最实用的。
有意义的编码可以维护在主数据中,作为属性字段体现,反而容易更新。
11. 获取号码段的函数是什么?
答:可使用函数NUMBER_GET_NEXT获取相应对象的号码段。
12. 是否可自定义号码对象?
答:可使用SNRO自定义号码对象,并维护相应的号码段,比如自定义一个叫公众号文章编号的号码段。