Warum kommt dieser Dump?!?

Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Getting started ... Alles für einen gelungenen Start.
2 Beiträge • Seite 1 von 1
2 Beiträge Seite 1 von 1

Warum kommt dieser Dump?!?

Beitrag von DeathAndPain (Top Expert / 1795 / 213 / 396 ) »
Hallo,

in einer statischen Methode einer statischen Klasse baue ich eine Rückgabetabelle auf. Nachdem diese schon ganz gut mit Zeilen gefüllt ist, möchte ich einen Wert davon wieder ändern. Daraufhin erhalte ich einen Dump MOVE_TO_LIT_NOTALLOWED_NODATA.

Kurztext: Fehler bei Zuweisung: Überschreiben eines geschützten Felds.
Langtext: "Dem Feld "<ENDDATUM_DES_VORIGEN_SATZES>" soll ein neuer Wert zugewiesen werden, obwohl dieses Feld ganz oder teilweise gegen Änderungen geschützt ist."


Wie kann es sein, dass Werte aus der Rückgabetabelle, die ich in eben dieser Methode ja erst aufbaue, gegen Änderungen geschützt sind?!?

Der Vollständigkeit halber biete ich untenstehend den Quelltext der ganzen Methode. Revelant ist aber nur die vierte Zeile von unten <ENDDATUM_DES_VORIGEN_SATZES> = <IT9001_RECORDS>-ENDDA. In dieser kommt es zum o.g. Dump Wieso?!?

Code: Alles auswählen.

  METHOD GENERATE_IT9001_RECORDS.
*   RETURNING VALUE(IT9001_RECORDS)
* Geht durch die interne Tabelle M und baut aus deren Untertabellen M-IT9001 die final in die Datenbank zu schreibenden
* Datensätze auf. Vorher wird noch als Optimierung geprüft, ob es vom Zeitraum her unmittelbar aneinandergrenzende
* Zeiträume gleichen Inhalts gibt. Wenn ja, dann werden diese zu einem großen Zeitraum fusioniert.
    DATA: LETZTE_PERNR TYPE PERSNO,
          LETZTES_ENDDA TYPE D,
          LETZTE_NUTZDATEN TYPE PS9001,
          AKTUELLE_NUTZDATEN TYPE PS9001.

    LOOP AT M ASSIGNING FIELD-SYMBOL(<M>).
      INSERT LINES OF <M>-IT9001 INTO TABLE IT9001_RECORDS.
    ENDLOOP.

*   Aneinandergrenzende Zeiträume gleichen Inhalts fusionieren.
    LOOP AT IT9001_RECORDS ASSIGNING FIELD-SYMBOL(<IT9001_RECORDS>).
      IF <IT9001_RECORDS>-PERNR <> LETZTE_PERNR. " andere Personalnummer -> nicht fusionieren
        LETZTE_PERNR = <IT9001_RECORDS>-PERNR.
        LETZTES_ENDDA = <IT9001_RECORDS>-ENDDA.
        MOVE-CORRESPONDING <IT9001_RECORDS> TO LETZTE_NUTZDATEN.
        CONTINUE. " LOOP
      ELSEIF <IT9001_RECORDS>-BEGDA - 1 <> CONV I( LETZTES_ENDDA ). " Zeiträume grenzen nicht aneinander -> nicht fusionieren.
        LETZTES_ENDDA = <IT9001_RECORDS>-ENDDA.
        MOVE-CORRESPONDING <IT9001_RECORDS> TO LETZTE_NUTZDATEN.
        CONTINUE. " LOOP
      ENDIF.

*     Wenn wir hier ankommen, dann grenzt der aktuelle Datensatz zeitlich an den vorhergehenden an und gehört auch zu derselben
*     Personalnummer. Jetzt müssen wir nur noch prüfen, ob auch die Nutzdaten (also die Nichtheaderdaten) identisch sind.
      MOVE-CORRESPONDING <IT9001_RECORDS> TO AKTUELLE_NUTZDATEN.
      IF LETZTE_NUTZDATEN <> AKTUELLE_NUTZDATEN. " Nutzdaten stimmen nicht überein
        LETZTES_ENDDA = <IT9001_RECORDS>-ENDDA.
        LETZTE_NUTZDATEN = AKTUELLE_NUTZDATEN.
        CONTINUE. " LOOP
      ENDIF.

*     Alles passt: Aktuellen Datensatz mit vorangegangenem fusionieren!
      ASSIGN IT9001_RECORDS{ SY-TABIX - 1 }-ENDDA TO FIELD-SYMBOL(<ENDDATUM_DES_VORIGEN_SATZES>).
      <ENDDATUM_DES_VORIGEN_SATZES> = <IT9001_RECORDS>-ENDDA.
      DELETE IT9001_RECORDS.
    ENDLOOP.

  ENDMETHOD.
Ursprünglich hatte ich das Feldsymbol <ENDDATUM_DES_VORIGEN_SATZES> gar nicht drin, sondern habe direkt

IT9001_RECORDS[ SY-TABIX - 1 ]-ENDDA = <IT9001_RECORDS>-ENDDA.

geschrieben, was natürlich noch eleganter ist. Gab aber den gleichen Dump.

Im Post Mortem-Debugger kann ich erkennen, dass sowohl <ENDDATUM_DES_VORIGEN_SATZES> als auch <IT9001_RECORDS>-ENDDA gültige Werte enthalten. SY-TABIX ist 2; die Tabelle IT9001_RECORDS enthält 5 Zeilen.

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Re: Warum kommt dieser Dump?!?

Beitrag von DeathAndPain (Top Expert / 1795 / 213 / 396 ) »
Hab die Antwort selber gefunden. ENDDA ist Teil des Sortierschlüssels der internen Tabelle IT9001_RECORDS.

Seite 1 von 1

Vergleichbare Themen

0
Antw.
1043
Views
DUMP-Analyse
von Tellerchen58 » 20.01.2011 10:16 • Verfasst in ABAP® Core
2
Antw.
1757
Views
Dump bei ALV_CONSISTENCY_CHECK
von toto » 09.07.2007 15:26 • Verfasst in ABAP Objects®
11
Antw.
2719
Views
Dump bei SUSR_USER_BUFFERS_TO_DB
von Suta_K » 21.08.2017 14:18 • Verfasst in ABAP® für Anfänger
1
Antw.
2329
Views
Dump DBIF_RSQL_INVALID_RSQL
von F12_man » 07.02.2007 16:45 • Verfasst in ABAP® Core
5
Antw.
1372
Views
cl_gui_alv_tree: Dump
von Icke0801 » 01.02.2019 16:41 • Verfasst in ABAP® für Anfänger

Über diesen Beitrag

DeathAndPain
Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Aktuelle Forenbeiträge

PDF-Anzeige unter EDGE
vor 5 Tagen von jocoder 2 / 74

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.

Aktuelle Forenbeiträge

PDF-Anzeige unter EDGE
vor 5 Tagen von jocoder 2 / 74

Unbeantwortete Forenbeiträge

Zwischensumme Adobe Forms
vor 4 Wochen von Lucyalison 1 / 132
Group Items auf einer Filterbar
vor 4 Wochen von Bright4.5 1 / 166