[SAP Abap] X-DOC: SNRO - ABAP シリアル番号アプリケーション

1. テーブル(フィールドドメイン)を定義します。

ここに画像の説明を挿入します
ここに画像の説明を挿入します

2. シリアル番号を定義する

Tcode: SNRO/SNUM、
上で作成したフィールド YDSNRO に基づいて、オブジェクト YSNRO を作成し、シリアル番号範囲番号
ここに画像の説明を挿入します
長フィールドを定義します。作成したフィールドに入力するだけですが、最初にアクティブにする必要があります。

警告パーセンテージ: 数値が特定の割合まで使用されると、システム警告が発行され、すべての数値が使い果たされたときに通常のビジネスへの影響を避けるために、範囲を増やすか履歴データをアーカイブするよう管理者に求められることを意味します。ここに 95 を入力してください。 、これは 95% でのプロンプトです。

ロールオーバー間隔なし: 番号が最大に達した場合に自動的に最初から開始するかどうかを示し、チェックすると最初から開始されませんが、番号取得時にエラーが表示されます。

番号範囲トランザクション: このトランザクション コードを指定する場合、この番号範囲を維持するために SNRO/SNUM のメイン画面から番号範囲オブジェクトの名前を入力する必要はありません。代わりに、トランザクション コードを入力してその番号を直接入力できます。番号範囲メンテナンス画面。

メイン メモリ バッファ:
パフォーマンスを向上させるために、システムがいくつかの数値を事前に取得し、アプリケーション サーバーに配置することを指します。プログラムが数値を取得するとき、データベースを読み取ることなく、アプリケーション サーバーから直接取得されます。
通常、この方法は数値の連続性が高くない場合に使用できますが、財務書類などで連続した数値が必要な場合は、メインメモリのバッファをオフにする必要があります。
番号を取得するときにパラメータ IGNORE_BUFFER = 'X' を設定すると、番号ホッピングを防ぐことができます。これを 'X' に設定すると、番号ホッピングが防止されます。

番号範囲送信: 通常、コードは生産機で独立して設定されていますが、この番号範囲のメンテナンスを送信する必要がある場合は、初期メニューの「範囲」|「送信」コマンドを実行し、送信要求番号を生成する必要があります。手動操作による。

3. シリアル番号を使用する

プログラム内でシリアル番号を使用するには、次の 3 つの関数を使用する必要があります。

FORM get_no CHANGING p_no.
  CALL FUNCTION 'NUMBER_RANGE_ENQUEUE'
    EXPORTING
      object           = 'YSNRO'
    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             = '01'
        object                  = 'YSNRO'
        ignore_buffer           = 'X'
      IMPORTING
        number                  = p_no
      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           = 'YSNRO'
        EXCEPTIONS
          object_not_found = 1
          OTHERS           = 2.
    ENDIF.
  ENDIF.
ENDFORM.

4. テストプログラム

REPORT yz_demo_xlevon_snro.

PERFORM add_data.
PERFORM add_data.
PERFORM add_data.
COMMIT WORK.
SELECT * FROM ytxlevon_snro INTO TABLE @DATA(lt_xlevon).
cl_demo_output=>display( lt_xlevon ).

* 增加表记录
FORM add_data.
  DATA: ls_xlevon TYPE ytxlevon_snro.
  DATA: lv_no TYPE ytxlevon_snro-ysnro.
  PERFORM get_no CHANGING lv_no.
  ls_xlevon-ysnro = lv_no.
  MODIFY ytxlevon_snro FROM ls_xlevon.
ENDFORM.
...

ここに画像の説明を挿入します

オリジナル記事、転載の際は出典を明記してください - X-Files

おすすめ

転載: blog.csdn.net/XLevon/article/details/130633386