Mal wieder ein Programmierwettbewerb

Alles Rund um SAP®.
41 Beiträge • Vorherige Seite 3 von 3 (current)
41 Beiträge Vorherige Seite 3 von 3 (current)

Beitrag von RiffRaff (Specialist / 379 / 0 / 1 ) »
hallo,

kann mir jemand erklären wo und wie, da gleiche variantennamen mit verschiedenen sprachen rausfliegen ???

Code: Alles auswählen.

REPORT. 
SELECT report FROM varit 
              INTO sy-msgv1 
              WHERE report LIKE 'Z%' 
              GROUP BY report 
              HAVING COUNT( DISTINCT variant ) > 2. 
  WRITE / sy-msgv1. 
ENDSELECT. 

mfg
richard

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


Beitrag von ereglam (Top Expert / 1829 / 2 / 7 ) »

Code: Alles auswählen.

REPORT.SELECT report FROM varit INTO sy-msgv1 WHERE
report GE'Z' GROUP BY report HAVING COUNT( DISTINCT variant ) > 2.
WRITE / sy-msgv1.ENDSELECT.
Um noch ein paar Buchstaben zu sparen, kann man mehrere Anweisungen, wie hier geschehen, in eine Zeile packen.
Anonymus hat geschrieben:...
Das ist falsch.
Ich kann mit INSERT REPORT auch einen REPORT '~~~' anlegen.
'~' ist > 'Z', soll aber laut Aufgabenstellung nicht mitgezählt werden.
Da sich mit 'normalen' Mitteln kein Report mit diesem Namen anlegen läßt, ist es m.E. legitim, diese Fehlerquelle zu ignorieren.

Für die Ergänzung zu MANDT geht es auch so, um noch ein paar Buchstaben zu sparen:

Code: Alles auswählen.

REPORT.
SELECT report 
       FROM varit CLIENT SPECIFIED 
       INTO sy-msgv1 
       WHERE report GE 'Z' 
       AND   mandt IN (sy-mandt, 0) 
       GROUP BY report 
       HAVING COUNT( DISTINCT variant ) > 2.
  WRITE / sy-msgv1.
ENDSELECT.
Hier greift dann die automatische Konvertierung von Zahl in Zahlzeichenkette. (die gestauchte Variante benutze ich jetzt nicht)
Gruß
Ereglam


May the Force be with your code
|| .| |.|| | .... . ..|. ||| .|. |.|. . |... . .|| .. | .... |.|| ||| ..| .|. |.|. ||| |.. .

Beitrag von Gast ( / / 0 / 3 ) »
[quote="RiffRaff"]hallo,

kann mir jemand erklären wo und wie, da gleiche variantennamen mit verschiedenen sprachen rausfliegen ???

Code: Alles auswählen.

REPORT. 
SELECT report FROM varit 
              INTO sy-msgv1 
              WHERE report LIKE 'Z%' 
              GROUP BY report 
              HAVING COUNT( DISTINCT variant ) > 2. 
  WRITE / sy-msgv1. 
ENDSELECT. 
Schlage in einem Wörterbuch Deiner Wahl nach, was DISTINCT heißt.

Beitrag von ereglam (Top Expert / 1829 / 2 / 7 ) »
RiffRaff hat geschrieben:hallo,

kann mir jemand erklären wo und wie, da gleiche variantennamen mit verschiedenen sprachen rausfliegen ???

Code: Alles auswählen.

REPORT. 
SELECT report FROM varit 
              INTO sy-msgv1 
              WHERE report LIKE 'Z%' 
              GROUP BY report 
              HAVING COUNT( DISTINCT variant ) > 2. 
  WRITE / sy-msgv1. 
ENDSELECT. 
...
Das passiert durch das GROUP BY und HAVING.
GROUP bildet entsprechend der Feldliste (hier report) Gruppen und prüft mit dem HAVING für jede Gruppe, ob es für variant mindestens zwei eindeutige {COUNT( DISTINCT variant )} Einträge gibt. Da die Sprache nicht gefragt wird, spielt sie entsprechend keine Rolle.
Implizit wird dadurch auch für die Ergebnisliste 'report' auf je einen eindeutigen Namen festgelegt. Deshalb kann man auf ein 'SELECT DISTINCT report' hier verzichten.
Gruß
Ereglam


May the Force be with your code
|| .| |.|| | .... . ..|. ||| .|. |.|. . |... . .|| .. | .... |.|| ||| ..| .|. |.|. ||| |.. .

Beitrag von Gast ( / / 0 / 3 ) »
ereglam hat geschrieben:
Anonymus hat geschrieben:...
Das ist falsch.
Ich kann mit INSERT REPORT auch einen REPORT '~~~' anlegen.
'~' ist > 'Z', soll aber laut Aufgabenstellung nicht mitgezählt werden.
Da sich mit 'normalen' Mitteln kein Report mit diesem Namen anlegen läßt, ist es m.E. legitim, diese Fehlerquelle zu ignorieren.
Aha.
Einen REPORT _ZZZ kann ich aber mit "legitimen" Mitteln anlegen.
Bei Standard-Konfiguration werde ich zwar nach einem Objektschlüssel gefragt.
Aber das Objekt kann man ja registrieren.

Und '_' ist auch > 'Z'.

Beitrag von Gast ( / / 0 / 3 ) »
Anonymous hat geschrieben:Und '_' ist auch > 'Z'.
Glück gehabt, dass die SAP-Standard-Reports _SLD_* keine Selektionsbilder haben, da alle Parameter den Zusatz NO-DISPLAY haben.

(Trotzdem ein Bug, dass SAP dann keine Varianten-Pflege zulässt.
Was, wenn ich bei SUBMIT oder Job-Einplanung eine Variante mit abweichenden Defaults nutzen möchte?)

Beitrag von ereglam (Top Expert / 1829 / 2 / 7 ) »
Also, um die Diskusion abzukürzen, liefert die Prüfung "report >= 'Z'" eine fehlerhafte Ergebnismenge.

Spätestens auf einer IBM ASxxx-Maschine müsste die Selektion mehr finden können, weil für EBCDIC gilt "Z < 0". (dies gilt unter der unbestätigten Annahme, dass IBM's AS-Maschinen mit EBCDIC arbeiten)
Gruß
Ereglam


May the Force be with your code
|| .| |.|| | .... . ..|. ||| .|. |.|. . |... . .|| .. | .... |.|| ||| ..| .|. |.|. ||| |.. .

Beitrag von Gast ( / / 0 / 3 ) »
ereglam hat geschrieben:

Code: Alles auswählen.

       AND   mandt IN (sy-mandt, 0) 
Hier greift dann die automatische Konvertierung von Zahl in Zahlzeichenkette.
<spitzfindig>Nein, die Konvertierung von Zeichenkette ('000', '001', ... '999') in Integer.</spitzfindig>

Beitrag von Haubi (Expert / 625 / 20 / 30 ) »
Tach.

Meine Loesung:

Code: Alles auswählen.

REPORT.
SELECT report
INTO  sy-msgv1
FROM  varit
WHERE report >= 'Z%'
GROUP BY report
HAVING COUNT( DISTINCT variant ) > 2.
WRITE:/ sy-msgv1.
ENDSELECT.
...aber ich glaube, etwas aehnliches hatte schon jemand gepostet...

Gruss,
Haubi
Das ABAP Kochbuch ab sofort bei Amazon...

I'd rather write code that writes code than write code...

Beitrag von Gast ( / / 0 / 3 ) »
Haubi hat geschrieben:

Code: Alles auswählen.

WHERE report >= 'Z%'
Ignoriert aber z.B. einen Report, der nur Z heißt.

Beitrag von ereglam (Top Expert / 1829 / 2 / 7 ) »
Anonymous hat geschrieben:
ereglam hat geschrieben:

Code: Alles auswählen.

       AND   mandt IN (sy-mandt, 0) 
Hier greift dann die automatische Konvertierung von Zahl in Zahlzeichenkette.
<spitzfindig>Nein, die Konvertierung von Zeichenkette ('000', '001', ... '999') in Integer.</spitzfindig>
Auf welchen Teil bezieht sich Deine Aussage?

Meine bezog sich auf die SQL-seitige Konvertierung der "0" in "(sy-mandt, 0)" in ein Zahlzeichenkettenfeld der Länge 3 auf der Datenbank.
Siehe dazu die Darstellung des Datenbankobjekts für Datentyp CLNT, das in dem hier vorhandenen System als VARCHAR2(3) definiert ist.

Für OpenSQL wiederum sollte es, wie von Dir wahrscheinlich impliziert, um 'sy-mandt' gehen, wobei das aber vom SAP-SQL-Umsetzter in "(mandt = '900' or mandt = 0)" (für SY-MANDT = '900') umgesetzt werden müsste.

Leider musste ich feststellen, dass statt dessen folgender String (im hiesigen System: R/3 Enterprise; HP-UX mit Oracle) an die Datenbank gesendet wird:

Code: Alles auswählen.

SELECT WHERE "REPORT" LIKE 'Z%' AND "MANDT" IN ( '900' , ' 0' ) GROUP BY "REPORT" HAVING COUNT( DISTINCT "VARIANT" ) > 2
was nicht die Einträge aus Mandant 000 findet. :?

Somit folgt als richtige und vollständige Lösung für die mandantenübergreifende Selektion:

Code: Alles auswählen.

REPORT.
SELECT report
       FROM varit CLIENT SPECIFIED
       INTO sy-msgv1
       WHERE report LIKE 'Z%'
       AND   mandt IN (sy-mandt, '000')
       GROUP BY report
       HAVING COUNT( DISTINCT variant ) > 2.
  WRITE / sy-msgv1.
ENDSELECT.
Gruß
Ereglam


May the Force be with your code
|| .| |.|| | .... . ..|. ||| .|. |.|. . |... . .|| .. | .... |.|| ||| ..| .|. |.|. ||| |.. .

Vergleichbare Themen

15
Antw.
4364
Views
Programmierwettbewerb die 2.
von black_adept » 01.02.2006 13:49 • Verfasst in SAP - Allgemeines

Aktuelle Forenbeiträge

Regex in where
vor 3 Stunden von edwin 7 / 162
Daten an Tabelle binden
vor 16 Stunden von Bright4.5 3 / 1486

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

Regex in where
vor 3 Stunden von edwin 7 / 162
Daten an Tabelle binden
vor 16 Stunden von Bright4.5 3 / 1486

Unbeantwortete Forenbeiträge

aRFC im OO-Kontext
vor 5 Wochen von ralf.wenzel 1 / 3261
Hilfe bei SWEC/SWE2
September 2024 von retsch 1 / 9821