FinalFantasy Geschrieben 16. März 2004 Geschrieben 16. März 2004 Hallo, ich habe in eine SAP Report einen Selection-Screen, auf deisem kann ein Tabellenname angegeben werden. Der Parameter heisst p_itab. Nachher will ich aus dieser Tabelle alle Einträge auslesen. Dazu brauch ich eine internet Tabelle, die den gleichen Typ hat, wie die Tabelle, deren Namen der Benutzer eingegeben hat. mit folgendem Select kann ich die Tabelle lesen: SELECT * FROM (p_itab) INTO TABLE itab. Angenommen der Benutzer hat als Tabellennamen SPFLI eingeben, so müsste itab wie folgt definiert sein: data itab type standard table of SPFLI. Genau das SPFLI soll aber dynamisch sein, also der Benutzer soll jede Tabelle aus dem DD angeben können. Wie kriegt ich meine interne Tabelle vom richtigen Typ?? data itab type standard table of (p_itab). funktioniert leider nicht. Zitieren
Nixaja Geschrieben 16. März 2004 Geschrieben 16. März 2004 Hi! Wenn du "Variablen" zur Laufzeit definieren willst, machst du das am besten über Feldsymbole. Das funktioniert folgendermaßen: Als erstes definierst du das Feldsymbol: FIELD-SYMBOLS <itab> TYPE ALL. (die Klammern "<>" gehören zum Feldsymbolnamen. Dann Definiertst du dir ein Objekt für die Übertragung: DATA objekt TYPE REF TO data. Und schlussendlich kannst du deinem Feldsymbol den gewünschten Wert zuweisen: CREATE DATA objekt TYPE (spfli). ASSIGN objekt->* TO <itab>. So ungefähr müssts funktionieren. Hab das ganze aber auch schon lang nimmer gemacht. Also alle Angaben ohne Gewähr. Liebe Grüße Nixaja Zitieren
Nixaja Geschrieben 16. März 2004 Geschrieben 16. März 2004 Hab grad nochmal in der Hilfe nachgesehn. Anscheinend funktioniert das ganze auch ohne Objekt. FIELD-SYMBOLS <PT> TYPE ANY. TABLES SFLIGHT. ... ASSIGN SFLIGHT-PLANETYPE TO <PT>. WRITE <PT>. Nixaja Zitieren
FinalFantasy Geschrieben 16. März 2004 Autor Geschrieben 16. März 2004 Original geschrieben von Nixaja TABLES SFLIGHT. ... ASSIGN SFLIGHT-PLANETYPE TO <PT>. Das hilft mir doch nichts!! Ich weiss doch gar nicht, ob jetzt die Tabelle SFLIGHT, oder SPFLI, oder sonstirgendeine Tabelle lesen muss, das bestimmt ja der User frei durch seine Eingabe in das Textfeld!!! Und ich weiss zur Zeit wo ich den Report schreibe doch noch gar nicht, was der User da jemals reinschreiben wird.... Irgendwie versteht das Problem niemand. Probiers doch mal aus: Selektionscreen mit einem Textfeld. Wenn ich SPFLI in das Textfeld schreibe, soll mir der Inhalt der Tabelle SPFLI als Liste ausgeben werden. Wenn ich aber in das Textfeld SFLIGHT schreibe, soll mir der Inhalt der Tabelle SFLIGHT ausgeben werden, und die hat ja eine ganz andere Struktur als SPFLI.... Zitieren
Nixaja Geschrieben 16. März 2004 Geschrieben 16. März 2004 Heyhey, net gleich so grantig! Du gibst einfach den Namen der Tabelle (den hast du ja) in eine Variable. Und die weist du dann dem Objekt zu. DATA meine_Variable(40) TYPE c. CREATE DATA objekt TYPE (meine_Variable) Nixaja Zitieren
FinalFantasy Geschrieben 16. März 2004 Autor Geschrieben 16. März 2004 Original geschrieben von Nixaja DATA meine_Variable(40) TYPE c. CREATE DATA objekt TYPE (meine_Variable) ^^ Gibt bei mir nur eine Fehler, weil 'objekt' unbekannt ist Mit Objekten hab ich noch nie gearbeitet, und ehrlich gesagt, versteh ich auch nicht wie obiges Beispiel funktionieren soll.... Also Codebeispiel: SELECTION-SCREEN BEGIN OF BLOCK 123 WITH FRAME. PARAMETERS: p_what(100) TYPE c obligatory. SELECTION-SCREEN END OF BLOCK 123. DATA: itab type ?????. SELECT * FROM (p_from) INTO itab. [/PHP] wie krieg ich den Typ für itab?? Zitieren
Nixaja Geschrieben 16. März 2004 Geschrieben 16. März 2004 Hast du mein erstes Posting nicht gelesen? Ich zitiere mich nochmal selber: Als erstes definierst du das Feldsymbol: FIELD-SYMBOLS <itab> TYPE ANY. (die Klammern "<>" gehören zum Feldsymbolnamen.) Dann Definiertst du dir ein Objekt für die Übertragung: DATA objekt TYPE REF TO data. DATA meine_variable(40) TYPE c. Und schlussendlich kannst du deinem Feldsymbol den gewünschten Wert zuweisen: CREATE DATA objekt TYPE (meine_varialbe). ASSIGN objekt->* TO <itab>. Und dann füllst du mit einem Select dein Feldsymbol: SELECT * FROM (meine_varialbe) INTO CORRESPONDING FIELDS OF <itab> Müsste eigentlich funktionieren. Kanns aber grad selber net ausprobieren. Nixaja Zitieren
FinalFantasy Geschrieben 16. März 2004 Autor Geschrieben 16. März 2004 Original geschrieben von Nixaja H DATA objekt TYPE REF TO data. CREATE DATA objekt TYPE (meine_varialbe). Hab ich gelesen, aber ich hab ja auch geschrieben, dass ichs nicht verstehe. Erste zeile: Was ist das data??? Zeile zwei gibt bei mir einen Fehler: statt meine_variable wurde meine_variable-feld erwartet. Kann aber auch sein, dass Zeile zwei nicht geht, weil Zeile eins nicht funktioniert... Zitieren
Nixaja Geschrieben 16. März 2004 Geschrieben 16. März 2004 Original geschrieben von FinalFantasy SELECTION-SCREEN BEGIN OF BLOCK 123 WITH FRAME. PARAMETERS: p_what(100) TYPE c obligatory. SELECTION-SCREEN END OF BLOCK 123. DATA: itab type ?????. SELECT * FROM (p_from) INTO itab. [/PHP] [/b] Probiers mal so: SELECTION-SCREEN BEGIN OF BLOCK 123 WITH FRAME. PARAMETERS: p_what(100) TYPE c obligatory. SELECTION-SCREEN END OF BLOCK 123. FIELD-SYMBOLS <itab> TYPE ANY. DATA objekt TYPE REF TO data. CREATE DATA objekt TYPE (p_from). ASSIGN objekt->* TO <itab>. SELECT * FROM (p_from) INTO <itab>. Zitieren
FinalFantasy Geschrieben 16. März 2004 Autor Geschrieben 16. März 2004 Da kriege ich leider eine Kurzdump mit dem Fehlertext: Es wurde versucht, einem typisierten Feldsymbol ein Feld zuzuweisen, das nicht den erforderlichen Typ besitzt. bei dem ASSIGN. Ich versteh das mit den Objekten zwar nicht wirklich aber der Ansatz scheint gut zu sein. Werd mich jetzt noch ein bischen durch die Hilfe wühlen. *gg* Zitieren
Nixaja Geschrieben 16. März 2004 Geschrieben 16. März 2004 Original geschrieben von FinalFantasy Da kriege ich leider eine Kurzdump mit dem Fehlertext: Es wurde versucht, einem typisierten Feldsymbol ein Feld zuzuweisen, das nicht den erforderlichen Typ besitzt. bei dem ASSIGN. Ich versteh das mit den Objekten zwar nicht wirklich aber der Ansatz scheint gut zu sein. Werd mich jetzt noch ein bischen durch die Hilfe wühlen. *gg* Seltsam. Bei mir funktionierts einwandfrei (hab nur ganz am Schluss das ENDSELECT vergessen ) Wenn du willst, kannst du deinen aktuellen Quellcode posten. Dann schau ich ihn mal durch. Nixaja Zitieren
FinalFantasy Geschrieben 16. März 2004 Autor Geschrieben 16. März 2004 Ahh, also das kleine Beispiel hab ich jetzt auch zum laufen bekommen. Der Selectionscreenparamter muss natürlich auch p_from heissen, und nicht p_where.... :confused: Was mir aber noch nicht gefällt, ist dass die Tabelle Zeilenweise (also SELECT ... ENDSELECT) gelesen wird. Mal schaun, das geht anders bestimmt auch noch. Zitieren
Nixaja Geschrieben 16. März 2004 Geschrieben 16. März 2004 Original geschrieben von FinalFantasy Was mir aber noch nicht gefällt, ist dass die Tabelle Zeilenweise (also SELECT ... ENDSELECT) gelesen wird. Ich denke, dagegen wirst du wenig unternehmen können. Ein Array Fetch ist meines Wissens bei Selektionen in Feldsymbole nicht möglich. Am Besten du arbeitest die Daten zeilenweise zwischen SELECT und ENDSELECT ab. Ist zwar langsamer - funktioniert aber auch Liebe Grüße und noch viel Spaß mit den Feldsymbolen Nixaja Zitieren
FinalFantasy Geschrieben 16. März 2004 Autor Geschrieben 16. März 2004 Das find ich aber jetzt schlecht, ich brauch die Daten aber in einer internen Tabelle zur Weiterverarbeitung. Ich brauch also so und so eine Tabelle, mit einem Dynamischen Typ Zitieren
Agent Purple Geschrieben 16. März 2004 Geschrieben 16. März 2004 Ich schick dir morgen mal ein wenig Source zu dem Thema, OK? Hab letzt ein Proggie zum Herunterladen von Tabellen geschrieben. Denke, das ist sowas, was du brauchst. Zitieren
FinalFantasy Geschrieben 16. März 2004 Autor Geschrieben 16. März 2004 Ahja, genau sowas in der art, will ich auch machen. *gg* Hab schon geschaut, aber du warst nicht in ICQ. :bimei Hast du meine E-Mail addy noch? Zitieren
Agent Purple Geschrieben 17. März 2004 Geschrieben 17. März 2004 Hi, hier ist das Programm zum Herunterladen von DB-Tabellen. Die Daten werden in einer CSV-Datei auf dem Applikations-Server gespeichert. Der FB 'Z_ZRPARAMETER_READ' holt nur ein Temporäres Verzeichnis aus einer Kundeneigenen Tabelle, muss also irgendwie ersetzt werden. Denke aber, dass dich das an dieser Stelle gar nicht so interessiert. Message 183(zr) ist eine Fehlermeldung, falls die Datei nicht erzeugt werden konnte. Message 081(zs) ist ein Dummy, den ich vergewaltigt habe. Ist ja auch nur ein Schmutzprogramm gewesen :-) Wenn noch fragen sind, weisste ja wie du mich erreichen kannst. REPORT z_tabledownload . * Lokale Daten DATA: l_tabname LIKE dd02l-tabname, lt_data TYPE REF TO data, l_data TYPE string, l_field TYPE string, l_out TYPE string, l_zrparameter TYPE zrparameter, l_filename TYPE string, lt_tablefields TYPE TABLE OF dbfield, l_count TYPE sydbcnt, l_sydbcnt TYPE sy-dbcnt. FIELD-SYMBOLS: <lt_data> TYPE table, <l_data> TYPE ANY, <l_field> TYPE ANY, <l_tablefield> TYPE dbfield. * Selektionsbild PARAMETERS: p_tab LIKE dd02l-tabname OBLIGATORY, p_size TYPE i OBLIGATORY DEFAULT '10000'. * Programmstart START-OF-SELECTION. * Tabelle prüfen SELECT SINGLE tabname FROM dd02l INTO l_tabname WHERE tabname = p_tab. * Tabelle nicht vorhanden IF NOT sy-subrc = 0. MESSAGE s402(mo) DISPLAY LIKE 'E' WITH p_tab. RETURN. ENDIF. * Feldbezeichnungen lesen CALL FUNCTION 'DB_GET_TABLE_FIELDS' EXPORTING tabname = l_tabname TABLES dbfields = lt_tablefields. * Pfad des Work-Verzeichnisses lesen CALL FUNCTION 'Z_ZRPARAMETER_READ' EXPORTING i_id = 'TEMP_PFAD' IMPORTING e_zrparameter = l_zrparameter EXCEPTIONS no_input_data = 1 data_not_found = 2 OTHERS = 3. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. * Dateiname aufbauen CONCATENATE l_zrparameter-wert sy-sysid '-' l_tabname '-' sy-datum '-' sy-uzeit '.txt' INTO l_filename. * Instanzierung der lokalen Daten CREATE DATA: lt_data TYPE STANDARD TABLE OF (l_tabname). ASSIGN lt_data->* TO <lt_data>. * Ausgabedatei öffnen OPEN DATASET l_filename FOR OUTPUT IN TEXT MODE. IF NOT sy-subrc = 0. MESSAGE s183(zr) DISPLAY LIKE 'E'. RETURN. ENDIF. * Überschrift der Feldnamen schreiben LOOP AT lt_tablefields ASSIGNING <l_tablefield>. CONCATENATE l_out <l_tablefield>-name ';' INTO l_out. ENDLOOP. * Überschrift schreibem TRANSFER l_out TO l_filename. * Anzahl der Datensätze ermitteln SELECT COUNT(*) FROM (l_tabname) INTO l_sydbcnt. * Datensätze paketweise lesen SELECT * FROM (l_tabname) INTO TABLE <lt_data> PACKAGE SIZE p_size ORDER BY PRIMARY KEY. * Gelesene Sätze zählen l_count = l_count + p_size. * Statusbar aktualisieren PERFORM show_status USING l_count l_sydbcnt. * Datensätze für Ausgabe aufbereiten LOOP AT <lt_data> ASSIGNING <l_data>. CLEAR l_out. DO. ASSIGN COMPONENT sy-index OF STRUCTURE <l_data> TO <l_field>. IF sy-subrc = 0. l_field = <l_field>. CONCATENATE l_out l_field ';' INTO l_out. ELSE. EXIT. ENDIF. ENDDO. * Datensatz in Datei schreiben TRANSFER l_out TO l_filename. ENDLOOP. ENDSELECT. * Ausgabedatei schließen CLOSE DATASET l_filename. IF NOT sy-subrc = 0. MESSAGE s183(zr) DISPLAY LIKE 'E'. RETURN. ENDIF. * Das war's MESSAGE s081(zs) WITH 'Tabelle' l_tabname 'wurde gespeichert in Datei' l_filename. *&---------------------------------------------------------------------* *& Form show_status *&---------------------------------------------------------------------* FORM show_status USING p_count TYPE sydbcnt p_sydbcnt TYPE sydbcnt. * Lokale Daten DATA: l_count TYPE string, l_sydbcnt TYPE string, l_progress1 TYPE string, l_progress_percentage(2) TYPE n, l_progress_text TYPE string. l_count = p_count. l_sydbcnt = p_sydbcnt. * Prozentsatz der Verarbeitung berechnen l_progress1 = trunc( l_count / l_sydbcnt * 100 ). l_progress_percentage = l_progress1. CONCATENATE l_count 'von' l_sydbcnt 'Sätzen gelesen (' l_progress_percentage '%)' INTO l_progress_text SEPARATED BY space. * Progress auf den GUI anzeigen CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR' EXPORTING percentage = l_progress_percentage text = l_progress_text. ENDFORM. " show_status Zitieren
FinalFantasy Geschrieben 17. März 2004 Autor Geschrieben 17. März 2004 Bei mir macht die Zeile CREATE DATA: lt_data TYPE STANDARD TABLE OF (l_tabname). Probleme. So hab ichs gestern ja auch schon probiert, aber ich krieg immer den Fehler: "TABLE" konnt nicht interpretiert werden. Mögliche Fehlerursachen: Schreibweise, oder Kommafehler. Zitieren
Agent Purple Geschrieben 17. März 2004 Geschrieben 17. März 2004 Hi, sag mal... auf welchem Release arbeitet ihr denn? Scheint ja recht alt zu sein. Probier mal das "STANDARD" wegzulassen. Zitieren
FinalFantasy Geschrieben 17. März 2004 Autor Geschrieben 17. März 2004 Ist Release 4.6c Wenn ich das Standard weglasse, kommt "Table nicht vollständig spezifiziert".... Komisch.... Zitieren
Agent Purple Geschrieben 17. März 2004 Geschrieben 17. März 2004 Na gut, am Release kann es liegen. Wir haben hier auf allen Systemen 4.7 / 620. Deshalb kann ich das leider auch nicht ausprobieren. Ich guck aber mal, ob ich jemanden finde, der das weiss. Hab ja genug Leute hier. Zitieren
Agent Purple Geschrieben 17. März 2004 Geschrieben 17. März 2004 Wir sind zu dem Ergebnis gekommen, dass das scheinbar am erstellen einer Tabelle einer dynamischen Struktur im OO-Umfeld liegt. OO wurde erst vollständig in Release 4.7 implementiert. Probier mal bitte testweise den Tabellennamen fest reinzuschreiben. Wenn das klappt, suchst du im OSS mal nach nem Hinweis wie das in 4.6 geht. Eventuell kommt man da mit Support Packages schon ein Stück weiter. Hängt aber davon ab, auf welchem Releasestand ihr seid. Zitieren
commander1979 Geschrieben 17. Oktober 2008 Geschrieben 17. Oktober 2008 hallo ich muss auch dynamisch eine tabelle auslesen und in eine textdatei schreiben. das läuft bei mir soweit. jetzt habe ich das problem die daten aus der textdatei in die tabelle wieder einfügen. weiß evtl einer wie man es macht. weiß nicht wie ich das machen soll. habe es schon mit assign versucht aber das klappt leider nicht. Zur Funktionsweise. Der Benutzer gibt in dem Selections Screen eine Tabelle an und gibt den Pfad der Datei an welche die Daten enthält für die Tabelle. Diese Daten müssen dann in die Tabelle wieder eingefügt werden. Es kann bei dem Selecten Screnn bei jeder Eingabe um eine andere Tabelle sich handeln. mfg commander Zitieren
Agent Purple Geschrieben 18. Oktober 2008 Geschrieben 18. Oktober 2008 (bearbeitet) Hi, das hier sollte dir bei der Konvertierung helfen. Ich bin mal von einer Semikolon-getrennter Datei ausgegangen. Den Update-Teil musste noch einfügen. Wichtig ist, dass der Parameter S_STRUC ein Tabellentyp von deiner Tabelle ist. Die Info wird intern für die dynamische Objekterzeugung benötigt. Sinnvollerweise hinterlegst du noch eine Tabelle aller zulässigen Zieltabellen damit da nicht Unsinn eingegeben werden kann. Ansonsten, bei Fragen.... fragen Greetz Agent Purple REPORT <Wie ich immer das Ding heisst>. * Selection screen PARAMETERS s_file TYPE dxfilename OBLIGATORY. PARAMETERS s_struc TYPE dd40l-typename OBLIGATORY. * Local types TYPES tt_text1000 TYPE TABLE OF text1000. * Global data DATA g_tabname TYPE ddobjname. DATA gt_file_data TYPE tt_text1000. DATA gr_data TYPE REF TO data. * Selection screen handling AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_file. PERFORM f4_filename CHANGING s_file. * Start START-OF-SELECTION. * Upload file PERFORM upload USING s_file CHANGING gt_file_data. * Convert data PERFORM convert_data USING gt_file_data s_struc CHANGING gr_data g_tabname. * Process data PERFORM process USING gr_data g_tabname. *&---------------------------------------------------------------------* *& Form f4_filename *&---------------------------------------------------------------------* * Get filename *----------------------------------------------------------------------* FORM f4_filename CHANGING e_filename TYPE dxfilename. * Local data DATA l_filename TYPE eseftfront. * Fet filename CALL FUNCTION 'C13Z_FRONTEND_FILENAME_GET' IMPORTING e_filename = l_filename EXCEPTIONS internal_error = 1 OTHERS = 2. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. * Export filename e_filename = l_filename. ENDFORM. "f4_filename *&---------------------------------------------------------------------* *& Form upload *&---------------------------------------------------------------------* * Upload file *----------------------------------------------------------------------* FORM upload USING i_file TYPE dxfilename CHANGING et_data TYPE tt_text1000. * Local data DATA l_filename TYPE string. * Set parameter l_filename = i_file. * Upload file CALL METHOD cl_gui_frontend_services=>gui_upload EXPORTING filename = l_filename CHANGING data_tab = et_data EXCEPTIONS file_open_error = 1 file_read_error = 2 no_batch = 3 gui_refuse_filetransfer = 4 invalid_type = 5 no_authority = 6 unknown_error = 7 bad_data_format = 8 header_not_allowed = 9 separator_not_allowed = 10 header_too_long = 11 unknown_dp_error = 12 access_denied = 13 dp_out_of_memory = 14 disk_full = 15 dp_timeout = 16 not_supported_by_gui = 17 error_no_gui = 18 OTHERS = 19. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. ENDFORM. "upload *&---------------------------------------------------------------------* *& Form read_target_structure *&---------------------------------------------------------------------* * Read DDic information of target structure *----------------------------------------------------------------------* FORM read_target_structure USING i_structure TYPE ttypename CHANGING et_ddfields TYPE ddfields e_tabname TYPE ddobjname. * Local data DATA l_ddtypeget TYPE ddtypeget. DATA lt_ddtypes TYPE TABLE OF ddtypes. DATA lt_dd40l TYPE TABLE OF dd40l. FIELD-SYMBOLS <lt_ddtypes> TYPE ddtypes. FIELD-SYMBOLS <lt_dd40l> TYPE dd40l. * Set parameters l_ddtypeget-tthd = 'X'. APPEND INITIAL LINE TO lt_ddtypes ASSIGNING <lt_ddtypes>. <lt_ddtypes>-typename = i_structure. * Read table type info CALL FUNCTION 'DD_TYPEINFO_GET' EXPORTING getstate = l_ddtypeget TABLES ddtypes_tab = lt_ddtypes dd40l_tab = lt_dd40l. * Error handling IF lt_dd40l IS INITIAL. MESSAGE e007(e2) WITH i_structure. ENDIF. * Get line type READ TABLE lt_dd40l INDEX 1 ASSIGNING <lt_dd40l>. e_tabname = <lt_dd40l>-rowtype. * Read field info of line type CALL FUNCTION 'DDIF_NAMETAB_GET' EXPORTING tabname = e_tabname TABLES dfies_tab = et_ddfields EXCEPTIONS not_found = 1 OTHERS = 2. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. ENDFORM. "read_target_structure *&---------------------------------------------------------------------* *& Form transfer_single_field *&---------------------------------------------------------------------* * Transfer data of single field *----------------------------------------------------------------------* FORM transfer_single_field USING i_dfies TYPE dfies i_source_field TYPE any CHANGING e_target_field TYPE any. * Local data DATA l_exception TYPE REF TO cx_root. * Transfer data TRY. e_target_field = i_source_field. * Special handling for some data types CASE i_dfies-datatype. * CHAR WHEN 'CHAR'. * If ALPHA IF i_dfies-convexit = 'ALPHA' OR i_dfies-lowercase IS INITIAL. * Convert IF i_dfies-convexit = 'ALPHA'. CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' EXPORTING input = e_target_field IMPORTING output = e_target_field. ENDIF. * Convert to upper case assording to field definition IF i_dfies-lowercase IS INITIAL. TRANSLATE e_target_field TO UPPER CASE. ENDIF. ENDIF. * NUMC WHEN 'NUMC' OR 'DATS' OR 'TIMS'. * Init IF i_source_field IS INITIAL. CLEAR e_target_field. ENDIF. ENDCASE. * Error message if field conversion fails CATCH cx_root INTO l_exception. sy-lisel = l_exception->if_message~get_longtext( ). MESSAGE e001(00) WITH sy-lisel. ENDTRY. ENDFORM. "transfer_single_field *&---------------------------------------------------------------------* *& Form convert_data *&---------------------------------------------------------------------* * Convert file to data table *----------------------------------------------------------------------* FORM convert_data USING it_file_data TYPE tt_text1000 i_structure TYPE ttypename CHANGING er_data TYPE REF TO data e_tabname TYPE tabname. * Local data DATA lt_fields TYPE tt_text1000. DATA lt_target_ddic TYPE ddfields. FIELD-SYMBOLS <it_file_data> TYPE text1000. FIELD-SYMBOLS <er_data> TYPE table. FIELD-SYMBOLS <er_data_line> TYPE ANY. FIELD-SYMBOLS <source_field> TYPE ANY. FIELD-SYMBOLS <target_field> TYPE ANY. FIELD-SYMBOLS <lt_target_ddic> TYPE dfies. * Read DDic structure of target PERFORM read_target_structure USING i_structure CHANGING lt_target_ddic e_tabname. * Create data object CREATE DATA er_data TYPE (i_structure). * Assign ASSIGN er_data->* TO <er_data> CASTING TYPE (i_structure). * Loop data table LOOP AT it_file_data ASSIGNING <it_file_data>. * Init CLEAR lt_fields. * Split structure into internal table SPLIT <it_file_data> AT ';' INTO TABLE lt_fields. * Append line to data object APPEND INITIAL LINE TO <er_data> ASSIGNING <er_data_line>. * Loop fields of source file LOOP AT lt_fields ASSIGNING <source_field>. * Read info of target field READ TABLE lt_target_ddic INDEX sy-tabix ASSIGNING <lt_target_ddic>. * Add some error handling here!!! IF NOT sy-subrc = 0. EXIT. ENDIF. * Assign target ASSIGN COMPONENT sy-tabix OF STRUCTURE <er_data_line> TO <target_field>. * Transfer data PERFORM transfer_single_field USING <lt_target_ddic> <source_field> CHANGING <target_field>. ENDLOOP. ENDLOOP. ENDFORM. "convert_data *&---------------------------------------------------------------------* *& Form process *&---------------------------------------------------------------------* * Process data *----------------------------------------------------------------------* FORM process USING ir_data TYPE REF TO data i_tabname TYPE ddobjname. * Processing depends on the strucure. CASE i_tabname. WHEN '<Insert structure name here>'. * perform whatever... ENDCASE. ENDFORM. "process Bearbeitet 18. Oktober 2008 von Agent Purple Zitieren
commander1979 Geschrieben 20. Oktober 2008 Geschrieben 20. Oktober 2008 hier liegt eigentlich auch mein problem. ich bekomme die aufbereiteten daten nicht in die tabelle rein. jedes mal wenn ich was in die tabelle wieder eintragen möchte sagt er mir die tabelle ist nicht bekannt Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.