Ich habe ein Excel File, dessen Spalten, über ein vorhandes Programm in eine interne Tabelle (itab1) importiert wird. Die interne Tabelle schaut dann wie folgt aus :
matnr
achse1
achse2
achse3
Z.b.
1234 3,5 2,2 5
s.h. für jede Materialnummer gibt es eine Zeile und in dieser Zeile gibt es 3 Spalten für die jeweiligen Füllmengen der Achsen. Ich soll nun
die Struktur so abändern, dass für jede Achse eine eigene Zeile vorhanden ist...also so :
matnr
achse
menge
Z.b.
1234 a1 3,5
1234 a2 2,2
1234 a3 5
Ich muss also irgendwie die interne Tabelle itab1 in eine neue interne Tabelle itab2 konvertieren, die die richtige Struktur besitzt. Ich muss
also die horizontale Struktur in eine vertikale Abändern. Ich habe mir das wie folgt vorgestellt...
data:
n type integer.
do n times
wa_itab2-matnr = wa_itab1-matnr
wa_itab2-achse = Hier müsste ich die Feldbezeichnung der Spalte der itab1 angeben z.B. achse1
wa_itab2-menge = wa_itab1-achse(n)
append wa_itab2 to itab2
end loop
Ist das ein richtiges Vorgehen ? Das Problem ist, dass es in der itab1 auch Materialnummern gibt bei denen nicht jede Achse
vorhanden ist. Ich sollte also evtl. noch überprüfen wieviel Achsen vorhanden sind und nur für diese Zeilen in der itab2 erstellen.
Leider weiß ich auch nicht wie ich den Feldbezeichner der itab1 ermittle.
Wäre super wenn jemand mir hier etwas weiterhelfen könnte
Vorteil:
Durch die Auscodierung der 3 Achsen in einem Loop ist das Debugging im Fehlerfall einfacher.
Durch die Feldsymbole ist kein Transport der Daten aus der Tabelle in einen Arbeitsbereich notwendig.
Tabellen sind im Verwendungsnachweis (per SE11) und bei der Suche nach Tabellen vorhanden -> kann bei Änderungen nützlich sein.
Probleme bei deiner Lösung:
data:
n type integer.
do n times
wa_itab2-matnr = wa_itab1-matnr
wa_itab2-achse = Hier müsste ich die Feldbezeichnung der Spalte der itab1 angeben z.B. achse1 -> siehe Menge
wa_itab2-menge = wa_itab1-achse(n) -> vermutlich willst du einen dynamische Zugriff machen ?! -> Wird im Verwendungsnachweis der Tabelle SE11 nicht aufgeführt. -> Außerdem solltest du den Feldnamen erst dynamisch in einem String zusammenbauen und dann erst verwenden ( concatenate 'achse' n into STR_FELDNAME. ) dann kannst du STR_FELDNAME verwenden.
append wa_itab2 to itab2
end loop -> endloop ist falsch -> auf Do muss ein Enddo folgen.
Mit den kleinen Änderungen kannst du aber auch deine Lösung verwenden.