Code: Alles auswählen.
IF NOT upload IS INITIAL.
CLEAR ls_cuvtab_field.
READ TABLE lt_vtzeile INTO ls_vtzeile INDEX 1.
lv_zn = 1.
DO 20 TIMES.
CONCATENATE 'ls_vtzeile-feld' lv_zn INTO lv_feld.
ASSIGN (lv_feld) TO <fs>.
IF <fs> IS INITIAL.
EXIT.
ENDIF.
READ TABLE lt_cabn INTO ls_cabn
WITH KEY atnam = <fs>.
IF sy-subrc <> 0.
"Fehler: MM existiert nicht!
EXIT.
ENDIF.
READ TABLE lt_cuvtab_field INTO ls_cuvtab_field
WITH KEY atinn = ls_cabn-atinn.
IF sy-subrc = 0.
ls_cuvtab_field-DBFLD = 'x'.
MODIFY TABLE lt_cuvtab_field FROM ls_cuvtab_field.
ELSE.
"FEHLERMELDUNG: Merkmal ist nicht in VT enthalten
ENDIF.
lv_zn = lv_zn + 1.
ENDDO.
READ TABLE lt_cuvtab_field WITH KEY dbfld = space TRANSPORTING NO FIELDS.
IF sy-subrc = 0.
"Fehlermeldung
ENDIF.
ENDIF.
Wenn das Feld ls_cabn-atinn z.B. den gleichen Eintrag hat, kommst es zum SY-SUBRC 4.Diese Anweisung ändert den Inhalt entweder einer oder mehrerer Zeilen itab_line bzw. itab_lines, die über den Tabellenschlüssel oder den Tabellenindex spezifiziert werden können.
Systemfelder
sy-subrc Bedeutung
0 Es wurde mindestens eine Zeile geändert.
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.
Code: Alles auswählen.
READ TABLE lt_cuvtab_field INTO ls_cuvtab_field
WITH KEY atinn = ls_cabn-atinn.
IF sy-subrc = 0.
ls_cuvtab_field-DBFLD = 'x'.
MODIFY TABLE lt_cuvtab_field FROM ls_cuvtab_field index sy-tabix.
ELSE.
"FEHLERMELDUNG: Merkmal ist nicht in VT enthalten
ENDIF.
Das Feld ls_cabn-atinn soll ja den gleichen Eintrag haben. Wenn dies der Fall ist, weise ich dem Feld dbfld den Wert x zu, welchen ich ja per modify-Anweisung in die interne Tabelle schreiben möchte.Unit605 hat geschrieben:F1 Hilfe zu MODIFY:
Wenn das Feld ls_cabn-atinn z.B. den gleichen Eintrag hat, kommst es zum SY-SUBRC 4.Diese Anweisung ändert den Inhalt entweder einer oder mehrerer Zeilen itab_line bzw. itab_lines, die über den Tabellenschlüssel oder den Tabellenindex spezifiziert werden können.
Systemfelder
sy-subrc Bedeutung
0 Es wurde mindestens eine Zeile geändert.
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.
Debuggen würde alles aufklären.
Die Struktur der lt_cuvtab_field ist die gleiche wie die Struktur der Tabelle cuvtab_fld.
Moin,
versuch doch bitte mal den MODIFY mit Indexangabe. Scheint mir ein Schlüsselfeld-Problem zu sein (kenne die Struktur lt_cuvtab nicht) .
Code: Alles auswählen
READ TABLE lt_cuvtab_field INTO ls_cuvtab_field
WITH KEY atinn = ls_cabn-atinn.
IF sy-subrc = 0.
ls_cuvtab_field-DBFLD = 'x'.
MODIFY TABLE lt_cuvtab_field FROM ls_cuvtab_field index sy-tabix.
ELSE.
"FEHLERMELDUNG: Merkmal ist nicht in VT enthalten
ENDIF.
gruß Jens
Code: Alles auswählen.
DATA: lt_cuvtab_field TYPE STANDARD TABLE OF cuvtab_fld,
ls_cuvtab_field TYPE cuvtab_fld.
Code: Alles auswählen.
REPORT ztest98.
DATA lt_sflight TYPE TABLE OF sflight.
DATA ls_sflight TYPE sflight.
SELECT * FROM sflight INTO TABLE lt_sflight.
LOOP AT lt_sflight INTO ls_sflight.
IF ls_sflight-carrid = 'DL'.
ls_sflight-connid = '777'.
MODIFY lt_sflight FROM ls_sflight INDEX sy-tabix .
ENDIF.
ENDLOOP.
Code: Alles auswählen.
FIELD-SYMBOLS <ls> TYPE sflight.
SELECT * FROM sflight INTO TABLE lt_sflight.
LOOP AT lt_sflight ASSIGNING <ls>.
IF <ls>-carrid = 'DL'.
<ls>-connid = '777'.
* wird nicht mehr gebraucht !
* MODIFY lt_sflight FROM ls_sflight INDEX sy-tabix .
ENDIF.
ENDLOOP.
mach dir da nicht so viele Gedanken, halte dich einfach an den einfachen Grundsatz:siggi76 hat geschrieben:Ok, als Einsteiger wundert man sich natürlich gerade am Anfang, warum plötzlich dieser Befehl und dann ein anderer obwohl es auf andere Weise ja auch funktionieren sollte...
Muss mich dann einfach dran gewöhnen.
Vielen Dank!