Modify interne Tabelle

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

Modify interne Tabelle

Beitrag von ABAPSunny (ForumUser / 15 / 0 / 0 ) »
Morgen :)

Ich hab ein Modify-Problem.

Mein Code:

Code: Alles auswählen.


DATA: BEGIN OF itab_dd03l OCCURS 2000,
          va_itab_dd03l TYPE dd03l,
          wert(70) TYPE c,
END OF itab_dd03l.

...

LOOP AT zitab_dd03l.
  READ TABLE itab_ztbtco WITH KEY colsname = zitab_dd03l-fieldname.
  IF itab_ztbtco-colsselect = ''.
    itab_dd03l-wert = 'NULL'.
    itab_dd03l-va_itab_dd03l-fieldname = zitab_dd03l-fieldname.
    MODIFY itab_dd03l INDEX idx.

    IF sy-subrc <> 0.
      WRITE 'Fehler bei Modify'.
      EXIT.
    ENDIF.
    idx = idx + 1.
  ENDIF.
ENDLOOP.
Tabellen sind alle gefüllt. Werte sind in den Feldern vorhanden (bin im Debug durch).
Leider bricht es bei Modify mit Sy-Subrc 4 ab.

Jemand ne Idee wie es richtig wäre?

Danke und liebe Grüße
Sunny

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


Beitrag von TWP (Specialist / 445 / 0 / 1 ) »
Statt Modify kannst du auch mit ASSIGN arbeiten, dann sparst du dir das Modify und kannst die Werte direkt zuweisen:

field-symbols <ft> type ...

Loop at it.. assigning <ft>.

<ft>-wert = '1'.
endloop.

Damit wäre dein problem keines mehr.

MfG

Thomas

Beitrag von ABAPSunny (ForumUser / 15 / 0 / 0 ) »
Geht nicht, bin zu doof dazu :cry:

Code: Alles auswählen.

FIELD-SYMBOLS <ft> TYPE STANDARD TABLE." of itab_dd03l with header line .

LOOP AT zitab_dd03l." ASSIGNING <ft>.
  READ TABLE itab_ztbtco WITH KEY colsname = zitab_dd03l-fieldname.
  IF itab_ztbtco-colsselect = ''.
    <ft>-wert = 'NULL'.
    <ft>-va_itab_dd03l-fieldname = zitab_dd03l-fieldname.

    IF sy-subrc <> 0.
      WRITE 'Fehler'.
      EXIT.
    ENDIF.

  ENDIF.
ENDLOOP.
der meckert: "<FT>" ist eine Tabelle ohne Kopfzeile und besitzt daher keine
Komponente mit Namen "WERT".

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

was genau hast Du eigentlich vor?

So, wie es für mich aussieht, LOOPst Du über die Tabelle ZITAB_DD03L, liest die ITAB_ZTBTCO und willst dann eine Zeile in der Tabelle ITAB_DD03L ändern.
Hat denn die ITAB_DD03L überhaupt einen Inhalt und wenn ja, hat sie Zeilenindex-gleiche Einträge?
Wenn das der Fall ist, muss IDX mit 1 initialisiert sein, um einen gültigen Index für den MODIFY auf die ITAB_DD03L zu erhalten.

Wenn Du etwas anderes, wie z.B. die Aktualissierung der ZITAB_DD03L vorhattest, dann hast Du Fehler in Deinen Bezeichnern.

PS:
ein Feldsymbol für einen LOOP oder ReAD deklariert man am Besten so:

Code: Alles auswählen.

FIELD-SYMBOLS:
  <lw_dd03l> LIKE LINE OF zitab_dd03l.
Gruß
Ereglam


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

Aufgabenstellung

Beitrag von ABAPSunny (ForumUser / 15 / 0 / 0 ) »
Also mein Problem ist.

ich habe eine Tabelle TBTCO. Dort stehen Datensätze drin (ist ja klar ;) ).
Dann gibt es eine 2. Tabelle ZTBTCO_CUST, in der stehen die Spaltenbezeichner der Tabelle TBTCO drin und eine weitere Spalte in die ein X eingetragen werden kann.

Es sollen nur die Spalten der Tabelle TBTCO selektiert werden, die in der Tabelle ZTBTCO_CUST mit X markiert sind. Das können mal 5 aber auch mal 58 sein.

Diese sollen wiederum in die Tabelle ZTBTCO archiviert werden. Alle Spalten die nicht durch X markiert wurden, werden NULL gesetzt.(Es werden immer alle Spalten in die Tabelle geschrieben)

Meine erste Idee war ein variables Select-Kommando zu bauen. Die einzelnen Spalten habe ich in eine Variable geschrieben aber da hat der Compiler gemeckert, das er die "Spalte" nicht kennt (is ja klar, war ja ne Variable).

Und dann habe ich den Vorschlag mit den Field-Symbols bekommen. Allerdings habe ich davor noch nie mit FS gearbeitet.

Irgendwelche besseren Ideen/Vorschläge?

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

versuch es mal in dieser Art:

Code: Alles auswählen.

TYPE-POOLS:
  abap. "stellt ABAP_TRUE und ABAP_FALSE zur Verfügung
DATA:
 ls_ztbtco LIKE LINE OF lt_ztbtco.
FIELD-SYMBOLS:
  <lw_dd03l>       LIKE LINE OF lt_dd03l,
  <lw_tbtco>       LIKE LINE OF lt_tbtco,
  <lw_ztbtco_cust> LIKE LINE OF lt_ztbtco_cust,
  <lv_field>       TYPE ANY.

LOOP AT lt_tbtco ASSIGNING <lw_tbtco>.
* keine WHERE-Klausel
  LOOP AT lt_dd03l ASSINGING <lw_dd03l>.
* Feldnamen merken
    ls_zbtbco-fieldname = <lw_tbtco_cust>-fieldname.
* benanntes Feld der Struktur <LW_TBTCO> finden und per Feldsymbol addressieren
    ASSING COMPONENT <lw_dd03l>-fieldname OF STRUCTURE <lw_tbtco>
                                               TO <lv_field>.
    IF sy-subrc EQ 0.
      READ TABLE lt_ztbtco_cust ASSINGING <lw_ztbtco_cust>
                               WITH KEY 
                                 colname = <lw_dd03l>-fieldname.
      IF sy-subrc EQ 0.
* Soll Spalte selektiert werden
        IF <lw_ztbtco_cust>-colselect EQ abap_true.
          ls_ztbtco-wert = <lv_field>.
        ELSE.
* soll nicht selektiert werden
          ls_ztbtco-wert = 'NULL'.
        ENDIF.
      ELSE.
* nicht in ZTBTCO_CUST
          ls_ztbtco-wert = 'NULL'.
        ENDIF.
      ENDIF.
    ELSE.
* Spalte nicht gefunden
      ls_ztbtco-wert = 'NULL'.
    ENDIF.
* Eintrag in Tabelle LT_ZTBTCO (am Ende) einfügen
    INSERT ls_ztbtco INTO TABLE lt_ztbtco.
  ENDLOOP.
ENDLOOP.
Gruß
Ereglam


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

Beitrag von ABAPSunny (ForumUser / 15 / 0 / 0 ) »
Nach 6h Knobeln, das ganze ohne Field-Symbols. :D

Code: Alles auswählen.

DATA vorhanden(1) TYPE c VALUE ''.

LOOP AT itab_dd03l.
  vorhanden = ''.
  idx = sy-tabix.
  LOOP AT itab_ztbtco_cust into va_itab_ztbtco_cust.

    IF itab_dd03l-va_itab_dd03l-fieldname = va_itab_ztbtco_cust-colsname.
      vorhanden = 'X'.
      EXIT.
    ENDIF.
  ENDLOOP.

  IF vorhanden = ''.
    itab_dd03l-wert = 'NULL'.
    MODIFY itab_dd03l INDEX idx.
    IF sy-subrc <> 0.
      WRITE 'Fehler'.
      EXIT.
    ENDIF.
  ENDIF.
ENDLOOP.
Danke für die Tipps!!!!

Restliche Felder füllen

Beitrag von ABAPSunny (ForumUser / 15 / 0 / 0 ) »
Nächstes Problem, ihr braucht ja Beschäftigung :wink:

Code: Alles auswählen.

LOOP AT itab_tbtco INTO va_itab_tbtco.
  LOOP AT itab_dd03l.
    IF itab_dd03l-wert <> 'NULL'.
      itab_dd03l-wert = va_itab_tbtco- SPALTE.
    ENDIF.
  ENDLOOP.
ENDLOOP.
In itab_dd03 gibt es 5 Werte die nicht 'NULL' sind.l
wie ersetze ich "SPALTE"?

Beitrag von uh (Specialist / 158 / 0 / 1 ) »
Ich verstehe die Frage nicht ganz....?!?

Wenn du dynamisch auf Spalten zugreifen willst, dann solltest du in der Hilfe mal nach 'ASSIGN COMPONENT comp OF STRUCTURE struc ' suchen.

Grüße

uh

Re: Restliche Felder füllen

Beitrag von ereglam (Top Expert / 1829 / 2 / 7 ) »
ABAPSunny hat geschrieben:Nächstes Problem, ihr braucht ja Beschäftigung :wink:
och, ich hab hier eigentlich genug zu tun... ;)
ABAPSunny hat geschrieben:

Code: Alles auswählen.

LOOP AT itab_tbtco INTO va_itab_tbtco.
  LOOP AT itab_dd03l.
    IF itab_dd03l-wert <> 'NULL'.
      itab_dd03l-wert = va_itab_tbtco- SPALTE.
    ENDIF.
  ENDLOOP.
ENDLOOP.
In itab_dd03 gibt es 5 Werte die nicht 'NULL' sind.l
wie ersetze ich "SPALTE"?
Schau Dir mal in meinem Beispiel den Befehl ASSIGN COMPONENT an...
Gruß
Ereglam


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

Seite 1 von 1

Vergleichbare Themen

7
Antw.
14118
Views
Modify auf interne Tabelle
von Ines » 25.10.2006 13:43 • Verfasst in ABAP® für Anfänger
3
Antw.
3730
Views
LOOP über führende interne Tabelle + READ TABLE und MODIFY
von HawkDT » 23.03.2017 13:02 • Verfasst in ABAP® für Anfänger
5
Antw.
2809
Views
Modify auf eine Z-Tabelle
von max1 » 08.02.2007 14:45 • Verfasst in ABAP® für Anfänger
0
Antw.
984
Views
Modify auf Z Tabelle von itab
von AndreFIAE2014 » 13.12.2016 14:40 • Verfasst in ABAP® für Anfänger
8
Antw.
7315
Views
Modify einer internen Tabelle
von lisa » 17.09.2008 12:30 • Verfasst in ABAP® für Anfänger

Über diesen Beitrag


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

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.

Unbeantwortete Forenbeiträge

Daten an Tabelle binden
vor 5 Stunden von Bright4.5 1 / 117
aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 1758
Hilfe bei SWEC/SWE2
letzen Monat von retsch 1 / 8360