Abhängigkeit von Select-Options

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

Getting started ... Alles für einen gelungenen Start.
35 Beiträge • Seite 1 von 3 (current) Nächste
35 Beiträge Seite 1 von 3 (current) Nächste

Abhängigkeit von Select-Options

Beitrag von patlau (Specialist / 126 / 11 / 0 ) »
Guten Morgen,

habe 3 Select-Options als Listboxen.
Hier der Code :

Code: Alles auswählen.

  PERFORM infos.
  if layer = 'L01'.
    DELETE l_t_rsdodso WHERE odsobject(2) <> 'D1' .
  ELSEIF layer = 'L02'.
    DELETE l_t_rsdodso WHERE odsobject(2) <> 'D3'.
  ELSEIF layer = 'L03'.
    DELETE l_t_rsdodso WHERE odsobject(2) <> 'D5'.
  ELSEIF layer = 'L04'.
    DELETE l_t_rsdodso WHERE odsobject(2) <> 'D7'.
  Endif.
  PERFORM ausgabe.

  Perform infos.
  if modul = 'M01'.
    Delete l_t_rsdodso Where odsobject+2(2) <> 'CO'.
  ELSEIF modul = 'M02'.
    Delete l_t_rsdodso Where odsobject+2(2) <> 'CP'.
  ELSEIF modul = 'M03'.
    Delete l_t_rsdodso Where odsobject+2(2) <> 'CS'.
  ELSEIF modul = 'M04'.
    Delete l_t_rsdodso Where odsobject+2(2) <> 'DP'.
  ELSEIF modul = 'M05'.
    Delete l_t_rsdodso Where odsobject+2(2) <> 'FI'.
  ELSEIF modul = 'M06'.
    Delete l_t_rsdodso Where odsobject+2(2) <> 'HR'.
  ELSEIF modul = 'M07'.
    Delete l_t_rsdodso Where odsobject+2(2) <> 'LE'.
  ELSEIF modul = 'M08'.
    Delete l_t_rsdodso Where odsobject+2(2) <> 'MD'.
  ELSEIF modul = 'M09'.
    Delete l_t_rsdodso Where odsobject+2(2) <> 'MM'.
  ELSEIF modul = 'M10'.
    Delete l_t_rsdodso Where odsobject+2(2) <> 'PM'.
  ELSEIF modul = 'M11'.
    Delete l_t_rsdodso Where odsobject+2(2) <> 'PP'.
  ELSEIF modul = 'M12'.
    Delete l_t_rsdodso Where odsobject+2(2) <> 'PS'.
  ELSEIF modul = 'M13'.
    Delete l_t_rsdodso Where odsobject+2(2) <> 'QM'.
  ELSEIF modul = 'M14'.
    Delete l_t_rsdodso Where odsobject+2(2) <> 'SD'.
  ELSEIF modul = 'M15'.
    Delete l_t_rsdodso Where odsobject+2(2) <> 'SN'.
  ELSEIF modul = 'M16'.
    Delete l_t_rsdodso Where odsobject+2(2) <> 'TD'.
  ENDIF.
  PERFORM ausgabe.

  PERFORM infos.
  if gruppe = 'G01'.
    Delete l_t_rsdodso WHERE odsobject+4(2) <> 'SL'.
  ELSEIF gruppe = 'G02'.
    DELETE l_t_rsdodso WHERE odsobject+4(2) <> 'BI'.
  ELSEIF gruppe = 'G03'.
    DELETE l_t_rsdodso WHERE odsobject+4(2) <> 'SH'.
  ELSEIF gruppe = 'G04'.
    DELETE l_t_rsdodso WHERE odsobject+4(2) <> 'PU'.
  ELSEIF gruppe = 'G05'.
    DELETE l_t_rsdodso WHERE odsobject+4(2) <> 'IM'.
  ELSEIF gruppe = 'G06'.
    DELETE l_t_rsdodso WHERE odsobject+4(2) <> 'GL'.
  ELSEIF gruppe = 'G07'.
    DELETE l_t_rsdodso WHERE odsobject+4(2) <> 'AP'.
  ELSEIF gruppe = 'G08'.
    DELETE l_t_rsdodso WHERE odsobject+4(2) <> 'AR'.
  ELSEIF gruppe = 'G09'.
    DELETE l_t_rsdodso WHERE odsobject+4(2) <> 'OM'.
  ELSEIF gruppe = 'G10'.
    DELETE l_t_rsdodso WHERE odsobject+4(2) <> 'PC'.
  ELSEIF gruppe = 'G11'.
    DELETE l_t_rsdodso WHERE odsobject+4(2) <> '0G'.
  ELSEIF gruppe = 'G12'.
    DELETE l_t_rsdodso WHERE odsobject+4(2) <> 'PA'.
  ELSEIF gruppe = 'G13'.
    DELETE l_t_rsdodso WHERE odsobject+4(2) <> 'PT'.
  ELSEIF gruppe = 'G14'.
    DELETE l_t_rsdodso WHERE odsobject+4(2) <> 'PY'.
  ELSEIF gruppe = 'G15'.
    DELETE l_t_rsdodso WHERE odsobject+4(2) <> 'TA'.
  ENDIF.
  PERFORM ausgabe.
Nun ist es so, dass ich diese unabhängig voneinander aussuchen kann, ich will aber dass man erst die erste Option also den Layer auswählt, dann die zweite also das Modul und dann die dritte (Gruppe).
Durch obligatory kann ich dafür sorgen dass man eines auswählen muss, kann ich jedoch per Code dafür sorgen dass diese in Abhängigkeit voneinander ausgewählt werden müssen?
Hoffe es ist verständlich :)

grüße Patryk

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


Re: Abhängigkeit von Select-Options

Beitrag von patlau (Specialist / 126 / 11 / 0 ) »
ach habe noch ein weiteres Problem vergesssen, und zwar wird das Programm momentan für alle drei Select Options ausgeführt, ist ja klar habe drei mal perform infos + ausgabe, wie schaffe ich dass auch das in Abhängigkeit zueinander steht, sprich alles nur einmal ausgegeben wird.

Re: Abhängigkeit von Select-Options

Beitrag von JHM (Top Expert / 1201 / 1 / 197 ) »
patlau hat geschrieben:Nun ist es so, dass ich diese unabhängig voneinander aussuchen kann, ich will aber dass man erst die erste Option also den Layer auswählt, dann die zweite also das Modul und dann die dritte (Gruppe).
Durch obligatory kann ich dafür sorgen dass man eines auswählen muss, kann ich jedoch per Code dafür sorgen dass diese in Abhängigkeit voneinander ausgewählt werden müssen?
schau dir mal den Zusatz USER-COMMAND für die Listboxen an. Dieser führt dazu, das PAI/PBO im SelScreen ausgelöst wird, wenn ein Wert ausgewählt wurde.

Bei AT SELECTION-SCREEN OUTPUT kannst du dann per LOOP AT SCREEN die einzelnen Listboxen so "schalten", dass der User in der richtigen Reihenfolge auswählen muss.
Gruß Hendrik

Re: Abhängigkeit von Select-Options

Beitrag von JHM (Top Expert / 1201 / 1 / 197 ) »
patlau hat geschrieben:ist ja klar habe drei mal perform infos + ausgabe, wie schaffe ich dass auch das in Abhängigkeit zueinander steht, sprich alles nur einmal ausgegeben wird.
PERFORM INFO und PERFORM AUSGABE nur einmal aufrufen ;-)

Da du uns nicht mitteilst was die beiden PERFORMS machen (sollen) und die Galskugel mal wieder kaputt ist kann man dir hier nicht wirklich helfen.
Gruß Hendrik

Re: Abhängigkeit von Select-Options

Beitrag von patlau (Specialist / 126 / 11 / 0 ) »
Danke habe davon noch nichts gehört, würde es dir was ausmachen ein kleines Beispiel aufzuzeigen, wäre wirklich nett.

Grüße

Re: Abhängigkeit von Select-Options

Beitrag von patlau (Specialist / 126 / 11 / 0 ) »
@ JHM :D, sorry wird hiermit nachgeliefert

Code: Alles auswählen.

FORM infos.

  SELECT rsdodso~odsobject txtlg rsdodso~objvers
     INTO  CORRESPONDING FIELDS OF TABLE l_t_rsdodso
      FROM rsdodso INNER JOIN rsdodsot ON rsdodsot~odsobject = rsdodso~odsobject
    WHERE rsdodso~objvers = 'A' AND rsdodso~odsobject in so_odsob .
ENDFORM.                    "infos
FORM ausgabe.
  DELETE l_t_rsdodso WHERE odsobject(1) = '0'.
  LOOP AT l_t_rsdodso ASSIGNING <rsdodso_fields>.
*  WHERE odsobject(1) EQ '1'  .
    WRITE:/ <rsdodso_fields>-odsobject,
        <rsdodso_fields>-txtlg,
        <rsdodso_fields>-objvers.
  ENDLOOP.
ENDFORM.                    "ausgabe
#

Habe Perform infos und perform ausgabe jetzt nur einmal verwendet, jedoch gibt er immer noch dreifach aus...
Zuletzt geändert von patlau am 14.05.2013 10:17, insgesamt 1-mal geändert.

Re: Abhängigkeit von Select-Options

Beitrag von JHM (Top Expert / 1201 / 1 / 197 ) »
patlau hat geschrieben:Danke habe davon noch nichts gehört, würde es dir was ausmachen ein kleines Beispiel aufzuzeigen, wäre wirklich nett.
Ich habe dir doch den Schubs in die richtige Richtung gegeben, jetzt bist du dran ;-) F1-Hilfe lesen und selber versuchen!

Hier ein wirklich beispiel haftes Coding:

Code: Alles auswählen.


* def. SelScreen
PARAMATERS a TYPE c(20) AS LISTBOX VISIBLE LENGTH 20 USER-COMMAND push.
PARAMATERS b TYPE c(20) AS LISTBOX VISIBLE LENGTH 20 USER-COMMAND push.
PARAMATERS c TYPE c(20) AS LISTBOX VISIBLE LENGTH 20 USER-COMMAND push.

INITIALISATION.
* Hier Listboxen füllen
* sollen die Listboxen in abhängigkeit gefüllt werden, muss hier natürlich nur A gefüllt werden

AT SELECTION SCREEN OUTPUT.
  IF screen-name = 'B'.
    IF a IS INITIAL.
      screen-input = 0. "keine Eingabe solange A nicht gefüllt ist
    ELSE.
      screen-input = 1. "A ist gefüllt, jetzt kann B gefüllt werden
    ENDIF.
    MODIFY SCREEN. "Änderungen dem Screen bekannt machen
  ENDIF.

AT SELECTION SCREEN.
* Hier Listboxen B und C in abhängigkeit zu A füllen wenn gewollt
Gruß Hendrik

Re: Abhängigkeit von Select-Options

Beitrag von patlau (Specialist / 126 / 11 / 0 ) »
Habe das nicht ganz verstanden... habe es so probiert aber das stimmt nicht da kommen alle Werte des Tabellen-Feldes dabei raus..

Code: Alles auswählen.

PARAMETERS: layer  AS LISTBOX VISIBLE LENGTH 30 USER-COMMAND push ,
            modul  AS LISTBOX VISIBLE LENGTH 30 USER-COMMAND push,
            gruppe AS LISTBOX VISIBLE LENGTH 30 USER-COMMAND push.
 IF screen-name = 'M'.
    IF layer IS INITIAL.
      screen-input = 0. "keine Eingabe solange A nicht gefüllt ist
    ELSE.
      screen-input = 1. "A ist gefüllt, jetzt kann B gefüllt werden
    ENDIF.
    MODIFY SCREEN. "Änderungen dem Screen bekannt machen
  ENDIF.
F1 hilfe geht nciht, da nicht auf deutsch vorhanden..

Re: Abhängigkeit von Select-Options

Beitrag von JHM (Top Expert / 1201 / 1 / 197 ) »
patlau hat geschrieben:F1 hilfe geht nciht, da nicht auf deutsch vorhanden..
Naja, dann nimm halt diese: http://help.sap.com/abapdocu_70/de/ über die Kurzreferenz kommt man schnell ans Ziel.

Zu deinem Coding Beispiel:

LOOP AT SCREEN funktioniert nur bei PBO -> muss also im Ereignis AT SELECTION-SCREEN OUTPUT stehen.

SCREEN-NAME ist der PARAMETER-Name (also nicht M sondern MODUL). ACHTUNG: SCREEN-NAME erwartet immer alles in Großbuchstaben.
Gruß Hendrik

Re: Abhängigkeit von Select-Options

Beitrag von patlau (Specialist / 126 / 11 / 0 ) »
Mit meinem Code gibt er mir immer alles doppelt aus:

Code: Alles auswählen.

  PERFORM infos.
  if layer = 'L01'.
    DELETE l_t_rsdodso WHERE odsobject(2) <> 'D1' .
  ELSEIF layer = 'L02'.
    DELETE l_t_rsdodso WHERE odsobject(2) <> 'D3'.
  ELSEIF layer = 'L03'.
    DELETE l_t_rsdodso WHERE odsobject(2) <> 'D5'.
  ELSEIF layer = 'L04'.
    DELETE l_t_rsdodso WHERE odsobject(2) <> 'D7'.
  elseif modul = 'M01'.
    Delete l_t_rsdodso Where odsobject+2(2) <> 'CO'.
  ELSEIF modul = 'M02'.
    Delete l_t_rsdodso Where odsobject+2(2) <> 'CP'.
  ELSEIF modul = 'M03'.
    Delete l_t_rsdodso Where odsobject+2(2) <> 'CS'.
  ELSEIF modul = 'M04'.
    Delete l_t_rsdodso Where odsobject+2(2) <> 'DP'.
  ELSEIF modul = 'M05'.
    Delete l_t_rsdodso Where odsobject+2(2) <> 'FI'.
  ELSEIF modul = 'M06'.
    Delete l_t_rsdodso Where odsobject+2(2) <> 'HR'.
  ELSEIF modul = 'M07'.
    Delete l_t_rsdodso Where odsobject+2(2) <> 'LE'.
  ELSEIF modul = 'M08'.
    Delete l_t_rsdodso Where odsobject+2(2) <> 'MD'.
  ELSEIF modul = 'M09'.
    Delete l_t_rsdodso Where odsobject+2(2) <> 'MM'.
  ELSEIF modul = 'M10'.
    Delete l_t_rsdodso Where odsobject+2(2) <> 'PM'.
  ELSEIF modul = 'M11'.
    Delete l_t_rsdodso Where odsobject+2(2) <> 'PP'.
  ELSEIF modul = 'M12'.
    Delete l_t_rsdodso Where odsobject+2(2) <> 'PS'.
  ELSEIF modul = 'M13'.
    Delete l_t_rsdodso Where odsobject+2(2) <> 'QM'.
  ELSEIF modul = 'M14'.
    Delete l_t_rsdodso Where odsobject+2(2) <> 'SD'.
  ELSEIF modul = 'M15'.
    Delete l_t_rsdodso Where odsobject+2(2) <> 'SN'.
  ELSEIF modul = 'M16'.
    Delete l_t_rsdodso Where odsobject+2(2) <> 'TD'.
  elseif gruppe = 'G01'.
    Delete l_t_rsdodso WHERE odsobject+4(2) <> 'SL'.
  ELSEIF gruppe = 'G02'.
    DELETE l_t_rsdodso WHERE odsobject+4(2) <> 'BI'.
  ELSEIF gruppe = 'G03'.
    DELETE l_t_rsdodso WHERE odsobject+4(2) <> 'SH'.
  ELSEIF gruppe = 'G04'.
    DELETE l_t_rsdodso WHERE odsobject+4(2) <> 'PU'.
  ELSEIF gruppe = 'G05'.
    DELETE l_t_rsdodso WHERE odsobject+4(2) <> 'IM'.
  ELSEIF gruppe = 'G06'.
    DELETE l_t_rsdodso WHERE odsobject+4(2) <> 'GL'.
  ELSEIF gruppe = 'G07'.
    DELETE l_t_rsdodso WHERE odsobject+4(2) <> 'AP'.
  ELSEIF gruppe = 'G08'.
    DELETE l_t_rsdodso WHERE odsobject+4(2) <> 'AR'.
  ELSEIF gruppe = 'G09'.
    DELETE l_t_rsdodso WHERE odsobject+4(2) <> 'OM'.
  ELSEIF gruppe = 'G10'.
    DELETE l_t_rsdodso WHERE odsobject+4(2) <> 'PC'.
  ELSEIF gruppe = 'G11'.
    DELETE l_t_rsdodso WHERE odsobject+4(2) <> '0G'.
  ELSEIF gruppe = 'G12'.
    DELETE l_t_rsdodso WHERE odsobject+4(2) <> 'PA'.
  ELSEIF gruppe = 'G13'.
    DELETE l_t_rsdodso WHERE odsobject+4(2) <> 'PT'.
  ELSEIF gruppe = 'G14'.
    DELETE l_t_rsdodso WHERE odsobject+4(2) <> 'PY'.
  ELSEIF gruppe = 'G15'.
    DELETE l_t_rsdodso WHERE odsobject+4(2) <> 'TA'.

  Endif.
  PERFORM ausgabe.

Auch wenn ich nur den Layer auswähle bekomme ich jedes Objekt doppelt, und wenn ich weitere Auswahlkriterein benutze wie Modul oder Gruppe fügt er nichts neues hinzu, stimmt ja weil alle Objekte bereits durch die Auswahl LAyer existieren aber komischerweise doppelt. Wähle ich zum BEispiel nur ein Modul aus zeigt er mir die richtigen Objekte nur doppelt, das verstehe ich nicht...

Re: Abhängigkeit von Select-Options

Beitrag von patlau (Specialist / 126 / 11 / 0 ) »
hatte es im Ereignis At Selection Screen Output?

Re: Abhängigkeit von Select-Options

Beitrag von Thanatos82 (Expert / 699 / 32 / 123 ) »
Hi,

Wie kommst du denn jetzt vom sichtbar schalten der einzelnen Listboxen auf die Verarbeitung der Tabelleneinträge?!

du darfst die ganze Verarbeitung der Eingaben erst durchführen wenn du auf "Ausführen" klickst. Wenn du schon im Screen-Ouput irgendwelche Verarbeitung ausführst die Tabellen beeinflusst, kann da meiner Meinung nach nur Unsinn rauskommen.

Übrigens wäre bei derart vielen "elseif" das Arbeiten mit CASE wesentlich einfach und für das System auch besser. Denn bei If-elseif-end muss das System ja jeden Elseif anschauen, was Zeit kostet. in großen Programmen kann das dann ziemlich an der Performance kratzen.
Du könntest dir also z.B, 3 CASE Fälle schaffen für Layer, Module und Gruppe. Ist dann vom Schreibaufwand zwar nahezu das gleiche, aber wie gesagt fürs System dann besser.

Ich weiß auch nicht, ob es nur mir so geht, aber wenn du deine Codingschnipsel etwas ausführlicher zeigen würdest, hilft das viel mehr beim Verständnis. Bei deinem letzten Codingausschnitt sieht man z.b. überhaupt nicht wo du es aufrufst.

Lässt man dich eigentlich komplett allein beim lernen?
Gruß,
der Matze

Re: Abhängigkeit von Select-Options

Beitrag von patlau (Specialist / 126 / 11 / 0 ) »
Ja, bin leider ziemlich auf mich allein gestellt, habe auch noch nicht mit CASE-Anweisungen gearbeitet...
Hier mal der komplette Code zum Verständnis:

Code: Alles auswählen.

PARAMETERS: layer(30)  AS LISTBOX VISIBLE LENGTH 30, "OBLIGATORY,
            modul(30)  AS LISTBOX VISIBLE LENGTH 30, "OBLIGATORY,
            gruppe(30) AS LISTBOX VISIBLE LENGTH 30.

AT SELECTION-SCREEN OUTPUT.

  param = 'layer'.
  value-key = 'L01'.
  value-text = 'Layer 1 Extraktion'.
  APPEND value TO values.
  value-key = 'L02'.
  value-text = 'Layer 3 Harmonisierung'.
  APPEND value TO values.
  value-key = 'L03'.
  value-text = 'Layer 5 Datamart'.
  APPEND value TO values.
  value-key = 'L04'.
  value-text = 'Layer 7 Präsentation'.
  APPEND value TO values.

  CALL FUNCTION 'VRM_SET_VALUES'
    EXPORTING
      id     = param
      values = values.

  Refresh values.


  param = 'modul'.
  value-key = 'M01'.
  value-text = 'Modul CO'.
  APPEND value TO values.
  value-key = 'M02'.
  value-text = 'Modul CP'.
  APPEND value TO values.
  value-key = 'M03'.
  value-text = 'Modul CS'.
  APPEND value TO values.
  value-key = 'M04'.
  value-text = 'Modul DP'.
  APPEND value TO values.
  value-key = 'M05'.
  value-text = 'Modul FI'.
  APPEND value TO values.
  value-key = 'M06'.
  value-text = 'Modul HR'.
  APPEND value TO values.
  value-key = 'M07'.
  value-text = 'Modul LE'.
  APPEND value TO values.
  value-key = 'M07'.
  value-text = 'Modul MD'.
  APPEND value TO values.
  value-key = 'M08'.
  value-text = 'Modul MM'.
  APPEND value TO values.
  value-key = 'M09'.
  value-text = 'Modul PM'.
  APPEND value TO values.
  value-key = 'M10'.
  value-text = 'Modul PP'.
  APPEND value TO values.
  value-key = 'M11'.
  value-text = 'Modul PS'.
  APPEND value TO values.
  value-key = 'M12'.
  value-text = 'Modul QM'.
  APPEND value TO values.
  value-key = 'M13'.
  value-text = 'Modul SD'.
  APPEND value TO values.
  value-key = 'M14'.
  value-text = 'Modul SN'.
  APPEND value TO values.
  value-key = 'M15'.
  value-text = 'Modul TD'.
  APPEND value TO values.


  CALL FUNCTION 'VRM_SET_VALUES'
    EXPORTING
      id     = param
      values = values.

  Refresh values.

  param = 'gruppe'.
  value-key = 'G01'.
  value-text = 'Gruppe SL'.
  APPEND value TO values.
  value-key = 'G02'.
  value-text = 'Gruppe BI'.
  APPEND value TO values.
  value-key = 'G03'.
  value-text = 'Gruppe SH'.
  APPEND value TO values.
  value-key = 'G04'.
  value-text = 'Gruppe PU'.
  APPEND value TO values.
  value-key = 'G05'.
  value-text = 'Gruppe IM'.
  APPEND value TO values.
  value-key = 'G06'.
  value-text = 'Gruppe GL'.
  APPEND value TO values.
  value-key = 'G07'.
  value-text = 'Gruppe AP'.
  APPEND value TO values.
  value-key = 'G08'.
  value-text = 'Gruppe AR'.
  APPEND value TO values.
  value-key = 'G09'.
  value-text = 'Gruppe OM'.
  APPEND value TO values.
  value-key = 'G09'.
  value-text = 'Gruppe PC'.
  APPEND value TO values.
  value-key = 'G10'.
  value-text = 'Gruppe 0G'.
  APPEND value TO values.
  value-key = 'G11'.
  value-text = 'Gruppe PA'.
  APPEND value TO values.
  value-key = 'G12'.
  value-text = 'Gruppe PT'.
  APPEND value TO values.
  value-key = 'G13'.
  value-text = 'Gruppe PY'.
  APPEND value TO values.
  value-key = 'G14'.
  value-text = 'Gruppe TA'.
  APPEND value TO values.

  CALL FUNCTION 'VRM_SET_VALUES'
    EXPORTING
      id     = param
      values = values.

START-OF-SELECTION.


  PERFORM infos.
  if layer = 'L01'.
    DELETE l_t_rsdodso WHERE odsobject(2) <> 'D1' .
      ELSEIF layer = 'L02'.
    DELETE l_t_rsdodso WHERE odsobject(2) <> 'D3'.
  ELSEIF layer = 'L03'.
    DELETE l_t_rsdodso WHERE odsobject(2) <> 'D5'.
  ELSEIF layer = 'L04'.
    DELETE l_t_rsdodso WHERE odsobject(2) <> 'D7'.
  Endif.
  
   if modul = 'M01'.
    Delete l_t_rsdodso Where odsobject+2(2) <> 'CO'.
ELSEIF modul = 'M02'.
    Delete l_t_rsdodso Where odsobject+2(2) <> 'CP'.
ELSEIF modul = 'M03'.
    Delete l_t_rsdodso Where odsobject+2(2) <> 'CS'.
ELSEIF modul = 'M04'.
    Delete l_t_rsdodso Where odsobject+2(2) <> 'DP'.
ELSEIF modul = 'M05'.
    Delete l_t_rsdodso Where odsobject+2(2) <> 'FI'.
ELSEIF modul = 'M06'.
    Delete l_t_rsdodso Where odsobject+2(2) <> 'HR'.
ELSEIF modul = 'M07'.
    Delete l_t_rsdodso Where odsobject+2(2) <> 'LE'.
ELSEIF modul = 'M08'.
    Delete l_t_rsdodso Where odsobject+2(2) <> 'MD'.
ELSEIF modul = 'M09'.
    Delete l_t_rsdodso Where odsobject+2(2) <> 'MM'.
ELSEIF modul = 'M10'.
    Delete l_t_rsdodso Where odsobject+2(2) <> 'PM'.
ELSEIF modul = 'M11'.
    Delete l_t_rsdodso Where odsobject+2(2) <> 'PP'.
ELSEIF modul = 'M12'.
    Delete l_t_rsdodso Where odsobject+2(2) <> 'PS'.
ELSEIF modul = 'M13'.
    Delete l_t_rsdodso Where odsobject+2(2) <> 'QM'.
ELSEIF modul = 'M14'.
    Delete l_t_rsdodso Where odsobject+2(2) <> 'SD'.
ELSEIF modul = 'M15'.
    Delete l_t_rsdodso Where odsobject+2(2) <> 'SN'.
ELSEIF modul = 'M16'.
    Delete l_t_rsdodso Where odsobject+2(2) <> 'TD'.
  ENDIF.
  
  if gruppe = 'G01'.
     Delete l_t_rsdodso WHERE odsobject+4(2) <> 'SL'.
ELSEIF gruppe = 'G02'.
  DELETE l_t_rsdodso WHERE odsobject+4(2) <> 'BI'.
ELSEIF gruppe = 'G03'.
  DELETE l_t_rsdodso WHERE odsobject+4(2) <> 'SH'.
ELSEIF gruppe = 'G04'.
  DELETE l_t_rsdodso WHERE odsobject+4(2) <> 'PU'.
ELSEIF gruppe = 'G05'.
  DELETE l_t_rsdodso WHERE odsobject+4(2) <> 'IM'.
ELSEIF gruppe = 'G06'.
  DELETE l_t_rsdodso WHERE odsobject+4(2) <> 'GL'.
ELSEIF gruppe = 'G07'.
  DELETE l_t_rsdodso WHERE odsobject+4(2) <> 'AP'.
ELSEIF gruppe = 'G08'.
  DELETE l_t_rsdodso WHERE odsobject+4(2) <> 'AR'.
ELSEIF gruppe = 'G09'.
  DELETE l_t_rsdodso WHERE odsobject+4(2) <> 'OM'.
ELSEIF gruppe = 'G10'.
  DELETE l_t_rsdodso WHERE odsobject+4(2) <> 'PC'.
ELSEIF gruppe = 'G11'.
  DELETE l_t_rsdodso WHERE odsobject+4(2) <> '0G'.
ELSEIF gruppe = 'G12'.
  DELETE l_t_rsdodso WHERE odsobject+4(2) <> 'PA'.
ELSEIF gruppe = 'G13'.
  DELETE l_t_rsdodso WHERE odsobject+4(2) <> 'PT'.
ELSEIF gruppe = 'G14'.
  DELETE l_t_rsdodso WHERE odsobject+4(2) <> 'PY'.
ELSEIF gruppe = 'G15'.
  DELETE l_t_rsdodso WHERE odsobject+4(2) <> 'TA'.
ENDIF.
  PERFORM ausgabe.
  

*&---------------------------------------------------------------------*
*&      Form  infos
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM infos.

  SELECT rsdodso~odsobject txtlg rsdodso~objvers
     INTO  CORRESPONDING FIELDS OF TABLE l_t_rsdodso
      FROM rsdodso INNER JOIN rsdodsot ON rsdodsot~odsobject = rsdodso~odsobject
    WHERE rsdodso~objvers = 'A' AND rsdodso~odsobject in so_odsob .
ENDFORM.                    "infos

*&---------------------------------------------------------------------*
*&      Form  ausgabe
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM ausgabe.
DELETE l_t_rsdodso WHERE odsobject(1) = '0'.
  LOOP AT l_t_rsdodso ASSIGNING <rsdodso_fields>.
*  WHERE odsobject(1) EQ '1'  .
        WRITE:/ <rsdodso_fields>-odsobject,
            <rsdodso_fields>-txtlg,
            <rsdodso_fields>-objvers.
  ENDLOOP.
ENDFORM.                    "ausgabe
Habe deine Erklärungen nicht wirklich verstanden ..

Re: Abhängigkeit von Select-Options

Beitrag von Thanatos82 (Expert / 699 / 32 / 123 ) »
Ok,

also zum eigentlichen Problem, dem nacheinander freischalten der Listboxen.

Ich würde an der Stelle mit einer MODIF ID arbeiten. Das ganze sieht dann in der Select-Options Deklaration so aus:

Code: Alles auswählen.

PARAMETERS:  layer(30)  AS LISTBOX VISIBLE LENGTH 30 USER-COMMAND dummy,
modul(30)  AS LISTBOX VISIBLE LENGTH 30 MODIF ID ID1,
gruppe(30) AS LISTBOX VISIBLE LENGTH 30 MODIF ID ID2.
Dann kann man, so wie JHM das angegeben hat, die einzelnen LISTBOX'es freigeben und zwar ungefähr so:

Code: Alles auswählen.

AT SELECTION-SCREEN OUTPUT.
  LOOP AT SCREEN.
    IF screen-group1 EQ 'ID1'.
      IF NOT layer IS INITIAL.
        screen-input  = 1.
      ELSE.
        screen-input  = 0.
      ENDIF.
      MODIFY SCREEN.
    ENDIF.
    IF screen-group1 EQ 'ID2'.
      IF NOT layer IS INITIAL AND
   NOT module IS INITIAL.
        screen-input  = 1.
      ELSE.
        screen-input  = 0.
      ENDIF.

      MODIFY SCREEN.
    ENDIF.

  ENDLOOP.
Ist jetzt ungetestet, kann sein das du hier und da anpassen musst.

So und deine Verarbeitung die du da angestoßen hast, die kannst du erst ablaufen lassen, NACHDEM du fertig bist mit deiner Selektion, also nachdem du beschlossen hast: ja, mit diesen Eingaben soll das Programm laufen. Und das tust du ja indem du auf F8 (Ausführen) klickst.
Das heißt du musst in deinem hauptprogramm (außerhalb der Selection-Abteilung) deine Verarbeitung erst aufbauen. (ich hoffe, das du weißt wie das geht?)
Und dort kannst du dann mit CASE anweisungen arbeiten. Das sieht dann ausschnitthaft so aus:

Code: Alles auswählen.

CASE layer.
WHEN 'L01'.
DELETE l_t_rsdodso WHERE odsobject(2) <> 'D1' .
WHEN 'L02'.
DELETE l_t_rsdodso WHERE odsobject(2) <> 'D3'.
....
*WHEN OTHERS. (Kannst du ggf. weglassen)
ENDCASE
Und das dann noch für Modul und Layer. Und wenn du dann vor deinem ersten Case und nach deinem letzten Case deine jeweiligen Perfoms aufrufst, dürfte das funktionieren. Wie gesagt ungetestet..

Und ich kann dir nur nahe legen: lies dich in die SAP-Dokus ein, die helfen echt ganz oft schon weiter. sind ja auch alle per Internet erreichbar, wenn dein System schon nicht auf Deutsch ist.
Gruß,
der Matze

Re: Abhängigkeit von Select-Options

Beitrag von JHM (Top Expert / 1201 / 1 / 197 ) »
patlau hat geschrieben:Ja, bin leider ziemlich auf mich allein gestellt, habe auch noch nicht mit CASE-Anweisungen gearbeitet.
Programmieren scheint für dich Neuland zu sein und weißt nicht was Reportereignisse sind!

Reportereignisse werden bei der Reportausführung zu unterschiedlichen Zeitpunkten ausgeführt. Man muss seinen Code also genau in das Ereignis stellen, an dem es gebraucht wird.

Bei dir die wichtigsten:

Code: Alles auswählen.

Report zxxx.

* hier alle globalen variablen, etc...
* dann den SelScreen definieren

INITIALITION.
* wird nur einmal bei Programmstart aufgerufen. 
* Hier kommt das Füllen der Listbox rein

AT SELECTION-SCREEN OUTPUT.
*wird immer dann aufgerufen, befor der SelScreen angezeigt wird. Also auch nach jeder User Interaktion (Enter, Listboxauswahl)
*hier schaltest du die Listboxen nach und nach für die Eingabe frei

AT SELECTION-SCREEN.
* wird immer dann gerufen um die UserInteraktion zu verarbeiten
* brauchst du aktuell noch nicht

START-OF-SELECTION.
* wird ausgeführt, wenn der User im SelScreen ausführen wählt
* hier kommt deine Verarbeitung rein
* Perform, CASE, Perform
es gibt noch weitere ReportEreignisse, aber die benötigst du aktuell eigentlich nicht.

Wichtig: Ein Reportereignis wird im Coding nicht abgeschlossen. Also alles nach einem Reportereignis gehört dazu, bis ein neues Ereignis erreicht wird.
Gruß Hendrik

Vergleichbare Themen

25
Antw.
7467
Views
SELECT in interne Tabelle in Abhängigkeit von..
von fl0w » 25.06.2007 10:51 • Verfasst in ABAP® für Anfänger
0
Antw.
2513
Views
select-options depend on select-options.
von dragospirnut1 » 19.07.2017 09:54 • Verfasst in ABAP® Core
4
Antw.
19055
Views
Select nach Parameter & Select-Options
von doeme » 10.07.2012 16:37 • Verfasst in ABAP® für Anfänger
10
Antw.
7143
Views
2 Select-Options zu einem für Select zusammenfügen
von manuk » 23.03.2005 11:02 • Verfasst in ABAP® Core
2
Antw.
4003
Views
SELECT - Options & SELECT Abfrage
von Mavrix » 14.05.2007 08:41 • 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

Aktuelle Forenbeiträge

Hilfe zum FB MATERIAL_MAINTAIN_DARK
Gestern von black_adept gelöst 8 / 1777
HR-Entgeltnachweis
vor 2 Tagen von ChrisB 4 / 2319

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

Hilfe zum FB MATERIAL_MAINTAIN_DARK
Gestern von black_adept gelöst 8 / 1777
HR-Entgeltnachweis
vor 2 Tagen von ChrisB 4 / 2319

Unbeantwortete Forenbeiträge

Export von Spools in XLSX
vor 4 Tagen von abapamateur 1 / 353
Feldberechnung ME32K
vor einer Woche von ZF_SAPler 1 / 949
MS-Word als Editor
letzen Monat von tekko 1 / 4464