[52941] in SAPr3-news

home help back first fref pref prev next nref lref last post

=?ISO-8859-1?Q?ABAP_Toolprogramme_/_Refresh?=

daemon@ATHENA.MIT.EDU (volker Korrmann)
Wed Jan 12 08:08:04 2005

To: sapr3-news@mit.edu
Date: 12 Jan 2005 05:07:55 -0800
From: volker_korrmann@web.de (volker Korrmann)
Message-ID: <cdd58c09.0501120507.1aa0648@posting.google.com>

Hallo Leute,

wir hatten das Problem, daß in Prod die Nummernkreise per Transport
korrigiert werden mußten. Anschließend zog der neue Nummernkreis
jedoch wegen der Pufferung auch noch nicht!!

Anbei ein Refresh Programm, um innerhalb eines beliebigen Nummernkreis
Namensraumes alle gepufferten Nummernkreise richtig zu stellen.

Dafür muß jedoch für jeden Nummernkreis mindestens ein NUMBER_GET_NEXT
ausgeführt werden. Sprich die Nummern von gepufferten Nummernkreisen
werden alle um eins erhöht.
Ist dabei die gezogenen Nummer nicht im neuen Intervall, wird so lange
eine neue Nummer gezogen wie nötig (maximal 1000 mal). Bei einer 10´er
Pufferung passiert das also ca. 10 Mal und dann wird der Puffer vom
NUMBER_GET_NEXT wieder richtig gefüllt.

Gruß Volker


*&---------------------------------------------------------------------*
*& Report  Z_VK_NUMMERNKREIS_REFRESH                                  
*
*&                                                                    
*
*&---------------------------------------------------------------------*
*&                                                                    
*
*&                                                                    
*
*&---------------------------------------------------------------------*

REPORT  z_vk_nummernkreis_refresh               .


TABLES: tnro, nriv.

DATA: it TYPE STANDARD TABLE OF nriv WITH HEADER LINE.

DATA: number type NRFROM, rc, i TYPE i.

SELECT-OPTIONS: object FOR tnro-object obligatory.

START-OF-SELECTION.

  SELECT * FROM nriv INTO TABLE it
          WHERE object IN object.

  LOOP AT it.

    ON CHANGE OF it-object.
      CLEAR tnro.
      SELECT SINGLE * FROM tnro WHERE object = it-object.
    ENDON.

    IF tnro-buffer = ''. DELETE it. ENDIF.

  ENDLOOP.





  LOOP AT it.
    i = 0.
    rc = 'X'.
    WHILE rc = 'X' AND NOT i > 100.
      i = i + 1.
      CALL FUNCTION 'NUMBER_GET_NEXT'
        EXPORTING
          nr_range_nr                   = it-nrrangenr
          object                        = it-object
          quantity                      = '1'
          subobject                     = it-subobject
          toyear                        = it-toyear
          ignore_buffer                 = ' '
        IMPORTING
          number                        = number
*   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.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      ENDIF.


      IF number BETWEEN it-fromnumber and IT-TONUMBER. rc = ''. ENDIF.

    ENDWHILE.

    write: / it-object, it-nrrangenr, it-subobject, it-toyear,
             it-fromnumber, IT-TONUMBER, number.

  ENDLOOP.

home help back first fref pref prev next nref lref last post