Code: Alles auswählen.
IF p_nach = 'X'.
FIELD-SYMBOLS: <lt_table2> TYPE STANDARD TABLE,
<fs2> TYPE any,
<field2> TYPE any,
<field12> TYPE any.
DATA: lt_nach TYPE TABLE OF nach,
ls_nach TYPE nach.
DATA: lv_table2 TYPE string,
ls_line2 TYPE string.
DATA: o_ref2 TYPE REF TO data.
SELECT * FROM NACH INTO TABLE lt_nach WHERE LDEST = p_ldest.
LOOP AT lt_nach INTO ls_nach.
CONCATENATE ls_nach-kvewe ls_nach-kotabnr INTO lv_table2.
SELECT * FROM dd03l INTO TABLE gt_dd03l
WHERE tabname = lv_table2.
CREATE DATA o_ref2 TYPE TABLE OF (lv_table2).
ASSIGN o_ref2->* TO <lt_table2>.
SELECT * FROM (lv_table2) INTO TABLE <lt_table2> WHERE KNUMH = ls_nach-knumh.
IF sy-subrc = 0.
LOOP AT <lt_table2> ASSIGNING <fs2>.
CLEAR ls_line2.
ls_line2 = lv_table2.
LOOP AT gt_dd03l INTO gs_dd03l.
ASSIGN gs_dd03l-fieldname TO <field12>.
ASSIGN COMPONENT <field12> OF STRUCTURE <fs2> TO <field2>.
IF sy-subrc = 0.
IF NOT <field2> IS INITIAL.
WRITE: <field2> TO fieldc.
CONCATENATE ls_line2 gs_dd03l-fieldname '=' fieldc INTO ls_line2 SEPARATED BY space.
* CONCATENATE ls_line2 ls_nach-knumh '=' fieldc INTO ls_line2 SEPARATED BY space.
ENDIF.
ENDIF.
ENDLOOP.
WRITE: / ls_line2.
ENDLOOP.
ENDIF.
ENDLOOP.
ENDIF.
Code: Alles auswählen.
TYPES:
BEGIN OF ts_data,
tabname TYPE tabname,
fieldname TYPE fieldname,
fieldpos TYPE i, "<-- Position des Feldes in der Ausgabezeile
content TYPE text255, "<-- Damit der Write-Befehl direkt funktioniert
END OF ts_data,
tt_data TYPE STANDARD TABLE OF ts_data WITH DEFAULT KEY.
Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag:
hmaxi96
Hallo Max,hmaxi96 hat geschrieben:Übrigens Danke a-dead-trousers so hat es funktioniert.
@ST22: Wenn ich den Arbeitsauftrag bekomme es in einen WRITE auszugeben werde ich nicht in einem ALV Grid ausgeben.
Gegenargument: Wieviele Spalten sollte ein ALV-Grid aufweisen um die gegebene Anforderung abzudecken? 50,100,200? Oder macht man es dynamisch?black_adept hat geschrieben:Hallo Max,hmaxi96 hat geschrieben:Übrigens Danke a-dead-trousers so hat es funktioniert.
@ST22: Wenn ich den Arbeitsauftrag bekomme es in einen WRITE auszugeben werde ich nicht in einem ALV Grid ausgeben.
die Aussage von einem erfahrenen Entwickler wie Frank (ST22) würde ich nicht so einfach abbügeln. Wenn mir z.B. jemand sagen würde "Gib es am Ende mit WRITE" aus und das Ergebnis der Aufgabe ist eine Liste würde ich auch versuchen dem Auftraggeber klar zu machen, dass so eine ALV-Ausgabe deutlich flexibler und besser wartbar ist.
Die Frage ist ja - WARUM soll es mit WRITE ausgegeben werden.
Da du Azubi bist könnte es eine Übungsaufgabe sein, die dir den WRITE-Befehl näher bringen soll - in dem Fall hast du also gar keine Wahl.
Ähnlich gelagert ist der Fall, wenn ein bestehendes Programm erweitert werden soll.
Ich kann jetzt natürlich nicht für die Masse der ABAPler sprechen - aber ich schätze, dass ein nicht unerheblicher Teil der Leute die schon länger dabei sind zur ALV-Ausgabe tendieren und diese versuchen werden den Auftraggeber hiervon zu überzeugen.
Vorlangen zu haben ist immer gut.black_adept hat geschrieben:Antwort an @adt: Statisch, wenn ich weiß welche Schlüssel im auszuwertenden Bereich vorkommen können, dynamisch wenn's ganz allgemein sein soll.
Was das "kompliziert" angeht. Ja - das kann hinreichend komplex werden.
Aber für den Normalgebrauch ist der dynamische Aufbau einer Tabelle doch schnell gemacht und wenn man eine brauchbare Vorlage hat bzw. wenn man es einmal verstanden hat. Und wenn man bedenkt, was ein ALV einem dann alles automatisch noch schenkt, lohnt sich der Aufwand in meinen Augen fast immer.