Nummernkreisobjekt: Unterschied zwischen den Versionen

Aus SAP Wiki ツ
Zeile 19: Zeile 19:
=== Nächste Nummer aus Nummernkreis bekommen ===
=== Nächste Nummer aus Nummernkreis bekommen ===


<syntaxhighlight lang="abap" line start="1">
  METHOD get_next_number.  
  METHOD get_next_number.  
   
   
Zeile 77: Zeile 78:
     ENDIF.
     ENDIF.
  ENDMETHOD.
  ENDMETHOD.
</syntaxhighlight>


=== Aufruf der Methode ===
=== Aufruf der Methode ===

Version vom 12. August 2021, 14:18 Uhr

Erstellung

Mit SNUM wird ein Z Nummernkreisobjekt erstellt.

Durch die Einstellung "Domäne für Nummernlänge" definiert man wie lang die Nummer sein soll z.B. NUMC10 ein 10 stelliges nummerische Nummer.

Durch die Einstellung "Prozent Warnung" gibt man an wann eine Warnung erfolgen soll. Z.B. 10% besagt, das bei einem Intervall von 1000 ab der Nummer von 900 eine Warnung ausgegeben wird.

Codeschnipsel

Parameter der Methode

[--->] IV_NR_RANGE_NR                 TYPE        NRNR
[--->] IV_NR_OBJECT                   TYPE        NROBJ
[--->] IV_NR_OBJECT_SUB               TYPE        SUBOBJECT(optional)
[<---] EV_NUM                         TYPE        SEQNR4 "Aktuell 4 Stellen. Ggf. Nummernkreisdomäne anzupassen
[EXC!] ERROR

Nächste Nummer aus Nummernkreis bekommen

 
 METHOD get_next_number. 
 
    DATA: lv_num TYPE nrlevel. "Enthält 20 Stellen, ggf. ist hier die gleiche Länge wie ev_num haben soll zu definieren
    CLEAR: ev_num.
 
    CALL FUNCTION 'NUMBER_RANGE_ENQUEUE'
      EXPORTING
        object           = iv_nr_object
      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             = iv_nr_range_nr
          object                  = iv_nr_object
          subobject               = iv_nr_object_sub
        IMPORTING
          number                  = lv_num
        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                  = 99.
 
      IF sy-subrc <> 0.
        MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 RAISING error.
      ENDIF.
      IF sy-subrc = 0.
          ev_num = lv_num.
      ENDIF.
    ELSE.
      MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 RAISING error.
    ENDIF.
 
    CALL FUNCTION 'NUMBER_RANGE_DEQUEUE'
      EXPORTING
        object           = iv_nr_object
      EXCEPTIONS
        object_not_found = 1
        OTHERS           = 99.
 
    IF sy-subrc <> 0.
      MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 RAISING error.
    ENDIF.
 
    IF ev_num IS INITIAL.
      MESSAGE ID 'NR' TYPE 'S' NUMBER '024' DISPLAY LIKE 'E' RAISING error.
    ENDIF.
 ENDMETHOD.

Aufruf der Methode

Bei Übergabe des Parameters "iv_nr_range_nr" ist die Nummerkreisnummer zunehmen, den man im Intervall genommen hat z.B. 01. Das Z Nummernkreisobjekt ist Parameter "iv_nr_object" mitzugeben.

Transport von Nummernkreisintervallen

Es ist möglich Intervalle zu transportieren: SNUM -> Menüleiste "Intervalle" -> Transportieren