Interne Tabelle füllen und ausgeben

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

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

Interne Tabelle füllen und ausgeben

Beitrag von Armin93 (ForumUser / 35 / 10 / 0 ) »
Hallo zusammen,

ich bin noch ein ziemlicher neuling und ich hab noch nicht ganz verstanden wie das mit den SELECT Befehlen so läuft.

Hier meine Frage :

Ich würde gerne die Werte von Tabelle CE11000 in meine Interne Tabelle hineinschreiben und dann ausgeben.

bei mir sieht das zurzeit so aus.

Code: Alles auswählen.

SELECT-OPTIONS: paledger FOR ce11000-paledger,
                s_perio FOR ce11000-perio,
                s_bukrs FOR ce11000-bukrs.

DATA: BEGIN OF itab1 OCCURS 100,

        rec_waers LIKE zzke24-rec_waers,
        paledger  LIKE zzke24-paledger,
        vrgar     LIKE zzke24-vrgar,
        perio     LIKE zzke24-perio,
        belnr     LIKE zzke24-belnr,
        hzdat     LIKE zzke24-hzdat,
        kndnr     LIKE zzke24-kndnr,
        rbeln     LIKE zzke24-rbeln,
        rposn     LIKE zzke24-rposn,
        usnam     LIKE zzke24-usnam,
        bukrs     LIKE zzke24-bukrs,
        frwae     LIKE zzke24-frwae,
        prctr     LIKE zzke24-prctr,
        vv126     LIKE zzke24-vv126,
        vv125     LIKE zzke24-vv125,
        absmg_me  LIKE zzke24-absmg_me,
        vv121     LIKE zzke24-vv121,
        vv122     LIKE zzke24-vv122,
        vv010     LIKE zzke24-vv010,
        vv030     LIKE zzke24-vv030,
        vv020     LIKE zzke24-vv020,
        vv050     LIKE zzke24-vv050,
        vv040     LIKE zzke24-vv040,
        prodh     LIKE zzke24-prodh,
        absmg     LIKE zzke24-absmg.

DATA : END OF itab1.

START-OF-SELECTION.

 SELECT * FROM ce11000 INTO CORRESPONDING FIELDS OF itab1
  WHERE



  ENDSELECT.

Das WHERE hab ich frei gelassen ich weiß nicht was ich jetzt schreiben soll

Könnt Ihr mir bitte helfen.

Vielen dank

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


Re: Interne Tabelle füllen und ausgeben

Beitrag von Aba ( / / 0 / 3 ) »
Hallo Armin93,

mit der von dir genutzten Tabelle kenne ich mich nicht aus. Generell würdest du nach dem "where" jedoch eine Bedingung für die Selektion der Einträge angeben. Gibst du keine Bedingung an, so würde die vollständige Tabelle mit all ihren Einträgen in deine interne Tabelle geschrieben werden. Da die Tabellen aber häufig sehr groß sind und man in der Regel nicht alle Einträge benötigt, wäre das ein Performancefresser. Besser ist, wenn man weiß, dass man nur bestimmte Einträge braucht, von vorne herein nur die gewollten Einträge zu selektieren, sodass weniger Daten verarbeitet werden müssen. Das kannst du mithilfe der "where" Bedingungen machen. Darüber könntest du z.B. sagen, dass dich nur Daten zu z.B. Werk xy interessieren. Die Syntax dazu ist ganz einfach: where spaltenname = Wert (and spaltenname2 = Wert2).

Ich hoffe das hilft dir ein bisschen.

Aba

Re: Interne Tabelle füllen und ausgeben

Beitrag von M@atze! (ForumUser / 92 / 6 / 21 ) »
Hi,

1:
beinhaltet die Struktur "zzke24" mehr Felder als die von dir verwendeten?
Wenn nicht, kannst du die Typisierung der internen Tabelle erheblich verkürzen:

Code: Alles auswählen.

DATA: itab1 type table of zzke24.

2:
Hast du die Struktur "zzke24" speziell für dein Programm erstellt oder wird diese auch noch anderweitig verwendet?
Das könntest du dir nämlich ebenfalls sparen.

Ich persönlich würde es folgendermaßen umsetzen:

Code: Alles auswählen.

DATA: ce11000 TYPE ce11000.

SELECT-OPTIONS: paledger FOR ce11000-paledger,
                s_perio  FOR ce11000-perio,
                s_bukrs  FOR ce11000-bukrs.

START-OF-SELECTION.

  SELECT rec_waers, paledger, vrgar, perio, belnr, hzdat, kndnr, rbeln,
         rposn, usnam, bukrs, frwae, prctr, vv126, vv125, absmg_me,
         vv121, vv122, vv010, vv030, vv020, vv050, vv040, prodh, absmg
    INTO TABLE @DATA(itab1) "interne Tabelle wird automatisch generiert
    FROM ce11000
   WHERE paledger IN @paledger
     AND perio    IN @s_perio
     AND bukrs    IN @s_bukrs.
Auch die F1-Hilfe zum Select-Befehl ist sehr hilfreich.

Viele Grüße
Matze

Re: Interne Tabelle füllen und ausgeben

Beitrag von schick (ForumUser / 52 / 5 / 15 ) »
Hi,
ohne die Tabelle CE11000 zu kennen, würde ich vermuten das folgende Where Bedingung zum gewünschten Ergebnis führen sollte:

Code: Alles auswählen.

  SELECT *
    INTO CORRESPONDING FIELDS OF itab1 
    FROM ce11000
   WHERE paledger IN paledger
     AND perio    IN s_perio
     AND bukrs    IN s_bukrs.
Edit: Matze war schneller und ausführlicher

Re: Interne Tabelle füllen und ausgeben

Beitrag von Armin93 (ForumUser / 35 / 10 / 0 ) »
Hallo,

vielen Dank für die Antworten.
Die Struktur hab ich deswegen aufgebaut weil ich eine ALV Grid Control einbauen will.

Ich werde das ihr mir geschrieben habt gleich mal ausprobieren.
Ich melde mich dann gleich anschließend.

Vielen Vielen dank nochmal =)

LG ARmin

Re: Interne Tabelle füllen und ausgeben

Beitrag von Armin93 (ForumUser / 35 / 10 / 0 ) »
Hallo Leute,

vielen Dank nochmal für eure Antworten.
Ich glaube ich werde die Interne Tabelle wie ich Sie gemacht habe so stehen lassen
Beim nächsten Programm werde ich auf jedefall die neue Methode verwenden.

Ich habe jetzt die WHERE bedingung eingefügt.
ich habe das Programm ausgeführt jedoch tut sich nicht viel ich bekommen links unten folgende Meldung

S:Z4:000

Meldungsnr. Z4000

Was fehlt hier noch?

Es sieht jetz wie folgt aus :

REPORT zzke24.

TABLES: ce11000.

SELECT-OPTIONS: paledger FOR ce11000-paledger,
s_perio FOR ce11000-perio,
s_bukrs FOR ce11000-bukrs.

DATA: BEGIN OF itab1 OCCURS 100,

rec_waers LIKE zzke24-rec_waers,
paledger LIKE zzke24-paledger,
vrgar LIKE zzke24-vrgar,
perio LIKE zzke24-perio,
belnr LIKE zzke24-belnr,
hzdat LIKE zzke24-hzdat,
kndnr LIKE zzke24-kndnr,
rbeln LIKE zzke24-rbeln,
rposn LIKE zzke24-rposn,
usnam LIKE zzke24-usnam,
bukrs LIKE zzke24-bukrs,
frwae LIKE zzke24-frwae,
prctr LIKE zzke24-prctr,
vv126 LIKE zzke24-vv126,
vv125 LIKE zzke24-vv125,
absmg_me LIKE zzke24-absmg_me,
vv121 LIKE zzke24-vv121,
vv122 LIKE zzke24-vv122,
vv010 LIKE zzke24-vv010,
vv030 LIKE zzke24-vv030,
vv020 LIKE zzke24-vv020,
vv050 LIKE zzke24-vv050,
vv040 LIKE zzke24-vv040,
prodh LIKE zzke24-prodh,
absmg LIKE zzke24-absmg.

DATA : END OF itab1.


TYPE-POOLS: slis.

*--- Types ------------------------------------------------------------*
TYPES: t_output LIKE zzke24.

*--- ALV Definitions --------------------------------------------------*
DATA g_save TYPE c VALUE 'A'. " save option
DATA g_variant LIKE disvariant. " Daten für die Variante
DATA g_fieldcat TYPE slis_t_fieldcat_alv. " Feldkatalog

DATA: g_events TYPE slis_t_event,
g_sp_group TYPE slis_t_sp_group_alv,
g_layout TYPE slis_layout_alv,
g_list_top_of_page TYPE slis_t_listheader.
DATA: e_status TYPE slis_formname VALUE 'STANDARD_ER01',
e_user_command TYPE slis_formname VALUE 'USER_COMMAND',
er_list_top_of_page TYPE slis_t_listheader,
er_layout TYPE slis_layout_alv,
er_sp_group TYPE slis_t_sp_group_alv,
er_events TYPE slis_t_event.

*--- Constants --------------------------------------------------------*
CONSTANTS:
er_formname_top_of_page TYPE slis_formname VALUE 'TOP_OF_PAGE'.


*--- Internal Tables --------------------------------------------------*
DATA: i_output TYPE t_output OCCURS 100,
wa_output LIKE LINE OF i_output.

START-OF-SELECTION.

PERFORM get_data.
DESCRIBE TABLE i_output.
IF sy-tfill = 0.
MESSAGE s000(z4) WITH TEXT-900.
ELSE.
PERFORM output_data.
ENDIF.

FORM get_data.

SELECT *
INTO CORRESPONDING FIELDS OF itab1
FROM ce11000
WHERE paledger IN paledger
AND perio IN s_perio
AND bukrs IN s_bukrs.



ENDSELECT.

loop at itab1.
wa_output = itab1.
append wa_output to i_output.
endloop.
ENDFORM.






*&---------------------------------------------------------------------*
*& Form output_data
*&---------------------------------------------------------------------*
FORM output_data.

*--- Variantedaten fuellen
CLEAR g_variant.
g_variant-report = 'ZZKE24'.
g_variant-username = sy-uname.

*--- Events, Sp.-Gruppen, Layout fuellen
PERFORM eventtab_build USING er_events[].
PERFORM sp_group_build USING er_sp_group[].
PERFORM layout_build USING er_layout.

*--- Feldkatalog fuellen
CALL FUNCTION 'SD_GET_FIELDCATALOG_OF_TABLE'
EXPORTING
i_table_name = 'ZZKE24'
TABLES
t_input_fieldcat = g_fieldcat.

*--- List-Viewer aufrufen
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_interface_check = ' '
i_bypassing_buffer = 'X'
i_buffer_active = ' '
i_callback_program = 'ZZKE24'
i_callback_pf_status_set = e_status
i_callback_user_command = e_user_command
i_callback_top_of_page = ' '
i_callback_html_top_of_page = ' '
i_callback_html_end_of_list = ' '
i_structure_name = 'ZZKE24'
i_background_id = 'ALV_BACKGROUND'
* i_grid_title = 'Titel 1'
* I_GRID_SETTINGS =
is_layout = er_layout
it_fieldcat = g_fieldcat[]
* it_excluding =
it_special_groups = er_sp_group[]
* IT_SORT =
* IT_FILTER =
* IS_SEL_HIDE =
i_default = 'X'
i_save = g_save
is_variant = g_variant
it_events = er_events[]
* IT_EVENT_EXIT =
* IS_PRINT =
* IS_REPREP_ID =
* I_SCREEN_START_COLUMN = 0
* I_SCREEN_START_LINE = 0
* I_SCREEN_END_COLUMN = 0
* I_SCREEN_END_LINE = 0
* IT_ALV_GRAPHICS =
* IT_ADD_FIELDCAT =
* IT_HYPERLINK =
* IMPORTING
* E_EXIT_CAUSED_BY_CALLER =
* ES_EXIT_CAUSED_BY_USER =
TABLES
t_outtab = i_output
EXCEPTIONS
program_error = 1
OTHERS = 2.

IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.


ENDFORM. " output_data

*&---------------------------------------------------------------------*
*& Form eventtab_build
*&---------------------------------------------------------------------*
FORM eventtab_build USING u_er_events TYPE slis_t_event.

DATA: ls_event TYPE slis_alv_event.

CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
i_list_type = 0
IMPORTING
et_events = u_er_events.
READ TABLE u_er_events WITH KEY name = slis_ev_top_of_page
INTO ls_event.
IF sy-subrc = 0.
MOVE er_formname_top_of_page TO ls_event-form.
APPEND ls_event TO u_er_events.
ENDIF.
READ TABLE u_er_events WITH KEY name = slis_ev_user_command
INTO ls_event.
IF sy-subrc = 0.
MOVE e_user_command TO ls_event-form.
APPEND ls_event TO u_er_events.
ENDIF.
READ TABLE u_er_events WITH KEY name = slis_ev_pf_status_set
INTO ls_event.
IF sy-subrc = 0.
MOVE e_status TO ls_event-form.
APPEND ls_event TO u_er_events.
ENDIF.

ENDFORM. " eventtab_build
*&---------------------------------------------------------------------*
*& Form sp_group_build
*&---------------------------------------------------------------------*
FORM sp_group_build USING u_er_sp_group TYPE slis_t_sp_group_alv.

DATA: ls_sp_group TYPE slis_sp_group_alv.
CLEAR: ls_sp_group, u_er_sp_group.
REFRESH: u_er_sp_group.

ls_sp_group-sp_group = 'A'.
ls_sp_group-text = TEXT-s06.
APPEND ls_sp_group TO u_er_sp_group.

ENDFORM. " sp_group_build
*&---------------------------------------------------------------------*
*& Form layout_build
*&---------------------------------------------------------------------*
FORM layout_build USING u_er_layout TYPE slis_layout_alv.

CLEAR: u_er_layout.

* u_er_layout-box_fieldname = 'SELK'. " Checkbox
u_er_layout-get_selinfos = 'X'.
* U_ER_LAYOUT-F2CODE = 'FEHL' . " Doppelklickfunktion
u_er_layout-confirmation_prompt = 'X'. "Sicherheitsabfrage
u_er_layout-key_hotspot = 'X'. "Schlüssel als Hotspot
u_er_layout-info_fieldname = 'COL'. "Zeilenfarbe

ENDFORM. " layout_build

*&---------------------------------------------------------------------*
*& Form user_command
*&---------------------------------------------------------------------*
FORM user_command USING r_ucomm LIKE sy-ucomm
rs_selfield TYPE slis_selfield.

CHECK r_ucomm = '&IC1'. "nur bei PICK
*---
CLEAR: wa_output.
READ TABLE i_output INTO wa_output INDEX rs_selfield-tabindex.
CHECK sy-subrc = 0.

ENDFORM. "user_command

*---------------------------------------------------------------------*
* FORM TOP_OF_PAGE *
*---------------------------------------------------------------------*
* Ereigniss TOP_OF_PAGE *
* event TOP_OF_PAGE
*---------------------------------------------------------------------*
FORM top_of_page.
*

DATA: ls_line TYPE slis_listheader.

* report-header: Typ H
CLEAR: ls_line, er_list_top_of_page.
REFRESH: er_list_top_of_page.
ls_line-typ = 'H'.
ls_line-info = TEXT-001.
APPEND ls_line TO er_list_top_of_page.

CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
it_list_commentary = er_list_top_of_page.

ENDFORM. "top_of_page
*---------------------------------------------------------------------*
* FORM STANDARD_ER01 *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
FORM standard_er01 USING extab TYPE slis_t_extab.

DELETE extab WHERE fcode = '&RNT_PREV'.
DELETE extab WHERE fcode = '&LFO'.
DELETE extab WHERE fcode = '&NFO'.

SET PF-STATUS 'ALVLIST' EXCLUDING extab.

ENDFORM. "standard_er01

Re: Interne Tabelle füllen und ausgeben

Beitrag von M@atze! (ForumUser / 92 / 6 / 21 ) »
Hi,

in der FORM "get_data" fehlt das APPEND.
Somit bleibt deine Tabelle leer und die von dir definierte Message wird ausgegeben.

Code: Alles auswählen.


SELECT *
INTO CORRESPONDING FIELDS OF itab1
FROM ce11000
WHERE paledger IN paledger
AND perio IN s_perio
AND bukrs IN s_bukrs.

APPEND itab1.  "das hier fehlt!

ENDSELECT.

Du kannst aber auch schreiben:

Code: Alles auswählen.


SELECT *
INTO CORRESPONDING FIELDS OF TABLE itab1
FROM ce11000
WHERE paledger IN paledger
AND perio IN s_perio
AND bukrs IN s_bukrs.

Dann wird die interne Tabelle direkt befüllt.

Gruß
Matze

Re: Interne Tabelle füllen und ausgeben

Beitrag von Armin93 (ForumUser / 35 / 10 / 0 ) »
Hallo Matze,

ich habe jetzt den APPEND Befehl eingefügt aber leider bekomme ich noch immer die gleiche Meldung.

LG Armin

Re: Interne Tabelle füllen und ausgeben

Beitrag von M@atze! (ForumUser / 92 / 6 / 21 ) »
Hi,

dann bringt dein Select wahrscheinlich keine Treffer.
Debugge doch mal das Unterprogramm "get_data".

Gruß
Matthias

Re: Interne Tabelle füllen und ausgeben

Beitrag von Armin93 (ForumUser / 35 / 10 / 0 ) »
Mit dem Debugging bin ich auch nicht so vertraut.

Ich habe das Programm ausgeführt und nur Währungstyp und BK selektiert dann funktioniert es

Wenn ich aber die Periode dazu nehme kommt die Fehlermeldung wieder =(

LG

Re: Interne Tabelle füllen und ausgeben

Beitrag von M@atze! (ForumUser / 92 / 6 / 21 ) »
Na dann haben wirs ja schon.
Entweder es gibt für deine selektierte Periode keine Einträge oder die
Periode in der Tabelle ist generell leer, ...
Schau dir doch mal mit der SE16/SE16N die vorhandenen Einträge in der Tabelle CE11000 an.

Gruß
Matthias

Re: Interne Tabelle füllen und ausgeben

Beitrag von M@atze! (ForumUser / 92 / 6 / 21 ) »
Und zum deguggen...
Einfach einen Break-Point in der relevanten Zeile setzen und das Programm starten.
Der Debugger öffnet sich dann automatisch und du kannst Zeile für Zeile durchgehen und dir das Ergebnis des jeweiligen Befehls ansehen.

Re: Interne Tabelle füllen und ausgeben

Beitrag von Armin93 (ForumUser / 35 / 10 / 0 ) »
Hallo Matthias,

jetzt funktioniert es einwandfrei ...

das Problem war das ich im Test System alte Daten habe die bis 2018 gehen und ich habe aber auf 2019 Selektiert ^^ hahaha das war mein Fehler

ich danke dir für deine Hilfe =)

LG Armin

Seite 1 von 1

Vergleichbare Themen

2
Antw.
4085
Views
Programmverständnis - interne Tabelle füllen-ausgeben
von Jan_M. » 17.05.2004 20:28 • Verfasst in ABAP® für Anfänger
3
Antw.
3528
Views
DD-Tabelle, Meldung ausgeben nach Füllen einer Tabelle
von Aggu » 13.06.2004 13:33 • Verfasst in ABAP® Core
15
Antw.
8859
Views
Interne Tabelle Füllen
von ABAPNeuling » 04.11.2004 13:42 • Verfasst in ABAP® für Anfänger
10
Antw.
4709
Views
Interne Tabelle mit Zeilen füllen
von Sonne1234 » 18.12.2019 16:30 • Verfasst in ABAP® für Anfänger
12
Antw.
7689
Views
dynamisch interne Tabelle füllen
von LittleT » 03.04.2007 15:27 • 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

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.