SAP的号码范围(number range)SNRO和SNUM自动编号工具的用法
T-CODE:SNRO、SNUM的用法
1:Number Range的通用Tcode:SNRO或者SNUM
2:Number Range的通用讀取函數(shù):NUMBER_GET_NEXT
3:如有跳號現(xiàn)象,可以禁用對象的Buffer試試
4:sap numbe range在標(biāo)準(zhǔn)程序中使用
一直不明白會計(jì)憑證編號sap是怎么做到連續(xù)編號,還以為是簡單的做個(gè)全局變量,雖然形式差不多,但是sap有專門的TCODE和方法,可以保證號碼不重復(fù)且可以做到只在某一個(gè)區(qū)間。甚至每年都會重新編號,像會計(jì)憑證編號,當(dāng)達(dá)到某一程度的時(shí)候還會提醒。
一:創(chuàng)建:TCODE:SNRO??梢宰约簞?chuàng)建。
1:短文本和長文本用來說明這個(gè)編號范圍對象,輸入任意描述即可。
2:子對象數(shù)據(jù)元素我們這里不填。這里需要說明一下,所謂子對象,多數(shù)指一個(gè)組織結(jié)構(gòu),比如公司代碼、銷售組織、工廠等,這樣編號就在對應(yīng)的每個(gè)組織下面獨(dú)立編號,最典型的例子是財(cái)務(wù)憑證,每個(gè)公司代碼下的財(cái)務(wù)憑證都是獨(dú)立編號的(其對應(yīng)的數(shù)據(jù)表 BKPF,也必定把公司代碼做為一個(gè)鍵字段)。而我們這個(gè)調(diào)度單對應(yīng)于銷售訂單,銷售訂單沒有按照組織級別分別編號,因此相應(yīng)的調(diào)度單也就不需要了。
3:到期年標(biāo)記是指編號按年度歸零,每當(dāng)開始一個(gè)新年度時(shí),相應(yīng)的編號也需要從頭開始,比如財(cái)務(wù)憑證和物料憑證都是這樣(比如表BKPF 和MKPF,都把年度做為一個(gè)鍵字段) ,而我們的調(diào)度單不需要對應(yīng)年度,因此這里也不打勾。
4:編號長度域就填創(chuàng)建的域,但是一定要先激活。指定這個(gè)編號范圍對象 ZDIAODUDAN 的長度,我們定義域長度為 10,因此這個(gè)編號范圍對象生成的編號長度也是 10 位。
5:無翻滾間隔是指如果編號達(dá)到最大,是否自動從頭開始,勾上就不從頭開始,而在獲取編號的時(shí)候提示出錯(cuò)。我們這里應(yīng)該打勾。
6:編號范圍處理,屬于翻譯問題,實(shí)際就是編號范圍的事務(wù)碼,如果指定這個(gè)事務(wù)碼,就可以不需要通過?SNUM?或者?SNRO?的主屏幕然后輸入編號范圍對象的名字來維護(hù)這個(gè)編號范圍,而可以輸入事務(wù)碼直接進(jìn)入它的號碼范圍維護(hù)屏幕。
7:警告百分比是指如果編號使用到一定比例,就發(fā)出系統(tǒng)警告,提示管理人員增大范圍或者進(jìn)行歷史數(shù)據(jù)歸檔,避免編號全部用完后影響正常業(yè)務(wù),這里我們填寫 95,就是95%的時(shí)候提示。
8:主內(nèi)存緩沖是指系統(tǒng)為了提高性能而預(yù)先取出一些編號放在應(yīng)用服務(wù)器上,當(dāng)程序取用編號時(shí)直接從應(yīng)用服務(wù)器獲取,而無需再讀取數(shù)據(jù)庫了。通常,如果對號碼的連續(xù)性要求不高的情況下可以使用這種方式,而如果是財(cái)務(wù)憑證等要求連續(xù)的編號,則應(yīng)該把主內(nèi)存緩沖關(guān)閉,方法是通過菜單“編輯-設(shè)置緩存-無緩存”。
注意點(diǎn):如果號碼段出問題 可以吧 這個(gè)main memory buffering 去掉
保存后點(diǎn)擊下面的 number ranges
注意? from? number 只有初始化時(shí)候在這個(gè)界面維護(hù) 不能再做改變
如果想在后期改變 current number
可以在
這個(gè)界面點(diǎn)擊 status
保存即可
在ABAP中通過“NUMBER_GET_NEXT”來獲取編號對象所生成的流水碼,每次調(diào)用都會產(chǎn)生一個(gè)新的號碼。
REPORT ztest.
DATA:nextnum TYPE i.
*鎖定?
CALL FUNCTION 'NUMBER_RANGE_ENQUEUE'?
? EXPORTING?
??? object?????????? = 'ZCHEQUE'?
? EXCEPTIONS?
??? foreign_lock???? = 1?
??? object_not_found = 2?
??? system_failure?? = 3?
??? OTHERS?????????? = 4.
IF sy-subrc = 0.?
*獲取下個(gè)數(shù)字?
? CALL FUNCTION 'NUMBER_GET_NEXT'?
??? EXPORTING?
????? nr_range_nr???????????? = '1'? “在編號范圍中分配的序列號
????? object????????????????? = 'ZCHEQUE'? “編碼對象名稱
??? IMPORTING?
????? number????????????????? = nextnum? “輸出生成的流水號
??? 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.?
? IF sy-subrc <> 0.?
??? MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno?
?????? WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
? ELSE.?
*解鎖?
??? CALL FUNCTION 'NUMBER_RANGE_DEQUEUE'?
????? EXPORTING?
??????? object?????????? = 'ZCHEQUE'?
????? EXCEPTIONS?
??????? object_not_found = 1?
??????? OTHERS?????????? = 2.?
? ENDIF.
ENDIF.
WRITE :/? nextnum.
總結(jié)
以上是生活随笔為你收集整理的SAP的号码范围(number range)SNRO和SNUM自动编号工具的用法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ABAP实例:如何生成年月的输入帮助
- 下一篇: 销售订单按交货单合并Billing