Tabelle MVER "umdrehen" (Zeilen -> Spalten)

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV
12 Beiträge • Seite 1 von 1
12 Beiträge Seite 1 von 1

Tabelle MVER "umdrehen" (Zeilen -> Spalten)

Beitrag von ralf.wenzel (Top Expert / 3935 / 200 / 281 ) »
Moin moin,

ich bin gerade zu doof und hab ne Denkblockade, vllt. kann mir einer von euch helfen:

Es gibt die Tabelle MVER, die sammelt die Verbräuche pro Jahr (mit einer Spalte pro "Monat"). ICH brauche aber eine Tabelle mit drei Spalten (akt. Jahr, Vorjahr, Vor-vorjahr) und 12 Zeilen (Jan, Feb, Mär, ...).

Ich bastel wie ein Gestörter mit ASSIGN COMPONENT herum, aber irgendwie bin ich zu doof, die richtige Logik rauszubasteln. Darum rufe ich mal laut "Hülfä" und hoffe, dass mir jemand auf die Sprünge helfen kann.


danke!!!
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

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


Re: Tabelle MVER "umdrehen" (Zeilen -> Spalten)

Beitrag von a-dead-trousers (Top Expert / 4399 / 223 / 1182 ) »
hi!

Ungefähr so?

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.
lg ADT

Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag:
ralf.wenzel

Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: Tabelle MVER "umdrehen" (Zeilen -> Spalten)

Beitrag von ralf.wenzel (Top Expert / 3935 / 200 / 281 ) »
So etwa ;) Danke *thumbsup
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Tabelle MVER "umdrehen" (Zeilen -> Spalten)

Beitrag von ralf.wenzel (Top Expert / 3935 / 200 / 281 ) »
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.
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.

Ralf
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Tabelle MVER "umdrehen" (Zeilen -> Spalten)

Beitrag von black_adept (Top Expert / 4099 / 128 / 941 ) »
Hi Ralf,

ich glaube du wirst den folgenden Ansatz lieben.

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

live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Tabelle MVER "umdrehen" (Zeilen -> Spalten)

Beitrag von ralf.wenzel (Top Expert / 3935 / 200 / 281 ) »
Ach du sch.... LOL Aber wenigstens hast du dem Makro einen treffenden Namen gegeben :)

Danke auch dir!
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Tabelle MVER "umdrehen" (Zeilen -> Spalten)

Beitrag von ralf.wenzel (Top Expert / 3935 / 200 / 281 ) »
ralf.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.
Die Antwort interessiert mich immer noch ;)
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Tabelle MVER "umdrehen" (Zeilen -> Spalten)

Beitrag von a-dead-trousers (Top Expert / 4399 / 223 / 1182 ) »
ralf.wenzel hat geschrieben:Die Antwort interessiert mich immer noch ;)
Ich würde den Weg über RTTI/RTTC wählen.
Du musst halt manuell eine ABAP_COMPONENT_TAB aufbauen und die dann an den CL_ABAP_STRUCTDESCR=>CREATE und dessen Ergebnis im Anschluss an den CL_ABAP_TABLEDESCR=>CREATE weitergeben.

Bei pre 7.0er Systemen muss man sich mit GENERATE SUBROUTINE POOL behelfen.

lg ADT
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: Tabelle MVER "umdrehen" (Zeilen -> Spalten)

Beitrag von ralf.wenzel (Top Expert / 3935 / 200 / 281 ) »
Dann habe ich also die Wahl zwischen Pest und Cholera - RTTI/RTTL oder Makro ;)
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Tabelle MVER "umdrehen" (Zeilen -> Spalten)

Beitrag von black_adept (Top Expert / 4099 / 128 / 941 ) »
Hallo Ralf,

fast jeder Makro ist auch als FORM oder METHOD abbildbar. So auch der von mir vorgeschlagene.
Ich hatte das zunächst auch so implementiert, jedoch das resultierende Coding schien mir derart oversized und unleserlich (zumindest für jemand der das später Warten soll), dass ich mich dann doch für das explizite Ausschreiben entschieden hatte ( bzw. dann wg. der bessere Lesbarkeit auf den Makro zurückgegriffen habe ).

Somit hättest du dann nicht nur Pest oder Cholera sondern auch noch Typhus zur Auswahl.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Tabelle MVER "umdrehen" (Zeilen -> Spalten)

Beitrag von black_adept (Top Expert / 4099 / 128 / 941 ) »
ralf.wenzel hat geschrieben:
ralf.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.
Die Antwort interessiert mich immer noch ;)
Hallo Ralf,

die für dich problematische Stelle in a-d-ts Coding ist doch das

Code: Alles auswählen.

assign component <ls_mver>-gjahr of structure <ls_output> to <la_output>.
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)

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.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Tabelle MVER "umdrehen" (Zeilen -> Spalten)

Beitrag von ralf.wenzel (Top Expert / 3935 / 200 / 281 ) »
black_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)
Sowas hatte ich vor. Ich mag Makros nämlich wirklich nicht ;)
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.
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.

Danke an euch beide!
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Seite 1 von 1

Vergleichbare Themen

1
Antw.
1041
Views
Tabelle COST umdrehen bzw. Spalten auswerten und in Zeilen zurückschreiben
von MarioR » 11.11.2019 17:30 • Verfasst in ABAP® Core
2
Antw.
21571
Views
0
Antw.
1066
Views
1
Antw.
2046
Views
MVER Materialverbrauch und die Spalten
von vms01 » 14.02.2008 15:26 • Verfasst in ABAP® für Anfänger
0
Antw.
1532
Views
ALV-Grid: markierte Zeilen und Spalten
von dmyrb5 » 15.02.2006 15:17 • Verfasst in ABAP Objects®

Aktuelle Forenbeiträge

Regex in where
vor 58 Minuten von edwin 7 / 160
Daten an Tabelle binden
vor 14 Stunden von Bright4.5 3 / 1485

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.

Aktuelle Forenbeiträge

Regex in where
vor 58 Minuten von edwin 7 / 160
Daten an Tabelle binden
vor 14 Stunden von Bright4.5 3 / 1485

Unbeantwortete Forenbeiträge

aRFC im OO-Kontext
vor 5 Wochen von ralf.wenzel 1 / 3261
Hilfe bei SWEC/SWE2
September 2024 von retsch 1 / 9821