Folgende Benutzer bedankten sich beim Autor PeterPaletti für den Beitrag:
HH_ABAP
Folgende Benutzer bedankten sich beim Autor DeathAndPain für den Beitrag:
HH_ABAP
Code: Alles auswählen.
TYPES: BEGIN OF t_split,
customer(10) TYPE c,
material(10) TYPE c,
END OF t_split.
DATA: lt_split TYPE TABLE OF t_split.
lt_split = VALUE #(
( customer = 'A' material = '1' )
( customer = 'B' material = '2' )
( customer = 'C' material = '3' ) ).
PERFORM create_order USING lt_split.
FORM create_order USING lt_split.
cl_demo_output=>display_data( lt_split ).
ENDFORM.
Folgende Benutzer bedankten sich beim Autor PeterPaletti für den Beitrag:
HH_ABAP
Code: Alles auswählen.
TYPES: BEGIN OF ts_split,
customer(10) TYPE c,
material(10) TYPE c,
END OF ts_split,
tt_split type STANDARD TABLE OF ts_split with DEFAULT KEY.
DATA: lt_split TYPE tt_split.
lt_split = VALUE #(
( customer = 'A' material = '1' )
( customer = 'B' material = '2' )
( customer = 'C' material = '3' ) ).
PERFORM create_order USING lt_split.
FORM create_order USING lt_split type tt_split.
LOOP AT lt_split INTO DATA(split).
WRITE: / split-customer, split-material.
ENDLOOP.
ENDFORM.
Und da USING-Parameter auch geändert werden können, sollte man lieber auf USING verzichten und gleich CHANGING nehmen und dann CT_SPLIT nennen. Oder am Besten ganz auf FORMs verzichten und Methoden verwenden....
Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag:
HH_ABAP
Richtig, das Verhalten ist erwartungsgemäß. In dem Moment, in dem man statisch über einen Parameter LOOPen möchte, muss man ihn auch als Parameter typisieren. Für Faule hätte es freilich ausgereicht, den USING-Parameter per TYPE ANY TABLE zu deklarieren (jedenfalls solange man statisch nicht auf konkrete Spalten zugreifen möchte). Besser ist natürlich das, was Du gemacht hast.
Finde ich nicht. Es ist zwar schade, dass ABAP das Ändern von USING-Parametern zumindest in statischer Form nicht verhindert, aber dennoch kann man als Programmierer mit USING dem Leser kommunizieren, welche Verwendung des Parameters angedacht (bzw. nicht angedacht) ist. CHANGING hingegen kommuniziert explizit, dass eine Änderung des Parameters in der Unterroutine vorgesehen ist. Daher halte ich CHANGING für verwirrend und nicht ratsam, wenn die Unterroutine den Parameter nur nutzen und nicht ändern soll.black_adept hat geschrieben:Und da USING-Parameter auch geändert werden können, sollte man lieber auf USING verzichten und gleich CHANGING nehmen
Folgende Benutzer bedankten sich beim Autor DeathAndPain für den Beitrag:
HH_ABAP