SELECT OPTIONS und Auswahlmaske

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

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

SELECT OPTIONS und Auswahlmaske

Beitrag von Abapsocke (ForumUser / 49 / 6 / 0 ) »
Hallo,

für eine Übung möchte ich mit SELECT OPTIONS arbeiten und in einer Maske soll es möglich sein in einer Tabelle nach einem bestimmten Namen zu suchen und die damit verbundenen Werte anzuzeigen. Im Beispiel ist das ein Pilot dem Flugstunden zugeordnet sind.

Allerdings wirft mein CODE immer alle Namen der Tabelle aus. So ganz klar ist mir die Struktur und Arbeit mit SELECT OPTIONS noch nicht. Was muss ich einbauen damit eine entsprechende Anfrage funktioniert?

Hier ist der entsprechende Code:

Code: Alles auswählen.

REPORT  ZLK_FLU_PARA1.

TABLES: ZLK_PILOT.

PARAMETERS: p_obj TYPE ZLK_PILOT-NAME.

SELECT-OPTIONS: s_obj FOR ZLK_PILOT-NAME.

DATA: lv_pilot TYPE string,
      lv_pnr TYPE p DECIMALS 2,  "im Augenblick irrelevant
      lt_pilot TYPE TABLE OF ZLK_PILOT,
      lw_pilot TYPE ZLK_PILOT.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_obj.

  SELECT name UP TO 20 ROWS FROM ZLK_PILOT
    INTO CORRESPONDING FIELDS OF TABLE lt_pilot.  

START-OF-SELECTION.

SELECT name flugst FROM ZLK_PILOT  "Name und Flugstunden sollen selektiert werden
  INTO CORRESPONDING FIELDS OF TABLE lt_pilot
  WHERE name IN s_obj.

 WRITE: / 'Tabelleninhalt'.

 LOOP AT lt_pilot INTO lw_pilot.

* Checkbox - Objektname anzeigen oder nicht  "später möchte ich eine Checkbox hinzu fügen
*    IF p_name IS INITIAL.  "im Augenblick irrelevant
      WRITE: / lw_pilot-name, lw_pilot-flugst.
*    ELSE.  "im Augenblick irrelevant
*      WRITE: / ls_tadir-obj_name, ls_tadir-author.
*    ENDIF.  "im Augenblick irrelevant

  ENDLOOP.

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


Re: SELECT OPTIONS und Auswahlmaske

Beitrag von DeathAndPain (Top Expert / 2028 / 273 / 426 ) »
Dein Code sieht soweit richtig aus, was s_obj angeht. Völlig unklar ist mir allerdings Zweck und Nutzen des Parameters p_obj. Ich hätte gesagt, lass den ersatzlos weg, ebenso wie den AT SELECTION-SCREEN-Block. Im Selektionsbild kannst Du den/die gewünschten Namen dann in s_obj einschränken. Das sollte funktionieren; Du benutzt s_obj korrekt in Deinem SELECT.

Beachte aber, dass der IN-Parameter keine Einschränkung darstellt, wenn Du im entsprechenden SELECT-OPTIONS-Feld nichts eingegeben hast. Dann wirft der SELECT also alle existierenden Datensätze der Tabelle aus. Das ist durchaus beabsichtigt, da Einschränkungen dadurch optional werden. Du könntest z.B. mehrere SELECT-OPTIONS für verschiedene Tabellenspalten auf Deinen Selektionsbildschirm packen und alle davon in Deiner WHERE-Bedingung verwursten. Dann hast Du bei der Benutzung des Reports die Wahl, welche Spalten Du einschränken möchtest. Die übrigen stören nicht, obwohl sie auch per IN in Deiner WHERE-Bedingung stehen.

Den p_obj-Parameter benutzt Du gar nicht, also macht der auch nix.
Wenn wir einer Partei die Regierungsbeteiligung verweigern, die von einer Mehrheit gewählt worden ist, weil wir diese Partei für schlecht halten, da wir einer anderen Partei angehören, wie ist dann unsere eigene demokratische Gesinnung zu bewerten?

Re: SELECT OPTIONS und Auswahlmaske

Beitrag von Abapsocke (ForumUser / 49 / 6 / 0 ) »
Hm,
Ich habe mich an einem Codeschnipsel orientiert. Das p_obj dient vermutlich zur Verdeutlichung eines Codeteiles den ich für mein Programm gar nicht brauche (jedenfalls noch nicht). Ich habe diesen nun auskommentiert. Ebenso wie AT SELECTION. Die Einschränkung im Selektionsbild funktioniert allerdings nicht. Ich habe dort nun zwei nebeneinanderstehende Eingabefelder. Wenn ich dort irgendetwas eingebe, ob nun einen Namen aus der Tabelle oder nicht, bekomme ich nach Durchführung, bzw starten des Programmes keine Angaben mehr. In dem Fall wird nur der Titel des Programms, sowie "Tabelleninhalt" ausgegeben, aber keine Daten der Tabelle.

Nur wenn ich nichts in das Feld schreibe, werden alle Namen und Flugstunden ausgegeben. Die Tabelle ist gefüllt und funktioniert wenn ich sie manuell 'hardcoded' anspreche auch.

Immerhin habe ich durch die Fehlersuche schon ein paar neue Dinge gelernt.

Ich habe mal den Code überarbeitet und dem p_obj auch eine Existenzberechtigung verschafft. Leider gibt es immer noch keine Ausgabe sobald ich ein Feld befülle.

Code: Alles auswählen.

*&---------------------------------------------------------------------*
*& Report  ZLK_FLU_PARA1
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  ZLK_FLU_PARA1.

TABLES: ZLK_PILOT.

PARAMETERS: p_obj TYPE ZLK_PILOT-NAME.

SELECT-OPTIONS: s_obj FOR ZLK_PILOT-NAME.

DATA: lv_pilot TYPE string,
      lv_pnr TYPE p DECIMALS 2,
      lt_pilot TYPE TABLE OF ZLK_PILOT,
      lw_pilot TYPE ZLK_PILOT,

      lv_name TYPE string,
      lv_flugst TYPE i.


*AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_obj.

*  SELECT name UP TO 20 ROWS FROM ZLK_PILOT
*    INTO CORRESPONDING FIELDS OF TABLE lt_pilot.

START-OF-SELECTION.

*Parametereingabe

SELECT SINGLE name flugst FROM ZLK_PILOT INTO (lv_name,lv_flugst)
  WHERE name EQ p_obj.

WRITE: / lv_name, lv_flugst.

CLEAR: lv_name, lv_flugst.

SELECT name flugst FROM ZLK_PILOT
  INTO CORRESPONDING FIELDS OF TABLE lt_pilot
  WHERE name IN s_obj.

 WRITE: / 'Tabelleninhalt'.

 LOOP AT lt_pilot INTO lw_pilot.

* Checkbox - Objektname anzeigen oder nicht
*    IF p_name IS INITIAL.
      WRITE: / lw_pilot-name, lw_pilot-flugst.
*    ELSE.
*      WRITE: / ls_tadir-obj_name, ls_tadir-author.
*    ENDIF.

  ENDLOOP.

  CLEAR: lw_pilot-name, lw_pilot-flugst.

Re: SELECT OPTIONS und Auswahlmaske

Beitrag von DeathAndPain (Top Expert / 2028 / 273 / 426 ) »
Wenn Du bei s_obj kein Feld befüllst, dürfte auch keine Ausgabe rauskommen, denn den Inhalt des LOOPs, der die Ausgabe machen würde, hast Du ja auskommentiert.

Ich habe folgende Vermutung: Die Namen in Deiner Tabelle enthalten Groß- und Kleinbuchstaben. Da Du aber nicht angegeben hast, dass Dein s_obj bzw. p_obj Kleinbuchstaben enthalten darf, wandelt er Dir jede Eingabe sofort in Großbuchstaben. Das siehst Du sehr schön, wenn Du was eintippst und zunächst nur Enter drückst.

In diesem Falle ist die Lösung des Problems recht einfach. Ändere Deine SELECT-OPTIONS wie folgt (den PARAMETERS entsprechend, sofern Du den noch brauchst):

SELECT-OPTIONS s_obj FOR ZLK_PILOT-NAME LOWER CASE.

Natürlich muss die Groß/Kleinschreibung präzise so sein wie auf der Tabelle, sonst findest Du in der Tat nichts!

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

Wenn wir einer Partei die Regierungsbeteiligung verweigern, die von einer Mehrheit gewählt worden ist, weil wir diese Partei für schlecht halten, da wir einer anderen Partei angehören, wie ist dann unsere eigene demokratische Gesinnung zu bewerten?

Re: SELECT OPTIONS und Auswahlmaske

Beitrag von Abapsocke (ForumUser / 49 / 6 / 0 ) »
cool,

Ja, damit hast du den Nagel auf den Kopf getroffen. Vor 5 Minuten bin ich selbst darüber gestolpert und deine Lösung ist noch schicker als meine. :D Über Lower und Highercase kann man schon ganz schön leicht stolpern, vor allem da PARAMETERS und SELECT-OPTIONS Standardmäßig alles in Großbuchstaben haben wollen.

Da aber eine Folgefrage: Wie kann ich s_obj und P-obj erlauben auch Kleinbuchstaben zu enthalten?

Vielen Dank und Gruß

Re: SELECT OPTIONS und Auswahlmaske

Beitrag von 4byte (Specialist / 124 / 37 / 35 ) »
DeathAndPain hat geschrieben:
SELECT-OPTIONS s_obj FOR ZLK_PILOT-NAME LOWER CASE.
Es gibt 10 Menschen die binär verstehen :)

Re: SELECT OPTIONS und Auswahlmaske

Beitrag von DeathAndPain (Top Expert / 2028 / 273 / 426 ) »
Wie 4byte schon sagt, habe ich Dir die Antwort auf diese Frage bereits gegeben. ;-)

Tipp: Wenn jemand Dir ein neues ABAP-Schlüsselwort verrät, dass Du noch nicht kennst (wie offenbar in diesem Fall), gib es mal in den Editor ein, setze den Cursor drauf, drücke F1 und lies Dir die Online-Hilfe dazu durch. So lernt man die Möglichkeiten schön kennen.
Wenn wir einer Partei die Regierungsbeteiligung verweigern, die von einer Mehrheit gewählt worden ist, weil wir diese Partei für schlecht halten, da wir einer anderen Partei angehören, wie ist dann unsere eigene demokratische Gesinnung zu bewerten?

Re: SELECT OPTIONS und Auswahlmaske

Beitrag von DeathAndPain (Top Expert / 2028 / 273 / 426 ) »
Und noch ein Tipp: Da kein Anwender sich bei Suchen nach Textbegriffen um präzise Groß/Kleinschreibung kümmern mag, ist es in SAP üblich, bei Tabellen, die solche Begriffe enthalten, den gleichen Begriff noch in einer weiteren Spalte zu speichern, dort aber in Großbuchstaben gewandelt. Diese Spalte kannst Du dann für Suchvorgänge verwenden (solltest dann aber auch einen Datenbanktabellenindex dafür anlegen).

Im SAP-Standard vorhandene Beispiele, die Du Dir anschauen kannst, sind z.B. die Tabellen MAKT (Texte zu Materialien mit den Feldern MAKTX (Groß/Kleinschreibung) und MAKTG (alles groß) oder im HCM die PA0002 mit den Feldern NACHN (Groß/Kleinschreibung) und NCHMC (in Großschreibung gewandelt).
Wenn wir einer Partei die Regierungsbeteiligung verweigern, die von einer Mehrheit gewählt worden ist, weil wir diese Partei für schlecht halten, da wir einer anderen Partei angehören, wie ist dann unsere eigene demokratische Gesinnung zu bewerten?

Re: SELECT OPTIONS und Auswahlmaske

Beitrag von Abapsocke (ForumUser / 49 / 6 / 0 ) »
Ja, den Info-Text und das mit F1 kannte ich ja.
Mich wunderte nur das die LOWER CASE Anweisung in dem Fall dafür sorgt das ich den Namen mit Groß und Kleinbuchstaben schreiben kann. Genau das ging aus dem Info Text für mich nicht hervor, obwohl es funktioniert. Ich dachte das dann alles in Kleinbuchstaben umgewandelt wird.

Re: SELECT OPTIONS und Auswahlmaske

Beitrag von DeathAndPain (Top Expert / 2028 / 273 / 426 ) »
Mich wunderte nur das die LOWER CASE Anweisung in dem Fall dafür sorgt das ich den Namen mit Groß und Kleinbuchstaben schreiben kann. Genau das ging aus dem Info Text für mich nicht hervor
Wirklich nicht!?

Bild
Wenn wir einer Partei die Regierungsbeteiligung verweigern, die von einer Mehrheit gewählt worden ist, weil wir diese Partei für schlecht halten, da wir einer anderen Partei angehören, wie ist dann unsere eigene demokratische Gesinnung zu bewerten?

Re: SELECT OPTIONS und Auswahlmaske

Beitrag von Abapsocke (ForumUser / 49 / 6 / 0 ) »
wirklich nicht :D
Wirkung

Diese Anweisung bewirkt, dass einzelne Zeichen der zeichenartigen Variablen text umgewandelt werden. Entweder kann mit der Angabe CASE die Groß-/Kleinschreibung umgewandelt werden oder mit USING eine Umwandlung gemäß einem Muster erfolgen. Die Variable text muss zeichenartig sein.
Liegt daran das die Anzeige der F1 Hilfe sich daran orientiert wo das LOWER CASE steht. In den allgemeinen Informationen über LOWER CASE wenn es nicht an PARAMETERS steht war dieser Hinweis nicht. Das beweist das die Hilfe ein sehr nützliches Tool ist, solange im richtigen Kontext geklickt wird.

Seite 1 von 1

Vergleichbare Themen

0
Antw.
4509
Views
select-options depend on select-options.
von dragospirnut1 » 19.07.2017 09:54 • Verfasst in ABAP® Core
4
Antw.
21944
Views
Select nach Parameter & Select-Options
von doeme » 10.07.2012 16:37 • Verfasst in ABAP® für Anfänger
2
Antw.
5786
Views
SELECT - Options & SELECT Abfrage
von Mavrix » 14.05.2007 08:41 • Verfasst in ABAP® für Anfänger
24
Antw.
9639
Views
Select-Options
von christof » 10.12.2014 15:13 • Verfasst in ABAP® für Anfänger
1
Antw.
3603
Views
SELECT-OPTIONS und OOP
von Troilus » 20.12.2007 05:04 • Verfasst in ABAP Objects®

Ü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.