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.
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.
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.
Hi Christoph,christof hat geschrieben:Also mit der Selction-Options Variante bekomme ich es auch nicht hin.
Ich muss glaub das ganze Programm umstellen. Danke
Hier beschreibst Du doch genau das, was du brauchst...?!?!? da ist nichts mit ausschliessend.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?
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