如有转载请注明出处: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. Android Touch消息传递机制探究分析

    在Android中,消息的传递控制主要是通过两个方法共同配合使用来对用户的触摸消息进行分发的,下面就来看看这两个方法: onInterceptTouchEvent:此方法定义于ViewGroup中,顾 ...

  2. LevelDB(v1.3) 源码阅读之 Slice

    LevelDB(v1.3) 源码阅读系列使用 LevelDB v1.3 版本的代码,可以通过如下方式下载并切换到 v1.3 版本的代码: $ git clone https://github.com/ ...

  3. 无插件纯web 3D机房 (第四季:大型园区、地球仪效果和其他扩展应用)

    前言 初次见面的朋友们大家好,这篇文章是"无插件纯web 3D机房"系列的第四季,感兴趣的朋友可从头开始观看,以下是正确的阅读顺序: 无插件纯web 3D机房(第一季:从零开始搭建 ...

  4. 【转】Linux 概念架构的理解

    转:http://mp.weixin.qq.com/s?__biz=MzA3NDcyMTQyNQ==&mid=400583492&idx=1&sn=3b18c463dcc451 ...

  5. ThinkJS 项目用 WebStorm 来设置断点与调试

    1. 前置条件.已按ThinkJS 2.0 文档 之 <创建项目> 建好项目. 说明a: 本示例创建项目名为wagang,使用es6配置: thinkjs new wagang --es6 ...

  6. 爬虫技术 -- 基础学习(四)HtmlParser基本认识

    利用爬虫技术获取网页源代码后,针对网页抽取出它的特定文本内容,利用正则表达式和抽取工具,能够更好地抽取这些内容. 下面介绍一种抽取工具 -- HtmlParser HtmlParser是一个用来解析H ...

  7. 前端们,gulp该用起来了,简单的demo入门——gulp系列(一)

    gulp.grunt前端自动化工具,只有用过才知道多么重要. 它们问世这么久了?你真的用过吗? 写个简单的less.watch任务的demo分享———— 1.准备: 安装全局node.npm,这个教程 ...

  8. API Design

    REST API Design Guidelines V 1.0.201208 Draft 5 Last Updated: 08/31/2012 1       简介 本文档旨在规范REST API的 ...

  9. C语言编译过程详解

    前言 C语言程序从源代码到二进制行程序都经历了那些过程?本文以Linux下C语言的编译过程为例,讲解C语言程序的编译过程. 编写hello world C程序: // hello.c #include ...

  10. django book 阅读笔记

    一,django是一个十分优秀的python web的框架,那框架的是什么? 假设我们不使用框架来进行编写,我们要用如下的代码进行web脚本: #!/usr/bin/env python import ...