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