Steh aufm Schlauf - ITAB Feld updaten

Getting started ... Alles für einen gelungenen Start.
20 Beiträge • Seite 1 von 2 (current) Nächste
20 Beiträge Seite 1 von 2 (current) Nächste

Steh aufm Schlauf - ITAB Feld updaten

Beitrag von Mavrix (ForumUser / 58 / 0 / 0 ) »
hallo zusammen,

ich bau gerade an einem ALV Rum. Für eine Adressdatenverwaltung, nun mach ich einen Eintrag, und drücke auf "Speichern", dort wird dann eine Nummer aus einem Nummernkreis gezogen, die dann nur einem WA steht, aber ich möchte Sie direkt nach dem Ziehen, auch in dei ITAB schreiben. Wie mache ich das am besten?

ein Modify habe ich schon probiert. liefert einen sy-subrc 4 zurück.

Danke für Hilfe
Liebe Grüße
Markus

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


Beitrag von Krueger ( / / 0 / 3 ) »
ein Modify habe ich schon probiert. liefert einen sy-subrc 4 zurück
Modify sy-subrc = 4:
Es wurde keine Zeile geändert, da beim Einfügen über Tabellenschlüssel bzw. bei logischer Bedingung keine passende Zeile gefunden wurde oder beim Einfügen über den Tabellenindex der angegebene Index größer als die aktuelle Anzahl von Zeilen war.

ergo.... :
dort wird dann eine Nummer aus einem Nummernkreis gezogen
ist die Nummer nicht vorhanden und kann auch nicht modifiziert werden.

Vielleicht hilft ja ein INSERT...... oder APPEND... ITAB

Beitrag von Mavrix (ForumUser / 58 / 0 / 0 ) »
Hallo,

das Problem ist folgendes,

habe eine ITAB in der ist ein Feld ID das steht vor dem Speichern noch auf 0000 - während des Speicherns, wird dann eine nummer gezogen, die danach dann auch in meinem WA im Feld ID steht zb 0043. So und dies möchte ich nun in das Feld der Itab auch übernehmen.

mit append würde ich doch nur eine neue zeile anhängen oder?
und mit insert überschreiben?

danke im voraus,
markus

Beitrag von Krueger ( / / 0 / 3 ) »
mit append würde ich doch nur eine neue zeile anhängen oder?
Was bei einer NEUEN Nr. ja auch gewollt ist... oder?
und mit insert überschreiben?
Nö, wie das Wort "insert" schon sagt, wird etwas "insert/eingefügt" was noch nicht vorhanden ist....und nicht überschrieben, DAS wäre dann Dein MODIFY.

Beitrag von Mavrix (ForumUser / 58 / 0 / 0 ) »
Hallo,

habe nun doch ein Modify gemacht.

Code: Alles auswählen.

MODIFY gt_adresse FROM g_wa_adresse INDEX 1.
Hoffe das es so auch noch später geht... da ich über den Index dauf gehe.

Aber die neue Zeile müsste ja immer der Index 1 sein..oder?
noch ne andere sache, ich mach während meines Speichern, nach dem modify noch ein SORT auf meine ITAB anhand des Feldes ID...

so das Klappt ja auch, nur wenn ich die Transaktion neu starte, ist alles wieder durch einander.

Wie das?

Markua

Beitrag von Krueger ( / / 0 / 3 ) »
Wenn Du unbedingt ein Modify machen willst... mach es.
Aber die neue Zeile müsste ja immer der Index 1 sein..oder?
Nein.


Wenn Du eine NEUE Nummer ziehst (ist es so???), dann empfehle ich Dir weiterhin ein append oder insert. :roll:

Beitrag von Mavrix (ForumUser / 58 / 0 / 0 ) »
Ok Ok 8)

Also habe es jetzt mal so implementiert!

Code: Alles auswählen.

INSERT g_wa_adresse INTO TABLE gt_adresse.
Aber, wenn er speichern durchlaufen hat.... etc. und er einen Refresh auf das ALV macht, steht der eintrag einmal mit ID im ALV und einmal OHNE ID.

erst wenn ich die Transaktion neu aufrufe, steht nur noch der MIT ID drinnen.

Hoffe du kannst mir noch folgen.

Markus

Beitrag von ereglam (Top Expert / 1829 / 2 / 7 ) »
Hallo,

wenn ich Dich richtig verstehe, hast Du in Deiner Anwendung eine neue Zeile angelegt, zu der beim Speichern eine Nummer gezogen werden soll.
Dazu wirst Du ja wahrscheinlich die Zeile im Zugriff haben müssen. Daher musst Du Dir den aktuellen Index SY-TABIX merken und Dich im MODIFY entsprechend darauf beziehen.
Alternativ kannst Du auch mit Feldsymbolen arbeiten, denn dann entfällt das explizite Zurückschreiben.

Code: Alles auswählen.

LOOP AT lt_itab ASSIGNING <lw_itab>.
                WHERE number IS INITIAL.
*  hole nächste Nummer
  <lw_itab>-number = lv_number. "schreibt direkt in die Tabellenzeile
ENDLOOP.
Gruß
Ereglam


May the Force be with your code
|| .| |.|| | .... . ..|. ||| .|. |.|. . |... . .|| .. | .... |.|| ||| ..| .|. |.|. ||| |.. .

Beitrag von Krueger ( / / 0 / 3 ) »
Ehrlich gesagt, fällt es mir manchmal schwer, hier einige Sachen zu verstehen...

Bespiel:
ich bau gerade an einem ALV Rum.
Deshalb kann ich auch immer nur auf gewisse "Ereignisse", so z.B. Sy-Subrc = 4 beim Modify "reagieren".

Wenn Du bereits eine leere Zeile hast.... siehe Posting ereglam.


Du solltest aber erst einen neue Zeile einfügen/anhängen, wenn du bereits die neue Nr. hast.
Ansonste musst Du beim abbrechen (statt speichern) wieder reagieren und die leere Zeile "deleten".

Beitrag von Mavrix (ForumUser / 58 / 0 / 0 ) »
Hallo nun nochmal,

ich schreib mal den Code-Abschnitt hier rein. Dann wird einiges evtl. klarer.

Code: Alles auswählen.

WHEN 'SAVE'.
   
      LOOP AT gt_adresse into g_wa_adresse
      WHERE id IS initial.

        CALL FUNCTION 'NUMBER_GET_NEXT'
          EXPORTING
            nr_range_nr                   = '01'
            object                        = 'ZMBE_ADRES'
*       QUANTITY                      = '1'
*       SUBOBJECT                     = ' '
*       TOYEAR                        = '0000'
*       IGNORE_BUFFER                 = ' '
          IMPORTING
            number                        = g_wa_adresse-id
*       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.

      ENDLOOP.

*      INSERT g_wa_adresse INTO TABLE gt_adresse.
*      MODIFY gt_adresse FROM g_wa_adresse INDEX 1.
      IF sy-subrc = 0.
        MODIFY zmbe_adressdaten FROM g_wa_adresse.
        COMMIT WORK.
      ELSE.
        ROLLBACK WORK.
      ENDIF.

      SORT gt_adresse BY id.
So sieht es im moment aus.
Das mit den feldsymbolen versteh ich nicht ganz - das geht doch garnicht direkt auf eine interne tabelle.

Vielen Dank für eure Hilfe...Super Forum

Markus

Beitrag von Krueger ( / / 0 / 3 ) »
WHEN 'SAVE'.
DATA: LV_SYTABIX type sytabix.
LOOP AT gt_adresse into g_wa_adresse
WHERE id IS initial.
lv_sytabix = sytabix. CALL FUNCTION 'NUMBER_GET_NEXT'
EXPORTING
nr_range_nr = '01'
object = 'ZMBE_ADRES'
* QUANTITY = '1'
* SUBOBJECT = ' '
* TOYEAR = '0000'
* IGNORE_BUFFER = ' '
IMPORTING
number = g_wa_adresse-id
* 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.

ENDLOOP.

* INSERT g_wa_adresse INTO TABLE gt_adresse.
MODIFY gt_adresse FROM g_wa_adresse INDEX lv_sytabix.
IF sy-subrc = 0.
MODIFY zmbe_adressdaten FROM g_wa_adresse.
COMMIT WORK.
ELSE.
ROLLBACK WORK.
ENDIF.

SORT gt_adresse BY id.

Beitrag von ereglam (Top Expert / 1829 / 2 / 7 ) »
Also wenn schon, musst Du den MODIFY _innerhalb_ Deines LOOPS platzieren, da Du zur aktuellen Zeile die neue Nummer Dir merken willst.

Code: Alles auswählen.

DATA:
  lw_itab LIKE LINE OF lt_itab.

LOOP AT lt_itab INTO lw_itab.
                WHERE number IS INITIAL.
  lv_tabix = sy-tabix.
*  hole nächste Nummer
  lw_itab-number = lv_number. "schreibt direkt in die Tabellenzeile
* beschränke Werterücktransport auf die relevanten Felder
  MODIFY lt_itab FROM lw_itab 
                 TRANSPORTING nummber 
                 INDEX lv_tabix.
ENDLOOP.
Mit Feldsymbolen geht es sehr wohl und auch ein wenig einfacher. Dazu muss man wissen, dass ein Feldsymbol als eine Art Zeiger fungiert, der für jede Trefferzeile auf die aktuelle Zeile zeigt. Daher wird beim Modifizieren des Wertes im Feldsymbol direkt die aktuelle Tabellenzeile aktualisiert.
Was nicht geht, ist das Verändern von Feldern, die als Schlüssel (WITH KEY...) der internen Tabelle definiert wurden. Das trifft für Dich hier aber nicht zu.

Code: Alles auswählen.

FIELD-SYMBOLS:
  <lw_itab> LIKE LINE OF lt_itab.

LOOP AT lt_itab ASSIGNING <lw_itab>.
                WHERE number IS INITIAL.
*  hole nächste Nummer
  <lw_itab>-number = lv_number. "schreibt direkt in die Tabellenzeile
ENDLOOP.
Was sieht einfacher aus?

Hm, jetzt war Krueger schneller... ;)
Gruß
Ereglam


May the Force be with your code
|| .| |.|| | .... . ..|. ||| .|. |.|. . |... . .|| .. | .... |.|| ||| ..| .|. |.|. ||| |.. .

Beitrag von Krueger ( / / 0 / 3 ) »
Hm, jetzt war Krueger schneller...
Schneller heißt nicht besser :wink:

Das Aufzählen verschiedener Lösungen hilft oft mehr, als immer nur genau EINE Lösung aufzuzeigen.

Beitrag von Mavrix (ForumUser / 58 / 0 / 0 ) »
Hallo,

habe nun beide Varianten probiert.

Variante mit sytabix - sagt mir die Syntax prüfung sytabix unbekannt.

Variante mit feldymbolen.

Funktioniert, bis zu Anzeigen, nach dem Speichern ablauf - aber wenn ich die Transaktion neu starte ist die Zeile wieder weg.

Also entweder heute ist nicht mein Tag. Ich glaub ich dann heim... :-)

Gibts noch ein paar Tips?

Grüße
Markus

Beitrag von ereglam (Top Expert / 1829 / 2 / 7 ) »
Mavrix hat geschrieben:Hallo,

habe nun beide Varianten probiert.

Variante mit sytabix - sagt mir die Syntax prüfung sytabix unbekannt.
könnte z.b. an einem Schreibfehler liegen => SY-TABIX
Mavrix hat geschrieben:Variante mit feldymbolen.

Funktioniert, bis zu Anzeigen, nach dem Speichern ablauf - aber wenn ich die Transaktion neu starte ist die Zeile wieder weg.
klingt eher nach einem Problem beim Speichern...
Mavrix hat geschrieben: Also entweder heute ist nicht mein Tag. Ich glaub ich dann heim... :-)...
gut, ich komm mit... ;)
Gruß
Ereglam


May the Force be with your code
|| .| |.|| | .... . ..|. ||| .|. |.|. . |... . .|| .. | .... |.|| ||| ..| .|. |.|. ||| |.. .

Vergleichbare Themen

4
Antw.
543
Views
Updaten von Feld AUSWK in VIQMEL
von Abapanfänger » 21.01.2020 14:18 • Verfasst in ABAP® für Anfänger
10
Antw.
934
Views
iTab-Zeile in ein Feld eintragen
von Nordlicht » 11.04.2019 12:34 • Verfasst in ABAP® für Anfänger
1
Antw.
1221
Views
Konvertierung Währungsfeld in Itab-Feld
von joester » 27.10.2016 12:40 • Verfasst in ABAP® Core
7
Antw.
1547
Views
Itab füllen mit value# und corresponding# und Einzelzuweisung Feld
von Romaniac » 14.10.2021 19:59 • Verfasst in ABAP® Core
1
Antw.
1118
Views
ITAB TREEMLITAB um ein Feld im Programm erweitern!?
von Mavrix » 24.07.2007 11:51 • Verfasst in ABAP® Core

Über diesen Beitrag


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

Aktuelle Forenbeiträge

Daten an Tabelle binden
vor 7 Stunden von Bright4.5 3 / 1481
Regex in where
vor 9 Stunden von tar 6 / 146

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

Daten an Tabelle binden
vor 7 Stunden von Bright4.5 3 / 1481
Regex in where
vor 9 Stunden von tar 6 / 146

Unbeantwortete Forenbeiträge

aRFC im OO-Kontext
vor 5 Wochen von ralf.wenzel 1 / 3261
Hilfe bei SWEC/SWE2
September 2024 von retsch 1 / 9821