Anfängerfragen zu Thema ALV

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

Getting started ... Alles für einen gelungenen Start.
27 Beiträge • Seite 1 von 2 (current) Nächste
27 Beiträge Seite 1 von 2 (current) Nächste

Anfängerfragen zu Thema ALV

Beitrag von Gast ( / / 0 / 3 ) »
Hallo,
bisher habe ich noch ganz altmodisch meine Liste mit dem FUBA "HR_DISPLAY_BASIC_LIST" ausgegeben. Das hat für meine Anforderungen bisher immer gereicht. Nachdem ich über das Thema ALV hier viel gelesen habe, dachte ich mir, ich probiere es mal aus :D
Als erstes würde ich aber mal wissen, warum ich den unbedingt ALV nutzen sollte? Welche Vorteile bringt das?
So, nun zu meinem Problem. Ich habe die Anleitung hier http://www.abapforum.com/forum/viewtopic.php?t=1544 durchgelesen und schaffe es aber nicht einen ALV auszugeben.
Hier mein Coding:
FORM ALV_LIST USING LT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV.

CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
I_CALLBACK_PROGRAM = sy-repid
I_INTERNAL_TABNAME = 'TAB'
CHANGING
CT_FIELDCAT = LT_FIELDCAT
EXCEPTIONS
INCONSISTENT_INTERFACE = 1
PROGRAM_ERROR = 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.

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = sy-repid
IT_FIELDCAT = LT_FIELDCAT
TABLES
T_OUTTAB = TAB
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
ENDFORM.

Wenn ich die Liste nun Ausgebe kommt immer der Hinweiß "NO_FIELDCATALOG_AVAILABLE"

Ich habe eine interne Tabelle und bekomme es nicht gebacken einen Fieldcatalog zu definieren.

Bitte helft einem Anfänger über dies Hürde :wink:
Vielen Dank
Volker

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


Beitrag von Gast ( / / 0 / 3 ) »
Ahoi.

Zunächst mal:
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
I_CALLBACK_PROGRAM = sy-repid
In meinem 4.6C heisst der Parameter I_PROGRAM_NAME... Bist Du Dir bei dem Parameternamen sicher?

Zum Problem:
Wo kommt die Meldung denn her? Bekommst Du aus dem FCat-Merger überhaupt etwas raus?

Ich arbeite normalerweise mit Tabellen, die auf globalen (DDIC-)Strukturen basieren. In dem Fall kann man den Merger mit "I_STRUCTURE_NAME" versorgen, das funktioniert eigentlich immer.

Schließlich kannst Du noch versuchen, den Feldkatalog behelfsweise per Hand aufzubauen, um zu sehen, ob wenigstens die Grid-Anzeige klappt.

Gruss,
Haubi

P.S.: noch ein OT-Tipp: die von Dir benutzten Reuse-Bausteine bauen auf den SLIS-Strukturen der gleichnamigen Typgruppe auf.
Es gibt Bausteine namens LVC_FIELDCATALOG_MERGE und REUSE_ALV_GRID_LVC, die das gleiche machen, aber die LVC_*-Strukturen des Dictionaries nutzen. Letztere benötigst Du auch, wenn Du mit den ALV-Objekten arbeiten willst (CL_GUI_ALV_GRID).
Planst Du also irgendwann umzustellen würde ich gleich die LVC-Version nutzen.

Beitrag von Gast ( / / 0 / 3 ) »
Hallo Haubi,
ehrlich gesagt verstehe ich nur Bahnhof :roll:

Ok, Parameter I_PROGRAM_NAME werde ich mal ausprobieren. Was ist ein FCat-Merger?
Ich habe im meinem Programm eine interne Tabelle definiert, die ich nun ausgeben will. Hat die eine DDIC-Struktur? Wie bekomme ich das heraus?

Viele Grüße
Volker

Beitrag von Haubi (Expert / 625 / 20 / 30 ) »
Anonymous hat geschrieben:Hallo Haubi,
ehrlich gesagt verstehe ich nur Bahnhof :roll:
Das ist mehr als Flughafen... :wink:
Ok, Parameter I_PROGRAM_NAME werde ich mal ausprobieren. Was ist ein FCat-Merger?
Ich meine den Funktionsbaustein REUSE_ALV_FIELDCATALOG_MERGE. Dieser hat bei mir einen IMPORTING-Parameter I_PROGRAM_NAME. Schau Dir doch mal die Parameterliste des Bausteins in der SE37 an.
Ich habe im meinem Programm eine interne Tabelle definiert, die ich nun ausgeben will. Hat die eine DDIC-Struktur? Wie bekomme ich das heraus?
Wie hast Du sie denn definiert?

Die einfachste Möglichkeit ist ja immer, eine DB-Tabelle zu nehmen und daraus eine interne Tabelle zu basteln:

Code: Alles auswählen.

DATA gt_table TYPE TABLE OF mara.
Den "Merger" kann man dann mit I_STRUCTURE_NAME = 'MARA' bedienen.

Legst Du die Struktur der internen Tabelle lokal im Programm fest (also definierst entweder einen Strukturtyp mit TYPES BEGIN OF <struktur> oder verwendest DATA BEGIN OF <itab> OCCURS 0) musst Du mit I_PROGRAM_NAME und I_INTERNAL_TABNAME arbeiten.
Viele Grüße
Volker
Grüße zurück und bleib tapfer... :wink:

Haubi

Beitrag von Gast ( / / 0 / 3 ) »
Hallo Haubi,

Grüße zurück und bleib tapfer...

Ich versuchs :D

Hier noch mal ein Mustercoding.
Ich definiere eine Tabelle mit
DATA BEGIN OF <itab> OCCURS 0 (Kann ich das besser lösen :?: )

REPORT TESTREPORT MESSAGE-ID PN
NO STANDARD PAGE HEADING LINE-SIZE 120 LINE-COUNT 65.

TYPE-POOLS SLIS.

DATA: BEGIN OF TAB OCCURS 99,
TXT1 TYPE P DECIMALS 2,
TXT2 TYPE P DECIMALS 2,
END OF TAB.

DATA: LT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV.

* start-of-selection----------------------------------------------
START-OF-SELECTION.
CLEAR TAB.

MOVE 10 TO TAB-TXT1.
MOVE 50 TO TAB-TXT2.

APPEND TAB.
*---------------------------------------------------------------------*
* end-of-selection *
*---------------------------------------------------------------------*
END-OF-SELECTION.

PERFORM ALV_LIST USING LT_FIELDCAT.

*call ALV
FORM ALV_LIST USING LT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV.

CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
I_PROGRAM_NAME = SY-REPID
I_INTERNAL_TABNAME = 'TAB'
CHANGING
CT_FIELDCAT = LT_FIELDCAT
EXCEPTIONS
INCONSISTENT_INTERFACE = 1
PROGRAM_ERROR = 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.

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = 'Testreport'
IT_FIELDCAT = LT_FIELDCAT
TABLES
T_OUTTAB = TAB
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
ENDFORM.

Und dann kommt eben der Abbruch mit "No fieldcatalog available"

Vielen Dank schon mal für Deine Bemühungen, echt spitze!
Viele Grüße
Volker

Beitrag von olli-x (Specialist / 166 / 0 / 1 ) »
Hallo Volker,

auf welchem Release arbeitest Du? Ich habe auf 4.5B, wo der ALV allerdings auch noch nicht freigegeben war, über den FB 'REUSE_ALV_FIELDCATALOG_MERGE' für eine interne Tabelle keinen Fieldcat aufbauen können.
Das muß ich jetzt aber schnell erläutern bevor die Aufschreie kommen :D
Wenn ich eine interne Tabelle mit Feldern deklariert habe, die mit sich like auf verschiedene DDIC-Tabellen beziehen, klappte es mit dem Fieldcat nicht... Wenn man aber eine Tabelle deklariert, die sich auf eine DDIC-Struktur oder DDIC-Tabelle z.B. 'MARA' bezieht und dann beim Aufruf z.B. I_STRUCTURE_NAME = 'MARA' mitgibt, geht es. Ich habe mir somit immer DDIC-Strukturen angelegt.
Die Frage ist, welche Informationen der ALV im Feldkatalog mindestens braucht, damit kein Fehler auftritt (das sollte in der Doku der FuBa's stehen) In Deinem Fall hast Du die Itabfelder mit type deklariert. Das "reicht" dem ALV nicht, denn für ein vernünftiges Ergebnis brauchst Du auch Spaltenbezeichner usw. was im Datenelement steht -> LIKE... Wenn Du Dir eine Itab mit Bezug auf eine DDIC-Tabelle deklarierst und Dir dann mal die interne Tabelle zum Fieldcat anschaust, siehst Du diverse Angaben... Einen solche Fieldcat-Tabelle kannst Du dann auch ggfs. manuell ohne den FB 'REUSE_ALV_FIELDCATALOG_MERGE' aufbauen. Es ist halt nur lästig...

Gruß,
Oliver

Beitrag von Gast ( / / 0 / 3 ) »
Hi Olli,

Release 4.6C (sollte dann also gehen)
Was ich noch nicht schnalle ist die Geschichte mit den DDIC-Tabellen. Was kann ich den da für eine nehmen? Muß doch die geliche Struktur wie meine interne Tabelle haben oder ist das egal?
Wie mache ich das mit den Spaltenbezeichnern?
Nochmal: Ich bin echt noch Anfänger und versuche mich hier zum ersten Mal. Bitte habt verständnis, dass ich nicht so durchsteige und auch mal blöd Frage :?

Viele Grüße
Volker

Beitrag von Haubi (Expert / 625 / 20 / 30 ) »
Hi Volker.

Zunächst: es gibt keine blöden Fragen, es gibt nur Blöde, die nicht fragen... :wink:

Thema DDIC:
Du kannst im Data Dictionary (SE11) Strukturen anlegen (4.6C: Datentyp -> Struktur). Basierend auf diesen Strukturen kannst Du dann ebenfalls in der SE11 Tabellentypen anlegen (4.6C: Datentyp -> Tabellentyp). Im Programm definierst Du Deine Interne Tabelle über

Code: Alles auswählen.

DATA: gt_itab TYPE <ddic-tabellentyp>.
oder

Code: Alles auswählen.

DATA: gt_itab TYPE TABLE OF <ddic-struktur>.
Den REUSE_ALV_FIELDCATALOG_MERGE versorgst Du dann mit

Code: Alles auswählen.

CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
 EXPORTING
    i_structure_name             = <ddic-struktur>
  CHANGING
    ct_fieldcat                  = lt_fcat
wobei der Name der DDIC-Struktur in Hochkommata (oder als Character-Variable) angegeben werden muss.
Diese Variante habe ich vielfach mit Erfolg angewendet.

Zu Deinem Problem:
Ich habe Deinen Report mal auf meinem System laufen lassen und komme zum gleichen Ergebnis, trotz (z.T. notwendiger) Änderungen:
- I_PROGRAM_NAME darf nicht mit SY_REPID versorgt werden, da die Variable erst nach dem Aufruf des Bausteins ausgewertet wird. Das heisst, dass in SY-REPID der Name des Rahmenprogramms der Funktionsgruppe steht... :( :shock:
- Den Feldkatalog habe ich schon mal als globale und lokale Variable angelegt - ohne Erfolg.

Bisher stehe ich da vor einem Rätsel - vielleicht habe ich heute auch Tomaten auf den Augen... :?

Gruss,
Haubi
Das ABAP Kochbuch ab sofort bei Amazon...

I'd rather write code that writes code than write code...

Beitrag von Gast ( / / 0 / 3 ) »
Hallo Haubi,

schön das Du es auch nicht verstehst :D
Ok, daß mit der DDIC-Struktur habe ich verstanden.
Sehe ich es richtig, daß ich für meine itab aber dann
eine eigene anlegen müsste? Wäre das nicht ein bißchen aufwendig? Ich meine, es bleibt ja nicht bei einer Tabelle im leben :lol:
I_PROGRAM_NAME habe ich nun mal mit dem Reportname direkt versorgt. Nun kommt schon mal ein andere Fehlerhinweis: "Feldsymbol nicht zugeweisen"!?

Viele Grüße
Volker

Beitrag von Haubi (Expert / 625 / 20 / 30 ) »
Volker hat geschrieben:Hallo Haubi,

schön das Du es auch nicht verstehst :D
Ansichtssache... :D
Ok, daß mit der DDIC-Struktur habe ich verstanden.
Sehe ich es richtig, daß ich für meine itab aber dann
eine eigene anlegen müsste? Wäre das nicht ein bißchen aufwendig? Ich meine, es bleibt ja nicht bei einer Tabelle im leben :lol:
1. SAP definiert bereits viele Strukturen vor. DB-Tabellen können ebenfalls direkt als Vorlage für interne Tabellen (Beispiel: gt_tab TYPE TABLE OF vbak) oder DDIC-Tabellentypen genutzt werden. Wenn man also auf SAP-Daten reportet kann es gut sein, dass es da schon "Vorlagen" gibt.

2. Die DDIC-Strukturen und -Tabellentypen können weiterhin als Typisierung für Parameter von Funktionsbausteinen oder OO-Methoden verwendet werden. Bei der Entwicklung von AddOns kommt man da also gar nicht drum herum.

Wie Du siehst hat man mit der Nutzung von programminternen Strukturen bei ALV-Grids eh nur Ärger, den man sich mit DDIC-Strukturen erspart. Ich bevorzuge da den Weg des geringsten Widerstands... :wink:
I_PROGRAM_NAME habe ich nun mal mit dem Reportname direkt versorgt. Nun kommt schon mal ein andere Fehlerhinweis: "Feldsymbol nicht zugeweisen"!?
Den habe ich nicht, bei mir wird nur nach wie vor der Feldkatalog nicht gefüllt... :evil:

Gruss,
Haubi

Beitrag von pheun (ForumUser / 6 / 0 / 0 ) »
sy-repid muss einer Variablen zugewiesen werden:

lv_repid = sy-repid.

Die Variable lv_repid übergibst Du dem FuBa.

Beitrag von Haubi (Expert / 625 / 20 / 30 ) »
pheun hat geschrieben:sy-repid muss einer Variablen zugewiesen werden:

lv_repid = sy-repid.

Die Variable lv_repid übergibst Du dem FuBa.
Auch diese Version funzt bei mir net, hab ich schon probiert...
Das ABAP Kochbuch ab sofort bei Amazon...

I'd rather write code that writes code than write code...

Beitrag von popeiko (ForumUser / 47 / 0 / 1 ) »
Hallo.

So weit ich weiß muss auch der Parameter i_inclname mit sy-repid versorgt werden. Bei mir funktioniert Folgendes (Version 4.6C):

Code: Alles auswählen.

TYPE-POOLS: slis.

DATA:
* interne Tabelle mit Beispielfeldern
  BEGIN OF gt_tab occurs 0,
    docnum LIKE edidc-docnum,
    mestyp LIKE edidc-mestyp,
  END OF gt_tab.

DATA:
  gt_fieldcat TYPE slis_t_fieldcat_alv,
  g_repid     LIKE sy-repid.



* Repid in Variable
g_repid = sy-repid.



CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
 EXPORTING
   i_program_name               = g_repid
   i_internal_tabname           = 'GT_TAB'
   i_inclname                   = g_repid
  CHANGING
    ct_fieldcat                  = gt_fieldcat
 EXCEPTIONS
   inconsistent_interface       = 1
   program_error                = 2
   OTHERS                       = 3

Allerdings steht auch in der FuBa-Doku zu 'REUSE_ALV_FIELDCATALOG_MERGE', dass lokal definierte interne Tabellen nicht offiziell unterstützt werden und nur zum rapid prototyping verwendet werden sollen.
Laut Doku dürfen die Felder einer lokal definierten Tabelle auch nur mit LIKE oder INCLUDE STRUCTURE referenziert werden (nicht mit TYPE).

Gruß Heiko.

Beitrag von olli-x (Specialist / 166 / 0 / 1 ) »
Hallo zusammen,
Laut Doku dürfen die Felder einer lokal definierten Tabelle auch nur mit LIKE oder INCLUDE STRUCTURE referenziert werden (nicht mit TYPE).
Das meinte ich. Kam wohl nicht so rüber... :oops:

Gruß,
Olli

Beitrag von Gast ( / / 0 / 3 ) »
Hallo,

mit den Änderungen von popeiko geht es :D
Also i_inclname und i_program_name wie beschrieben.

Es funktioniert auch mit "type" nur hat die Spalte
dann keine Überschrift. Wie mache ich das den?

Viele Grüße
Volker

Vergleichbare Themen

4
Antw.
6946
Views
Anfängerfragen Abkürzungen
von Tanega » 01.02.2017 09:48 • Verfasst in ABAP® für Anfänger
4
Antw.
6150
Views
Anfängerfragen - eigene Tabelle anlegen
von sp89 » 18.01.2010 07:24 • 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

Regex in where
vor 6 Stunden von edwin 7 / 163
Daten an Tabelle binden
vor 19 Stunden von Bright4.5 3 / 1487

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

Regex in where
vor 6 Stunden von edwin 7 / 163
Daten an Tabelle binden
vor 19 Stunden von Bright4.5 3 / 1487

Unbeantwortete Forenbeiträge

aRFC im OO-Kontext
vor 5 Wochen von ralf.wenzel 1 / 3261
Hilfe bei SWEC/SWE2
September 2024 von retsch 1 / 9822