Knobelaufgabe zum Wochenbeginn ( Mai 2021 )

Alles Rund um SAP®.
6 Beiträge • Seite 1 von 1
6 Beiträge Seite 1 von 1

Knobelaufgabe zum Wochenbeginn ( Mai 2021 )

Beitrag von black_adept (Top Expert / 3534 / 71 / 703 ) »
Moin allerseits,

da wir längere Zeit kein Rätsel / Knobelaufgabe mehr hatten, habe ich rechtzeitig zum Vatertag eine erstellt.

Im Gegensatz zu den anderen Aufgaben davor geht es diesmal nicht darum ein spezielles Codingproblem zu lösen sondern um die Selektionsbildgestaltung eines Reports.
Bei mir ist es jedenfalls so, dass es nicht gerade unüblich ist, dass auf dem Selektionsbild nach Feldern selektiert werden soll, welche eigentlich intern Ankreuzfelder sind und wo der User entscheiden darf, ob er alles selektieren möchte, wo solch ein Feld gesetzt ist, wo es ungesetzt ist oder ob es ihm egal ist.
Als Entwickler geht man hin und sagt: SELECT-OPTION - die User können das dann ja einfach auswählen. Leider sagen mir die User dann häufig, dass das zu kompliziert sei und sie einfach zwischen den 3 Möglichkeiten auswählen möchten.
Nächste Alternative wäre einfach für jedes der Felder eine Dropdownbox zu erstellen mit diesen Werten. Wenn ich wenig Zeit habe ist das der Ansatz, den ich dann verfolge.
Aber es gibt auch eine Möglichkeit, das Ganze so auszugeben, dass die User via Radiobutton auswählen können welche der Möglichkeiten sie denn haben möchten und man m.E. sehr gut erkennen kann, was genau gewünscht ist.

Die Aufgabe ist daher diesmal nicht unbedingt einfacher, aber halt anders als sonst: Erstellt einen Report, der beim Starten ein Selektionsbild zeigt, welches in etwa wie folgendes aussieht.
Unbenannt.png
Hinweis: Die SelOpt ist vom Typ DD03L-Tabname, die Radiobuttons haben die Beschriftung der Felder DD03L-KEYFLAG bis DD03L-TABLETYPE ( die Felder liegen alle nacheinander in der DD03L ) und sollen bei Programmstart auf "Egal" gestellt sein.
Damit das Ganze aber nicht zu einfach ist noch folgende Zusatzforderung: Die Beschrifung der Radiobuttonzeilen soll leicht pflegbar und übersetzbar sein + auch den DDIC-Bezug ermöglichen ( so wie es normale Parameter/Selopts auch zulassen) und wenn möglich halbwegs einfach erweiterbar und lesbar sein. Weiterhin muss eine Auswahl - wie üblich - als Selektionsvariante speicherbar sein. Im Screenshot hat die erste Auswahlzeile einen modifizierten Text, alle anderen Felder holen sich ihren Text aus dem DDIC, so wie es andere Parameter/Selektionsoptionen auch machen.

Gerade die Zusatzforderungen werden dann hoffentlich doch ein wenig Gehirnaktivitäten und Design- und Codingideen erfordern....
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de


Re: Knobelaufgabe zum Wochenbeginn ( Mai 2021 )

Beitrag von Thomas R. (Expert / 717 / 48 / 30 ) »
Hallo Stefan,
gehe ich richtig in der Annahme, dass Du nun keinen Report haben willst in dem 18 Mal "Selection-Screen Begin of Line." steht?

Da bin ich auf die Lösungen gespannt, insbesondere dann auch auf die Wartbarkeit und Verständlichkeit bei einem durch ein Programm explizit erstellten Selection-Screen.

MfG
Thomas R.

Re: Knobelaufgabe zum Wochenbeginn ( Mai 2021 )

Beitrag von a-dead-trousers (Top Expert / 3679 / 133 / 958 ) »
Meine Lösung:
84 Zeilen Code für den SELECTION-SCREEN mit den geforderten Funktionen und einer halbwegs ansprechenden Optik (Leerzeilen zur Gruppierung usw.).
Für jedes weitere Feld das man abfragen möchte werden 2 zusätzliche Codezeilen benötigt.

Selection_text.png
Selection_mit.png

Bonus:
Auch die Überschriften "DD03L: Feld nicht initial", "Yes", "No", "Wtf" lassen sich übersetzen, wenngleich auch leider "nur" über Textsymbole.

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.07
Basis: 7.40

Re: Knobelaufgabe zum Wochenbeginn ( Mai 2021 )

Beitrag von black_adept (Top Expert / 3534 / 71 / 703 ) »
*lach*
@a-d-t: Wenn ich sehe was du das geschwärzt hast, bin ich mir sicher, dass deine Lösung meiner eigenen recht ähnlich ist und dass Ralf dich ob des Codes tadeln wird...
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Knobelaufgabe zum Wochenbeginn ( Mai 2021 )

Beitrag von black_adept (Top Expert / 3534 / 71 / 703 ) »
Moin allerseits,

Vatertag ist vorbei und damit auch diese Challenge. Leider hat sich nur einer getraut eine Lösung einzuschicken. Wahrscheinlich ist das "rumfrickeln" an der UI nicht die Lieblingsaufgabe der Meisten hier. Und ich kann das durchaus nachvollziehen.
Die einzige Lösung, die ich erhalten habe ist die von a-d-t, welche vom Grundgerüst meiner eigenen Idee entspricht aber einfach um Längen besser ist als das, was ich im Sinn hatte.

Auf was hatte ich es in dieser Challenge abgesehen?
1.)
Die Selektionsbildgestaltung mit "BEGIN OF LINE und END OF LINE" ist einfach eine m.E. nervige Angelegenheit und je mehr solche selbst zusammengefrickelten Zeilen auf dem Selektionsbild auftauchen desto unübersichtlicher wird der Code, auch wenn man 10x mal das Gleiche machen will.
Der für mich sauberste Ansatz ist in diesem Fall der Einsatz von Makros, einfach weil der Ansatz "gleichartiges Coding in Unterroutinen" hier nicht funktioniert, da das ABAP-System schon zur Compile-/Generierungszeit das Coding auswertet um das Selektionsbild zu erstellen und nicht erst zur Laufzeit.
Hierdurch wird man dem generellen Konzept "gleiches Coding nicht mehrfach schreiben" beim Lesen des Codes wieder gerecht, auch wenn intern die Makros aufgelöst werden und de facto dann halt doch 10x der gleiche Code vom Compiler ausgewertet wird.
Und ich stehe dazu, auch wenn ich fürchte, dass mein Hauptantagonist das anders sehen und mich dafür tadeln könnte. 😉

2.)
Pflegbarkeit der Beschriftung: Da die Felder alle mittels Makro erstellt werden und einfach Radiobuttons sind fehlt die Möglichkeit hier auf ein DDIC-Element zu referenzieren und sich der Standardmöglichkeiten des Editors zu bedienen.
Der Ansatz hier ist folgender: Man erstellt das Feld, welches die korrekte Beschriftung im DDIC vorweist einfach auch auf dem Selektionsbild,blendet es dann aus und verwendet dann die Beschreibung dieses Elements als Beschriftung für die Makrozeile.
Und das ist auch das, was man aus diesem Teil mitnehmen sollte. "Hilfsvariablen" können auch an überraschenden Stellen hilfreich sein - insbesondere wenn man dadurch Effekte geschenkt bekommt, die der SAP Standard bietet, die aber direkt scheinbar nicht zur Verfügung stehen.
Anmerkung: Dies ist auch der Grund, warum a-d-t die Variablenbezeichunungen ausgeblendet hatte. "There's more to it than meets the eye"
Andere Verwendung von unsichtbaren Elementen: Kennt jemand eine Situation, wo man mit unsichtbaren Rahmen auf einem Dynpro ein besonderes Verhalten erzeugen kann, welches mit anderen Dynproelementen nicht machbar ist ?

3.)
Wo ist so etwas in freier Wildbahn verwendbar?
Das Beispiel war schon recht weit hergeholt. Aber ich habe häufiger mit Objekten zu tun, für die eine Statusverwaltung aktiv ist ( Tabelle JEST ). Und es passiert halt von Zeit zu Zeit, dass die Anwender nach Objekten suchen wollen, welche eine spezielle Statuskombination aufweisen, so dass ich in diesen Fällen gerne diese Art der Auswahl anbiete, da alleine die Stellung der Radiobuttons den Anwendern beim groben Drüberschauen anzeigt, wonach sie gerade suchen.

Hier jetzt die wirklich schöne Lösung von a-d-t, an der alle obigen Kommentare nachvollzogen werden können:
a-d-t hat geschrieben:

Code: Alles auswählen.

REPORT z_test_dd03l.

TABLES:
  dd03l, sscrfields.

DEFINE create_field.
  SELECT-OPTIONS so_&1 FOR dd03l-&2 MODIF ID hid.
  SELECTION-SCREEN BEGIN OF LINE.
  SELECTION-SCREEN COMMENT (31) FOR FIELD so_&1.
  PARAMETERS ry_&1 TYPE abap_bool RADIOBUTTON GROUP &3 USER-COMMAND choosen_&1.
  SELECTION-SCREEN POSITION 46.
  PARAMETERS rn_&1 TYPE abap_bool RADIOBUTTON GROUP &3.
  SELECTION-SCREEN POSITION 59.
  PARAMETERS rw_&1 TYPE abap_bool RADIOBUTTON GROUP &3 DEFAULT 'X'.
  SELECTION-SCREEN END OF LINE.
end-OF-DEFINITION.

DEFINE modify_field.
  WHEN 'CHOOSEN_&1'.
    CLEAR so_&1[].
    CASE abap_true.
      WHEN ry_&1.
        APPEND VALUE #( sign = 'E' option = 'EQ' ) TO so_&1.
      WHEN rn_&1.
        APPEND VALUE #( sign = 'I' option = 'EQ' ) TO so_&1.
    ENDCASE.
end-OF-DEFINITION.

SELECT-OPTIONS so_tabna FOR dd03l-tabname.

SELECTION-SCREEN BEGIN OF BLOCK bl_field WITH FRAME.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT (31) tx_field MODIF ID tf1.
SELECTION-SCREEN COMMENT (12) tx_optye MODIF ID tf2.
SELECTION-SCREEN COMMENT (12) tx_optno MODIF ID tf3.
SELECTION-SCREEN COMMENT (12) tx_optwt MODIF ID tf3.
SELECTION-SCREEN END OF LINE.

create_field keyfl keyflag 1.
create_field manda mandatory 2.
create_field rolln rollname 3.
create_field check checktable 4.
create_field admin adminfield 5.
create_field intty inttype 6.
create_field intle intlen 7.
create_field refta reftable 8.
create_field precf precfield 9.
create_field reffi reffield 10.

SELECTION-SCREEN END OF BLOCK bl_field.

INITIALIZATION.
  tx_field = 'DD03L: Feld nicht initial'(tf1).
  tx_optye = 'Yes'(tf2).
  tx_optno = 'No'(tf3).
  tx_optwt = 'Wtf'(tf4).

AT SELECTION-SCREEN OUTPUT.
  LOOP AT SCREEN.
    CASE screen-group1.
      WHEN 'TF1'.
        screen-intensified = 1.
        MODIFY SCREEN.
      WHEN 'HID'.
        screen-invisible = 1.
        screen-output = 0.
        screen-input = 0.
        MODIFY SCREEN.
    ENDCASE.
  ENDLOOP.

AT SELECTION-SCREEN.
  CASE sscrfields.
      modify_field keyfl.
      modify_field manda.
      modify_field rolln.
      modify_field check.
      modify_field admin.
      modify_field intty.
      modify_field intle.
      modify_field refta.
      modify_field precf.
      modify_field reffi.
  ENDCASE.

Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag (Insgesamt 2):
a-dead-trousersewx

live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Knobelaufgabe zum Wochenbeginn ( Mai 2021 )

Beitrag von a-dead-trousers (Top Expert / 3679 / 133 / 958 ) »
Ich muss noch ergänzen, dass die Verwendung von SELECT-OPTIONS in meiner Lösung eigentlich einem "Missverständnis" in der Aufgabenstellung geschuldet ist:
Ich hab das "Speichern als Selektionsvariante" einfach falsch interpretiert/gelesen.
Andererseits spart man sich so vor dem (vermutlich) darauf folgenden SELECT die Abfrage ob ein PARAMETER (Stefan hat mir seine ursprüngliche Lösung gezeigt) überhaupt einen Wert hat oder nicht.
Nachteil ist, dass man dadurch nur noch 8 Zeichen für die Variablennamen hat (vs. 30 für Feldnamen).
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.07
Basis: 7.40

Seite 1 von 1

Über diesen Beitrag



ABAP & SAP eBook Flatrate von Espresso Tutorials Sponsorlink
Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Aktuelle Forenbeiträge

Abgleich LStB-Erstellung
Gestern von czschunke 1 / 22
Feldname ermitteln
vor 2 Tagen von ralf.wenzel 9 / 62
Variablen im Workflow
vor 2 Tagen von Nordlicht 3 / 37

Vergleichbare Themen

Knobelaufgabe zum Wochenende / Wochenbeginn
von black_adept » 23.08.2019 08:46
Knobelaufgabe zum Wochenende/Wochenbeginn
von black_adept » 04.09.2020 11:23
Knobelaufgabe zum Wochenende/Wochenbeginn ( Dezember 2020 )
von black_adept » 14.12.2020 15:54
Knobelaufgabe
von black_adept » 26.03.2021 13:55