Spannend war doch eine relativ kleine Anforderung. Ein Report besitzt eine ALV-Ausgabe und soll jetzt zusätzlich die Möglichkeit bieten diese Daten im Hintergrund als CSV-Datei abzulegen. Das geht relativ einfach wenn man weiß wie z.B. über die Klasse cl_salv_bs_lex.
Gerade in Fällen wo man den Feldkatalog in das CSV-File mitnehmen will ist das natürlich sehr komfortabel.
cl_salv_table=>factory(
IMPORTING
r_salv_table = DATA(lo_table)
CHANGING
t_table = lt_export
).
DATA(lt_fieldcatalog) = cl_salv_controller_metadata=>get_lvc_fieldcatalog(
r_columns = lo_table->get_columns( )
r_aggregations = lo_table->get_aggregations( ) ).
DATA(lo_table_res) = cl_salv_ex_util=>factory_result_data_table( r_data = REF #( lt_export )
t_fieldcatalog = lt_fieldcatalog ).
"Umwandlung CSV
cl_salv_bs_lex=>export_from_result_data_table(
EXPORTING
is_format = if_salv_bs_lex_format=>mc_format_csv
ir_result_data_table = lo_table_res
IMPORTING er_result_file = DATA(l_csv_xstring) ).
"Daten vorhanden
IF xstrlen( l_csv_xstring ) > 0.
l_pfad = p_pfad.
CALL FUNCTION 'AUTHORITY_CHECK_DATASET'
EXPORTING
activity = 'WRITE'
filename = l_pfad
EXCEPTIONS
no_authority = 1
activity_unknown = 2
OTHERS = 3.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE 'I' NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
OPEN DATASET l_pfad FOR OUTPUT IN BINARY MODE MESSAGE l_msg.
IF sy-subrc = 0.
TRANSFER l_csv_xstring TO l_pfad.
CLOSE DATASET l_pfad.
WRITE: 'Export erfolgt'.
ELSE.
WRITE: 'Pfad konnte nicht geöffnet werden'.
ENDIF.
ELSE.
WRITE: 'Keine Daten ermittelt = Kein Export'.
ENDIF.

Hallo,
vielen lieben Dank für den Code und schöne Grüße aus Österreich.
Ich habe den Code in mein bestehendes Programm implementiert, allerdings mit der Option entweder Listausgabe oder Excel Export.
Hier arbeite ich allerdings mit Layouts. In der Listausgabe berücksichtigt er mir das vorher im Parameter p_vari angegebene Layout, allerdings im Excel Export ignoriert er mir das Layout und gibt immer das DEFAULT Layout aus.
Hast du sowas schon mal gehabt und lösen können? Ich habe schon verschiedene Ansätze gehabt, allerdings keine hat funktioniert.
Würde mich über einen Austausch freuen.