Contest: ABAP with Style ;-)

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV
9 Beiträge • Seite 1 von 1
9 Beiträge Seite 1 von 1

Contest: ABAP with Style ;-)

Beitrag von donny (Specialist / 253 / 0 / 2 ) »
Hallo,

ich habe in einem Report in etwa das folgende Coding gesehen. Es soll 10 Parameter-Felder (Range-Tabellen) prüfen und, wenn alle leer sind, einen entsprechenden Hinweis ausgeben. Ist mindestens ein Feld gefüllt, findet danach natürlich eine weitere Verarbeitung statt.

Code: Alles auswählen.

REPORT z_test.
data: feld type char4.
select-OPTIONS: s_f01 for feld,
                s_f02 for feld,
                s_f03 for feld,
                s_f04 for feld,
                s_f05 for feld,
                s_f06 for feld,
                s_f07 for feld,
                s_f08 for feld,
                s_f09 for feld,
                s_f10 for feld.

  IF s_f01[] IS INITIAL.
    IF s_f02[] IS INITIAL.
      IF s_f03[] IS INITIAL.
        IF s_f04[] IS INITIAL.
          IF s_f05[] IS INITIAL.
            IF s_f06[] IS INITIAL.
              IF s_f07[] IS INITIAL.
                IF s_f08[] IS INITIAL.
                  IF s_f09[] IS INITIAL.
                    IF s_f10[] IS INITIAL.
                      Write: / 'Bitte mindestens einen Wert eingeben'.
                    ENDIF.
                  ENDIF.
                ENDIF.
              ENDIF.
            ENDIF.
          ENDIF.
        ENDIF.
      ENDIF.
    ENDIF.
  ENDIF.
Ich fand dieses Coding "unschön" und hab es mal mit zwei Macros wie folgt "verbessert":

Code: Alles auswählen.

REPORT z_test.
DATA: feld TYPE char4.

DEFINE m_feld.
  select-options: s_f&1 for feld.
END-OF-DEFINITION.
DEFINE m_pruf.
elseif not s_f&1[] is initial.
END-OF-DEFINITION.

m_feld: 01, 02, 03, 04, 05, 06, 07, 08, 09, 10.

IF NOT s_f01[] IS INITIAL.
  m_pruf:     02, 03, 04, 05, 06, 07, 08, 09, 10.
ELSE.
  WRITE: / 'Bitte mindestens einen Wert eingeben'.
ENDIF.
:D

Habt ihr noch bessere Ideen? Dann her damit!
donny
Zuletzt geändert von donny am 25.10.2007 13:40, insgesamt 1-mal geändert.

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


Re: Contest: ABAP with Style ;-)

Beitrag von ralf.wenzel (Top Expert / 3921 / 200 / 280 ) »
Hmmm, ich finde es fehlen noch die jeweiligen ELSE-Zweige dazu, in denen steht dass nichts getan wird, also zu jedem IF ein

ELSE.
* Nichts tun

:lol:
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Beitrag von donny (Specialist / 253 / 0 / 2 ) »
Hi Ralf,

eigentlich wollte ich das obere Beispiel durch das untere ersetzen, aber die Idee, es einfach noch komplexer zu machen, gefällt mir auch :lol:

donny

Beitrag von Alexander D. (Expert / 682 / 30 / 84 ) »
nette Aufgabe :)

wie wäre es damit:

Code: Alles auswählen.

REPORT Z_TEST.
DATA: FELD TYPE CHAR4.
SELECT-OPTIONS: S_F01 FOR FELD,
                S_F02 FOR FELD,
                S_F03 FOR FELD,
                S_F04 FOR FELD,
                S_F05 FOR FELD,
                S_F06 FOR FELD,
                S_F07 FOR FELD,
                S_F08 FOR FELD,
                S_F09 FOR FELD,
                S_F10 FOR FELD.

DATA: H_WERT TYPE P,
      H_SUM TYPE P.

DEFINE M_PRUF.
  DESCRIBE TABLE S_F&1[] LINES H_WERT.
  H_SUM = H_SUM + H_WERT.
END-OF-DEFINITION.

M_PRUF: 01, 02, 03, 04, 05, 06, 07, 08, 09, 10.

IF H_SUM = 0.
  WRITE: / 'Bitte mindestens einen Wert eingeben'.
ENDIF.
Gruss
Alexander

Beitrag von donny (Specialist / 253 / 0 / 2 ) »
Hi Alexander,

deine Lösung find ich auch nicht schlecht. Hier hab ich noch eine ohne Makros, ist aber nur fünf Zeilen kürzer als das Original:

Code: Alles auswählen.

REPORT Z_TEST.
DATA: FELD   TYPE CHAR4.
DATA: H_Feld type RANGE OF feld.

SELECT-OPTIONS: S_F01 FOR FELD,
                S_F02 FOR FELD,
                S_F03 FOR FELD,
                S_F04 FOR FELD,
                S_F05 FOR FELD,
                S_F06 FOR FELD,
                S_F07 FOR FELD,
                S_F08 FOR FELD,
                S_F09 FOR FELD,
                S_F10 FOR FELD.

APPEND LINES OF: s_f01  to H_Feld,
                 s_f02  to H_feld,
                 s_f03  to H_feld,
                 s_f04  to H_feld,
                 s_f05  to H_feld,
                 s_f06  to H_feld,
                 s_f07  to H_feld,
                 s_f08  to H_feld,
                 s_f09  to H_feld,
                 s_f10  to H_feld.

if H_FELD is initial.
  WRITE: / 'Bitte mindestens einen Wert eingeben'.
ENDIF.

Beitrag von Thomas R. (Expert / 755 / 78 / 34 ) »
Hallo Zusammen,
irgendwie bin ich kein Freund von Makros, da sie schlecht zu lesen und nicht zu debuggen sind. Warum nicht einfach alles in eine Abfrage stecken?

Code: Alles auswählen.

REPORT z_test.
data: feld type char4.
select-OPTIONS: s_f01 for feld,
                s_f02 for feld,
                s_f03 for feld,
                s_f04 for feld,
                s_f05 for feld,
                s_f06 for feld,
                s_f07 for feld,
                s_f08 for feld,
                s_f09 for feld,
                s_f10 for feld.

  IF s_f01[] IS INITIAL AND s_f02[] IS INITIAL AND s_f03[] IS INITIAL
    AND s_f04[] IS INITIAL AND s_f05[] IS INITIAL AND s_f06[] IS INITIAL
    AND s_f07[] IS INITIAL AND s_f08[] IS INITIAL AND s_f09[] IS INITIAL
    AND s_f10[] IS INITIAL.
    Write: / 'Bitte mindestens einen Wert eingeben'.
  ENDIF.
MfG
Thomas R.

Beitrag von donny (Specialist / 253 / 0 / 2 ) »
Aber Thomas,

wo bleibt denn da der Spass an der Arbeit. Das muss doch auch anders gehen. :twisted:
Habe noch diesen Vorschlag, der sich auch debuggen lässt:

Code: Alles auswählen.

REPORT z_test.
DATA:  feld     TYPE char4,
       h_name   TYPE char7  VALUE 'S_F01[]',
       h_index  TYPE numc2,
       h_check  TYPE char1.

DEFINE m_feld.
  select-options: s_f&1 for feld.
END-OF-DEFINITION.
m_feld: 01, 02, 03, 04, 05, 06, 07, 08, 09, 10.

FIELD-SYMBOLS <f> TYPE table.
DO 10 TIMES.
  h_index = sy-index.
  h_name+3(2) = h_index.
  ASSIGN (h_name) TO <f>.
  IF NOT <f> IS INITIAL.
    h_check  = 'X'.
  ENDIF.
ENDDO.

IF h_check IS INITIAL.
  WRITE: / 'Bitte mindestens einen Wert eingeben'.
ENDIF.
Der wäre natürlich viel eleganter, wenn man nicht soviele Hilfvariablen bräuchte....

Gruß
donny

Beitrag von Thomas R. (Expert / 755 / 78 / 34 ) »
Hallo donny,
heute morgen bin ich noch nicht ganz fit, ich hatte doch glatt die ganzen Ironie-Tags übersehen....

MfG
Thomas R.

Beitrag von Alexander D. (Expert / 682 / 30 / 84 ) »
hallo Donny,

mit dem Gedanken das so zu machen habe ich auch schon gespielt. und die hilfsvariablen waren es, die mich abgeschreckt haben. In deinem Fall könnte man aber doch eine Variable einsparen:

statt

Code: Alles auswählen.

  h_index = sy-index.
  h_name+3(2) = h_index. 
würde doch auch folgendes gehen:

Code: Alles auswählen.

  h_name+3(2) = sy-index. 
Gruss
Alexander

Seite 1 von 1

Vergleichbare Themen

4
Antw.
2435
Views
SAP ALV STYLE Table Checkbox und Style disabled funkt. nicht
von AdrianSchm » 20.06.2018 10:16 • Verfasst in ABAP® Core
4
Antw.
1614
Views
SapScript und Textbaustein und Style
von Cubitus » 27.07.2022 18:16 • Verfasst in SAP - Allgemeines
5
Antw.
11169
Views
Kundeneigene ABAP-Muster Vorlage im ABAP-Editor anlegen
von Stentor » 19.07.2005 11:10 • Verfasst in Basis
3
Antw.
4206
Views
OLE und ABAP: Aufruf von Excel-VBA Prozeduren aus ABAP
von OnkelSAP » 26.05.2010 09:45 • Verfasst in ABAP Objects®
3
Antw.
17228
Views
ABAP 7.02 - Neues Feature - Pragmas in ABAP
von foessleitnerj » 09.01.2013 17:02 • Verfasst in Tips + Tricks & FAQs

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

aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 1638
Hilfe bei SWEC/SWE2
letzen Monat von retsch 1 / 8240