ALV Interne Tabellen füllen Radiobuttons

Liebe/-r Experte/-in,

Hallo,

ich stehe vor einem Problem. Ich soll bestimmte Felder aus insgesamt 9 Tabellen ausgeben, wieder mal mithilfe des ALV. Da es sich um nicht transparente Tabellen handelt, konnte ich kein VIEW anlegen, und hab daher eine Struktur angelegt.
Das Programm soll wie folgt sein: Ein Parameter für den jeweiligen Bukrs, und per 4 Radio Buttons sollen 4 verschiedene Listen ausgegebn werden. Einmal die Belegarten/Nummernkreise, dann Debitoren Kontengruppen, Kreditoren Kontengruppen und als letztes noch Sachbearbeiter. Außerdem soll man ebenfalls noch per 2 SELECT-OPTION mehrere Kontenruppen angeben können für Debitoren und Kreditiroen. Mein Problem liegt in der Verknüpfung der Radiobuttons und der SELECT-OPTIONS mit den Datenbankfeldern, sodass jeweils die richtigen Felder in die ALV selektiert werden. Ich weiß, dass ich zunächst Inhalte der Datenbanktabelle in eine interne Tabelle einfügen soll, und dann eine Ereignistabelle bzw.Ausgabetabelle erstellen soll. Doch leider beherrsche ich dies noch nicht so gut, und aufgrund der Vielzahl der Tabellen erscheint mir dies doch recht komplex. In einem anderen Programm, waren es 3 Tabellen (SKA1,SKB1 und SKAT), das Include/Unterprogramm des Programms sah so aus:

FORM f_fill_tables.

DATA: lv_lines TYPE i.

CLEAR: it_ska1[], it_skb1[], it_skat[],it_tab[].

* Einträge aus SKA1-Tabelle auswählen
DESCRIBE TABLE so_ktonr LINES lv_lines.

IF lv_lines > 0.
* Selektion über Kontenplan und Kontennummer
SELECT * FROM ska1 INTO TABLE it_ska1
WHERE ktopl = p_ktplan AND saknr IN so_ktonr.

ELSE.
* Selektion nur über Kontenplan
SELECT * FROM ska1 INTO TABLE it_ska1
WHERE ktopl = p_ktplan.

ENDIF.

* passende Einträge aus der SKB1-Tabelle auswählen

DESCRIBE TABLE it_ska1 LINES lv_lines.

IF lv_lines > 0.

IF NOT p_bkreis IS INITIAL.
* Selection über Kontennummer und Buchungskreis
SELECT * FROM skb1 INTO TABLE it_skb1
FOR ALL ENTRIES IN it_ska1
WHERE saknr = it_ska1-saknr AND bukrs = p_bkreis.
ELSE.
* Selektion nur über Kontennummer
SELECT * FROM skb1 INTO TABLE it_skb1
FOR ALL ENTRIES IN it_ska1
WHERE saknr = it_ska1-saknr.
ENDIF.

* passende Bezeichnungen auswählen
SELECT * FROM skat INTO TABLE it_skat
FOR ALL ENTRIES IN it_ska1
WHERE SPRAS = sy-langu AND KTOPL = it_ska1-ktopl
AND SAKNR = it_ska1-saknr.

ENDIF.

* Ergebnistabelle zusammenbauen

LOOP AT it_skb1 INTO wa_skb1.
* Arbeitszeile initialisieren
CLEAR wa_zeile.

* Komponenten der SKB1-Tabelle übernehmen
wa_zeile-BUKRS = wa_skb1-BUKRS.
wa_zeile-SAKNR = wa_skb1-SAKNR.
wa_zeile-BEGRU = wa_skb1-BEGRU.
wa_zeile-BUSAB = wa_skb1-BUSAB.
wa_zeile-DATLZ = wa_skb1-DATLZ.
wa_zeile-ERDAT_SKB1 = wa_skb1-ERDAT.
wa_zeile-ERNAM_SKB1 = wa_skb1-ERNAM.
wa_zeile-FDGRV = wa_skb1-FDGRV.
wa_zeile-FDLEV = wa_skb1-FDLEV.
wa_zeile-FIPLS = wa_skb1-FIPLS.
wa_zeile-FSTAG = wa_skb1-FSTAG.
wa_zeile-HBKID = wa_skb1-HBKID.
wa_zeile-HKTID = wa_skb1-HKTID.
wa_zeile-KDFSL = wa_skb1-KDFSL.
wa_zeile-MITKZ = wa_skb1-MITKZ.
wa_zeile-MWSKZ = wa_skb1-MWSKZ.
wa_zeile-STEXT = wa_skb1-STEXT.
wa_zeile-VZSKZ = wa_skb1-VZSKZ.
wa_zeile-WAERS = wa_skb1-WAERS.
wa_zeile-WMETH = wa_skb1-WMETH.
wa_zeile-XGKON = wa_skb1-XGKON.
wa_zeile-XINTB = wa_skb1-XINTB.
wa_zeile-XKRES = wa_skb1-XKRES.
wa_zeile-XLOEB = wa_skb1-XLOEB.
wa_zeile-XNKON = wa_skb1-XNKON.
wa_zeile-XOPVW = wa_skb1-XOPVW.
wa_zeile-XSPEB_SKB1 = wa_skb1-XSPEB.
wa_zeile-ZINDT = wa_skb1-ZINDT.
wa_zeile-ZINRT = wa_skb1-ZINRT.
wa_zeile-ZUAWA = wa_skb1-ZUAWA.
wa_zeile-ALTKT = wa_skb1-ALTKT.
wa_zeile-XMITK = wa_skb1-XMITK.
wa_zeile-RECID = wa_skb1-RECID.
wa_zeile-FIPOS = wa_skb1-FIPOS.
wa_zeile-XMWNO = wa_skb1-XMWNO.
wa_zeile-XSALH = wa_skb1-XSALH.
wa_zeile-BEWGP = wa_skb1-BEWGP.
wa_zeile-INFKY = wa_skb1-INFKY.
wa_zeile-TOGRU = wa_skb1-TOGRU.

* Komponenten der SKA1-Tabelle füllen
READ TABLE it_ska1 INTO wa_ska1 WITH KEY saknr = wa_skb1-saknr.

IF sy-subrc = 0.

MOVE-CORRESPONDING wa_ska1 TO wa_zeile.

* dabei auch zugehörige Bezeichnungen füllen
READ TABLE it_skat INTO wa_skat WITH KEY
SPRAS = sy-langu KTOPL = wa_ska1-ktopl
SAKNR = wa_ska1-saknr.

IF sy-subrc = 0.
wa_zeile-TXT20 = wa_skat-TXT20.
wa_zeile-TXT50 = wa_skat-TXT50.
ENDIF.

ENDIF.

* gefüllte Zeile an Tabelle anhängen
APPEND wa_zeile TO it_tab.

ENDLOOP.

ENDFORM. " f_get_tables

So ähnlich muss es auch bei dem neuen Programm sein, bloß sind es diesmal 9 Tabellen^^. Also hier:
Jeweils eine ALV-Liste mit den hier unten angegebn Tabellen-Feldnamen soll erscheinen.
1)T003-BLART T003T-LTEXT T003-NUMKR NRIV-FROMNUMBER NRIV-TONUMBER NRIV-NRLEVEL NRIV-EXTERNIND

2)T077D-KTOKD T077X-TXT30 T077D-NUMKR

3)T077K-KTOKK T077Y-TXT30 T077K-NUMKR NRIV (wieder die selben Felder wie oben)

4)T001S-BUSAB T001S-SNAME T001S-USNAM

*Radiobuttons
IF p_rad1 = ‚X‘.

ELSEIF p_rad2 = ‚X‘.

ELSEIF p_rad3 = ‚X‘.

ELSEIF p_rad4 = ‚X‘.

ENDIF.

Ein Parameter: Buchungskreis
zu den 4 Radiobutoons Auswahl:

  1. Radiobutton:
    Belegarten/Nummernkreise

2)Debitoren Kontengruppen
*zusätzlich SELECT-OPTION um mehrere Debitoren Kontengruppen auszuwählen(soll rechts davon erscheinen)
3) Kreditoren Kontengruppen
*zusätzlich SELECT-OPTION um mehrere Kreditoren Kontengruppen auszuwählen(soll rechts davon erscheinen)

  1. Sachbearbeiter

Ich hoffe Sie haben einige gute Ansätze oder ähnliche Programme, und könnt mir irgendwie behilflich sein. Ich bedanke mich für Ihre großzügige Hilfe im Voraus.

Mit freundlichen Grüßen

Hallo,
leider müsste ich mich da erstmal genauer rein lesen und im Moment geht das leider nicht.
Sorry

Hallo!

gehe Schritt für Schritt vor!
Mir scheint, dass es sich im Grunde um vier Anforderungen handelt, die aber zusammen in einem Programm dargestellt werden sollen.

Mache zur Not für jedes Ausgabe erst einmal ein eigenes Programm mit eigenem Selektionsbild.
Dann machst du ein fünftes Programm aus dem heraus du die anderen aufrufst.

Hallo!

Wenn es schon ein Beispiel für drei Tabellen gibt… wo ist dann das Problem? Bitte einfach mal im SDN suchen… wir müssen das Rad ja nicht zweimal erfinden :wink: Es wird aber ganz sicher keine Beispiele für mehr als 2-3 Tabellen geben… Da müßte man dann das Angelesene adaptieren.

BTW: Es ist kein Problem mehrere ALV Grids auf einem Custom-Control mit eigener Funktionsleiste darzustellen.

Wenn es also ganz detailliert bei der Programmerstellung irgendwo Probleme gibt, will ich gerne helfen - ein komplettes Programm kann ich aber nicht beisteuern. Sorry.

Hallo,

danke für deine Unterstützung, ein ganzes Programm habe ich auch nicht benötigt.

Grüße Rufat

Hallo,

Ich habe mal ein Gerüst für ein Programm vorgegeben und mit Bemerkungen versorgt, mit dem das klappen sollte.

Ich habe nicht die Zeit, das komplett auszuarbeiten aber es sollte eigentlich weiterhelfen.

Notfalls bitte nachfragen.

Gruß
Christian

REPORT ZBC_TEST03.

CONSTANTS: MARKED(01) TYPE C VALUE ‚X‘.

TABLES: KNA1,
T003,
T003T,
NRIV.

SELECTION-SCREEN BEGIN OF BLOCK AUSWAHL.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 01(25) TEXT-S01.
SELECTION-SCREEN POSITION 33.
PARAMETERS: P_BELNUM RADIOBUTTON GROUP R01.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 01(25) TEXT-S02.
SELECTION-SCREEN POSITION 33.
PARAMETERS: P_DEBKON RADIOBUTTON GROUP R01.
SELECTION-SCREEN COMMENT 40(18) TEXT-S03.
SELECTION-SCREEN POSITION 70.
SELECT-OPTIONS: S_DEBKON FOR KNA1-KTOKD.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK AUSWAHL.

* Hier die restlichen Parameter einfügen

* Interne Tabellen
* Du kannst diese Tabellen natürlich auch im DDIC definieren,
* dann sieht das so aus und ist für den ALV einafcher.
* DATA: I_BELNUM like ZBELNUM occurs 0 with header line.
DATA: BEGIN OF I_BELNUM OCCURS 0,
* Jetzt die benötigten Felder aufzählen, jeweils mit dem
* Namen aus den Originaltabellen und mit LIKE Bezug
* auf diese Originalfelder.
* WICHTIG IST NUR, DAS DIE FELDNAMEN NICHT DOPPELT VORKOMMEN
* DANN MUßT DU UMBENENNEN UND DIE VERSORGUNG ANCH DEM
* MOVE-CORRESPONDING VON HAND MACHEN.

BELART LIKE T003-BELART,
LTEXT LIKE T003T-LTEXT,
FROMNUMBER LIKE NRIV-FROMNUMBER,
* usw.
END OF I_BELNUM.

START-OF-SELECTION.

CASE MARKED.
* Wichtig: Immer alle Felder einer Radiobutton-Group abfragen

WHEN P_BELNUM.
* Verarbeitung für BELNUM

WHEN P_DEBKON.
* Verarbeitung für DEBKON
REFRESH I_DEBKON.
SELECT * FROM KNA1 WHERE KTOKD IN S_DEBKON.
CLEAR I_DEBKON.
MOVE-CORRESPONDING KNA1 TO I_DEBKON.
* Weitere Datenbeschaffung

* Fertig mit Datenbeschaffung
APPEND I_DEBKON.

* Wenn alle Daten in der internen Tabelle, diese per ALV ausgeben

ENDCASE.

Hallo Rufat,

die prinzipielle Vorgehensweise ist:

  1. Interne Tabelle anlegen mit all den Feldern, die ausgegeben werden sollen, dabei sollten die Ausgabefelder den gleichen Namen wie die Tabellen haben (der Einfachheit halber)

  2. Deine Tabellen selectieren und mit move-corresponding die Werte in Deine interne Tabelle übertragen.

  3. Mit dem Funktionsbaustein für das ALV die ALV-Ausgabe tätigen.

Ich hoffe es hilft Dir einwenig.

Karsten