ALV Feldkatalog automatisch generieren

Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV
21 Beiträge • Vorherige Seite 2 von 2 (current)
21 Beiträge Vorherige Seite 2 von 2 (current)

Re: ALV Feldkatalog automatisch generieren

Beitrag von jan.tschudy (ForumUser / 6 / 1 / 0 ) »
Hallo,
dasselbe Problem hatte ich auch schon und konnte es nahezu immer via folgendem Coding bewältigen:

Code: Alles auswählen.

data: lt_table type foo.
data: lt_fcat type lvc_t_fcat.

data: lo_columns      type ref to cl_salv_columns_table,
      lo_aggregations type ref to cl_salv_aggregations,
      lo_salv_table   type ref to cl_salv_table,
      lr_table        type ref to data.

field-symbols: <table> type standard table.

create data lr_table like lt_table.
assign lr_table->* to <table>.

try.
    cl_salv_table=>factory(
      exporting
        list_display = abap_false
      importing
        r_salv_table = lo_salv_table
      changing
        t_table      = <table> ).
  catch cx_salv_msg.
endtry.

* get columns object (raw fieldcatalog)
lo_columns  = lo_salv_table->get_columns( ).

* get aggregationss object (sorts)
lo_aggregations = lo_salv_table->get_aggregations( ).
lt_fcat =
  cl_salv_controller_metadata=>get_lvc_fieldcatalog(
    r_columns             = lo_columns
    r_aggregations        = lo_aggregations ).

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Re: ALV Feldkatalog automatisch generieren

Beitrag von Tron (Top Expert / 1327 / 35 / 332 ) »
OK Alex,
dann so:

Code: Alles auswählen.

    TYPES: BEGIN OF t_mara,
      matnr LIKE mara-matnr,
      ersda TYPE ersda,
      ernam LIKE mara-ernam,
      maktx TYPE maktx,
    END OF t_mara.

    DATA: t1 TYPE STANDARD TABLE OF t_mara WITH DEFAULT KEY.
 TYPE-POOLS: SYDES.

DATA      TD       TYPE SYDES_DESC.

DESCRIBE FIELD t1 INTO TD.

Die Ergebnisse findest Du in der itab TD-NAMES.

Beispiel für Ermittlung der Referenzen:

Code: Alles auswählen.

*&---------------------------------------------------------------------*
*& Report  ZDEBUG2                                                     *
*&                                                                     *
*&---------------------------------------------------------------------*
*&                                                                     *
*&                                                                     *
*&---------------------------------------------------------------------*

REPORT  zdebug3                                                     .
TYPE-POOLS: sydes.


TYPES: BEGIN OF titx,
      cx TYPE makt-spras,
      ax TYPE mara-matnr,
      bx TYPE makt-maktx,
END OF titx.

DATA itx TYPE TABLE OF titx WITH HEADER LINE.

DATA td TYPE sydes_desc.

DATA s_types TYPE sydes_typeinfo.
DATA s_names TYPE sydes_nameinfo.

DATA:
l_from TYPE i,
l_to TYPE i.


DESCRIBE FIELD itx INTO td.

*  BEGIN OF SYDES_TYPEINFO,
*    FROM             TYPE I,     " Index: first component
*    TO               TYPE I,     " Index: last component
*    BACK             TYPE I,     " Index: father entry
*    IDX_NAME         TYPE I,     " Index: component name
*    IDX_USER_TYPE    TYPE I,     " Index: type defined by TYPES
*    CONTEXT          TYPE C,     " Values from SYDES_CONTEXT
*    IDX_CONTEXT_NAME TYPE I,     " Index: name of the type context
*    IDX_EDIT_MASK    TYPE I,     " Index: edit mask
*    IDX_HELP_ID      TYPE I,     " Index: help-id
*    LENGTH           TYPE I,     " Internal length
*    OUTPUT_LENGTH    TYPE I,     " Length used in a WRITE-statement
*    DECIMALS         TYPE I,     " Decimals
*    TYPE             TYPE C,     " ABAP/4-type
*    TABLE_KIND       TYPE C,     " Kind of an internal table
*  END OF SYDES_TYPEINFO,

*  BEGIN OF SYDES_NAMEINFO,
*    CONTINUE     TYPE C,       " Continuation flag (* = continued)
*    NAME(15)     TYPE C,       " Name fragments
*  END OF SYDES_NAMEINFO,


READ TABLE td-types INTO s_types INDEX 1.
CHECK sy-subrc = 0.
l_from = s_types-from.
l_to = s_types-to.

LOOP AT td-types INTO s_types FROM l_from TO l_to.
  READ TABLE td-names INTO s_names INDEX s_types-idx_help_id.
  IF sy-subrc = 0.
    WRITE :/ s_names-name.
  ENDIF.
ENDLOOP.
viel Erfolg
gruß Jens
<:: XING-Gruppe Tricktresor::>
Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen –
Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

Re: ALV Feldkatalog automatisch generieren

Beitrag von Pinguincommander (ForumUser / 88 / 62 / 2 ) »
zum Abschluss des Themas hier der fertige Quellcode der für mich spitzenmäßig funktionier hat.
ls_structure ist die struktur welche in den Feldkatalog umgesetzt werden soll.

Code: Alles auswählen.

FORM create_fieldcat USING    ls_structure
                     CHANGING ls_fieldcat  TYPE lvc_s_fcat
                              lt_fieldcat  TYPE lvc_t_fcat.

* Deklarieren der Referenz ref_Structdescr
* sowie die Tabelle(lt_fields) die später die Feldbeschreibungen
* enthält.
  DATA: ref_structdescr TYPE REF TO cl_abap_structdescr,
        lt_fields       TYPE        ddfields.

* Deklaration eines Zählers um die Spaltenposition festzulegen.
  DATA: lv_col_i TYPE i VALUE 0.
* Feld Symbol für Loop...Assigning am Ende der Routine.
  FIELD-SYMBOLS: <fs_fields> TYPE LINE OF ddfields.

* Setzen der Referenz der Strukturbeschreibung anhand eines Downcasts
* des Rückgabewerts der methode describe_by_data der klasse
* cl_abap_structdescr der den Parameter p_data nutzt welcher
* die zu verwertende Struktur enthält.
  ref_structdescr ?= cl_abap_structdescr=>describe_by_data(
                                          p_data = ls_structure
                                          ).

* Die Methode der read_structdescr der Klasse cl_salv_data_descr
* um das Objekt auszuwerten und in eine Tabelle zu übertragen.
  CALL METHOD cl_salv_data_descr=>read_structdescr
    EXPORTING
      r_structdescr = ref_structdescr
    RECEIVING
      t_dfies       = lt_fields.

* Loop über die Feldbeschreibung um alle Daten in den Feldkatalog zu
* übertragen und evtl. mithilfe von If-Bedingungen sonderfälle zu
* steuern
  LOOP AT lt_fields ASSIGNING <fs_fields>.

*   Struktur leeren um Fehler zu vermeiden.
    CLEAR ls_fieldcat.

*   Zähler um 1 erhöhen um die Sortierung der Spalten zu ermöglichen
    ADD 1 TO lv_col_i.

*   Übertragen diverser Daten aus Strukturbeschreibung in Feldkatalog.
    ls_fieldcat-col_pos    = lv_col_i.               "spaltenposition
    ls_fieldcat-fieldname  = <fs_fields>-fieldname.  "Feldname
    ls_fieldcat-tabname    = <fs_fields>-tabname.    "LVC-Tabname ?
    ls_fieldcat-scrtext_l  = <fs_fields>-scrtext_l.  "feldbezeichner L
    ls_fieldcat-scrtext_m  = <fs_fields>-scrtext_m.  "feldbezeichner M
    ls_fieldcat-scrtext_s  = <fs_fields>-scrtext_s.  "feldbezeichner s
    ls_fieldcat-ref_field  = <fs_fields>-reffield.   "referenzfeld
    ls_fieldcat-ref_table  = <fs_fields>-reftable.   "referenztabelle
    ls_fieldcat-intlen     = <fs_fields>-intlen.     "interne länge
    ls_fieldcat-inttype    = <fs_fields>-inttype.    "interner datentyp
    ls_fieldcat-lowercase  = <fs_fields>-lowercase.  "kleinschreiben j/n
    ls_fieldcat-outputlen  = <fs_fields>-outputlen. "ausgabelänge
    ls_fieldcat-decimals_o = <fs_fields>-decimals. "ausgabedezimalstelln
    ls_fieldcat-convexit   = <fs_fields>-convexit. "konvertierunlsroutin
    ls_fieldcat-decimals   = <fs_fields>-decimals. "anzahl dezimalstelle
    ls_fieldcat-reptext    = <fs_fields>-reptext.  "
    ls_fieldcat-rollname   = <fs_fields>-rollname. "Datenelement für F1
    ls_fieldcat-domname    = <fs_fields>-domname.   "Name der Domäne
    ls_fieldcat-datatype   = <fs_fields>-datatype.  "DictionaryDatentyp
    ls_fieldcat-mac        = <fs_fields>-mac.      "suchhilfe j/n
    ls_fieldcat-f4availabl = <fs_fields>-f4availabl. "F4 hilfe j/n
    ls_fieldcat-checktable = <fs_fields>-checktable. "?????
    ls_fieldcat-col_opt    = abap_false.       "Spaltenoptimierung *X/''.,
    
    append ls_fieldcat to lt_fieldcat.
  ENDLOOP.
ENDFORM.
Zuletzt geändert von Pinguincommander am 19.06.2013 14:25, insgesamt 1-mal geändert.

Re: ALV Feldkatalog automatisch generieren

Beitrag von Alexander D. (Expert / 682 / 30 / 84 ) »
hallo Pinguincommander,

danke für das Beispiel. Ich kann es leider nicht testen, es scheint auf einem 4.7 System nicht lauffähig zu sein. Eine Frage hätte ich doch noch dazu: kann es sein, dass hier noch eine Zeile fehlt? Wofür brauchst du ls_fieldcat im CHANGING und wo greifst du auf lt_fieldcat zu? Vom Gefühl her hätte ich am Ende des Loops etwas in der Art von APPEND ls_fieldcat to lt_fieldcat erwartet...
schöne Grüße
Alexander

ECC 6.0 EHP 7

Re: ALV Feldkatalog automatisch generieren

Beitrag von a-dead-trousers (Top Expert / 4419 / 224 / 1189 ) »
Alexander D. hat geschrieben:Ich kann es leider nicht testen, es scheint auf einem 4.7 System nicht lauffähig zu sein.
Jepp RTTI gibts glaub ich erst ab Basis 6.0 und RTTC ab Basis 7.0
Und den SALV gibts auch erst glaub ich ab 7.0

Unter 4.7 müsstest du dich mit dem DESCRIBE behelfen:

Code: Alles auswählen.

do.
  assign component sy-index of structure ls_structure to <la_field>.
  if sy-subrc ne 0.
    exit.
  endif.
  describe field <la_field> type ld_type length ld_length.
enddo.
Was nicht geht ist das Auslesen der DDIC Informationen für die Spaltenüberschriften im ALV usw.

lg ADT
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: ALV Feldkatalog automatisch generieren

Beitrag von Pinguincommander (ForumUser / 88 / 62 / 2 ) »
Alexander D. hat geschrieben:hallo Pinguincommander,

danke für das Beispiel. Ich kann es leider nicht testen, es scheint auf einem 4.7 System nicht lauffähig zu sein. Eine Frage hätte ich doch noch dazu: kann es sein, dass hier noch eine Zeile fehlt? Wofür brauchst du ls_fieldcat im CHANGING und wo greifst du auf lt_fieldcat zu? Vom Gefühl her hätte ich am Ende des Loops etwas in der Art von APPEND ls_fieldcat to lt_fieldcat erwartet...
Hey ja du hast recht,
das append ist bei copy & paste untergegangen weil ich in meiner loop noch ein paar felder als tech-feld markiert habe.
und ja man kann ls_fieldcat auch in diesem im form erst deklarieren, aber ich deklariere menie Variable alle immer in einem extra include.

Vergleichbare Themen

1
Antw.
3899
Views
17
Antw.
22546
Views
Feldkatalog für ALV
von Kerstin » 17.08.2007 10:03 • Verfasst in ABAP Objects®
16
Antw.
4727
Views
Feldkatalog -> Spaltenüberschriften
von Bugfix13 » 06.08.2014 08:43 • Verfasst in ABAP® für Anfänger
7
Antw.
4942
Views
ALV: Refresh Feldkatalog
von khr » 27.09.2013 10:06 • Verfasst in ABAP® Core
3
Antw.
4438
Views
Alternativen zu Feldkatalog
von newbie007 » 28.11.2011 00:08 • Verfasst in ABAP® für Anfänger

Über diesen Beitrag


Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Aktuelle Forenbeiträge

Hilfe zum FB MATERIAL_MAINTAIN_DARK
Gestern von black_adept gelöst 8 / 1775
HR-Entgeltnachweis
vor 2 Tagen von ChrisB 4 / 2319

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.

Aktuelle Forenbeiträge

Hilfe zum FB MATERIAL_MAINTAIN_DARK
Gestern von black_adept gelöst 8 / 1775
HR-Entgeltnachweis
vor 2 Tagen von ChrisB 4 / 2319

Unbeantwortete Forenbeiträge

Export von Spools in XLSX
vor 4 Tagen von abapamateur 1 / 347
Feldberechnung ME32K
vor einer Woche von ZF_SAPler 1 / 946
MS-Word als Editor
letzen Monat von tekko 1 / 4456