Ich habe ein Problem und zwar lese ich aus einem Excel File Daten ins SAP System. Dies mache ich mit dem Funktionsbaustein ALSM_EXCEL_TO_INTERNAL_TABLE. Danach schreibe ich die Daten von der internen Tabelle in eine DB-Tabelle.
Diese DB-Tabelle vergleiche ich dann mit einer anderen. Und hier tritt das Problem auf. In der DB-Tabelle mit den Excel Daten sind alle Werte als CHAR's abgespeichert weil ich sie nur so vom Excel lesen kann. Jetzt muss ich aber ein Datum in der DB-Tabelle(mit Exceldaten) mit einem anderen Wert in einer anderen DB-Tabelle vergleichen. Dieser ist aber vom Datentyp ein Date.
Hat jemand eine Ahnung wie ich diese konvertieren kann? Und dann DB mit den neuen Werten füllen kann?
Vielen Dank für Eure Hilfe.
Mfg.
Nicolas
PS. Ich habe es mal so versucht aber dann kommt ein Laufzeitfehler (TABLE_ILLEGAL_STATEMENT):
DATA: excel_date TYPE d.
SELECT * FROM zbc_excel INTO CORRESPONDING FIELDS OF TABLE t_excel.
LOOP AT t_excel INTO wa_excel.
excel_date = wa_excel-bisdatum.
ENDLOOP.
ich gehe mal davon aus, das dein Textfeld so aussieht (15.03.2007)
Dann sollte dein loop wie folgt aussehen:
field symbols: <excel> type wa_excel.
LOOP AT t_excel assigning <excel>.
concatenate: <excel>-bisdatum+6(4)
<excel>-bisdatum+3(2)
<excel>-bisdatum(2) into excel_date.
ENDLOOP.
Damit hätte dein Datum den richtigen Aufbau.
Das Modify t_excel FROM wa_excel entfällt durch das arbeiten mit Feldsymbolen. Solltest du die Änderung mit Modify machen, gehört das Modify in den LOOP, da du schließlich alle Tabellenzeilen ändern willst und nicht dur die letzte Zeile.
data: begin of zbc_excel,
bisdatum(10) type c,
end of zbc_excel.
DATA: excel_date like sy-datum,
vgl_date like sy-datum value '20070315',
t_excel like standard table of zbc_excel.
FIELD-SYMBOLS <excel> like zbc_excel.
zbc_excel-bisdatum = '13.10.2006'.
append zbc_excel to t_excel.
zbc_excel-bisdatum = '15.03.2007'.
append zbc_excel to t_excel.
LOOP AT t_excel ASSIGNING <excel>.
CONCATENATE: <excel>-bisdatum+6(4) <excel>-bisdatum+3(2)
<excel>-bisdatum(2) INTO excel_date.
if excel_date = vgl_date.
write: / 'Daten sind Gleich:', excel_date.
else.
write: / 'Daten ungleich :', excel_date, vgl_date.
endif.
ENDLOOP
Wo machst du eigentlcih einen Vergleich? ecel-date = wa_excel-bisdatum brauchst du nicht, da die werte durch das Feldsymbol direkt in der Tabelle t_excel geändert werden ODER ist das dein Vergleich. Wenn JA, dann fehlt irgendwie ein IF.
Das MODIFY FROM TABLE braucht sdu nur einmal nach dem LOOP und das
andere MODIFY kannst du lsöchen, da die Änderung duch das assign automatisch in der Tabelle stattfindet.
Der Vergleich ist schon klar, nur muss die DB-Tabelle diesen neuen konvertierten Wert am Ende enthalten, Weil ich ja zwei DB-Tabellen miteinander vergleiche.