sap abap 流水號設置


1.TCODE:SNRO,進入如圖所示界面

2.

  短文本和長文本用來說明這個編號范圍對象,輸入任意描述即可。     

  子對象數據元素我們這里不填。這里需要說明一下,所謂子對象,多數指一個組織結構,比如公司代碼、銷售組織、工廠等,這樣編號就在對應的每個組織下面獨立編號,最典型的例子是財務憑證,每個公司代碼下的財務憑證都是獨立編號的(其對應的數據表 BKPF,也必定把公司代碼做為一個鍵字段)。而我們這個調度單對應於銷售訂單,銷售訂單沒有按照組織級別分別編號,因此相應的調度單也就不需要了。      到期年標記是指編號按年度歸零,每當開始一個新年度時,相應的編號也需要從頭開始,比如財務憑證和物料憑證都是這樣(比如表BKPF 和MKPF,都把年度做為一個鍵字段) ,而我們的調度單不需要對應年度,因此這里也不打勾。 

  編號長度域就填創建的域,但是一定要先激活。指定這個編號范圍對象 YLBPP001的長度,我們定義域長度為 10,因此這個編號范圍對象生成的編號長度也是 10 位。  無滾動是指如果編號達到最大,是否自動從頭開始,勾上就不從頭開始,而在獲取編號的時候提示出錯。我們這里應該打勾。  

   編號范圍處理,屬於翻譯問題,實際就是編號范圍的事務碼,如果指定這個事務碼,就可以不需要通過 SNUM 或者 SNRO 的主屏幕然后輸入編號范圍對象的名字來維護這個編號范圍,而可以輸入事務碼直接進入它的號碼范圍維護屏幕。   

   警告百分比是指如果編號使用到一定比例,就發出系統警告,提示管理人員增大范圍或者進行歷史數據歸檔,避免編號全部用完后影響正常業務,這里我們填寫 95,就是95%的時候提示。   

   主內存緩沖是指系統為了提高性能而預先取出一些編號放在應用服務器上,當程序取用編號時直接從應用服務器獲取,而無需再讀取數據庫了。通常,如果對號碼的連續性要求不高的情況下可以使用這種方式,而如果是財務憑證等要求連續的編號,則應該把主內存緩沖關閉。

 

3. 程序讀取:

  

      CALL FUNCTION 'NUMBER_RANGE_ENQUEUE'
        EXPORTING
          object           = 'YLBPP001' "這個就是流水號對象
        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             = '1'                "這個就是維護的間隔號
            object                  = 'YLBPP001'          "這個就是流水號對象
*           QUANTITY                = '1'
*           SUBOBJECT               = ' '
*           TOYEAR                  = '0000'
*           IGNORE_BUFFER           = ' '
          IMPORTING
            number                  = wa_data-zz_code           "獲得的流水號
*           QUANTITY                =
*           RETURNCODE              =
          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.
* Implement suitable error handling here
        ENDIF.

*      *  ***將號碼累加
        CALL FUNCTION 'NUMBER_RANGE_DEQUEUE '
          EXPORTING
            object           = 'YLBPP001'
          EXCEPTIONS
            object_not_found = 1
            OTHERS           = 2.

很容易理解,首先判斷是否有這個number range,如果存在的話,就獲得下個序號,

最后一個函數估計是釋放這個全局變量的內存(資源)。'YLBPP001'就是我們創建的number range。如此就可以像會計憑證編號那樣每次都可以自動生成流水號了!

流水號可以在自建表中用作主鍵。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM