Hallo zusammen,
ich schreibe z.Zt. einen Report, der (unter anderem) eine Datenbank-Tabelle samt Feldnamen nach Excel importiert.
Den entsprechenden Funktionsbaustein habe ich gefunden und erfolgreich getestet, da gibts keine Probleme. Es wird einfach eine interne Tabelle übergeben, der dann als Excel-Datei gespeichert wird.
Das ganze soll generisch gehalten werden und mit beliebigen Tabellen funktionieren. Dazu schreibe ich über einen Select die Datenbankinhalte in eine interne Tabelle, die ich mit
Code: Alles auswählen.
DATA: it_table LIKE TABLE OF tabellenname WITH HEADER LINE.
deklariert habe.
Über das Directory lese ich dann die entsprechenden Conversion-Exits aus und möchte sie nun anwenden.
Das Problem dabei ist, dass z.B. ein Datum laut Directory als DATUM_INV bzw C(8) gespeichert wird. Nach dem Konvertieren ist das Datum aber durch die zwei "." 10 Stellen lang und nach dem Ändern habe ich dann so Daten wie "03.04.20", was natürlich nicht akzeptabel ist.
Beim Datum konnte ich mir zunächst so helfen, dass ich nach dem Konvertieren das Datum auf "03.04.09" und somit 8 Stellen gekürzt habe.
Diese Lösung ist aber nicht grade dynamisch und bei anderen Feldern, sowie den Feldnamen, die ich in der Excel-Datei dringend als Kopfzeile benötige, geht das aber nicht.
Die einzige Möglichkeit, welche mir jetzt noch einfällt, ist, eine zweite interne Tabelle zu erzeugen, welche später an den Excel-Funktionsbaustein übergeben wird, in der jedes Feld vom Typ c(50) ist. Die Anzahl der Spalten wäre ja vorher bekannt. Aber hier kenne ich leider keine Methode, mit der ich dynamisch eine Tabelle erzeugen kann, welche die passende Anzahl an Spalten zur Verfügung stellt.
Eine hardgecodete Version mit
Code: Alles auswählen.
TYPES: BEGIN OF it_col,
f1(50) TYPE c,
f2(50) TYPE c,
f3(50) TYPE c,
f4(50) TYPE c,
f5(50) TYPE c,
f6(50) TYPE c,
f7(50) TYPE c,
f8(50) TYPE c,
f9(50) TYPE c,
f10(50) TYPE c,
f11(50) TYPE c,
f12(50) TYPE c,
ist ja weder effektiv, noch übersichtlich, oder ressourcensparend...
Am besten wäre eine interne Tabelle, welche die richtige (ja vorher bekannte) Anzahl an Feldern hat, die Feldnamen, aber NICHT deren Feldtypen, sondern c(50) übernimmt.
Könnt ihr mir vielleicht einen Tipp geben, wie ich dieses Problem lösen kann?