gelöst interne Tabelle als CSV-Datei auf Festplatte speichern.


Getting started ... Alles für einen gelungenen Start.

Moderatoren: Jan, Steff

gelöst interne Tabelle als CSV-Datei auf Festplatte speichern.

Beitragvon Bright4.5 » 09.10.2018, 08:23

Hallo,

ich möchte eine interne Tabelle als CSV-Datei auf meiner Festplatte speichern. Ich habe einen Funktionsbaustein, bei dem mir leider allerdings die technische Spezifikation (Char 60) nicht ausreicht. Kennt jemand einen Funktionsbaustein bei dem ich eine interne Tabelle mit angegebenen Verzeichnisnamen auf meiner Festplatte speichern kann und der ausreichend ist (Char 256 oder String) für den Verzeichnisnamen wohin es gespeichert werden soll?

vielen Dank :)
Bright4.5
ForumUser
 
Beiträge: 75
Registriert: 17.08.2018, 18:23
Dank erhalten: 0 mal
Ich bin: Entwickler/in

Sponsor

Alte ABAP-Entwicklerweisheit: Weißt du weder aus noch ein, baust du einen BADI ein

Re: interne Tabelle als CSV-Datei auf Festplatte speichern.

Beitragvon DeathAndPain » 09.10.2018, 11:40

Hier ein Codeausschnitt, mit dem Du Dein Problem lösen können solltest:

Code: Alles auswählen
    DATA: LV_FILE     TYPE STRING,
          LT_CONVERTED_DATA TYPE TRUXS_T_TEXT_DATA.
*   Daten konvertieren
    CALL FUNCTION 'SAP_CONVERT_TO_CSV_FORMAT'
      EXPORTING
        I_LINE_HEADER        = 'X'
        I_FILENAME           = IV_FILE
      TABLES
        I_TAB_SAP_DATA       = AUSZUGEBENDE_TABELLE
      CHANGING
        I_TAB_CONVERTED_DATA = LT_CONVERTED_DATA
      EXCEPTIONS
        CONVERSION_FAILED    = 1
        OTHERS               = 2.

    IF SY-SUBRC <> 0.
      IF SY-BATCH IS INITIAL.
        MESSAGE E004(Z01) WITH IV_FILE.
      ELSE.
        FORMAT COLOR COL_NEGATIVE.
        WRITE: / 'Fehler beim Konvertieren der Daten für Datei', IV_FILE.
        FORMAT COLOR COL_NORMAL INTENSIFIED ON.
      ENDIF.
    ENDIF.

    LV_FILE = 'Dateiname.csv'.

    CHECK SY-BATCH IS INITIAL. " keine Frontend-Ausgabe bei Hintergrundbetrieb des Jobs
    CALL METHOD CL_GUI_FRONTEND_SERVICES=>GUI_DOWNLOAD
      EXPORTING
        FILENAME                = LV_FILE
      CHANGING
        DATA_TAB                = LT_CONVERTED_DATA
      EXCEPTIONS
        FILE_WRITE_ERROR        = 1
        NO_BATCH                = 2
        GUI_REFUSE_FILETRANSFER = 3
        INVALID_TYPE            = 4
        NO_AUTHORITY            = 5
        UNKNOWN_ERROR           = 6
        HEADER_NOT_ALLOWED      = 7
        SEPARATOR_NOT_ALLOWED   = 8
        FILESIZE_NOT_ALLOWED    = 9
        HEADER_TOO_LONG         = 10
        DP_ERROR_CREATE         = 11
        DP_ERROR_SEND           = 12
        DP_ERROR_WRITE          = 13
        UNKNOWN_DP_ERROR        = 14
        ACCESS_DENIED           = 15
        DP_OUT_OF_MEMORY        = 16
        DISK_FULL               = 17
        DP_TIMEOUT              = 18
        FILE_NOT_FOUND          = 19
        DATAPROVIDER_EXCEPTION  = 20
        CONTROL_FLUSH_ERROR     = 21
        NOT_SUPPORTED_BY_GUI    = 22
        ERROR_NO_GUI            = 23
        OTHERS                  = 24.
    IF SY-SUBRC <> 0.
      IF SY-BATCH IS INITIAL.
        MESSAGE I003(Z01) WITH LV_FILE SY-SUBRC.
      ELSE.
        WRITE: / 'Fehler beim Schreiben der Datei', LV_FILE NO-GAP,':', SY-SUBRC.
      ENDIF.
    ENDIF.
DeathAndPain
Expert
 
Beiträge: 740
Registriert: 05.05.2006, 10:14
Dank erhalten: 170 mal
Ich bin: Entwickler/in

Re: interne Tabelle als CSV-Datei auf Festplatte speichern.

Beitragvon Bright4.5 » 09.10.2018, 12:04

vielen Dank schon mal!

mit dem Funktionsbaustein versucht er mir nur, die Datei immer in dem Verzeichnis H:\Documents\SAP\SAP GUI\ anzulegen. Wie kann ich mein eigenes Verzeichnis hier angeben?
Bright4.5
ForumUser
 
Beiträge: 75
Registriert: 17.08.2018, 18:23
Dank erhalten: 0 mal
Ich bin: Entwickler/in

Re: interne Tabelle als CSV-Datei auf Festplatte speichern.

Beitragvon Bright4.5 » 09.10.2018, 14:53

Leider ist hier der Filename mit char 128 hinterlegt, was mir leider auch nicht reicht. Kennt jemand einen mit mehr ? Vielleicht 200 oder so ?
Bright4.5
ForumUser
 
Beiträge: 75
Registriert: 17.08.2018, 18:23
Dank erhalten: 0 mal
Ich bin: Entwickler/in

Re: interne Tabelle als CSV-Datei auf Festplatte speichern.

Beitragvon Bright4.5 » 10.10.2018, 08:46

Einen Funktionsbaustein wie "'SAP_CONVERT_TO_CSV_FORMAT' " mit den gleichen Funktionen, bloß Filename mit mehr als 128 hinterlegt?
Bright4.5
ForumUser
 
Beiträge: 75
Registriert: 17.08.2018, 18:23
Dank erhalten: 0 mal
Ich bin: Entwickler/in

Re: interne Tabelle als CSV-Datei auf Festplatte speichern.

Beitragvon edwin » 10.10.2018, 10:11

Hi,
der Dateiname bei 'SAP_CONVERT_TO_CSV_FORMAT' kannst du vergessen, dieser ist nur ein Dummy, wie DAP schon geschrieben hast benutze die Methode der "CL_GUI_FRONTEND_SERVICES=>GUI_DOWNLOAD" für den Download auf deinen PC, der Dateiname ist da als String definiert, für die Auswahl des Ausgabepfades kannst Du "CL_GUI_FRONTEND_SERVICES=>FILE_SAVE_DIALOG" benutzen.
/Edwin
edwin
Specialist
 
Beiträge: 228
Registriert: 27.02.2007, 17:15
Wohnort: Ludwigsburg
Dank erhalten: 26 mal
Ich bin: Freiberufler/in

Re: interne Tabelle als CSV-Datei auf Festplatte speichern.

Beitragvon Bright4.5 » 10.10.2018, 10:44

Irgendwie bin ich zu blöd :p

ich habe zwei Parameter angelegt mit jeweils eine für den Dateinamen (p_datei) und eine für das Verzeichnis (p_verz) und möchte die interne Tabelle gt_ausgabe als csv Datei speichern.

CONCATENATE p_verz '\' p_datei '.CSV' INTO filepath.

In filepath habe ich Verzeichnis und Namen gepackt.

Irgendwie funktioniert es nicht...
Bright4.5
ForumUser
 
Beiträge: 75
Registriert: 17.08.2018, 18:23
Dank erhalten: 0 mal
Ich bin: Entwickler/in

Re: interne Tabelle als CSV-Datei auf Festplatte speichern.

Beitragvon edwin » 10.10.2018, 10:52

Hi,
also bei mir funktioniert es so
Code: Alles auswählen

* so
  CALL METHOD cl_gui_frontend_services=>gui_download
    EXPORTING
      filename                  = 'c:\temp\test.csv'
      filetype                  = 'ASC'
      trunc_trailing_blanks_eol = 'X'
    CHANGING
      data_tab                  = data_table
    EXCEPTIONS
      file_write_error          = 1
      no_batch                  = 2
...

*oder auch so
data ooutfile type string.

outfile = 'c:\temp\test.csv'.

  CALL METHOD cl_gui_frontend_services=>gui_download
    EXPORTING
      filename                  = outfile
      filetype                  = 'ASC'
      trunc_trailing_blanks_eol = 'X'
    CHANGING
      data_tab                  = data_table
    EXCEPTIONS
      file_write_error          = 1
      no_batch                  = 2
 


Der Pfad muss komplett und vorhanden sein !

/Edwin.
edwin
Specialist
 
Beiträge: 228
Registriert: 27.02.2007, 17:15
Wohnort: Ludwigsburg
Dank erhalten: 26 mal
Ich bin: Freiberufler/in

Re: interne Tabelle als CSV-Datei auf Festplatte speichern.

Beitragvon Bright4.5 » 10.10.2018, 11:50

okay, ich bekomm ne Dump. Es zeigt an Invalid Type.


IF SY-SUBRC <> 0.
case sy-subrc.
when 1.
RAISE FILE_WRITE_ERROR.
when 2.
RAISE NO_BATCH.
when 3.
RAISE GUI_REFUSE_FILETRANSFER.
when 4.
---->> RAISE INVALID_TYPE .
when 5.
RAISE NO_AUTHORITY.
when 6.
RAISE UNKNOWN_ERROR.
when 7.
RAISE HEADER_NOT_ALLOWED.
when 8.
RAISE SEPARATOR_NOT_ALLOWED.
when 9.
RAISE FILESIZE_NOT_ALLOWED.
when 10.
RAISE HEADER_TOO_LONG.
when 11.
RAISE DP_ERROR_CREATE.
when 12.
RAISE DP_ERROR_SEND.
when 13.
RAISE DP_ERROR_WRITE.
when 14.
RAISE UNKNOWN_DP_ERROR.
when 15.
RAISE ACCESS_DENIED.
when 16.
RAISE DP_OUT_OF_MEMORY.
when 17.
RAISE DISK_FULL.
when 18.
RAISE DP_TIMEOUT.
when 19.
RAISE FILE_NOT_FOUND.
when 20.
RAISE DATAPROVIDER_EXCEPTION.
when 21.
RAISE CONTROL_FLUSH_ERROR.
when OTHERS.
RAISE UNKNOWN_ERROR.
endcase.
ENDIF.

endmethod.
Bright4.5
ForumUser
 
Beiträge: 75
Registriert: 17.08.2018, 18:23
Dank erhalten: 0 mal
Ich bin: Entwickler/in

Re: interne Tabelle als CSV-Datei auf Festplatte speichern.

Beitragvon Bright4.5 » 10.10.2018, 12:36

okay ich möchte meine interne Tabelle gt_ausgabe ausgeben. Den Pfad habe ich in die Variable filepath gepackt. Kann mir jemand mit den Beispielen am besten weiterhelfen? Ich bin hier gerade ziemlich am verzeweifeln. :/
Bright4.5
ForumUser
 
Beiträge: 75
Registriert: 17.08.2018, 18:23
Dank erhalten: 0 mal
Ich bin: Entwickler/in

Re: interne Tabelle als CSV-Datei auf Festplatte speichern.

Beitragvon edwin » 10.10.2018, 13:02

z.b das
Code: Alles auswählen
  DATA data_table           TYPE TABLE OF t100.
  DATA i_tab_converted_data TYPE  truxs_t_text_data.
  DATA outfile              TYPE string.

  SELECT * FROM t100 UP TO 100 ROWS
           INTO CORRESPONDING FIELDS OF TABLE @data_table.

  CALL FUNCTION 'SAP_CONVERT_TO_CSV_FORMAT'
    EXPORTING
      i_field_seperator    = ';'
    TABLES
      i_tab_sap_data       = data_table
    CHANGING
      i_tab_converted_data = i_tab_converted_data
    EXCEPTIONS
      conversion_failed    = 1.

  outfile = 'c:\temp\test.csv'.

  cl_gui_frontend_services=>gui_download(
    EXPORTING
      filename                  = outfile
    CHANGING
      data_tab                  = i_tab_converted_data
    EXCEPTIONS
      file_write_error          = 1
      no_batch                  = 2
      gui_refuse_filetransfer   = 3
      invalid_type              = 4
      no_authority              = 5
      unknown_error             = 6
      header_not_allowed        = 7
      separator_not_allowed     = 8
      filesize_not_allowed      = 9
      header_too_long           = 10
      dp_error_create           = 11
      dp_error_send             = 12
      dp_error_write            = 13
      unknown_dp_error          = 14
      access_denied             = 15
      dp_out_of_memory          = 16
      disk_full                 = 17
      dp_timeout                = 18
      file_not_found            = 19
      dataprovider_exception    = 20
      control_flush_error       = 21
      not_supported_by_gui      = 22
      error_no_gui              = 23
      OTHERS                    = 24 ).
  IF sy-subrc <> 0.
*   Implement suitable error handling here
  ENDIF.
 

/Edwin
edwin
Specialist
 
Beiträge: 228
Registriert: 27.02.2007, 17:15
Wohnort: Ludwigsburg
Dank erhalten: 26 mal
Ich bin: Freiberufler/in

Re: interne Tabelle als CSV-Datei auf Festplatte speichern.

Beitragvon Bright4.5 » 11.10.2018, 09:30

Jetzt hat es endlich funktioniert. Super. Vielen Dank :)
Bright4.5
ForumUser
 
Beiträge: 75
Registriert: 17.08.2018, 18:23
Dank erhalten: 0 mal
Ich bin: Entwickler/in

Re: interne Tabelle als CSV-Datei auf Festplatte speichern.

Beitragvon Bright4.5 » 11.10.2018, 09:39

Wie könnte ich den die interne Tabelle als CSV-Datei noch als E-Mail versenden?

Hat da jemand ne Idee?
Bright4.5
ForumUser
 
Beiträge: 75
Registriert: 17.08.2018, 18:23
Dank erhalten: 0 mal
Ich bin: Entwickler/in

Re: interne Tabelle als CSV-Datei auf Festplatte speichern.

Beitragvon Legxis » 12.10.2018, 09:56

Das könntest du z.B. mit dem Fuba SO_NEW_DOCUMENT_ATT_SEND_API1 oder der Klasse BCS machen. Meiner Meinung nach ist BCS übersichtlicher. Sieht dann so oder so ähnlich aus:

Code: Alles auswählen
DATA: gc_subject       TYPE so_obj_des  VALUE 'E-Mail Versand mit der Klasse CL_BCS',
      gc_raw           TYPE char03      VALUE 'RAW',
      gv_sent_to_all   TYPE os_boolean,
      gv_email         TYPE adr6-smtp_addr,
      gv_text          TYPE bcsy_text,
      binary_content   TYPE solix_tab,
      size             TYPE so_obj_len,
      gr_send_request  TYPE REF TO cl_bcs,
      gr_bcs_exception TYPE REF TO cx_bcs,
      gr_recipient     TYPE REF TO if_recipient_bcs,
      gr_sender        TYPE REF TO cl_sapuser_bcs,
      gr_document      TYPE REF TO cl_document_bcs.

DATA: i_tab_converted_data TYPE c length 255,
      gv_string TYPE string.

* CSV in String umformen
i_tab_converted_data = 'Irgendein;Text;steht;hier;in;CSV'.
gv_string = i_tab_converted_data.

TRY.

*   Send Request erstellen
    gr_send_request = cl_bcs=>create_persistent( ).

*   Sender:
    gr_sender = cl_sapuser_bcs=>create( sy-uname ).
   
*   Sender zum Request hinzufügen
    CALL METHOD gr_send_request->set_sender
      EXPORTING
        i_sender = gr_sender.

*   Empfänger
    gv_email = 'test@test.de'.
    gr_recipient = cl_cam_address_bcs=>create_internet_address( gv_email ).
   
*   Empfänger zum Request hinzufügen
    CALL METHOD gr_send_request->add_recipient
      EXPORTING
        i_recipient = gr_recipient
        i_express   = 'X'.

*   E-Mail Body
    APPEND 'Mailversand-Beispiel' TO gv_text.
    gr_document = cl_document_bcs=>create_document(
    i_type    = gc_raw
    i_text    = gv_text
    i_length  = '12'
    i_subject = gc_subject ).

*   Body anhängen
    CALL METHOD gr_send_request->set_document( gr_document ).

*   String (CSV Inhalt) umformen, um es als Anhang zu versenden
    cl_bcs_convert=>string_to_solix(
          EXPORTING
            iv_string   = gv_string
            iv_codepage = '4103'
            iv_add_bom  = 'X'
          IMPORTING
            et_solix  = binary_content
            ev_size   = size ).

*   E-Mail Anhang
    CALL METHOD gr_document->add_attachment
      EXPORTING
        i_attachment_type    = 'CSV'
        i_attachment_subject = 'TEST.CSV'
        i_attachment_size    = size
        i_att_content_hex    = binary_content.

*   E-Mail senden
    CALL METHOD gr_send_request->send(
    EXPORTING
      i_with_error_screen = 'X'
      RECEIVING
      result              = gv_sent_to_all ).

    IF gv_sent_to_all = 'X'.
      WRITE 'E-Mail erfolgreich versendet!'.
    ENDIF.

*   wird benötigt, um Mail zu versenden
    COMMIT WORK.

* Ausnahmebehandlung
  CATCH cx_bcs INTO gr_bcs_exception.
    WRITE:
    'Error vom Typ: ',
    gr_bcs_exception->error_type.

ENDTRY.

Dazu findet man auch Guides online, wie z.B. hier: http://www.cadaxo.com/high-class-development/abap-klasse-cl_bcs-mailversand-aus-abap/
Ich bin Neuling und für jede Hilfe, Kritik, diverse Programmverbesserungen/-optimierung und schöne Codebeispiele dankbar^^
( SAP ECC 6.0, NetWeaver 7.0, ohne unicode, ohne support/enhancement packages )
Legxis
Specialist
 
Beiträge: 109
Registriert: 12.01.2018, 08:59
Wohnort: Köln
Dank erhalten: 17 mal
Ich bin: Student/in


Zurück zu ABAP® für Anfänger

  Aktuelle Beiträge   
Sachkonto für FI Rechnung in idoc übermittel
vor 15 Stunden von uibig 0 Antw.
Anlagenmigration Export
Gestern von verzweifelt 1 Antw.
SFP - PDF Datenbindung
Gestern von a-dead-trousers 2 Antw.
Protected Attribut füttern
vor 4 Tagen von Tommy Nightmare 3 Antw.
gelöst Problem bei der Tree-Darstellu ng einer Hierarchie
Gestern von khb 3 Antw.

  Ähnliche Beiträge beta
Interne Tabelle als Excel-Datei speichern
28.08.2018, 12:01 von ralf.wenzel 24 Antw.
Excel Datei Lesen und in sap Tabelle speichern
14.11.2007, 15:48 von amjahid 8 Antw.
Parameter in interne Tabelle speichern
18.12.2015, 11:41 von ralf.wenzel 3 Antw.
PDF Datei einlesen in eine Tabelle speichern und auslesen
17.03.2008, 17:03 von ewx 1 Antw.
Daten zeilenweise in interne Tabelle speichern
19.09.2005, 11:17 von ereglam 1 Antw.

 

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder