SELECT-OPTIONS ... FOR TYPE?!?

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV
20 Beiträge • Seite 1 von 2 (current) Nächste
20 Beiträge Seite 1 von 2 (current) Nächste

SELECT-OPTIONS ... FOR TYPE?!?

Beitrag von whaslbeck (ForumUser / 28 / 3 / 0 ) »
Hallo,

kann mir jemand erklären, warum es (immer?) noch notwendig ist, eine Hilfsvariable zu deklarieren nur damit SELECT-OTIONS davon den Typ für seine RANGES ableiten kann. Gibt es einen Grund, warum man den Typ nicht direkt angeben kann?

Ich würde mir ein SELECT-OPTIONS ... FOR TYPE ... wünschen. Oder geht das irgendwie und ich mach das seit Jahren falsch?!?

Code: Alles auswählen.

SELECT-OPTIONS s_matnr FOR TYPE matnr.
wäre doch viel schöner als ein

Code: Alles auswählen.

DATA useless_matnr TYPE matnr.
SELECT-OPTIONS s_matnr FOR usless_matnr.

Walter


Re: SELECT-OPTIONS ... FOR TYPE?!?

Beitrag von black_adept (Top Expert / 3462 / 68 / 681 ) »
Weil SAP die Entwickler nicht verhätscheln möchte mit unnötigen Erleichterungen.

Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag:
DeathAndPain

live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: SELECT-OPTIONS ... FOR TYPE?!?

Beitrag von Lukas Sanders (ForumUser / 18 / 5 / 11 ) »
Es geht tatsächlich:

Code: Alles auswählen.

SELECT-OPTIONS: so_kun FOR ('KNA1-KUNNR').

START-OF-SELECTION.

SELECT *
  FROM kna1
  INTO TABLE @DATA(lt_debitoren)
  WHERE kunnr IN @so_kun.
Einfach hinter das FOR keine Programmvariable, sondern "flaches zeichenartiges Datenobjekt" angeben - in Großbuchstaben. Damit kann man sogar die Select-Options dynamisch gestalten.

Folgende Benutzer bedankten sich beim Autor Lukas Sanders für den Beitrag (Insgesamt 5):
DeathAndPainwhaslbeckewxfr-gIcke0801


Re: SELECT-OPTIONS ... FOR TYPE?!?

Beitrag von DeathAndPain (Top Expert / 1492 / 165 / 336 ) »
Funktioniert tatsächlich. Unglaublich. Nur ist es anscheinend egal, was man da als "flaches zeichenartiges Datenobjekt" angibt. Ich hab mal Folgendes ausprobiert:

Code: Alles auswählen.

REPORT ZTEST5.

DATA TPERNR TYPE STANDARD TABLE OF PERSNO.

SELECT-OPTIONS PERNR FOR (SPACE) MATCHCODE OBJECT PREM.

SELECT PERNR INTO TABLE TPERNR FROM PA0001
  WHERE PERNR IN PERNR.
Funktioniert, und die Tabelle TPERNR enthält hinterher auch die Personalnummern.

Re: SELECT-OPTIONS ... FOR TYPE?!?

Beitrag von Lukas Sanders (ForumUser / 18 / 5 / 11 ) »
Laut ABAP-Hilfe werden Low und High da einfach mit Char 45 typisiert. Das wäre natürlich für längere Suchfelder wiederum ein theoretisches Problem, was man dort eingibt scheint aber tatsächlich völlig irrelevant zu sein.

Re: SELECT-OPTIONS ... FOR TYPE?!?

Beitrag von black_adept (Top Expert / 3462 / 68 / 681 ) »
Das Problem dabei ist aber die Funktionalität der automatischen Übersetzung bei Dictionarybezug bzw. die Bezeichnung der Select Option auf dem Selektionsbildschirm. Jede der 3 folgenden Möglichkeiten verhält sich ein klein wenig anders was die Darstellung am Bildschirm angeht und was die interne Darstellung angeht ( Selektionsfelder die länger als 45 Zeichen sind werden im dynamischen Fall abgeschnitten ).

Code: Alles auswählen.

REPORT.
TABLES: kna1.
DATA: lv_kunnr TYPE fieldname VALUE 'KNA1-KUNNR'.
SELECT-OPTIONS: s_kunnr1 FOR kna1-kunnr,
                s_kunnr2 FOR ('KNA1-KUNNR'),
                s_kunnr3 FOR (lv_kunnr).
Zuletzt geändert von black_adept am 01.12.2020 15:03, insgesamt 1-mal geändert.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: SELECT-OPTIONS ... FOR TYPE?!?

Beitrag von black_adept (Top Expert / 3462 / 68 / 681 ) »
Und der wohl offensichtlichste Anwendungsfall geht leider auch nicht, da das Selektionsbild quasi beim 1. Aufruf für den Programmablauf fest eingestellt wird.

Code: Alles auswählen.

REPORT.

DATA: gv_dyn_sel TYPE fieldname.
SELECTION-SCREEN BEGIN OF SCREEN 100.
SELECT-OPTIONS: s_dyn FOR (gv_dyn_sel)  .
SELECTION-SCREEN END OF SCREEN 100.


END-OF-SELECTION.
  gv_dyn_sel = 'LFA1-LIFNR'.
  CALL SELECTION-SCREEN 100 STARTING AT 40 10.
  gv_dyn_sel = 'MARA-MATNR'.
  CALL SELECTION-SCREEN 100 STARTING AT 40 10.
Das zeigt beim 2. Aufruf des Selektionsbildes leider keine Materialnummernselektionsoption an. Sonst wäre die dynamische Variante echt brauchbar
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: SELECT-OPTIONS ... FOR TYPE?!?

Beitrag von DeathAndPain (Top Expert / 1492 / 165 / 336 ) »
black_adept hat geschrieben:
01.12.2020 14:57
Das Problem dabei ist aber die Funktionalität der automatischen Übersetzung bei Dictionarybezug bzw. die Bezeichnung der Select Option auf dem Selektionsbildschirm.
Das ist zwar richtig, aber in vielen Fällen brauche ich gar keinen Dictionarybezug und gebe den Text bei den Selektionstexten händisch ein. Da ist natürlich auch die Frage, mit welchen Sprachen die Firma arbeitet. Bei meiner Firma gibt es z.B. nur deutsch und englisch als akzeptierte Kommunikationssprachen. Diese beiden sind dann also händisch zu pflegen, und dann ist das gut. Dafür entfallen die dämlichen Dummyvariablen im Code.

Nur hat man dann halt auch keine gescheite Werthilfe mehr für die Felder, es sei denn, man kann eine explizite Suchhilfe angeben. Und wenn man das kann, dann hat man in aller Regel auch einen DDIC-Bezug für das Feld.

Re: SELECT-OPTIONS ... FOR TYPE?!?

Beitrag von a-dead-trousers (Top Expert / 3592 / 124 / 934 ) »
Apropos Anbindung einer Suchhilfe:
Dafür ist die Variante mit TABLES als Bezugstyp am besten geeignet. Wenn man nämlich die Suchhilfe mit mehr als einem Feld aufrufen bzw. nach einer F4-Auswahl mehr als nur ein Feld befüllt haben möchte geht das damit am einfachsten. Man braucht nur in der Tabelle/Struktur die beim TABLES angegeben ist, die Suchhilfe mit den gewünschten Feldern einbinden. Fertig. Der Report-Prozessor schaffte es dann automatisch zur Laufzeit alle benötigten Felder für die F4-Hilfe zu finden und zuzuordnen. Funktioniert übrigens auch mit PARAMETERS.
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.07
Basis: 7.40

Re: SELECT-OPTIONS ... FOR TYPE?!?

Beitrag von Lukas Sanders (ForumUser / 18 / 5 / 11 ) »
black_adept hat geschrieben:
01.12.2020 15:02
Und der wohl offensichtlichste Anwendungsfall geht leider auch nicht, da das Selektionsbild quasi beim 1. Aufruf für den Programmablauf fest eingestellt wird.
Mit den Screen Events geht es:

Code: Alles auswählen.

*&--- Selektionsbild

PARAMETERS: pa_fnm TYPE fieldname.
SELECT-OPTIONS: so_dyn FOR (gv_field).

*&--- Screen-Events Selektionsbild 

AT SELECTION-SCREEN OUTPUT.

  LOOP AT screen.

    CHECK screen-name CP '*SO_DYN*'.

    IF pa_fnm IS NOT INITIAL.
      screen-invisible = 0.
      screen-input = 1.
      gv_field = 'KNA1-' && pa_fnm.
    ELSE.
      screen-invisible = 1.
      screen-input = 0.
    ENDIF.

    MODIFY SCREEN.
  ENDLOOP.

*&--- Verarbeitung

START-OF-SELECTION.

  gv_where_clause = |{ pa_fnm } IN @SO_DYN|.

  SELECT *
    FROM kna1
    INTO TABLE @gt_debitoren
    WHERE (gv_where_clause).

    " ... 
Man muss bei dieser Variante allerdings einmal Enter betätigen, damit PBO ausgelöst wird.

Re: SELECT-OPTIONS ... FOR TYPE?!?

Beitrag von DeathAndPain (Top Expert / 1492 / 165 / 336 ) »
adt hat geschrieben:Apropos Anbindung einer Suchhilfe:
Dafür ist die Variante mit TABLES als Bezugstyp am besten geeignet.
Das halte ich für ein Gerücht, dass das nötig ist. Wenn ich

Code: Alles auswählen.

DATA DUMMY_KUNNR TYPE KNA1-KUNNR.

SELECT-OPTIONS s_kunnr FOR dummy_kunnr.
schreibe, dann zieht er sich - ganz ohne TABLES - die Werthilfeanbindung aus der Definition der KNA1, weil DUMMY_KUNNR darüber definiert ist.

Re: SELECT-OPTIONS ... FOR TYPE?!?

Beitrag von a-dead-trousers (Top Expert / 3592 / 124 / 934 ) »
DeathAndPain hat geschrieben:
02.12.2020 19:19
adt hat geschrieben:Apropos Anbindung einer Suchhilfe:
Dafür ist die Variante mit TABLES als Bezugstyp am besten geeignet.
Das halte ich für ein Gerücht, dass das nötig ist. Wenn ich

Code: Alles auswählen.

DATA DUMMY_KUNNR TYPE KNA1-KUNNR.

SELECT-OPTIONS s_kunnr FOR dummy_kunnr.
schreibe, dann zieht er sich - ganz ohne TABLES - die Werthilfeanbindung aus der Definition der KNA1, weil DUMMY_KUNNR darüber definiert ist.
Meine Aussage wieder mal klassich aus dem Kontext gerissen:
Wenn man MEHR ALS EIN FELD an die Suchhilfe übergeben muss geht es damit am einfachsten. Ob es NÖTIG ist, nur für ein Feld das so zu machen, darüber lässt sich natürlich streiten. Ich finde aber, im Sinne einer einheitlichen Herangehensweise zur Definition eines Selektionsbildschirms (und auch nur dafür) ist TABLES das Ding der Wahl:
  1. Man hat direkt an der SELECT-OPTION bzw. dem PARAMETER den "Bezug" auf das DDIC.
  2. Die Suchhilfenanbindung (oder die Fremschlüsselauswahl) kommt quasi "gratis" von der Struktur- oder Tabellendefinition mit.
  3. Anhand des Schlüsselwortes TABLES hat man eine (in-)direkte Abgrenzung zu sonstigen Variablen (DATA).
  4. Es ist "weniger" zu schreiben.

Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag (Insgesamt 2):
ewxDeathAndPain

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.07
Basis: 7.40

Re: SELECT-OPTIONS ... FOR TYPE?!?

Beitrag von ST22 (Specialist / 253 / 31 / 30 ) »
Aber eigentlich soll man doch auf TABLES verzichten...

Re: SELECT-OPTIONS ... FOR TYPE?!?

Beitrag von a-dead-trousers (Top Expert / 3592 / 124 / 934 ) »
ST22 hat geschrieben:
03.12.2020 14:52
Aber eigentlich soll man doch auf TABLES verzichten...
a-dead-trousers hat geschrieben:
03.12.2020 10:18
... zur Definition eines Selektionsbildschirms (und auch nur dafür) ...
EDIT:
Ich möchte meine Aussage doch noch etwas "aufweichen":
... zur Kommunikation (PAI/PBO) mit Dynpros (und auch nur dafür) ...
Dann kann man im Dynpro nämlich mit der DDIC-Beziehung arbeiten und spart sich so auch z.B. die mehrfache Defintion von Beschreibungstexten uvm.
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.07
Basis: 7.40

Re: SELECT-OPTIONS ... FOR TYPE?!?

Beitrag von ST22 (Specialist / 253 / 31 / 30 ) »
...und ich finde, damit öffnet man wieder Tor und Tür, da man ja auch wieder einen globalen Datenbereich definiert...
Ich versuche konsequent drauf zu verzichten und nehme etwas Mehrarbeit in Kauf. Ist ja auch wieder so ne Glaubensfrage ;-).


Aktuelle Forenbeiträge

BAPI_HU_PI_READ liefert veraltete Daten
vor einer Stunde von JHM 2 / 76
SD-Konditionen auslesen
Gestern von Geggo74 gelöst 4 / 376

Vergleichbare Themen

TYPE Select-options bei Importingparameter
von abap-strizi » 12.12.2005 09:49
select-options depend on select-options.
von dragospirnut1 » 19.07.2017 09:54
Select nach Parameter & Select-Options
von doeme » 10.07.2012 16:37
2 Select-Options zu einem für Select zusammenfügen
von manuk » 23.03.2005 11:02
SELECT - Options & SELECT Abfrage
von Mavrix » 14.05.2007 08:41