如有转载请注明出处:http://blog.csdn.net/donkey2004112103/archive/2009/04/13/4070996.aspx

1.sap numbe range在标准程序中使用

之前一直不明白会计凭证编号sap是怎么做到连续编号,还以为是简单的做个全局变量,虽然形式差不多,但是sap有专门的TCODE和方法,可以保证号码不重复且可以做到只在某一个区间。甚至每年都会重新编号,像会计凭证编号,当达到某一程度的时候还会提醒。

2.如何自己创建

TCODE:SNRO。可以自己创建。如图:

短文本和长文本用来说明这个编号范围对象,输入任意描述即可。

子对象数据元素我们这里不填。这里需要说明一下,所谓子对象,多数指一个组织结构,比如公司代码、销售组织、工厂等,这样编号就在对应的每个组织下面独立编号,最典型的例子是财务凭证,每个公司代码下的财务凭证都是独立编号的(其对应的数据表
BKPF,也必定把公司代码做为一个键字段)。而我们这个调度单对应于销售订单,销售订单没有按照组织级别分别编号,因此相应的调度单也就不需要了。

到期年标记是指编号按年度归零,每当开始一个新年度时,相应的编号也需要从头开始,比如财务凭证和物料凭证都是这样(比如表BKPF
和MKPF,都把年度做为一个键字段) ,而我们的调度单不需要对应年度,因此这里也不打勾。

编号长度域就填创建的域,但是一定要先激活。指定这个编号范围对象 ZDIAODUDAN 的长度,我们定义域长度为
10,因此这个编号范围对象生成的编号长度也是 10 位。

无翻滚间隔是指如果编号达到最大,是否自动从头开始,勾上就不从头开始,而在获取编号的时候提示出错。我们这里应该打勾。

编号范围处理,属于翻译问题,实际就是编号范围的事务码,如果指定这个事务码,就可以不需要通过 SNUM 或者 SNRO
的主屏幕然后输入编号范围对象的名字来维护这个编号范围,而可以输入事务码直接进入它的号码范围维护屏幕。

警告百分比是指如果编号使用到一定比例,就发出系统警告,提示管理人员增大范围或者进行历史数据归档,避免编号全部用完后影响正常业务,这里我们填写
95,就是95%的时候提示。

主内存缓冲是指系统为了提高性能而预先取出一些编号放在应用服务器上,当程序取用编号时直接从应用服务器获取,而无需再读取数据库了。通常,如果对号码的连续性要求不高的情况下可以使用这种方式,而如果是财务凭证等要求连续的编号,则应该把主内存缓冲关闭,方法是通过菜单“编辑-设置缓存-无缓存”。

接着就可以在如图:

间隔中添加编号范围。

3.程序中如何使用

程序中我们也可以使用number range。使用三个函数即可。下面做以说明。

CALL FUNCTION 'NUMBER_RANGE_ENQUEUE'
       EXPORTING

            object           = 'ZSDDNR'
       EXCEPTIONS

            foreign_lock     = 1
            object_not_found = 2

            system_failure   = 3
            OTHERS           = 4.

*  **如果号码范围存在
  if sy-subrc eq 0 .
*  ****得到一个号码,
      CALL
FUNCTION 'NUMBER_GET_NEXT'
           EXPORTING

                nr_range_nr             = '01'
               
object                  = 'ZSDDNR'
           IMPORTING
               
number                  = L_SEQNO
*   quantity = quant
*   returncode =
code
           EXCEPTIONS
                interval_not_found      = 1

                number_range_not_intern = 2
               
object_not_found        = 3
                quantity_is_0           = 4

                quantity_is_not_1       = 5
               
interval_overflow       = 6
                buffer_overflow         = 7

                OTHERS                  = 8.
*  ***将号码累加
      CALL
FUNCTION 'NUMBER_RANGE_DEQUEUE'
           EXPORTING

                object           = 'ZSDDNR'
           EXCEPTIONS

                object_not_found = 1
                OTHERS           =
2.
  else .
    raise NUM_RANGE_ERROR .
  endif .

很容易理解,首先判断是否有这个number
range,如果存在的话,就获得下个序号,最后一个函数我估计意思是释放这个全局变量的内存。’ZSDDNR’就是我们创建的number
range。如此就可以像会计凭证编号那样每次都可以自动生成流水号了!流水号可以在自建表中用作主键,它的产生就靠上面的函数。

*******************************************************************************************************

Number Range 管理之并行缓冲:

常用的事务代码SNRO,SM56还有一些业务专用的号码管理,可以在SPRO中查找:

SNRO :Number Range 管理

一般的操作是维护号码范围。如RV_BELEG 是SD凭证编码管理。

并行缓冲:所为并行是指word process DIA的之间是并行获得的,如有8个instance ,每个instance 有40个WP,那号码段缓冲区表中会直接分配320*200个号码。 使用并行缓冲会提高并行处理的速度,如批量过账等。

数量号:一次分配占用的号码数量。

SM56: 缓冲区管理

SM56是管理一般编码范围的缓冲区,重置缓冲区,当每次重置时会浪费200个号,如上配置个数,一定要注意不适用并行缓冲。

哪并行缓冲区如何重置:

Note: 1244898 NK: Reorganization of local buffers for intervals

Report : NK_REORGANIZE

此报表有测试功能,可以先运行测试模式检查一下各WP的编码范围,如果是当个instance有问题也可以单独重置。

注意:并行缓冲重置会导致大量的号码段无用,慎用!

abap number range的更多相关文章

  1. SNRO:Number Range

    业务对象是在一定的编号范围内分配编号的,编号既可以是内部分配也可以是外部分配.对于外部分配,用户输入编号,系统检查这个编号是否被占用.对于内部分配,系统会自动的把编号分配给业务对象.所以内部分配和外部 ...

  2. Number Range 管理之并行缓冲

    Number Range 管理之并行缓冲: 常用的事务代码SNRO,SM56还有一些业务专用的号码管理,可以在SPRO中查找: SNRO :Number Range 管理 一般的操作是维护号码范围.如 ...

  3. SAP NUMBER RANGE维护配置object FBN1 Deletion only possible if status is initial

    背景: 错误日志: SAP FBN1 Deletion only possible if status is initial 场景: 如果目标机已有NUMBER RANGE 不为0,需要删除配置年为9 ...

  4. POJ2104 K-th Number Range Tree

    又是区间第k大,这次选择这道题是为以后写线段树套平衡树铺路的.Range Tree可以理解成线段树套vector吧,相当于每个结点多存了对应区间的一个排好序的序列.画一下就会知道空间的消耗是nlogn ...

  5. 【由VerySky原创】由Number Range 导致凭证生成但无法保存的问题

    工厂正常生产,但某天突然发生车辆下线失败销售入库报错( MFBF凭证不能保存\ 下线车无法产生131 )的问题: ST22发现程序dump信息 分析 | SAPSQL_ARRAY_INSERT_DUP ...

  6. [Regex Expression] Match mutli-line number, number range

    /^-?\d{,}\.\d+$/gm

  7. ABAP 将Range 条目数转化

    RANGES:r_vbeln FOR lips-vbeln. r_vbeln-sign = 'I'. r_vbeln-option = 'EQ'. LOOP AT gt_item INTO gw_it ...

  8. Automatically generate serial number in abap

    流水号的产生:   在ABAP开发中,很多地方都需要按照自己的规则生成流水号,把这些流水号保存进透明表,作为唯一标示. 一. 系统中设定流水号 使用T-Code SNRO来创建一个流水号标识对象. 输 ...

  9. “Guess the number” game

    项目描述:https://class.coursera.org/interactivepython-004/human_grading/view/courses/972072/assessments/ ...

随机推荐

  1. WebKit中的Chrome 和 ChromeClient

    原文地址:http://blog.csdn.net/dlmu2001/article/details/6208241 摘要: 浏览器的GUI接口分成两种,一种是控件的绘制,另一种则是同应用息息相关的窗 ...

  2. JS文档和Demo自动化生成工具 - SmartDoc发布

    曾几何时,当你码神附体,一路披荆斩棘的完成代码后,带着“一码在手,天下我有”的傲然环顾之时,却发现单元测试.API文档.Demo实例陆续向你砸来,顿时有木有一种冰水挑战后的感觉.而这时你应该:哟哟,快 ...

  3. smartjs 0.2 OOP讲解 - factory

    本篇介绍OOP的第二个对象factory.在以往项目中其实真正使用klass的地方相当少,而factory则是十分常见的. 在smartjs中的factory并不是指的是工厂模式.在factory要求 ...

  4. redmin3 忘记管理密码找回方法

    在网上找了一下都是redmine2的,而且比较复杂. 后来我看了一下redmin的数据库,如下: 注册一个新用户把admin的值改为1即可,就是管理员了. 如果忘记数据库密码,可以参考此文档修改数据库 ...

  5. 【深入浅出.Net IL】1.一个For循环引发的IL

    .Net底层剖析目录章节 1.[深入浅出.Net IL]1.一个For循环引发的IL 2.[.Net底层剖析]2.stfld指令-给对象的字段赋值 3.[.Net底层剖析]3.用IL来理解属性 1.准 ...

  6. Android学习笔记之树形菜单的应用...

    PS:终于考完试了,总算是解脱了...可以正式上手项目开发了.... 学习内容: 1.掌握如何使用树形菜单...   对知识点进行一下补充...居然忘记了去学习树形菜单...不过在这里补上... Ex ...

  7. C#加密类

    var es= EncryptSugar.GetInstance(); string word = "abc"; var wordEncrypt = es.Encrypto(wor ...

  8. C++中的静态绑定和动态绑定

    C++在面向对象编程中,存在着静态绑定和动态绑定的定义,本节即是主要讲述这两点区分.我是在一个类的继承体系中分析的,因此下面所说的对象一般就是指一个类的实例.首先我们需要明确几个名词定义: 静态类型: ...

  9. IOS开发UI基础UIPageControl的属性

    UIPageControl 常见属性: •    numberOfPages // 设置有多少页 默认为0 [pageControl setNumberOfPages:kImageCount]; •  ...

  10. struts2重点——ModelDriven

    一.属性驱动 在目标 Action 类中,通过 setXxx() 方法来接收请求参数. 二.模型驱动 1.ParametersInterceptor 拦截器工作原理 ParametersInterce ...