OR-Verbindungen

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

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

OR-Verbindungen

Beitrag von christof (Specialist / 122 / 6 / 0 ) »
Guten Tag zusammen

Ich habe wieder einmal ein Problem das ich nicht lösen kann. Ich möchte die Interne Tabelle füllen und dazu mit OR-Verknüpfungen selektieren. Leider geht dies nicht?
Wie kann ich dies auf einfachste weise lösen.
Vielen Dank


Ausschnitt Selektion:

Code: Alles auswählen.

SELECT *
     INTO CORRESPONDING FIELDS OF TABLE itab01
    FROM s022

    JOIN makt
      ON MAKT~MATNR EQ S022~MATNR
     AND makt~SPRAS EQ sy-langu

    JOIN JEST
      ON JEST~OBJNR EQ S022~OBJNR
     AND ( jest~stat NE 'I0009'  "RÜCK Rückgemeldet
     OR  jest~stat NE 'I0010'  "TRÜC Teilrückgemeldet
     OR  jest~stat NE 'I0013'  "LÖKZ  Löschkennzeichen
     OR  jest~stat NE 'I0045'  "TABG  Technisch abgeschl
     OR jest~stat NE 'I0043'  "SPER  Gesperrt
     OR jest~stat NE 'I0076'  "LÖVM  Löschvormerkung
     OR jest~inact NE 'X' )
     AND jest~stat = 'I0002'   "Freigegbene Aufträge


     WHERE arbpl IN arbpl.
Programm:

Code: Alles auswählen.

Report ZR_TEST.

*--------------------------------------------------------------------*
*Tabellenarbeitsbereich deklarieren*
*--------------------------------------------------------------------*

DATA: wa_S022  TYPE S022,
      wa_makt  TYPE MAKT,
      wa_jest  TYPE JEST,
      wa_onror TYPE ONROR,
       Z_STAT  TYPE i.






*--------------------------------------------------------------------*
*Felder deklarieren*
*--------------------------------------------------------------------*
DATA: zeilen_itab01 TYPE i.
DATA: zeilen_itab02 TYPE i.

*--------------------------------------------------------------------*
*Datentypen für Zeilen deklarieren*
*--------------------------------------------------------------------*
TYPES: BEGIN OF zeile01_typ,
  ARBPL   TYPE S022-ARBPL,
  MATNR   TYPE S022-MATNR,
  AUFNR   TYPE S022-AUFNR,
  OBJNR   TYPE S022-OBJNR,
  SPRAS   TYPE MAKT-SPRAS,
  MAKTX   TYPE MAKT-MAKTX,
  STAT    TYPE JEST-STAT,
  Z_STAT  TYPE i,
  END OF zeile01_typ.


TYPES: BEGIN OF zeile02_typ,
  AUFNR   TYPE S022-AUFNR,
  OBJNR   TYPE S022-OBJNR,
  STAT    TYPE JEST-STAT,
  END OF zeile02_typ.


*--------------------------------------------------------------------*
*Datentypen für interne Tabellen deklarieren*
*--------------------------------------------------------------------*
TYPES itab01_typ TYPE STANDARD TABLE OF zeile01_typ.
TYPES itab02_typ TYPE STANDARD TABLE OF zeile02_typ.


*--------------------------------------------------------------------*
*Interne Tabellen deklarieren ohne Kopfzeile*
*--------------------------------------------------------------------*
DATA itab01 TYPE itab01_typ.
DATA itab02 TYPE itab02_typ.


*--------------------------------------------------------------------*
*Workareas für interen Tabellen deklarieren*
*--------------------------------------------------------------------*
DATA wa_itab01 TYPE zeile01_typ.
DATA wa_itab02 TYPE zeile02_typ.


*--------------------------------------------------------------------*
*Selektionsbild gesalten*
*--------------------------------------------------------------------*
SELECT-OPTIONS ARBPL FOR wa_S022-ARBPL.
PARAMETERS SPRAS TYPE MAKT-SPRAS.


START-OF-SELECTION.
*--------------------------------------------------------------------*
*DBtab lesen und itab01 füllen über Workarea*
*--------------------------------------------------------------------*



SELECT *
     INTO CORRESPONDING FIELDS OF TABLE itab01
    FROM s022

    JOIN makt
      ON MAKT~MATNR EQ S022~MATNR
     AND makt~SPRAS EQ sy-langu

    JOIN JEST
      ON JEST~OBJNR EQ S022~OBJNR
     AND ( jest~stat NE 'I0009'  "RÜCK Rückgemeldet
     OR  jest~stat NE 'I0010'  "TRÜC Teilrückgemeldet
     OR  jest~stat NE 'I0013'  "LÖKZ  Löschkennzeichen
     OR  jest~stat NE 'I0045'  "TABG  Technisch abgeschl
     OR jest~stat NE 'I0043'  "SPER  Gesperrt
     OR jest~stat NE 'I0076'  "LÖVM  Löschvormerkung
     OR jest~inact NE 'X' )
     AND jest~stat = 'I0002'   "Freigegbene Aufträge


     WHERE arbpl IN arbpl.




SELECT *
     INTO CORRESPONDING FIELDS OF TABLE itab02
    FROM s022

    JOIN ONROR
      ON ONROR~AUFNR EQ S022~AUFNR

    JOIN JEST
      ON JEST~OBJNR EQ ONROR~OBJNR
     AND ( jest~stat NE 'I0009'  "RÜCK Rückgemeldet
     OR  jest~stat NE 'I0010'  "TRÜC Teilrückgemeldet
     OR  jest~stat NE 'I0013'  "LÖKZ  Löschkennzeichen
     OR  jest~stat NE 'I0045'  "TABG  Technisch abgeschl
     OR jest~stat NE 'I0043'  "SPER  Gesperrt
     OR jest~stat NE 'I0076'  "LÖVM  Löschvormerkung
     OR jest~inact NE 'X' )
      AND jest~stat =  'I0002'  "Freigegebene Aufträge

     WHERE arbpl IN arbpl.




END-OF-SELECTION.




*--------------------------------------------------------------------*
*ITAB01 + ITAB02 ausgeben in Liste*
*--------------------------------------------------------------------*

  WRITE: / 'sy-tabix, itab01-MATNR, itab01-AUFNR'.
  LOOP AT itab01 INTO wa_itab01.
    LOOP AT itab02 INTO wa_itab02
            WHERE AUFNR = wa_itab01-AUFNR.


    WRITE: / sy-tabix,
    wa_itab01-ARBPL,
    wa_itab01-MATNR,
    wa_itab01-MAKTX,
    wa_itab01-AUFNR,
    wa_itab01-OBJNR,
    wa_itab01-STAT,
    wa_itab02-OBJNR,
    wa_itab02-STAT,
    Z_STAT.

    ENDLOOP.

  ENDLOOP.

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


Re: OR-Verbindungen

Beitrag von a-dead-trousers (Top Expert / 4395 / 223 / 1182 ) »
Du fragst auf "jest~stat" in deinem riesigen OR und außerhalb ab (jest~stat = 'I0002')

TIPPs:
In SAP am besten NIE mit NE auf die Datenbank abfragen!
Versuch deine ORs in ein IN zu fassen!

Vorschlag:

Code: Alles auswählen.

SELECT *
  INTO CORRESPONDING FIELDS OF TABLE itab01
  FROM s022
       JOIN makt
          ON MAKT~MATNR EQ S022~MATNR
         AND makt~SPRAS EQ sy-langu
       JOIN JEST
          ON JEST~OBJNR EQ S022~OBJNR
         AND est~stat IN ('I0009','I0010','I0013','I0045','I0043','I0076','I0002') 
         AND jest~inact EQ space 
         WHERE arbpl IN arbpl.
Die IN-Clause die ich hier aufgezeigt habe ist für deinen Anwendungfall FALSCH spezifiziert. Du musst genau das Gegenteil machen.

lg ADT
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: OR-Verbindungen

Beitrag von Unit605 (Expert / 975 / 37 / 93 ) »
Ich wuerde eine SELECT-OPTION anlegen und benutzen ODER eine Rangetabelle dafuer anlegen.

Falls ich eine SELECT-OPTION nehme, wuerde ich diese sogar (falls vorhanden) auf dem Selektiosbildschirm anzeigen ohne dass diese allerdings geaendert werden kann. So hat ein User oder man selber einen besseren Ueberblick, was dort genau selektiert wird.

Re: OR-Verbindungen

Beitrag von a-dead-trousers (Top Expert / 4395 / 223 / 1182 ) »
Ja, aber auch für diese SELECT-OPTION gilt, dass sie POSITIV (einschließend) definiert sein sollte und nicht NEGATIV (ausschließend)
Also nicht die Status auflisten die nicht selektiert werden sollen, sondern die, die man am Ende wirklich haben möchte.
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: OR-Verbindungen

Beitrag von christof (Specialist / 122 / 6 / 0 ) »
Ich muss aber NEGATIV (ausschliessend) selektieren.
Jeder Auftrag ist freigegeben, teilweise sind sie jedoch zusätzlich abgeschlossen, teilrückgemeldet und / oder rückgemeldet.
Also kann ich doch nur ausschliessend selektieren?

Re: OR-Verbindungen

Beitrag von ralf.wenzel (Top Expert / 3924 / 200 / 280 ) »
Ich habe den Lehrer meines Sohnes gefragt, warum die nie mit Wahrheitstafeln arbeiten. Das sei nicht mehr modern, sagte man mir.

OR und NE mit mehreren Alternativen ist immer eine schlechte Idee -- weil die Alternativen sich gegenseitig ausschließen. Mal dir das einfach mal auf, dann wird dir klar, dass das nicht funktionieren KANN.
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: OR-Verbindungen

Beitrag von black_adept (Top Expert / 4089 / 127 / 940 ) »
Hallo Christoph,

lies dir doch mal diesen Artikel bei Wikipedia zu den de Morganschen Gesetzen durch. Dann siehst du dein Problem.
http://de.wikipedia.org/wiki/De_Morgansche_Gesetze

und zusätzlich auch den Artikel zu den von Ralf angesprochenen Wahrheitstafeln, wenn das obige zu theoretisch.
http://de.wikipedia.org/wiki/Wahrheitstabelle
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: OR-Verbindungen

Beitrag von christof (Specialist / 122 / 6 / 0 ) »
Also mit der Selction-Options Variante bekomme ich es auch nicht hin.
Ich muss glaub das ganze Programm umstellen. Danke

Re: OR-Verbindungen

Beitrag von ralf.wenzel (Top Expert / 3924 / 200 / 280 ) »
Nein, du musst einfach nur machen, was black_adept geschrieben hat: Die Gleichung nach AND und EQ umstellen. Dann geht's.
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: OR-Verbindungen

Beitrag von black_adept (Top Expert / 4089 / 127 / 940 ) »
christof hat geschrieben:Also mit der Selction-Options Variante bekomme ich es auch nicht hin.
Ich muss glaub das ganze Programm umstellen. Danke
Hi Christoph,

ich habe mir das jetzt noch mal näher angesehen. Und Nein - du musst nicht das gesamte Programm umstellen aber wohl deinen SELECT.
Denn du suchst einerseits alle freigegebenen Aufträge, für die dann eine Zusatzbedinung gelten soll - nämlihc, dass ein WEITERE Status in der Tabelle nicht existieren darf.
Somit musst du definitiv 2x auf die JEST zugreifen - 1x für das "Freigegeben" und 1x für die "nicht erlaubeten Status".
Das könntest du z.b. so erledigen, dass du 2x auf die JEST joinst oder indem du einen SubSelect verwendest mit "NOT EXISTS...."
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: OR-Verbindungen

Beitrag von christof (Specialist / 122 / 6 / 0 ) »
Vielen Dank, leider hab ich noch nicht rausgefunden wie ich 2-mal auf die gleiche Tabelle einen JOIN machen kann. Muss wohl mal darüber schlafen :P

Re: OR-Verbindungen

Beitrag von ralf.wenzel (Top Expert / 3924 / 200 / 280 ) »
So wie auf zwei verschiedene - nur dass mal zweimal die gleiche Tabelle angibt ;)

Guckst du hier, das ist besser als drüber zu schlafen.
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: OR-Verbindungen

Beitrag von Unit605 (Expert / 975 / 37 / 93 ) »
christof hat geschrieben:Ich muss aber NEGATIV (ausschliessend) selektieren.
Jeder Auftrag ist freigegeben, teilweise sind sie jedoch zusätzlich abgeschlossen, teilrückgemeldet und / oder rückgemeldet.
Also kann ich doch nur ausschliessend selektieren?
Hier beschreibst Du doch genau das, was du brauchst...?!?!? da ist nichts mit ausschliessend.

SubSelect

Beitrag von JHM (Top Expert / 1197 / 1 / 197 ) »

Code: Alles auswählen.

SELECT *
    INTO CORRESPONDING FIELDS OF TABLE itab01
    FROM s022
    JOIN makt
      ON MAKT~MATNR EQ S022~MATNR
     AND makt~SPRAS EQ sy-langu
    JOIN JEST
      ON JEST~OBJNR EQ S022~OBJNR
     AND jest~stat = 'I0002'   "Freigegbene Aufträge
     WHERE arbpl IN arbpl
*       Aufträge ausschließen, wenn ein bestimmte Status gesetzt sind
       AND NOT EXISTS ( SELECT * 
                          FROM JEST 
                          WHERE objnr = S022~OBJNR 
                            AND stat IN ('I0009', 'I0010', 'I0013',  'I0045' , 'I0043', 'I0076') 
                            AND jest~inact = space  ). "nur aktive Status abfragen
                                  
Gruß Hendrik

Re: OR-Verbindungen

Beitrag von christof (Specialist / 122 / 6 / 0 ) »
Super, vielen Dank euch allen.
Das Programm funktioniert zwar noch nicht wie gewünscht, i muss wohl noch eine Tabelle mehr hinzufügen.

Vergleichbare Themen

1
Antw.
2027
Views
RFC Verbindungen im Selektionsscreen auslesen
von jondahl11 » 05.10.2006 10:43 • Verfasst in ABAP® für Anfänger
0
Antw.
2083
Views
Backup/Restore RFC-Verbindungen bei Systemkopie
von zzcpak » 12.08.2009 10:18 • Verfasst in Basis
0
Antw.
2992
Views
Probleme bei Verwendung von mehreren JCO-Verbindungen
von mikel33 » 19.05.2011 11:00 • Verfasst in Enterprise Portal

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

Unbeantwortete Forenbeiträge

Daten an Tabelle binden
vor 3 Tagen von Bright4.5 1 / 776
aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 2395
Hilfe bei SWEC/SWE2
September 2024 von retsch 1 / 8982