Methode soll multiple Select-Options Tabellen liefern

Die Objektorientierung mit ABAP®: Vererbung, Dynamische Programmierung, GUI Controls (u.a. ALV im OO).
7 Beiträge • Seite 1 von 1
7 Beiträge Seite 1 von 1

Methode soll multiple Select-Options Tabellen liefern

Beitrag von mazu (ForumUser / 60 / 1 / 0 ) »
Hallo,
Ihr kennt warscheinlich alle das Problem: diese typischen Coding-Abfragen nach bestimmten Buchungskreisen, Mitarbeitergruppen/Kreisen, Kostenstellen etc.

Ich hatte mir vor einigen Jahren da mal ein hübsches kleines ABAP-Statement gebaut, mit dem ich eine eigene DB-Tabelle ausgelesen habe, und an bestimmten Einsprungspunkten mit meine Select-Options gefüllt habe. Hat immer perfekt funktioniert.

Hier ein Beispiel aus dem alten Coding:
RANGES: SO_BUKRS fOR BKPF_BUKRS.
LOOP....
PERFORM FILL_SELECTION_TABLE TABLES S_BUKRS USING ZSX_S40-SIGN ZSX_S40-OPTI ZSX_S40-LOW ZSX_S40-HIGH.
ENDLOOP.

FORM FILL_SELECTION_TABLE TABLES T_RANGE
USING P_SIGN
P_OPTION
P_LOW
P_HIGH.

Und schwupps, die SO_BUKRS ist gefüllt.

Jetzt wollte ich das Ganze mal als Klassenmethode hinterlegen. Da Perform-Aufrufe im OO-Kontext ja verboten sind. Hab ich mir einfacher vorgestellt. Mir gelingt einfach nicht der Punkt, wo ich die Select-Option Tabelle als Exportparameter rausgeben will. Eben genau das, was normales ABAP im Perform-Aufruf locker gelingt mit der Tables Anweisung.

In meiner OO-Methode hab ich SO_BUKRS als Attribut definiert. Mit TYPE RANGE OF. Anders gehts glaub ich nicht. Als Exportparamter ist FS definiert mit TYPE ANY TABLE.

....blabla...
MOVE-CORRESPONDING TRANGE TO SO_BUKRS.
ASSIGN SO_BUKRS TO <FS>.
FS = <FS>. _-hier fliegt es auseinander, weil FS zwar namensgleiche Felder hat, aber LOW/High sind halt CSTRING-Felder. Und in SO_BUKRS sind LOW/High schon auf den Buchungsgskreis eingeschossen: C4. Ich vermute darin liegt es.

Ich würde halt auf der anderen Seite der Methode am liebsten ja nach zu füllender SO-Tabelle das direkt bekommmen, bzw. notfalls auch als ANY TABLE.

CALL METHOD ZCLPT_UTIL=>SET_SELECTION_TABLE
EXPORTING
ZSTPT_MS = LS_ZSTPT_MS
IMPORTING
FS = <T>. "oder am besten direkt in DIESEM FALL SO_BUKRS/SO_KOSTL/...


Gruss

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


Re: Methode soll multiple Select-Options Tabellen liefern

Beitrag von a-dead-trousers (Top Expert / 4395 / 223 / 1182 ) »
Früher hatte ich mir mal so eine Methode wie du sie gerne hättest erstellt. Aber mit der neuen Syntax geht das Befüllen eigentlich ziemlich einfach von der Hand:

Code: Alles auswählen.

append value #( sign = 'I' option = 'EQ' low = 'Wert1' ) to rt_value.
Meine alte Lösung wird daher sukzessive zurückgebaut, weil sie ziemlich rechenintensiv ist (Prüfung der Datentypen usw.)

EDIT:
Als kleine Info, das war die Schnittstellenbeschreibung meiner Methode, um dir zu zeigen wie man sowas am ehesten umsetzen könnte, du sollst ja auch was lernen:

Code: Alles auswählen.

  class-methods APPEND_RANGE
    importing
      !ID_SIGN type CSEQUENCE default 'I'
      !ID_OPTION type CSEQUENCE default 'EQ'
      !IA_LOW type ANY
      !IA_HIGH type ANY optional
    changing
      !CT_RANGE type STANDARD TABLE .
Da alles auf dynamischer Typisierung aufbaut, waren eine Menge an Typprüfungen notwendig um die Funktionsweise sicherzustellen, was das ganze dann wieder so umständlich zu handhaben machte, dass ich froh war wie wir auf 7.50 umgestiegen sind.

Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag:
mazu

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: Methode soll multiple Select-Options Tabellen liefern

Beitrag von black_adept (Top Expert / 4087 / 126 / 940 ) »
@a-d-t: Was hattest du denn da für Typprüfungen eingebaut? Ich hätte jetzt in der Methode etwa folgendes erwartet, aber den Aufrufer für eventuelle Prüfungen haftbar gemacht.

Code: Alles auswählen.

append initial line to CT_RANGE assigning <rangeline>
assign component 1 of structure <rangeline> to <fs>. <fs> = id_sign.
assign component 2 of structure <rangeline> to <fs>....
.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Methode soll multiple Select-Options Tabellen liefern

Beitrag von mazu (ForumUser / 60 / 1 / 0 ) »
Hallo,
@a-d-t super, so gehts natürlich auch mit dem neuen Coding. Danke für den Tip.
Gruss

Re: Methode soll multiple Select-Options Tabellen liefern

Beitrag von a-dead-trousers (Top Expert / 4395 / 223 / 1182 ) »
black_adept hat geschrieben:
08.06.2021 15:26
@a-d-t: Was hattest du denn da für Typprüfungen eingebaut? Ich hätte jetzt in der Methode etwa folgendes erwartet, aber den Aufrufer für eventuelle Prüfungen haftbar gemacht.

Code: Alles auswählen.

append initial line to CT_RANGE assigning <rangeline>
assign component 1 of structure <rangeline> to <fs>. <fs> = id_sign.
assign component 2 of structure <rangeline> to <fs>....
.
Ob es sich bei der Tabelle tatsächlich um einen Range handelt.
1. Die vier Felder per Name prüfen
2. Feld drei und vier vom selben Datentyp
usw.
Sowas in der Art 😉
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: Methode soll multiple Select-Options Tabellen liefern

Beitrag von black_adept (Top Expert / 4087 / 126 / 940 ) »
a-dead-trousers hat geschrieben:
08.06.2021 18:44
Ob es sich bei der Tabelle tatsächlich um einen Range handelt.
1. Die vier Felder per Name prüfen
2. Feld drei und vier vom selben Datentyp
usw.
Sowas in der Art 😉
Ok - ich verstehe die Intention und da du das Ganze ja zurück baust ist es eigenlich eh egal. Aber trotzdem mal so eine grundsätzliche Frage: Warum die Prüfungen überhaupt? Die Routine füllt doch erst mal nur eine Tabelle. Wenn diese sinnlos strukturiert ist ( weil ANY TABLE ) ist das halt so - dann hat der Aufrufer aber eh ein Problem, sobald er diese Tabelle irgendwo bei einer WHERE-Bedingung tatsächlich als Range einsetzen möchte und bekommt da die Fehlermeldung quasi "frei Haus" in Form eines Dumps geliefert.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Methode soll multiple Select-Options Tabellen liefern

Beitrag von a-dead-trousers (Top Expert / 4395 / 223 / 1182 ) »
black_adept hat geschrieben:
09.06.2021 11:18
Ok - ich verstehe die Intention und da du das Ganze ja zurück baust ist es eigenlich eh egal. Aber trotzdem mal so eine grundsätzliche Frage: Warum die Prüfungen überhaupt? Die Routine füllt doch erst mal nur eine Tabelle. Wenn diese sinnlos strukturiert ist ( weil ANY TABLE ) ist das halt so - dann hat der Aufrufer aber eh ein Problem, sobald er diese Tabelle irgendwo bei einer WHERE-Bedingung tatsächlich als Range einsetzen möchte und bekommt da die Fehlermeldung quasi "frei Haus" in Form eines Dumps geliefert.
Ein Wort: Sanitizing
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

Seite 1 von 1

Vergleichbare Themen

15
Antw.
1939
Views
Select-Options an Methode übergeben
von Karl der Große » 31.01.2024 17:00 • Verfasst in ABAP® für Anfänger
7
Antw.
7714
Views
Select Options und Range Tabellen
von gs3rr4 » 29.12.2016 14:12 • Verfasst in ABAP® für Anfänger
0
Antw.
2804
Views
HTML Multiple Select/Option Werte lesen
von BubbleSort » 09.08.2016 10:08 • Verfasst in Web-Dynpro, BSP + BHTML
0
Antw.
2272
Views
select-options depend on select-options.
von dragospirnut1 » 19.07.2017 09:54 • Verfasst in ABAP® Core
10
Antw.
6668
Views
2 Select-Options zu einem für Select zusammenfügen
von manuk » 23.03.2005 11:02 • Verfasst in ABAP® Core

Aktuelle Forenbeiträge

Dialog-Container mit Toolbar/Status
vor einer Stunde von DeathAndPain gelöst 20 / 2402
Zeilenumbrüche ersetzen
vor 22 Stunden von ralf.wenzel 6 / 187
SAP Trial Version für SAP Fiori
vor 2 Tagen von tar 2 / 1563

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

Dialog-Container mit Toolbar/Status
vor einer Stunde von DeathAndPain gelöst 20 / 2402
Zeilenumbrüche ersetzen
vor 22 Stunden von ralf.wenzel 6 / 187
SAP Trial Version für SAP Fiori
vor 2 Tagen von tar 2 / 1563

Unbeantwortete Forenbeiträge

Daten an Tabelle binden
vor 2 Tagen von Bright4.5 1 / 630
aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 2256
Hilfe bei SWEC/SWE2
letzen Monat von retsch 1 / 8844