Programmierwettbewerb die 2.

Alles Rund um SAP®.
16 Beiträge • Seite 1 von 2 (current) Nächste
16 Beiträge Seite 1 von 2 (current) Nächste

Programmierwettbewerb die 2.

Beitrag von black_adept (Top Expert / 4086 / 126 / 940 ) »
Nachdem der letzte Thread bzgl. des Themas ja eine durchaus respektable Anzahl von Postings hervorgerufen und mir gezeigt hat, dass die Anzahl der Tüftler und Optimierer doch beachtlich ist, habe ich mich entschlossen kurzfristig noch eine neue Aufgabe nachzuschieben.

Die Aufgabe an sich ist ähnlich gelagert und durchaus der Praxis entnommen (auch wenn dort i.A. wohl auf andere Tabellen zugegriffen wird - je nach Kontext ). Um allen ( auch denjenigen, die "nur" ein MINISAP zum Testen haben ) dieselben Chancen zu geben und auch selber schnell Testfälle erzeugen zu können werde ich mich wieder auf eine Tabelle des DDIC beziehen, die in allen Systemen vorhanden ist.


Aufgabenstellung:
Gesucht ist ein Programm, welches diejenigen aktiven Programme anlistet welche mit "Z" beginnen
( Zu lesende Tabelle: D010SINF, PROG = "Z*", R3STATE = "A" )
und bei denen der letzte Änderer
( D010SINF-UNAM ) ein anderer ist, als der ursprüngliche Autor ( D010SINF-CNAM )


Es werden wieder Programme gesucht, die aus
a) möglichst wenigen Buchstaben,
b) möglichst wenigen Wörtern,
c) möglichst wenigen Anweisungen

bestehen.

Hinweise:
- Ein Programm, welches einem das Zählen abnimmt ist im folgenden Posting http://www.abapforum.com/forum/viewtopic.php?t=5870 hinterlegt.

- Im selben Thread sind auch noch ein paar Tricks versteckt, wie man sich einige Befehle/Wörter sparen kann (auch wenn die nicht unbedingt zur Lesbarkeit beitragen ).

- Die Anzahl der Worte/Befehle/Buchstaben wird nicht viel mehr sein als beim letzten Mal. Ich tippe mal es wird sogar weniger sein in allen Kategorien.

Ach ja - und es geht nicht ums Austricksen des Zählprogramms ( das hab ich letztes Mal nur schnell in 10 Minuten hingeklatscht ). Wenn jemand ein schöneres Zählprogramm hat ( welches evtl. auch die erzeugten Token zählt oder andere Verbesserungen ) - immer her damit.

Und abschließend sei noch bemerkt, dass so eine _Wettbewerb der auf Buchstabenoptimierung geht natürlich selten im wirklichen Programmieralltag gebraucht wird. Aber wenn der eine oder andere sich nochmals mit der Doku beschäftigt oder aus den Ergebnissen das eine oder andere für ihn Unbekannte oder Vergessene entdeckt oder eine Anregung für ein aktuelles oder vergangenes Problem findet, hat dieser _Wettbewerb in meinen Augen schon seine Berechtigung.
Und letztes Mal hat mindestens einer Person (ich) die Wiederauffrischung gut getan ( hatte die "HAVING-Clause" des Select-Befehls verdrängt )
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

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


Re: Programmierwettbewerb die 2.

Beitrag von Gast ( / / 0 / 3 ) »
D010SINF ist in 6.x eine View auf REPOSRC.
Kann man da nicht gleich TRDIR nehmen, dann spart man sich den Status.
Auf men MiniSAP geht auch:

Code: Alles auswählen.

REPORT.UPDATE PROGDIR SET CNAM='' UNAM=''.WRITE 0.

Beitrag von Gast ( / / 0 / 3 ) »
Ach, es sollten ja die passenden Programme in der Liste erscheinen. Also kann man das WRITE noch weglassen.

Beitrag von black_adept (Top Expert / 4086 / 126 / 940 ) »
@Gast:
1.) Ich habe extra D010SINF genommen, damit auch User auf 3.x, 4.x Systemen dieselben Möglichkeiten haben. REPOSRC ex. z.B. in 4.5 noch nicht.

2.) :lol: Die Lösung ist korrekt (ich hoffe nur, dass das keiner ausprobiert) aber so natürlich nicht gemeint. Ich könnte jetzt beginnen auch so eine Art "Kleingedrucktes" unter meine Aufgaben zu schreiben. Werde ich mir aber sparen, da ich hoffe, dass außer dieser Lösung noch weitere kommen, die mehr dem entsprechen, was ich gemeint habe (auch wenn ich definitiv deine Lösung nicht ausgeschlossen habe ).
Es soll eine Lösung gefunden werden, die den Datenbankstand der D010SINF NICHT!!! verändert :lol:

3.) Warum diesmal ganz statt nur halbanonym?
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Beitrag von GERDLA (Specialist / 116 / 0 / 0 ) »
[quote="black_adept"]@Gast:

Es soll eine Lösung gefunden werden, die den Datenbankstand der D010SINF NICHT!!! verändert :lol:

quote]


gut gebrüllt löwe :D

Beitrag von Andreas G (Specialist / 175 / 0 / 0 ) »
Meine Lösung:
Buchstaben - 99
Wörter - 18
Anweisungen - 4

Code: Alles auswählen.

REPORT.

SELECT prog FROM d010sinf
INTO sy-repid
WHERE prog LIKE 'Z%'
AND r3state = 'A'.
  WRITE:/ sy-repid.
ENDSELECT.
UUUps hab das mit dem Änderer vergessen :oops:
muss ich noch mal überlegen.

mfg Andi
Hauptsoch: HAUPTSOCH!

Beitrag von Andreas G (Specialist / 175 / 0 / 0 ) »
neue lösung:
Buchstaben - 155
Wörter - 32
Anweisungen - 4

Code: Alles auswählen.

REPORT.
SELECT a~prog FROM d010sinf AS a JOIN d010sinf AS b
ON a~prog = b~prog
AND a~unam NE b~cnam
INTO sy-repid
WHERE a~prog LIKE 'Z%'
AND a~r3state = 'A'.
WRITE:/ sy-repid.
ENDSELECT.
so, hoff des passt jetzt :wink:

mfg Andi
Hauptsoch: HAUPTSOCH!

Beitrag von DeathGuardian (Expert / 759 / 0 / 3 ) »
Andreas G hat geschrieben:neue lösung:
Buchstaben - 155
Wörter - 32
Anweisungen - 4

Code: Alles auswählen.

REPORT.
SELECT a~prog FROM d010sinf AS a JOIN d010sinf AS b
ON a~prog = b~prog
AND a~unam NE b~cnam
INTO sy-repid
WHERE a~prog LIKE 'Z%'
AND a~r3state = 'A'.
WRITE:/ sy-repid.
ENDSELECT.
so, hoff des passt jetzt :wink:

mfg Andi
Seit wann lässt SAP es zu, das man hier den sy-repid überschreibt?

Hier Meins:

Code: Alles auswählen.

REPORT.
DATA z TYPE string .
SELECT prog FROM d010sinf AS a
INTO z
WHERE prog LIKE 'Z%'
AND r3state = 'A'
AND unam NE a~cnam.
  WRITE:/ z.
ENDSELECT.
Zuletzt geändert von DeathGuardian am 01.02.2006 15:20, insgesamt 1-mal geändert.

Beitrag von ereglam (Top Expert / 1829 / 2 / 7 ) »
wenn man davon absieht, dass SY-REPID nicht verändert werden darf...

Es geht noch kürzer:

Code: Alles auswählen.

Report Transporter                     
                                       
Buchstaben -                        116
Wörter -                             22
Anweisungen -                         4
Gruß
Ereglam


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

Beitrag von Andreas G (Specialist / 175 / 0 / 0 ) »
ereglam hat geschrieben:wenn man davon absieht, dass SY-REPID nicht verändert werden darf...
Tja dürfen, können, wollen, ...
Es funktioniert, ob man darf oder nicht 8)

neue Version:
Buchstaben - 117
Wörter - 24
Anweisungen - 4

Code: Alles auswählen.

REPORT.
SELECT prog FROM d010sinf AS a
INTO sy-repid
WHERE prog LIKE 'Z%'
AND r3state = 'A'
AND cnam ne a~unam.
WRITE:/ sy-repid.
ENDSELECT.
mfg Andi
Hauptsoch: HAUPTSOCH!

Beitrag von DeathGuardian (Expert / 759 / 0 / 3 ) »
Andreas G hat geschrieben:
ereglam hat geschrieben:wenn man davon absieht, dass SY-REPID nicht verändert werden darf...
Tja dürfen, können, wollen, ...
Es funktioniert, ob man darf oder nicht 8)

neue Version:
Buchstaben - 117
Wörter - 24
Anweisungen - 4

Code: Alles auswählen.

REPORT.
SELECT prog FROM d010sinf AS a
INTO sy-repid
WHERE prog LIKE 'Z%'
AND r3state = 'A'
AND cnam ne a~unam.
WRITE:/ sy-repid.
ENDSELECT.
mfg Andi
Also bei mir meckert da die SE80 und lässt mich nicht aktivieren.

Beitrag von ereglam (Top Expert / 1829 / 2 / 7 ) »
damit stellt sich dann aber die Frage, welches Release Du benutzt?
Ich habe hier ein R/3-Enterprise (4.7) und dort bekomme ich von Compiler ein paar auf die Finger, wenn ich SY-REPID benutze. Mit SY-CPROG habe ich dagegen kein Problem...
Gruß
Ereglam


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

Beitrag von black_adept (Top Expert / 4086 / 126 / 940 ) »
Da die Antwort von Andreas auch die ist, die mir als kürzeste erscheint und auch von anderer Seite schon als private Nachricht zugesandt worden ist, ist der _Wettbewerb hiermit beendet.
Wobei man sich streiten kann, in welche SY-Variable man denn das Ergebnis am Besten ablegt. ( Meine Favoriten sind SY-MSGVx und SY-UCOMM ).

Kleiner Hinweis für all diejenigen, die sich nicht durch alle Codings durchquälen möchten.
Das Interessante an der Lösung ist die Verwendung des "as ..." Operators um Vergleiche der Tabelle mit sich selber zuzulassen.

Wird sowas gebraucht? Sicher - z.B. bei einer Aufgabenstellung wie ein Fachbereich sie stellen könnte. " Ich brauche eine Liste aller Materialien, deren Bruttogewicht kleiner ist als das Nettogewicht".

Wo steht das in der Dokumentation von ABAP?
( Info aus einem 4.5 System )
Aus dem Editor heraus in die Hilfe gibt es keinen Hinweis in der Doku zu der "WHERE"-Bedingung.

Die SAP-Bibliothek ( Stand 4.6c ) gibt folgende Aussage zum Besten:
SELECT... WHERE <s> <operator> <f> ...

Für <f> kann eine andere Spalte einer Datenbanktabelle aus der FROM-Klausel, ein Datenobjekt oder eine skalare Subquery verwendet werden.

Dabei wird allerdings unterschlagen, WIE man denn die "andere Spalte der DB-Tabelle aus der FROM-Klausel" anzusprechen hat.

Allerdings findet sich in den Beispielen zu der "JOIN"-Verknüpfung ( SAP-Bibliothek und Help aus ABAP heraus) eines, welche diese Möglichkeit vorsieht. Allerdings eben für 2 verschiedene Tabellen.

All das zusammen führt zu der von Andreas geposteten Lösung. Man erkennt sogar den Weg durch die Doku ( Zuerst JOIN mit "as ..." ) und dann der Sprung es auch ohne JOIN zu versuchen ( ging mir exakt genauso ).
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Beitrag von Gast ( / / 0 / 3 ) »
Es geht auch ohne AS ...:

Code: Alles auswählen.

REPORT.SELECT:prog:FROM:d010sinf:INTO:sy-cprog:WHERE:prog:LIKE'Z%':AND
r3state:='A':AND:nam:ne:d010sinf~unam.WRITE:/:sy-cprog.ENDSELECT.

Beitrag von Andreas G (Specialist / 175 / 0 / 0 ) »
@ereglam
hab ein R/3 - System Release 4.6C
damit ist aktivieren und testen kein problem, auch wenn man sy-repid verändert.
(Bekomm nicht einmal bei der Erweiterten Programmprüfung einen Fehler oder Warnung).

mfg Andi
Hauptsoch: HAUPTSOCH!

Vergleichbare Themen

40
Antw.
8834
Views
Mal wieder ein Programmierwettbewerb
von black_adept » 25.01.2006 11:07 • Verfasst in SAP - Allgemeines

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 14 Stunden von Bright4.5 1 / 303
aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 1943
Hilfe bei SWEC/SWE2
letzen Monat von retsch 1 / 8546