Interne Tabelle als ALV

Getting started ... Alles für einen gelungenen Start.
3 Beiträge • Seite 1 von 1
3 Beiträge Seite 1 von 1

Interne Tabelle als ALV

Beitrag von MarcelS (ForumUser / 1 / 1 / 0 ) »
Hallo liebe ABAP Experten,

ich bin gerade Dabei mich in ABAP einzuarbeiten und komme jetzt einfach nicht weiter.
Folgendes Problem: Ich soll Daten aus einer Datenbanktabelle auslesen und in eine interne Speichern. Diese soll dann als ALV ausgegeben werden.
Ich bekomme immer wieder die Fehlermeldung, dass ich keinen Feldkatalog hätte, oder andere Fehlermeldungen wenn ich etwas verändere, die sich aber immer irgendwie auf den Feldkatalog beziehen.
Da liegt also das Problem irgendwo.

Ich habe den Code mal dazu genommen.
Kann mir da irgendjemand helfen?

Vielen Dank im Voraus!!

Code: Alles auswählen.

DATA org_pers_nr Type string.
DATA var2        TYPE string.         
DATA var3        TYPE string.          
DATA var4        TYPE string.          
Data var5        TYPE string.          
DATA var6        TYPE string.          
Data var7        TYPE string.          
Data var8        TYPE string.          
Data var9        TYPE string.          
DATA var10       TYPE string.          
Data var11       TYPE string.          
Data var12       TYPE string.          
Data var13       TYPE string.          
Data var14       TYPE string.          
Data var15       TYPE string.          
Data var16       TYPE string.         
DATA var17       TYPE string.         
DATA var19       TYPE string.         
Data var20       Type DATS.            
DATA var21       TYPE DATS.           


SELECTION-SCREEN BEGIN OF BLOCK eingabe.
PARAMETERS pers_nr LIKE org_pers_nr.
SELECTION-SCREEN END OF Block eingabe.

TYPE-POOLS: SLIS.
data itab_fieldcat type SLIS_T_FIELDCAT_ALV.


DATA: BEGIN OF tab Occurs 100,
 vorname   like  var2,
 nachname  like  var3,
 pers_ber  like  var5,
 mitar_gr  like  var6,
 mitar_kr  like  var7,
 pers_tbe  like  var9,
 org_einh  like  var10,
 sen_kstl  like  var11,
 leis_art  like  var12,
 werk      like  var13,
 id        like  var14,
 kom_art   like  var16,
 zeit_erf  like  var17,
 user_typ  like  var19,
 gul_von   like  var20,
 gul_bis   like  var21,
End OF tab.


START-OF-SELECTION.

SELECT SINGLE VORNA From pa1000
    into var2
    Where pernr = pers_nr.

  SELECT SINGLE  NACHN FROM pa1000
    into var3
    WHERE PERNR = pers_nr.

  SELECT SINGLE WERKS FROM pa1000
    into var5
    Where pernr = pers_nr.

  Select single PERSG from pa1000  
    into var6
    where pernr = pers_nr.

  SELECT single PERSK from pa1000  
    into var7
    where pernr = pers_nr.

  select single BTRTL from pa1000
    into var9
    where pernr = pers_nr.

  select single ORGEH from pa1000
    into var10
    where pernr = pers_nr.

  select single KOSTL from pa1000
    into var11
    where pernr = pers_nr.

  select single LSTAR from pa1000  
    into var12
    where pernr = pers_nr.

  select single WERKS from pa1000
    into var13
    where pernr = pers_nr.

  select SINGLE USRID from pa1000 
    into var14
    where pernr = pers_nr.

  select single USRTY from pa1000
    into var16
    where pernr = pers_nr.

  SELECT SINGLE ACCNT from pa1000
    into var17
    where pernr = pers_nr.

  SELECT single USTYP from pa1000
    into var19
    where BNAME = var14.

  SELECT single GLTGV from pa1000
    into var20
    where BNAME = var14.

  SELECT single GLTGB from pa1000
    into var21
    where BNAME = var14.

PERFORM tab_fuellen.

DATA itab TYPE STANDARD TABLE OF tab.

CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
    EXPORTING
      i_program_name        = 'ZS1CA_ZEITRUECKMELDUNG_TEST4'
      i_internal_tabname    = 'ITAB'
      i_inclname            = 'ZS1CA_ZEITRUECKMELDUNG_TEST4'
      i_bypassing_buffer     = 'X'
    CHANGING
      ct_fieldcat            = itab_fieldcat
    EXCEPTIONS
      inconsistent_interface = 1
      program_error          = 2
      OTHERS                 = 3.
  IF sy-subrc <> 0.
    MESSAGE 'Fehler' TYPE 'S'.
  ENDIF.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      
      IT_FIELDCAT = itab_fieldcat
    TABLES
      t_outtab      = itab
    EXCEPTIONS
      program_error = 1
      OTHERS        = 2.

END-OF-SELECTION.

form tab_fuellen.
  LOOP.
  tab-vorname   = var2.
  tab-nachname  = var3.
  tab-pers_ber  = var5.
  tab-mitar_gr  = var6.
  tab-mitar_kr  = var7.
  tab-pers_tbe  = var9.
  tab-org_einh  = var10.
  tab-sen_kstl  = var11.
  tab-leis_art  = var12.
  tab-werk      = var13.
  tab-id        = var14.
  tab-kom_art   = var16.
  tab-zeit_erf  = var17.
  tab-user_typ  = var19.
  tab-gul_von   = var20.
  tab-gul_bis   = var21.
  ENDLOOP.
ENDFORM.

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


Re: Interne Tabelle als ALV

Beitrag von Thanatos82 (Expert / 699 / 32 / 123 ) »
Hallo Marcel,

erstmal schön, dass du nach Lösungen selbst suchst, aber wenn ich sehe was du da gemacht hast, rollen sich mir die Fußnägel hoch! :D

Daher mal ein paar grundsätzliche Tipps:
1. Erstelle die einen Strukturtyp mit allen Feldern die du brauchst (Stichwort: TYPES: BEGIN OF...)
2. Nutze dafür nach Möglichkeit die gleichen Namen wie sie in der Tabelle aus der du liest von SAP vergeben wurden (z.B. WERKS statt WERK) und nutze die gleichen Typdefinitionen
3. Erstelle zu dem Strukturtyp eine Struktur und eine Tabelle: (Stichwort: DATA: ls_alv_struktur TYPE strukturtyp bzw. lt_alv TYPE TABLE OF strukturtyp)
4. Führe einen Select auf eine Tabelle nicht so oft hintereinander aus wenn du es vermeiden kannst. Datenbankselektionen kosten Zeit!
5. Bei deinen Selects kann du daraus einen SELECT machen wenn du die vorrigen Punkte umgesetzt hast indem du sagst SELECT * FROM pa1000 INTO CORRESPONDING FIELDS OF TABLE lt_alc WHERE pernr = pers_nr.
6. Dein Loop bringt quasi überhaupt nichts, denn der Loop weiß nicht worüber er loopen soll und vor allem passiert nix mit der gefüllten struktur (Stichwort: LOOP AT bzw. APPEND) ; Allerdings entfällt dieser Schritt, wenn du die vorrigen Punkte umgesetzt hast.
7. Solltest du noch Probleme mit den ALV-Bausteinen haben empfehle ich dir das Cookbook hier aus dem Forum: http://www.abapforum.com/forum/viewtopic.php?t=1544

Viel Erfolg weiterhin!

Folgende Benutzer bedankten sich beim Autor Thanatos82 für den Beitrag (Insgesamt 2):
MarcelSmlg

Gruß,
der Matze

Re: Interne Tabelle als ALV

Beitrag von Bugfix13 (ForumUser / 97 / 17 / 5 ) »
Hallo Marcel

Ich hab dir mal ein kleines Beispiel, wie du das ganze auch objektorientiert ohne Feldkatalog machen kannst.
Ich persönlich verwende immer diese Methode, da man sich einfach nicht um den Feldkatalog kümmern muss.

Code: Alles auswählen.

TYPES: BEGIN OF r_struc,
         vorna TYPE pa0002-vorna, "Vorname
         nachn TYPE pa0002-nachn, "Nachname
         endda TYPE pa0002-endda, "Gültig bis
         begda TYPE pa0002-begda, "Gültig von
       END OF r_struc.

DATA: lt_data TYPE TABLE OF r_struc, "interne Tabelle
      ls_data TYPE r_struc, "Workarea
      gcl_alv TYPE REF TO  cl_salv_table. "ALV

SELECTION-SCREEN BEGIN OF BLOCK eingabe.
PARAMETERS p_pernr TYPE pa0002-pernr.
SELECTION-SCREEN END OF BLOCK eingabe.


START-OF-SELECTION.

  "Daten auslesen
  SELECT * FROM pa0002
   INTO CORRESPONDING FIELDS OF TABLE lt_data
   WHERE pernr EQ p_pernr.

  "ALV darstellen
  TRY.
      cl_salv_table=>factory(  EXPORTING  list_display   = ' '
                               IMPORTING  r_salv_table   = gcl_alv
                               CHANGING   t_table        = lt_data[] ).
    CATCH cx_salv_msg.
      EXIT.
  ENDTRY.

  gcl_alv->display( ).


Zur Info: &#91;&#93 durch [] ersetzten --> Konvertierungsfehler im Forum

Seite 1 von 1

Vergleichbare Themen

4
Antw.
2309
Views
5
Antw.
3021
Views
Inhalt interne Tabelle an andere interne Tabelle übergeben
von L0w-RiDer » 30.01.2020 16:28 • Verfasst in ABAP® für Anfänger
5
Antw.
2398
Views
1
Antw.
2364
Views

Über diesen Beitrag


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

Aktuelle Forenbeiträge

IF mit AND und OR
vor 6 Tagen von GastX 6 / 7060
Meine Inbox
vor einer Woche von Rabea1103 1 / 5066
PCL2 Cluster auslesen
vor einer Woche von DeathAndPain 2 / 6220
FUBA 'HR_INFOTYPES_OPERATION'
vor einer Woche von Bright4.5 3 / 11652

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

IF mit AND und OR
vor 6 Tagen von GastX 6 / 7060
Meine Inbox
vor einer Woche von Rabea1103 1 / 5066
PCL2 Cluster auslesen
vor einer Woche von DeathAndPain 2 / 6220
FUBA 'HR_INFOTYPES_OPERATION'
vor einer Woche von Bright4.5 3 / 11652