Ein weiterer sinnloser Wettbewerb ;)

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

Ein weiterer sinnloser Wettbewerb ;)

Beitrag von Frank Dittrich (Expert / 674 / 0 / 15 ) »
Vermutlich fragen sich einige wieder mal, wozu das denn gut sein soll, aber andere haben ja vielleicht Spaß dran.

Es geht darum, Programme zu erstellen, die bei der Syntaxprüfung weder Warnungen noch Fehler liefern, und für die auch die Erweiterte Syntaxprüfung mit allen verfügbaren Optionen keine Fehler oder Warnungen anzeigt - selbst dann nicht, wenn man die Option "Ausgeblendete Meldungen mit ausgeben" markiert.
Beim Ausführen des Programms soll es aber einen Laufzeitfehler geben.

Nur wenn es zu einem Laufzeitfehler kein Programm gibt, das alle genannten Kriterien erfüllt, kommen auch Programme in die Wertung, bei denen die Erweiterte Syntaxprüfung Warnungen oder Fehler ausgibt.

Gesucht ist pro Laufzeitfehler die kürzeste (Anzahl Zeichen) Programmversion, die zu diesem Laufzeitfehler führt.
Wenn ein Laufzeitfehler vermieden werden kann, ohne dass das Programm geändert wird, zählt der Beitrag nicht.

Das Beispiel:

Code: Alles auswählen.

REPORT ztest. CALL FUNCTION 'DOES_NOT_EXIST'.
führt zwar zu einem Laufzeitfehler CALL_FUNCTION_NOT_FOUND.

Man kann aber einen Funktionsbaustein DOES_NOT_EXIST anlegen, so dass der Laufzeitfehler danach nicht mehr auftritt (auch wenn der Funktionsbaustein im SAP-Namensraum liegt).

Daher wäre so ein "Wettbewerbsbeitrag" ungültig.

Damit die Beispiele leicht von anderen reproduzierbar sind, sollten die Programme am besten Reports sein, für die nur der Report-Quelltext übernommen werden muss und die (außer F8 zu drücken) nach dem Start keine weitere Benutzer-Aktion erfordern, um den Dump zu reproduzieren.

Es gibt bestimmt jede Menge verschiedener Dumps, die man trotz der o.g. Bedingungen erzeugen kann.
(Mir fallen auf Anhieb zig Varianten ein.)

Eventuell gibt es ja ein paar Release-abhängige Prüfungen, daher müsste man auch Beiträge gelten lassen, die nur in einem bestimmten Release alle zuvor genannten Bedingungen erfüllen.
Im Zweifelsfall also bitte noch SY-SAPRL erwähnen.

Mein bisher kürzestes Beispiel-Programm kommt mit 15 Zeichen Quelltext aus.

Damit mir nicht vorgeworfen werden kann, ich würde schummeln, hier vorab die MD5-Prüfsumme, obwohl man den gleichen Dump auch mit geringfügig verändertem Quelltext gleicher Länge erzeugen kann:
36dc916921f5afed81055825b74465e8

Viel Spaß beim Knobeln.

Hier mal der aktuelle Stand aller bisher genannten Beiträge und einiger weiterer von mir zusammengebastelter Tests, alphabetisch sortiert nach Namen des Laufzeitfehlers.
Falls es zu einem Dump zwei gleich gute Lösungen gibt, gebe ich beide an.
Ebenso gebe ich mehrere Lösungen an, falls in aktuelleren Releases verschärfte Prüfungen ein umständlicheres Coding erfordern, um einen Dump zu produzieren.

Es kommt immer eine Kommentarzeile mit dem Namen des Laufzeitfehlers, dann der Quelltext dazu, nach dem Quelltext evtl. weitere Kommentare mit Erläuterungen.
Vor dem Kommentar mit dem nächsten Laufzeitfehler kommt eine Leerzeile.

(Falls ich mal nicht mit dem Nachtragen der im Thread erwähnten neuen oder besseren Lösungen hinterherkomme, dürfen das von mir aus auch die Moderatoren erledigen.)

Am Ende hänge ich evtl. noch eine Liste der in meinem 6.40 Linux TestDrive definierten Dumps an.


Bisherige "Bestenliste"

Code: Alles auswählen.

* ADDF_INT_OVERFLOW
REPORT.DATA:a TYPE i,b type i.a = b = 2147483647.ADD a THEN b UNTIL b TO
a.
* (aber zu 6.40 beschwert sich die erweiterte Syntaxprüfung
* über die Verwendung veralteter Anweisungen)

* ASSERTION_FAILED
REPORT.ASSERT'' <''.

* ASSIGN_BASE_WRONG_ALIGNMENT " black_adept
REPORT.FIELD-SYMBOLS <> TYPE i.ASSIGN sy-ccurs TO <> CASTING.

* BCD_OVERFLOW " Kriskra
REPORT.DO 9999999999 TIMES.ENDDO.

* BCD_ZERODIVIDE
REPORT.sy-host:=:1:/''.

* BITS_WRONG_TYPE
REPORT.PERFORM a USING sy.FORM a USING a TYPE any.a = a BIT-OR a.ENDFORM
.

* BIT_OFFSET_NOT_POSITIVE
REPORT.GET BIT 0 OF sy-subty INTO sy-host.

* CALL_C_FUNCTION_NOT_FOUND " black_adept
REPORT.CALL sy.
* die Version liefert zu 6.40 einen Syntaxfehler, 
* wenn die Unicode-Prüfungen aktiv sind.
* "SY" muß ein zeichenartiges Feld sein (Datentyp C, N, D oder T)
* CALL_C_FUNCTION_NOT_FOUND
REPORT.CALL';'.

* CALL_DIALOG_NOT_FOUND
REPORT.CALL DIALOG''.

* CALL_FUNCTION_NOT_FOUND
REPORT.CALL FUNCTION space.


* CALL_FUNCTION_NO_DEST
REPORT.CALL FUNCTION'' DESTINATION'`'.

* CALL_FUNCTION_NO_SENDER
REPORT.CALL FUNCTION'' DESTINATION'BACK'.

* CALL_FUNCTION_OPEN_ERROR (nur im Batch, im Dialog RAISE_EXCEPTION)
REPORT.CALL FUNCTION'' DESTINATION'SAPGUI'.

* CALL_FUNCTION_RECEIVE_ERROR
REPORT.RECEIVE RESULTS FROM FUNCTION''.

* CALL_METHOD_NOT_IMPLEMENTED
REPORT.CLASS y DEFINITION.PUBLIC SECTION.CLASS-METHODS y.ENDCLASS.CLASS
y IMPLEMENTATION.METHOD y BY KERNEL MODULE y fail.ENDMETHOD.ENDCLASS.
INITIALIZATION.y=>y( ).

* CALL_TRANSACTION_NOT_FOUND
REPORT.CALL TRANSACTION''.

* CHECK_SELOPT_ILLEGAL_SIGN
REPORT.DATA a LIKE RANGE OF''.APPEND'' TO a.CHECK'' IN a.

* CHECK_SELOPT_ILLEGAL_OPTION
REPORT.DATA a LIKE RANGE OF''.APPEND'I' TO a.CHECK'' IN a.

* CLEAR_VALUE_WRONG_LENGTH
REPORT.CLEAR sy-host WITH``.

* COMMIT_IN_PERFORM_ON_COMMIT
REPORT.PERFORM a ON COMMIT.COMMIT WORK.FORM a.COMMIT WORK.ENDFORM.

* COMPUTE_ACOS_DOMAIN
REPORT.sy-host = ACOS( 9 ).

* COMPUTE_ASIN_DOMAIN
REPORT.sy-host = ASIN( 9 ).

* COMPUTE_EXP_RANGE
REPORT.sy-host = EXP( 711 ).

* COMPUTE_LOG10_ERROR

REPORT.sy-host = LOG10( 0 ).

* COMPUTE_LOG_ERROR
REPORT.sy-host = LOG( 0 ).

* COMPUTE_SQRT_DOMAIN
REPORT.sy-host = SQRT( -1 ).

* CONNE_IMPORT_WRONG_COMP_TYPE
REPORT.EXPORT s = sy TO MEMORY ID''.IMPORT s = vari FROM MEMORY ID''.

* CONNE_IMPORT_WRONG_OBJECT_TYPE
REPORT.EXPORT s ='' TO MEMORY ID''.IMPORT s = vari FROM MEMORY ID''.

* CONVT_NO_NUMBER
REPORT.DATA a.a ='-' + a.

* DATASET_NOT_OPEN
REPORT.TRANSFER`` TO``.

* DATA_LENGTH_0
REPORT.DATA a.a = a(a).

* DATA_LENGTH_NEGATIVE
REPORT.DATA a(2).a =:-2,a(a).

* DATA_OFFSET_NEGATIVE
REPORT.DATA:a(2).a =:-2,a+a.

* DATA_OFFSET_TOO_LARGE
REPORT.DATA a.a =:2,a+a.

* DATREF_NOT_ASSIGNED
REPORT.DATA:a TYPE REF TO i.a->* = 1.

* DBIF_DSQL2_SQL_ERROR
REPORT.EXEC sql.; ENDEXEC.

* DBIF_PGNT_INVALID_ARGUMENTS
REPORT.DATA a.EXPORT NAMETAB a %_sscr ID a.
* auch so ein Programm, das man lieber nicht auf Systemen
* starten sollte, die man nicht selbst installiert hat.

* DBIF_RSQL_INVALID_CURSOR
REPORT.SELECT * FROM VARI INTO VARI.PERFORM f.ENDSELECT.FORM f.COMMIT
WORK.ENDFORM.
* Auch so bringt die erw. Syntaxprüfung zu 6.4 noch eine Meldung.
* Aber keinen Fehler und keine Warnung.

* DYNPRO_FIELD_CONVERSION
REPORT.PARAMETER p TYPE sy-ccurs DEFAULT'1-'.

* DYNPRO_HEADER_ERROR
REPORT.DATA:a TYPE d020s,b TYPE TABLE OF d021s,c TYPE TABLE OF d022s,d
TYPE TABLE OF d023s,BEGIN OF e,f(40),g(4),END OF e.EXPORT DYNPRO a b c d
ID e.

* DYNPRO_NOT_FOUND
REPORT.CALL SCREEN 0.

* DYNPRO_WRITE_FAILED
REPORT.DATA:a TYPE d020s,b TYPE TABLE OF d021s,c TYPE TABLE OF d022s,d
TYPE TABLE OF d023s,BEGIN OF e,f(40),g(4),END OF e.e-g ='1'.EXPORT
DYNPRO a b c d ID e.

* DYNP_TOO_MANY_RADIOBUTTONS_ON
REPORT.PARAMETER:a RADIOBUTTON GROUP x,b RADIOBUTTON GROUP x.
INITIALIZATION.a = b ='X'.
* (das erste mal, dass im Dump nicht mein Quelltext steht,
* sondern der von SAPMSSYD)
* wegen der fehlenden Texte gibt der erw. Syntax-Check nur
* Meldungen aus, keine Fehler oder Warnungen

* DYN_CALL_METH_CLASS_NOT_FOUND
REPORT.CALL METHOD ('')=>a.

* DYN_CALL_METH_NOT_FOUND
REPORT.CALL METHOD cl_fp=>('').
* Falls jemand meint, man könnte die Klasse cl_fp löschen,
* so dass stattdessen DYN_CALL_METH_CLASS_NOT_FOUND auftritt,
* muss ich mir eine Klasse suchen, ohne die SAP nicht startet

* DYN_IMEX_OBJ_NAME_EMPTY
REPORT.DATA:BEGIN OF a,b,c,END OF a,d LIKE TABLE OF a.APPEND a TO d.
EXPORT (d) TO MEMORY ID''.

* DYN_IMEX_OBJ_NAME_TWICE
REPORT.DATA:BEGIN OF a,b,c,END OF a,d LIKE TABLE OF a.a ='A'.APPEND a TO
d:,.EXPORT (d) TO MEMORY ID''.


* DYN_IMEX_OBJ_NOT_FOUND
REPORT.DATA:BEGIN OF a,b,c,END OF a,d LIKE TABLE OF a.a ='X'.APPEND a
TO d.EXPORT (d) TO MEMORY ID''.

* EXSQL_ILLEGAL_DISCONNECTION
REPORT.EXEC SQL.DISCONNECT 'DEFAULT' ENDEXEC.

* EXTRACT_AFTER_SORT/LOOP
REPORT.FIELD-GROUPS:header.EXTRACT.SORT.EXTRACT.
* zu 6.40 Fehler in erw. Syntaxprüfung wg. veralteter Anweisung

* GEN_PROGRAM_NOT_EXISTS
REPORT.GENERATE REPORT''.
* zu 6.x sieht man im aktuellen Modus nicht, dass ein Dump auftritt.
* Es wird hier also auch nicht direkt in den Debugger gesprungen.
* Aber in der ST22 findet man den Dump.
* GEN_PROGRAM_NOT_EXISTS und SYSTEM_ON_COMMIT_INTERRUPTED
REPORT.PERFORM a ON COMMIT.COMMIT WORK.FORM a.GENERATE REPORT''.LEAVE.
ENDFORM.
* Das erste Beispiel, mit dem bei einmaliger Ausführung
* zwei verschiedene Dumps erzeugt werden.
* GEN_PROGRAM_NOT_EXISTS
REPORT.GENERATE REPORT'':,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.
* Mit 72 Zeichen Quelltext bei einmaliger Ausführung 47 Dumps,
* d.h. weniger als 2 Zeichen pro Dump ;)

* GETWA_NOT_ASSIGNED " - 3 Zeichen dank black_adept
REPORT.FIELD-SYMBOLS <> TYPE ANY.UNASSIGN <>.<> = 1.

* GENERATE_SUBPOOL_DIR_FULL
REPORT.DATA:a TYPE TABLE OF string,b.APPEND'REPORT.' TO a.
DO.GENERATE SUBROUTINE POOL a NAME b.ENDDO.HIDE:b.

* HIDE_FIELD_TOO_LARGE
REPORT.DATA:a(8193).ULINE.HIDE a.

* INSERT_PROGRAM_NAME_BLANK
REPORT.DATA:c,i LIKE TABLE OF c.INSERT REPORT c FROM i.

* INSERT_REPORT_ILLEGAL_FLAG
REPORT.DATA:a,b LIKE TABLE OF''.a ='a'.INSERT REPORT'X' FROM b UNICODE ENABLING a.

* INSERT_REPORT_ILLEGAL_PROGTYPE
REPORT.DATA:a,b LIKE TABLE OF''.INSERT REPORT'Y' FROM b PROGRAM TYPE a.

* INSERT_REPORT_ILLEGAL_STATE
REPORT.DATA:c,i LIKE TABLE OF c.READ REPORT'' INTO i STATE''.

* INSERT_REPORT_LINE_TOO_LONG
REPORT.DATA:a(256),b LIKE TABLE OF a.CLEAR a WITH'*'.APPEND a TO b.
INSERT REPORT'X' FROM b. 

* INSERT_REPORT_NO_APPTYPE
REPORT.DATA:c(40),i LIKE TABLE OF c.c+39 = c ='-'.INSERT REPORT c FROM i.
* passt nicht mehr in 72 Zeichen, bis 4.6 also so:
REPORT.DATA:c(40),i LIKE TABLE OF c.c+39 = c ='-'.INSERT REPORT c FROM i
.
* Wenn sich jemand die Mühe macht, entspr. Quelltexte zu speichern, so
* dass der Dump nicht mehr auftritt, ist die Lösung ungültig.
* Dann sieht die kürzeste Lösung so aus:
REPORT.DATA:c(40),i LIKE TABLE OF c.c+39 = c ='-'.DELETE REPORT c.INSERT
REPORT c FROM i.

* INSERT_REPORT_NO_EXTTYPE
REPORT.DATA:c(40),i LIKE TABLE OF c.c+31 = c ='-'.INSERT REPORT c FROM i.
* bzw. (s.o.)
REPORT.DATA:c(40),i LIKE TABLE OF c.c+31 = c ='-'.DELETE REPORT c.INSERT
REPORT c FROM i.

* ITAB_DUPLICATE_KEY_IDX_OP
REPORT.DATA:a LIKE SORTED TABLE OF sy WITH UNIQUE KEY host. APPEND sy TO
a:,.CHECK a = a.

* ITAB_ILLEGAL_COMPONENT
REPORT.DATA a LIKE TABLE OF''.SORT a BY ('X').

* ITAB_NON_NUMERIC_COMPONENT
REPORT.DATA: BEGIN OF a,b,c LIKE TABLE OF a-b, END OF a, d LIKE TABLE OF
a.APPEND:'' TO a-c,a TO d.LOOP AT d INTO a.SUM.ENDLOOP.

* LIST_TOO_MANY_LEVELS
REPORT.ULINE.SET USER-COMMAND'PF08'.AT PF8.ULINE.SET USER-COMMAND'PF08'.

* LIST_TOPOFPAGE_OVERFLOW
REPORT z LINE-COUNT 1(1).ULINE.

* LOAD_COMMON_PART
REPORT.DATA:BEGIN OF COMMON PART a,c(72),END OF COMMON PART,b LIKE TABLE
OF c.READ REPORT sy-repid INTO b.READ TABLE b INDEX 1 INTO c. CLEAR:b.
c+59 ='.'.REPLACE'7' WITH`` INTO c.APPEND c TO b.c =''.GENERATE
SUBROUTINE POOL b NAME c.PERFORM a IN PROGRAM (c).

* LOAD_PROGRAM_NOT_FOUND
REPORT.SUBMIT ('').

* LOGDB_SSCR_NOT_FOUND " zzcpak
CLASS-POOL.
* zu 6.40 gibt es da eine Warnung bei der Syntaxprüfung.
* Daher ist die folgende Variante momentan die "beste" unter 6.40:
* LOGDB_SSCR_NOT_FOUND " zzcpak
TYPE-POOL a.

* MESSAGE_TYPE_UNKNOWN
REPORT.MESSAGE'' TYPE''.

* MESSAGE_TYPE_X " GastX (zzcpak mit einem unnötigen Zeichen)
REPORT.MESSAGE x000(00).

* MESSAGE_TYPE_X_TEXT
REPORT.MESSAGE'' TYPE'X'.

* MOVE_TO_LIT_NOTALLOWED_NODATA " GastX " - 2 Zeichen dank black_adept
REPORT.FIELD-SYMBOLS <>.<> = 1.
* MOVE_TO_LIT_NOTALLOWED_NODATA zu 6.40, sonst Fehler erw. Syntaxpr.:
* Der aktuelle ABAP-Befehl ist veraltet/problematisch
REPORT.FIELD-SYMBOLS <> TYPE i.<> = 1.

* NESTED_PRINT_ON
REPORT.DATA p TYPE pri_params.PERFORM a.FORM a.NEW-PAGE PRINT ON NO
DIALOG PARAMETERS p.ULINE.PERFORM a.ENDFORM.

* OBJECTS_NOT_FLAT
REPORT.PERFORM f USING``.FORM f USING a. ULINE.HIDE a.ENDFORM.

* PERFORM_CONFLICT_TAB_TYPE
REPORT.DATA a TYPE SORTED TABLE OF sy WITH UNIQUE KEY HOST.PERFORM a IN
PROGRAM (sy-repid) USING a.FORM a USING a TYPE STANDARD TABLE.SORT a.
ENDFORM.
* (aber mit Warnung bei der erweiterten Syntax-Prüfung)

* PERFORM_CONFLICT_TYPE
REPORT.PERFORM a:IN PROGRAM (sy-repid) USING sy,USING''.FORM a USING b
TYPE i.HIDE b.ENDFORM.

* PERFORM_INDEX_0
REPORT.PERFORM 0 OF a.FORM a.ENDFORM.

* PERFORM_INDEX_NEGATIVE
REPORT.PERFORM -1 OF a.FORM a.ENDFORM.

* PERFORM_INDEX_TOO_LARGE
REPORT.PERFORM 2 OF a.FORM a.ENDFORM.

* PERFORM_NOT_FOUND " ewx
REPORT.sy = 1. " bis Release 4.5
* PERFORM_NOT_FOUND
REPORT.PERFORM a IN PROGRAM (sy-repid). " Releases >= 4.6

* PERFORM_PARAMETER_MISSING
REPORT.PERFORM a:IN PROGRAM (sy-repid),USING''.FORM a USING b TYPE
c.HIDE b.ENDFORM.

* PERFORM_TOO_MANY_PARAMETERS
REPORT.PERFORM a:IN PROGRAM (sy-repid) USING'',.FORM a.ENDFORM.
* Oder, wenn auch die Meldung der erw. Syntaxprüfung stört:
* PERFORM_TOO_MANY_PARAMETERS
REPORT.PERFORM a:IN PROGRAM (sy-repid) USING'',.FORM a.SUM.ENDFORM.

* RAISE_EXCEPTION (nur im Dialog, im Batch CALL_FUNCTION_OPEN_ERROR)
REPORT.CALL FUNCTION'' DESTINATION'SAPGUI'.

* READ_REPORT_LINE_TOO_LONG
REPORT.DATA:b LIKE TABLE OF''.READ REPORT sy-repid INTO b.SORT b.

* REFS_NOT_SUPPORTED_YET
REPORT.DATA:BEGIN OF a,b,c,END OF a,r TYPE REF TO i,d LIKE TABLE OF a
.a ='r'.APPEND a TO d.EXPORT (d) TO MEMORY ID''.r->* = 0.

* SAPSQL_AGGREGATE_LOB
REPORT.SELECT MAX( data ) FROM ('REPOSRC') INTO sy-host.

* SAPSQL_ARRAY_INSERT_DUPREC
REPORT.DATA:a TYPE TABLE OF vari.APPEND vari TO a:,.INSERT vari FROM
TABLE a.

* SAPSQL_EMPTY_TABNAME
REPORT.UPDATE ('') FROM''.

* SAPSQL_INVALID_FIELDNAME
REPORT.DATA:a,b LIKE TABLE OF a.APPEND';' TO b.SELECT (b) FROM t000
INTO TABLE b.

* SAPSQL_INVALID_TABLENAME
REPORT.UPDATE (';') FROM''.

* SAPSQL_MISSING_LOG_CONDITION
REPORT.DATA:a,b LIKE TABLE OF a.APPEND'(' TO b.SELECT * FROM ('T000')
INTO TABLE b WHERE (b).

* SAPSQL_SELECT_TAB_TOO_SMALL
REPORT.DATA:a,b LIKE TABLE OF a.SELECT (b) FROM t000 INTO TABLE b.

* SAPSQL_SELECT_WA_TOO_SMALL
REPORT.DATA:a.SELECT * FROM ('T000') INTO a.HIDE a.ENDSELECT. 

* SAPSQL_SQLS_INVALID_CURSOR
REPORT.DATA:a TYPE i.FETCH NEXT CURSOR a INTO a.

* SAPSQL_WHERE_MISSING_OPERATOR
REPORT.DATA:a(9),b LIKE TABLE OF a.APPEND'MANDT' TO b.SELECT * FROM
('T000') INTO TABLE b WHERE (b).

* SAPSQL_WHERE_MISSING_VALUE
REPORT.DATA:a(9),b LIKE TABLE OF a.APPEND'MANDT =' TO b.SELECT * FROM
('T000') INTO TABLE b WHERE (b).

* SAPSQL_WHERE_UNKNOWN_OPERATOR
REPORT.DATA:a(9),b LIKE TABLE OF a.APPEND'MANDT Q' TO b.SELECT * FROM
('T000') INTO TABLE b WHERE (b).

* SET_PARAMETER_ID_TOO_LONG
REPORT.DATA a(21).CLEAR a WITH'X'.GET PARAMETER ID a FIELD a.
* SET_PARAMETER_ID_TOO_LONG
REPORT.DATA a(21).CLEAR a WITH'X'.SET PARAMETER ID a FIELD''.

* SORT_AS_TEXT_BAD_DYN_TYPE
REPORT.DATA a type TABLE OF sy.SORT a BY ('TABIX') AS TEXT.

* SORT_ITAB_FIELD_INVALID
REPORT.FIELD-SYMBOLS <>.SORT %_sscr BY <>.
* unter 6.40 mit Fehler bei erw. Syntaxprüfung wg. 
* veralteter Anw. SORT itab BY <fs> und Warnung wg.
* Änderung von Systemfeldern
* Daher hier auch <> nicht mit TYPE ANY "typisiert"

* SORT_NO_HEADER
REPORT.FIELD-GROUPS f.EXTRACT f.SORT.
* zu 6.40 Fehler bei erw. Syntaxprüfung wg. veralteter Anweisung

* STRING_LENGTH_NEGATIVE
REPORT.DATA:a TYPE string.a =:-1,a(a).

* STRING_OFFSET_NEGATIVE
REPORT.DATA:a TYPE string.a =:-1,a+a.

* STRING_OFFSET_TOO_LARGE
REPORT.DATA:a TYPE string.a =:3,a+a.

* SUM_NO_INTERNAL_TABLE " black_adept
REPORT.SUM.

* SYSTEM_LOAD_OF_PROGRAM_FAILED
REPORT.LOAD-OF-PROGRAM.EXIT.

* SYSTEM_NO_MEMORY
REPORT.PERFORM a.FORM a.DATA a(65535).WRITE a.PERFORM a.ENDFORM.
* ist bei mir bis zum Stack level 6119 gekommen. Im Debugger werden aber
* anscheinend nur die letzten 3 Stellen des Stack levels angezeigt.
* Und im Dump (ST22) sind nur 256 Stack-Ebenen (5864 - 6119) zu sehen.
* Dafür wird auch 256 mal der Inhalt der ersten 255 Bytes des Feldes a
* (zu jedem der Stack Level einmal) im Dump aufgeführt.

* SYSTEM_ON_COMMIT_INTERRUPTED
REPORT.PERFORM a ON COMMIT.COMMIT WORK.FORM a.LEAVE.ENDFORM.

* TABLE_ILLEGAL_STATEMENT " ewx
REPORT.DELETE %_sscr.
* unter 6.40 mit Warnung bei erweiterter Syntaxprüfung:
* 
* (aber bisher die einzige Variante, daher gültig für alle SY-SAPRL)

* TABLE_INVALID_INDEX
REPORT.DATA a LIKE TABLE OF''.DELETE a INDEX 0.

* TCHK_TYPELINE_LOAD
REPORT.DATA:d LIKE TABLE OF sy.APPEND sy TO d.EXPORT (d) TO MEMORY ID''.
* Das interne Tabelle "(itab)" hat einen nicht erlaubten Zeilentyp.

* TIME_OUT (nur im Dialog)
REPORT.DO.ENDDO.

* TSV_TNEW_PAGE_ALLOC_FAILED oder andere Speicherplatz-Fehler
REPORT.DATA:a LIKE TABLE OF''.DO.APPEND'' TO a.ENDDO.SORT a.

* UC_OBJECTS_NOT_CHAR " - 3 Zeichen dank black_adept
REPORT.FIELD-SYMBOLS <> TYPE ANY.ASSIGN sy TO <>.WRITE'' UNIT <>.
* Ohne Zusatz TYPE ANY meckert zu 6.40 die erweiterte Syntaxprüfung
* Der Dump tritt nur bei aktivierten Unicodepruefungen auf

* UC_OBJECTS_NOT_CHARLIKE " - 3 Zeichen dank black_adept
REPORT.FIELD-SYMBOLS <> TYPE ANY.ASSIGN sy TO <>.CLEAR <> WITH``.
* Auch nur bei Unicode-Prüfungen

* UC_OBJECTS_NOT_CONVERTIBLE
REPORT.DATA:a(30).a ='POPUP_TO_CONFIRM'.CALL FUNCTION a EXPORTING
text_question = sy.

* WAIT_ILLEGAL_TIME_LIMIT
REPORT.WAIT UP TO -2 SECONDS.

* WRITE_CURRENCY_ILLEGAL_TYPE " - 3 Zeichen dank black_adept
REPORT.FIELD-SYMBOLS <> TYPE ANY.ASSIGN 0 TO <>.WRITE'' CURRENCY <>.

* WRITE_TO_LENGTH_NEGATIVE
REPORT.DATA a.WRITE a TO a(-2).

* WRITE_TO_OFFSET_NEGATIVE
REPORT.DATA a.WRITE a TO a+-2.

* WRITE_TO_OFFSET_TOOLARGE
REPORT.DATA a.WRITE a TO a+2.

* WRITE_UNIT_ILLEGAL_TYPE "" - 3 Zeichen dank black_adept
REPORT.FIELD-SYMBOLS <> TYPE any.ASSIGN 0 TO <>.WRITE'' UNIT <>.
Ich hoffe, mir sind dabei keine Fehler unterlaufen.

Es muss aber keiner befürchten, dass das schon alle möglichen Lösungen waren.
Zuletzt geändert von Frank Dittrich am 19.05.2009 19:36, insgesamt 78-mal geändert.

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


Beitrag von Thomas R. (Expert / 757 / 78 / 34 ) »
Hallo Frank,
gegen Deine 15 Zeichen kann ich zwar nicht anstinken, aber trotzdem mal mein erster (und aus Zeitgründen wohl einziger) Versuch:

Code: Alles auswählen.

report 1.
data i type i.
i = 4 / i.
MfG
Thomas R.

Nachtrag:
SY-SAPRL ist 620

Beitrag von Frank Dittrich (Expert / 674 / 0 / 15 ) »
Thomas R. hat geschrieben:gegen Deine 15 Zeichen kann ich zwar nicht anstinken
Wie viele Zeichen man braucht, hängt auch vom Dump ab, den man produzieren will.
Es gibt auch Dumps, für die ich wohl nicht mit einer Zeile Quelltext auskommen werde.

Code: Alles auswählen.

report 1.
data i type i.
i = 4 / i.
kann man auch als

Code: Alles auswählen.

report 1.data i type i.i = 4 / i.
schreiben.

Die leichte Lesbarkeit des Quelltextes war ja nicht gefordert.
So wären das dann 33 Zeichen.
BCD_ZERODIVIDE lässt sich allerdings auch mit 24 Zeichen Quelltext erreichen.
An Deinem Beispiel ist also noch einiges überflüssig.
(Inzwischen habe ich noch eine Version mit 23 Zeichen gefunden. Die kommt ohne DATA-Anweisung aus.)
Nachtrag:
SY-SAPRL ist 620
Das Beispiel sollte Release-unabhängig sein.
(bei mir mit 640 getestet)

Frank

Beitrag von black_adept (Top Expert / 4103 / 128 / 945 ) »
Darf ich einen Makro in TRMAC ablegen, dessen Code nicht zu dem Quellcode des Laufzeitfehlerprogramms zählt?
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Beitrag von black_adept (Top Expert / 4103 / 128 / 945 ) »
Hmm - wo finde ich denn eine Liste aller möglichen Laufzeitfehler? Die abfangbaren kenne ich - aber was ist mit den anderen?
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Beitrag von black_adept (Top Expert / 4103 / 128 / 945 ) »
Ok - hier mal die beiden kürzesten die ich bisher gefunden habe.

Code: Alles auswählen.

Laufzeitfehler: SUM_NO_INTERNAL_TABLE
Code: report.sum.
Codelänge: 11
Ich kann mir nicht vorstellen, dass das obige noch unterboten werden kann von der Länge her.

Code: Alles auswählen.

Laufzeitfehler: CALL_C_FUNCTION_NOT_FOUND
Code: report.call sy.
Codelänge: 15
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Beitrag von GastX (Specialist / 277 / 4 / 18 ) »
Hallo,
trotz der beeindrucken kurzen Fassungennoch ein Vorschlag von mir, mit satten 33 Zeichen. Liefert:
MOVE_TO_LIT_NOTALLOWED_NODATA

Code: Alles auswählen.

REPORT.FIELD-SYMBOLS <X>.<X> = 1.
Gruß, Frank

Beitrag von Gast ( / / 0 / 3 ) »
black_adept hat geschrieben:Hmm - wo finde ich denn eine Liste aller möglichen Laufzeitfehler?
Die meisten wohl mit SELECT DISTINCT ERRID FROM SNAPT ...
Bei neueren Kernel-Patches kommt es aber vor, dass SNAPT-Einträge zu einigen Dumps fehlen.

Beitrag von zzcpak (Expert / 673 / 5 / 68 ) »
naja nicht das kürzeste, geht aber. (25 Zeichen)

Code: Alles auswählen.

REPORT. message x000(00).
Zuletzt geändert von zzcpak am 03.06.2005 10:59, insgesamt 1-mal geändert.

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

Code: Alles auswählen.

Laufzeitfehler: SUM_NO_INTERNAL_TABLE
Code: report.sum.
Codelänge: 11
Ich kann mir nicht vorstellen, dass das obige noch unterboten werden kann von der Länge her.
Ich mir auch nicht. Genial.

Code: Alles auswählen.

Laufzeitfehler: CALL_C_FUNCTION_NOT_FOUND
Code: report.call sy.
Codelänge: 15
Meine Version mit 15 Zeichen sah so aus:

Code: Alles auswählen.

REPORT.CALL';'.
Das fehlende Leerzeichen stört die Syntax-Prüfung nicht.

Beitrag von Gast ( / / 0 / 3 ) »
black_adept hat geschrieben:Darf ich einen Makro in TRMAC ablegen, dessen Code nicht zu dem Quellcode des Laufzeitfehlerprogramms zählt?
Dann kann man ja nahezu jeden Dump mit zwei Zeichen Quelltext produzieren:

Beitrag von black_adept (Top Expert / 4103 / 128 / 945 ) »
Anonymous hat geschrieben:
black_adept hat geschrieben:Hmm - wo finde ich denn eine Liste aller möglichen Laufzeitfehler?
Die meisten wohl mit SELECT DISTINCT ERRID FROM SNAPT ...
Bei neueren Kernel-Patches kommt es aber vor, dass SNAPT-Einträge zu einigen Dumps fehlen.
*Lach*
Das sind im Minisap allein 1636 Einträge. Ich glaube ich lass es mit meinen Versionen gut sein...

Beitrag von black_adept (Top Expert / 4103 / 128 / 945 ) »
Anonymous hat geschrieben:
black_adept hat geschrieben:Darf ich einen Makro in TRMAC ablegen, dessen Code nicht zu dem Quellcode des Laufzeitfehlerprogramms zählt?
Dann kann man ja nahezu jeden Dump mit zwei Zeichen Quelltext produzieren:
Tja - das war ja auch meine Überlegung. Explizit ausgeschlossen war es nicht - aber die Frage ist ja immer: "Wie weit darf ich um die Ecke denken - bzw. wie hinterhältig darf mein Lösungsansatz sein?"

Beitrag von Gast ( / / 0 / 3 ) »
Explizit ausgeschlossen war es nicht - aber die Frage ist ja immer: "Wie weit darf ich um die Ecke denken - bzw. wie hinterhältig darf mein Lösungsansatz sein?"
Dann bin ich aber so hinterhältig und ändere hinterher Deine Makro-Definition in etwas Harmloses ab, so dass der Dump dann nicht mehr auftritt.

Beitrag von ereglam (Top Expert / 1829 / 2 / 7 ) »
Frank Dittrich hat geschrieben:...
Wenn ein Laufzeitfehler vermieden werden kann, ohne dass das Programm geändert wird, zählt der Beitrag nicht.

Das Beispiel:

Code: Alles auswählen.

REPORT ztest. CALL FUNCTION 'DOES_NOT_EXIST'.
führt zwar zu einem Laufzeitfehler CALL_FUNCTION_NOT_FOUND.

Man kann aber einen Funktionsbaustein DOES_NOT_EXIST anlegen, so dass der Laufzeitfehler danach nicht mehr auftritt (auch wenn der Funktionsbaustein im SAP-Namensraum liegt).

Daher wäre so ein "Wettbewerbsbeitrag" ungültig.
...
damit sollte klar sein, dass auch Einträge in der TRMAC unzulässig sind. Schade eigentlich ;)
Gruß
Ereglam


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

Vergleichbare Themen

3
Antw.
2248
Views
ABAP-Stotter-Wettbewerb
von ewx » 30.11.2005 10:09 • Verfasst in ABAP® Core

Aktuelle Forenbeiträge

Nach MESSAGE TYPE E Felder entsperren
vor 2 Stunden von msfox gelöst 7 / 6041
ABAP - Mail so10 Text
vor 7 Stunden von retsch 6 / 125
selection-screen comment mit icon
vor 16 Stunden von DeathAndPain 9 / 1168

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

Nach MESSAGE TYPE E Felder entsperren
vor 2 Stunden von msfox gelöst 7 / 6041
ABAP - Mail so10 Text
vor 7 Stunden von retsch 6 / 125
selection-screen comment mit icon
vor 16 Stunden von DeathAndPain 9 / 1168

Unbeantwortete Forenbeiträge

SD_PRINT_TERMS_OF_PAYMENT
vor 5 Tagen von Manfred K. 1 / 936
BUSOBJEKT zu CMIS PHIO ermitteln
vor 3 Wochen von snooga87 1 / 2742