ALV Anzeige Variante -> Fieldcat erstellen für Download

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV

ALV Anzeige Variante -> Fieldcat erstellen für Download

Postby Eveline5007 » Fri Dec 19, 2014 6:43 pm

Moin moin liebes Forum,

Ich habe eine ALV-Grid - Liste mit den Standardbausteinen erstellt.

gc_structure_alv = ZBI_ALV_KOPF -> Struktur unter SE11 angelegt.
Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
  1. ** Feldkatalog aus DDIC-Struktur aufbauen
  2.     call function 'REUSE_ALV_FIELDCATALOG_MERGE'
  3.       exporting
  4.         i_structure_name       = gc_structure_alv
  5.       changing
  6.         ct_fieldcat            = gt_fieldcat
  7.       exceptions
  8.         inconsistent_interface = 1
  9.         program_error          = 2
  10.         others                 = 3.
  11.  
GeSHi ©

Das sind ja alle Felder/Spalten...
und dann der ALV-Grid aufruf...
Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
  1. call function 'REUSE_ALV_GRID_DISPLAY'
  2.         exporting
  3. *     I_INTERFACE_CHECK                =  ' '
  4. *     I_BYPASSING_BUFFER               =  ' '
  5. *     I_BUFFER_ACTIVE                  =  ' '
  6.          i_callback_program               =  prog_lief
  7. *     I_CALLBACK_PF_STATUS_SET         =  ' '
  8. *     I_CALLBACK_USER_COMMAND          =  ' '
  9. *     I_CALLBACK_TOP_OF_PAGE           =  ' '
  10. *     I_CALLBACK_HTML_TOP_OF_PAGE      =  ' '
  11. *     I_CALLBACK_HTML_END_OF_LIST      =  ' '
  12.           i_structure_name                 = gc_structure_alv
  13. *     I_BACKGROUND_ID                  = ' '
  14.          i_grid_title                     = text-098
  15. *     I_GRID_SETTINGS                  =
  16.         is_layout                        =   gs_layout
  17.      it_fieldcat                      =   gt_fieldcat
  18. *     IT_EXCLUDING                     =
  19. *     IT_SPECIAL_GROUPS                =
  20. *     IT_SORT                          =
  21. *     IT_FILTER                        =
  22. *     IS_SEL_HIDE                      =
  23. *     I_DEFAULT                        =  'X'
  24.          i_save                           =  'A'
  25.          is_variant                       =  gs_variant
  26. *     IT_EVENTS                        =
  27. *     IT_EVENT_EXIT                    =
  28. *     IS_PRINT                         =
  29. *     IS_REPREP_ID                     =
  30. *     I_SCREEN_START_COLUMN            =  0
  31. *     I_SCREEN_START_LINE              =  0
  32. *     I_SCREEN_END_COLUMN              =  0
  33. *     I_SCREEN_END_LINE                =  0
  34. *     IT_ALV_GRAPHICS                  =
  35. *     IT_HYPERLINK                     =
  36. *     IT_ADD_FIELDCAT                  =
  37. *     IT_EXCEPT_QINFO                  =
  38. *     I_HTML_HEIGHT_TOP                =
  39. *     I_HTML_HEIGHT_END                =
  40. *     IMPORTING
  41. *     E_EXIT_CAUSED_BY_CALLER          =
  42. *     ES_EXIT_CAUSED_BY_USER           =
  43.       tables
  44.           t_outtab                         =  ko_tab_alv.
  45. * EXCEPTION
  46. *     PROGRAM_ERROR                    =  1
  47. *     OTHERS                           =  2
  48.     .
  49.     if sy-subrc                          <> 0.
  50. *   MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
  51. *         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  52.     endif.
  53.  
GeSHi ©

alles super...
Der User hat seine Anzeigevariante angelegt.
Jetzt habe ich folgende Aufgabe:
Für einen CSV-Download soll nicht der ALV-Grid Dialog(für Statusberichte mit gaaannnzzz vielen Zeilen nach Excel dauer das zu lang) genommen werden, sondern folgendes:
Im Selektionsbild:
1. Haken setzen für Download als CSV -> bekomme ich hin...
2. und ein Feld zur Auswahl der Anzeigevariante -> bekomme ich auch noch hin, denke ich...
vielleicht kennt ihr das aus FI-Auswertungen(z.B. Belegjounarl)
3. Pfad wo die Datei abgelegt werden soll -> bekomme ich auch hin

Meine Vorstellung: das Programm läuft im Grunde bis kurz vor den ALV_Grid Baustein(alle Daten zusammen) und biegt dann in den Download(bekomme ich auch hin) ab.

Meine Frage:
wie bekomme ich zur Anzeigevariante die angezeigten Spalten her?
habe schon unter der Funktionsgruppe SKBS und im Paket SLIS gesucht und noch nichts schlüssiges gefunden.
Auch habe ich schon im Debugger verfolgen wollen, was da geht... auch nichts gefunden... bzw. war das etwas kryptisch..

Wenn Ihr mir da ein paar Tips geben könnt?
Habt vielen Dank euch eine schöne Weihnachten, guten Rutsch und ein noch besseres Jahr 2015...
Eveline5007
..
..
 
Posts: 21
Joined: Wed May 07, 2008 8:59 pm

Re: ALV Anzeige Variante -> Fieldcat erstellen für Download

Postby Alma59 » Mon Dec 22, 2014 10:21 pm

Hallo,

ich habe frei und kein System zur Hand deswegen kann ich dir den Fuba nicht nennen .
Aber das geht in dem du den Fuba suchst zum Laden der ALV Variante und du daraus eine dynamische Tabelle mit Hilfe des Feldkatalogs aufbaust bzw.. die Felder direkt als CSV ausgibst.

VG

Am 2.1 kann ich es dir sagen :-)
Alma59
...
...
 
Posts: 134
Joined: Tue Jul 08, 2008 10:35 am

Re: ALV Anzeige Variante -> Fieldcat erstellen für Download

Postby Eveline5007 » Tue Dec 23, 2014 12:35 am

Moin Moin,
danke für deine Rückmeldung. :D
Dann erst mal schöne Weihnachten und einen Guten Rusch..

Hoffentlich gehen die Raketen bei dem Mistwetter an..
Eveline5007
..
..
 
Posts: 21
Joined: Wed May 07, 2008 8:59 pm

Re: ALV Anzeige Variante -> Fieldcat erstellen für Download

Postby Alma59 » Fri Jan 02, 2015 12:40 pm

Um die Felder der Anzeigevariante auszulesen nimmst du den FUBA LVC_VARIANT_SELECT:

ls_variant_alv-report = sy-repid.
ls_variant_alv-variant = pa_vari. -> Die selektierte Variante

CALL FUNCTION 'LVC_VARIANT_SELECT'
EXPORTING
i_dialog = ' '
it_default_fieldcat = lt_fieldcat_db[] "Alle Felder deiner Struktur ZBI_ALV_KOPF übergeben
IMPORTING
e_exit = lv_exit
et_fieldcat = lt_fieldcat
et_sort = lt_sort
et_filter = lt_filter
CHANGING
cs_variant = ls_variant_alv
EXCEPTIONS
wrong_input = 1
fc_not_complete = 2
not_found = 3
program_error = 4
OTHERS = 5.

CHECK sy-subrc EQ 0.

* Hier kann man dann alle Felder welche ausgeblendet wurden rausschmeißen !
DELETE xt_fieldcat WHERE no_out EQ gc_true.

Je nachdem wie du deine Daten nun einlesen willst, kannst du z.B. über den nun erstellten Feldkatalog eine dynamische Tabelle aufbauen
( CALL METHOD cl_alv_table_create=>create_dynamic_table) und mit Assign dann deine DB-Felder einstellen oder du baust dir schon beim einlesen die Spalten dynmaisch für den Select auf.

VG

Und ein frohes neues Jahr
Alma59
...
...
 
Posts: 134
Joined: Tue Jul 08, 2008 10:35 am

Re: ALV Anzeige Variante -> Fieldcat erstellen für Download

Postby Eveline5007 » Mon Jan 05, 2015 9:19 am

Frohes und gesundes neues Jahr 2015...
Hoffentlich habt ihr alle die Feiertage gut verlebt...

@abap4711: Danke für die ausführlichen Infos. :D
Werde ich gleich mal ausprobieren... und dann eine Rückmeldung geben
Eveline5007
..
..
 
Posts: 21
Joined: Wed May 07, 2008 8:59 pm

Re: ALV Anzeige Variante -> Fieldcat erstellen für Download

Postby Eveline5007 » Thu Jan 08, 2015 5:02 pm

Moin Moin,
vielen Dank für die Unterstützung, ich habe es soweit hinbekommen. :D
Mit dem ASSIGN stehe ich aber auf dem Kriegsfuß. :oops:
Was habe ich bisher gemacht:
mit
call method cl_alv_table_create=>create_dynamic_table
exporting
* i_style_table =
it_fieldcatalog = erg_fielcat
* i_length_in_byte =
importing
ep_table = gr_tab
* e_style_fname =
* exceptions
* generate_subpool_dir_full = 1
* others = 2
.
die tabelle erzeugt...
Inhalt Debugger: GR_TAB.jpg
Detail gr_tab: GR_TAB_DET.jpg
gr_tab ist so definiert-> Data: gr_tab type ref to data.


Die Daten einer ITAB müssen in diese gr_tab:
ITAB-Definition...
data: lo_tab_alv like table of wa_alv with header line.
Die lo_tab_alv Tabelle hat insgesamt 82 Felder/Spalten und 70000 Zeilen... die ja normalerweise in einer ALV-Grid angezeigt werden.
Es sollen ja nur die 4 SPalten der gr_tab gefüllt werden... und daraus der Download gemacht werden...
Wie bekomme ich jetzt die Inhalte der ITAB in die dynamisch erstellte Tabelle? :roll:
Durch Anzeigevarianten kann ja die gr_tab immer anders aussehen...

Danke für eure Hilfe...
Eveline5007
..
..
 
Posts: 21
Joined: Wed May 07, 2008 8:59 pm

Re: ALV Anzeige Variante -> Fieldcat erstellen für Download

Postby Eveline5007 » Thu Jan 08, 2015 7:12 pm

Udate:
ich habe die Daten in einer internen Tabelle: :D
Das habe ich gemacht:
Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
  1. field-symbols <tab> type standard table.
  2. field-symbols <looptab> type any.
  3. field-symbols <watab> type any.
  4.  
  5. call method cl_alv_table_create=>create_dynamic_table
  6.   exporting
  7. *    i_style_table             =
  8.     it_fieldcatalog           = erg_fielcat
  9. *    i_length_in_byte          =
  10.   importing
  11.     ep_table                  = gr_tab
  12. *    e_style_fname             =
  13. *  exceptions
  14. *    generate_subpool_dir_full = 1
  15. *    others                    = 2
  16.         .
  17. if sy-subrc <> 0.
  18. * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
  19. *            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  20.  
  21. assign gr_tab->* to <tab>.
  22. assign local copy of initial line of <tab> to <watab>.
  23.  
  24. LOOP AT lo_tab_alv ASSIGNING <looptab>.
  25. move-corresponding <looptab> to <watab>.
  26. append <watab> to <tab>.
  27.  
GeSHi ©

Damit habe ich die Inhalte der lo_tab_alv ITab in der <tab> mit den 4 Spalten...
TAB_gefüllt.jpg
Inhalt nach dem loop
(28.71 KiB) Noch nie heruntergeladen
So und jetzt noch den Download einbauen und dann mal sehen...
Danke und Grüße so weit Udo
Eveline5007
..
..
 
Posts: 21
Joined: Wed May 07, 2008 8:59 pm

Re: ALV Anzeige Variante -> Fieldcat erstellen für Download

Postby Eveline5007 » Fri Jan 09, 2015 10:38 am

Update 09.01.2015:
für den Download im Hintergrund nehme ich:
Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
  1. call function 'GUI_DOWNLOAD'
  2.     exporting
  3. *   BIN_FILESIZE                    =
  4.       filename                        = filestring
  5.       filetype                        = 'ASC'
  6.       append                          = ' '
  7. *    WRITE_FIELD_SEPARATOR           = '|'
  8. *   HEADER                          = '00'
  9. *   TRUNC_TRAILING_BLANKS           = ' '
  10. *   WRITE_LF                        = 'X'
  11. *   COL_SELECT                      = ' '
  12. *   COL_SELECT_MASK                 = ' '
  13. *   DAT_MODE                        = ' '
  14. *   CONFIRM_OVERWRITE               = ' '
  15.       no_auth_check                   = 'X'
  16. *   CODEPAGE                        = ' '
  17. *   IGNORE_CERR                     = ABAP_TRUE
  18. *   REPLACEMENT                     = '#'
  19. *   WRITE_BOM                       = ' '
  20. *   TRUNC_TRAILING_BLANKS_EOL       = 'X'
  21. * IMPORTING
  22. *   FILELENGTH                      =
  23.     tables
  24.       data_tab                        = <tab>
  25. * EXCEPTIONS
  26. *   FILE_WRITE_ERROR                = 1
  27. *   NO_BATCH                        = 2
  28. *   GUI_REFUSE_FILETRANSFER         = 3
  29. *   INVALID_TYPE                    = 4
  30. *   NO_AUTHORITY                    = 5
  31. *   UNKNOWN_ERROR                   = 6
  32. *   HEADER_NOT_ALLOWED              = 7
  33. *   SEPARATOR_NOT_ALLOWED           = 8
  34. *   FILESIZE_NOT_ALLOWED            = 9
  35. *   HEADER_TOO_LONG                 = 10
  36. *   DP_ERROR_CREATE                 = 11
  37. *   DP_ERROR_SEND                   = 12
  38. *   DP_ERROR_WRITE                  = 13
  39. *   UNKNOWN_DP_ERROR                = 14
  40. *   ACCESS_DENIED                   = 15
  41. *   DP_OUT_OF_MEMORY                = 16
  42. *   DISK_FULL                       = 17
  43. *   DP_TIMEOUT                      = 18
  44. *   FILE_NOT_FOUND                  = 19
  45. *   DATAPROVIDER_EXCEPTION          = 20
  46. *   CONTROL_FLUSH_ERROR             = 21
  47. *   OTHERS                          = 22
  48.             .
  49.   if sy-subrc <> 0.
  50. * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
  51. *         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  52.   endif.
  53.  
GeSHi ©


Das Ergebnis ist aber nicht schön, da die <tab> so übernomnmen wird und es keine Trennzeichen gibt...
Also konvertiere ich vorher noch mal und benötige das Trennzeichen '|', weil in den Texten manchmal das ';' vorkommen kann:
Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
  1. *hier kommt ein File mit '|' raus
  2. *führende nullen werden geschrieben
  3. call function 'SAP_CONVERT_TO_TEX_FORMAT'
  4.   exporting
  5.     i_field_seperator          = '|'
  6. *   I_LINE_HEADER              =
  7. *   I_FILENAME                 =
  8. *   I_APPL_KEEP                = ' '
  9.     i_tab_sap_data             = <tab>
  10.  CHANGING
  11.    I_TAB_CONVERTED_DATA       = p_it_xxx1
  12. * EXCEPTIONS
  13. *   CONVERSION_FAILED          = 1
  14. *   OTHERS                     = 2
  15.           .
  16. if sy-subrc <> 0.
  17. * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
  18. *         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  19.  
  20. call function 'GUI_DOWNLOAD'
  21.     exporting
  22. *   BIN_FILESIZE                    =
  23.       filename                        = filestring
  24.       filetype                        = 'ASC'
  25.       append                          = ' '
  26. *    WRITE_FIELD_SEPARATOR           = ''
  27. *   HEADER                          = '00'
  28. *   TRUNC_TRAILING_BLANKS           = ' '
  29. *   WRITE_LF                        = 'X'
  30. *   COL_SELECT                      = ' '
  31. *   COL_SELECT_MASK                 = ' '
  32. *   DAT_MODE                        = ' '
  33. *   CONFIRM_OVERWRITE               = ' '
  34.       no_auth_check                   = 'X'
  35. *   CODEPAGE                        = ' '
  36. *   IGNORE_CERR                     = ABAP_TRUE
  37. *   REPLACEMENT                     = '#'
  38. *   WRITE_BOM                       = ' '
  39. *   TRUNC_TRAILING_BLANKS_EOL       = 'X'
  40. * IMPORTING
  41. *   FILELENGTH                      =
  42.     tables
  43.       data_tab                        = p_it_xxx1
  44. * EXCEPTIONS
  45. *   FILE_WRITE_ERROR                = 1
  46. *   NO_BATCH                        = 2
  47. *   GUI_REFUSE_FILETRANSFER         = 3
  48. *   INVALID_TYPE                    = 4
  49. *   NO_AUTHORITY                    = 5
  50. *   UNKNOWN_ERROR                   = 6
  51. *   HEADER_NOT_ALLOWED              = 7
  52. *   SEPARATOR_NOT_ALLOWED           = 8
  53. *   FILESIZE_NOT_ALLOWED            = 9
  54. *   HEADER_TOO_LONG                 = 10
  55. *   DP_ERROR_CREATE                 = 11
  56. *   DP_ERROR_SEND                   = 12
  57. *   DP_ERROR_WRITE                  = 13
  58. *   UNKNOWN_DP_ERROR                = 14
  59. *   ACCESS_DENIED                   = 15
  60. *   DP_OUT_OF_MEMORY                = 16
  61. *   DISK_FULL                       = 17
  62. *   DP_TIMEOUT                      = 18
  63. *   FILE_NOT_FOUND                  = 19
  64. *   DATAPROVIDER_EXCEPTION          = 20
  65. *   CONTROL_FLUSH_ERROR             = 21
  66. *   OTHERS                          = 22
  67.             .
  68.   if sy-subrc <> 0.
  69. * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
  70. *         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  71.   endif.
  72.  
GeSHi ©

und erhalte eine Download-Datei...
Der Inhalt ist jetzt durch | getrennt und ohne Überschriften.
Für die Weiterverarbeitung bei meinen Kollegen so auch gut.
Allerdings werden alle Inhalte der Felder geschrieben.

Beispiel:
AUFNR = 12 stellig CHAR
VORNR = 4 stellig CHAR
in der Datei:
000005000040|0070|

Meine Frage:
Gibt es eine FuBa, der eine Konvertierung á la "Write"-Befehl macht?

Ergänfende Info:
ich spiele gerade mit dem FuBa.
'SAP_CONVERT_TO_XLS_FORMAT'
damit kann man auch eine kleines Excel-Inplace(Datei->Speichern unter) aufmachen
oder wenn nicht gesetzt eine Datei ablegen...
Nach dem Ablegen und dann manuellen öffnen in Excel bekomme ich den Fehler: Datei hat ein ungültiges Dateiformat.
@all: hat jemnad da vielleicht noch eine Idee?

Soweit erstmal und vielen Dank.
Eveline5007
..
..
 
Posts: 21
Joined: Wed May 07, 2008 8:59 pm

Re: ALV Anzeige Variante -> Fieldcat erstellen für Download

Postby Tron » Fri Jan 09, 2015 12:49 pm

Moin Udo.
udobutzen hat geschrieben:Gibt es eine FuBa, der eine Konvertierung á la "Write"-Befehl macht?


Nimm doch RFC_READ_TABLE für die Selection von DB Tabellen inkl. der Möglichkeit Auswahl einzelner Felder und Separator zwischen den Feldern.
Falls es um Interne Tabellen geht, kannst Du ja "ein wenig" aus dem Baustein coding kopieren :wink:
Das Prinzip:
Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
  1. *   copy all relevant fields into DATA (output) table
  2.       LOOP AT FIELDS_INT.
  3.         IF FIELDS_INT-TYPE = 'P'.
  4.         ASSIGN COMPONENT FIELDS_INT-FIELDNAME
  5.             OF STRUCTURE <WA> TO <COMP>
  6.             TYPE     FIELDS_INT-TYPE
  7.             DECIMALS FIELDS_INT-DECIMALS.
  8.         ELSE.
  9.         ASSIGN COMPONENT FIELDS_INT-FIELDNAME
  10.             OF STRUCTURE <WA> TO <COMP>
  11.             TYPE     FIELDS_INT-TYPE.
  12.         ENDIF.
  13.         MOVE <COMP> TO
  14.             <D>+FIELDS_INT-OFFSET_DST(FIELDS_INT-LENGTH_DST).
  15.       ENDLOOP.
  16. *   end of loop at FIELDS_INT
  17.       APPEND DATA.
  18.  
GeSHi ©

lg Jens

PS: Ist bestimmt interessant für Dich
Komplette ITAB zur Laufzeit erstellen :
http://www.abapforum.com/forum/viewtopi ... 61&p=57285
Tron
.....
.....
 
Posts: 1112
Joined: Sat Aug 04, 2007 10:21 pm

Re: ALV Anzeige Variante -> Fieldcat erstellen für Download

Postby Eveline5007 » Fri Jan 09, 2015 2:34 pm

Danke Jens für den Hinweis. :)
ich muss allerdings die Daten aufbereiten, bevor die der Kollege bekommt.
Es ist eine Vorstufe zu einem Statusbericht, der im moment nur in Excel erzeugt werden soll.
Wenn der Excelbericht stabil und abgetimmt ist, kommt das Teil bestimmt auch ins SAP.

Für das dynamuische Geraffel hilft es auf jeden Fall.

An alle in HH, ich schaue gerade die Elbe runter...
Die nächsten dunklen Wolken sind auf dem Weg...
Schnell zur Bahn... und schönes WE :D
Eveline5007
..
..
 
Posts: 21
Joined: Wed May 07, 2008 8:59 pm

Next

Return to ABAP® Core

Who is online

Users browsing this forum: No registered users and 22 guests