Code: Alles auswählen.
data:
ld_month type string,
ld_number type num02.
do 12 times.
ld_num = sy-index.
concatenate 'GSV' ld_num into ld_month.
append initial line to lt_output assigning <ls_output>.
loop at lt_mver assigning <ls_mver>.
assign component <ls_mver>-gjahr of structure <ls_output> to <la_output>.
assign component ld_month of structure <ls_mver> to <la_input>.
<la_output> = <ls_input>.
endloop.
enddo.
Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag:
ralf.wenzel
Wie deklariere ich denn die Zieltabelle? Dem Coding nach müsste sie als Spaltennamen die Jahreszahlen haben. Dann müsste ich einmal im Jahr die Deklaration ändern (es geht um das aktuelle Jahr und die zwei Vorjahre) Oder kriege ich das irgendwie dynamisch deklariert?a-dead-trousers hat geschrieben:Code: Alles auswählen.
loop at lt_mver assigning <ls_mver>. assign component <ls_mver>-gjahr of structure <ls_output> to <la_output>. assign component ld_month of structure <ls_mver> to <la_input>. <la_output> = <ls_input>. endloop. enddo.
Code: Alles auswählen.
DATA: this_year TYPE gjahr,
last_year TYPE gjahr,
long_ago TYPE gjahr,
lv_month TYPE numc2,
lv_inc TYPE i.
TYPES: BEGIN OF gty_transpose,
matnr TYPE mver-matnr,
werks TYPE mver-werks,
month TYPE numc2,
this_year TYPE mver-gsv01,
last_year TYPE mver-gsv01,
long_ago TYPE mver-gsv01,
END OF gty_transpose.
DATA: gt_transpose TYPE STANDARD TABLE OF gty_transpose WITH NON-UNIQUE DEFAULT KEY.
DATA: ls_transpose LIKE LINE OF gt_transpose.
...
this_year = sy-datum(4) .
this_year = '2010'. " Habe nur testdaten für 2010 im Moment
last_year = this_year - 1.
long_ago = last_year - 1.
DEFINE ralf_hasst_makros.
clear ls_transpose.
ls_transpose-matnr = <mver>-matnr.
ls_transpose-werks = <mver>-werks.
ls_transpose-month = &1.
case <mver>-gjahr.
when this_year.
ls_transpose-this_year = <mver>-gsv&1.
when last_year.
ls_transpose-last_year = <mver>-gsv&1.
when long_ago.
ls_transpose-long_ago = <mver>-gsv&1.
endcase.
collect ls_transpose into gt_transpose.
END-OF-DEFINITION.
LOOP AT lt_mver ASSIGNING <mver>.
ralf_hasst_makros: 01,
02,
03,
04,
05,
06,
07,
08,
09,
10,
11,
12.
ENDLOOP.
Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag:
ralf.wenzel
Die Antwort interessiert mich immer nochralf.wenzel hat geschrieben:Wie deklariere ich denn die Zieltabelle? Dem Coding nach müsste sie als Spaltennamen die Jahreszahlen haben. Dann müsste ich einmal im Jahr die Deklaration ändern (es geht um das aktuelle Jahr und die zwei Vorjahre) Oder kriege ich das irgendwie dynamisch deklariert?
Das Ergebnis soll übrigens als ALV auf einem Dynpro ausgegeben werden.
Ich würde den Weg über RTTI/RTTC wählen.ralf.wenzel hat geschrieben:Die Antwort interessiert mich immer noch
Hallo Ralf,ralf.wenzel hat geschrieben:Die Antwort interessiert mich immer nochralf.wenzel hat geschrieben:Wie deklariere ich denn die Zieltabelle? Dem Coding nach müsste sie als Spaltennamen die Jahreszahlen haben. Dann müsste ich einmal im Jahr die Deklaration ändern (es geht um das aktuelle Jahr und die zwei Vorjahre) Oder kriege ich das irgendwie dynamisch deklariert?
Das Ergebnis soll übrigens als ALV auf einem Dynpro ausgegeben werden.
Code: Alles auswählen.
assign component <ls_mver>-gjahr of structure <ls_output> to <la_output>.
Sowas hatte ich vor. Ich mag Makros nämlich wirklich nichtblack_adept hat geschrieben: Kombiniere doch seinen und meinen Ansatz: --> Spaltennamen = gjahr,vorjahr,vorvorjahr , CASE-Anweisung die <ls-mver>-gjahr auf eine dieser 3 Spaltennamen umsetzt und dann ASSIGN component spaltenname ....
Damit brauchst du dann kein RTTI mehr (und auch keine Makros)
Nein, wenn ich die Ansätze kombiniere, brauche ich das Makro nicht mehr, dann brauche ich auch nicht mehr dran herumzuspielen. Aber du hast recht, so ganz korrekt ist die Anforderung nicht getroffen, das macht aber nichts, weil die Änderung minimal wäre.black_adept hat geschrieben: Allerdings glaube ich, dass du noch ein wenig was am Vorschlag rumfummeln musst, da du momentan ( wenn ich das richtig interpretiere ) für jede Jahr/Montaskombination eine neue Zeile in deiner resultierenden Tabelle erhältst und nicht die 3 Werte pro Monat in einer einzigen Zeile.