Das liegt natürlich voll im Auge des Betrachters. Ich finde das Coding i.O. und nicht veraltet. Und denk dran - wenn du zu neu programmierst bekommst du von einem anderen Teil der Leserschaft einen übergebraten.DeathAndPain hat geschrieben:Ansonsten nochmal die Frage: War euer Systemstand nicht schon auf 7.40? (Herausfinden im SAPGui über Menü System -> Status, Klicken auf Lupe -> Release der Komponente SAP_ABA anschauen. Wenn ja, dann solltest Du Dir unbedingt einen grundlegend anderen Programmierstil angewöhnen. Dann ist Dein Codingstil nämlich als ziemlich veraltet einzuschätzen; das kann man mit den neuen Mitteln von 7.40 alles viel kürzer und schöner programmieren.
Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag:
cuncon
Entschuldigung, dass ich nur ein Teil von meinem Code kopiert habe. Im meinem Code best_idx wird benutzt. Frage zu dem globale gs_output, gs_mdkp: ich habe keine Unterprogramme geschrieben, daher muss ich alle Variable global definieren oder? oder war das ein Denkfehler? Ich habeblack_adept hat geschrieben:Das liegt natürlich voll im Auge des Betrachters. Ich finde das Coding i.O. und nicht veraltet. Und denk dran - wenn du zu neu programmierst bekommst du von einem anderen Teil der Leserschaft einen übergebraten.DeathAndPain hat geschrieben:Ansonsten nochmal die Frage: War euer Systemstand nicht schon auf 7.40? (Herausfinden im SAPGui über Menü System -> Status, Klicken auf Lupe -> Release der Komponente SAP_ABA anschauen. Wenn ja, dann solltest Du Dir unbedingt einen grundlegend anderen Programmierstil angewöhnen. Dann ist Dein Codingstil nämlich als ziemlich veraltet einzuschätzen; das kann man mit den neuen Mitteln von 7.40 alles viel kürzer und schöner programmieren.
Hinweis zum Programm selber ( aber das hat nix mit veraltet zu tun ).
- CASE statt IF-ENDIF-Bedingungen, die jeweils disjunkte Teilmengen abgrenzen.
- Du hast die Variablen gs_output und <gs_output> und verwendest beide. Ich fürchte, dass das nicht so gewollt ist
- gs_output, gs_mdkp sind bestimmt eine globale Variablen - das ist böse und wird hier nicht geduldet.
- <gs_output> könnte lokal definiert werden ( vielleicht ist es ja das was D&P als veralteteten Stil bezeichnet ) und müsste dann natürlich umbenannt werden
- Die ganze CLEAR&REFRESH-Arie am Ende ist völlig überflüssig, da die Variablen doch gar nicht angefasst werden. Innerhalb des Loops erst recht
- best_idx wird nirgendwo gesetzt - du liest immer aus der 1. Zeile
ARGH. Das ist ja wie bei Edgar Wallace, wo kurz vor Schluss vorher unbekannte Personen auftauchen, die zur Aufklärung des Falls wichtig sind. Woher weißt du, dass dein Laufzeitfresser nicht in dem Teil drin ist, den du weggelassen hast.cuncon hat geschrieben:...dass ich nur ein Teil von meinem Code kopiert habe....
Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag (Insgesamt 2):
Somani • cuncon
Ich habe bei mir gekuckt, wir habe Release 701black_adept hat geschrieben:Das liegt natürlich voll im Auge des Betrachters. Ich finde das Coding i.O. und nicht veraltet. Und denk dran - wenn du zu neu programmierst bekommst du von einem anderen Teil der Leserschaft einen übergebraten.DeathAndPain hat geschrieben:Ansonsten nochmal die Frage: War euer Systemstand nicht schon auf 7.40? (Herausfinden im SAPGui über Menü System -> Status, Klicken auf Lupe -> Release der Komponente SAP_ABA anschauen. Wenn ja, dann solltest Du Dir unbedingt einen grundlegend anderen Programmierstil angewöhnen. Dann ist Dein Codingstil nämlich als ziemlich veraltet einzuschätzen; das kann man mit den neuen Mitteln von 7.40 alles viel kürzer und schöner programmieren.
Hinweis zum Programm selber ( aber das hat nix mit veraltet zu tun ).
- CASE statt IF-ENDIF-Bedingungen, die jeweils disjunkte Teilmengen abgrenzen.
- Du hast die Variablen gs_output und <gs_output> und verwendest beide. Ich fürchte, dass das nicht so gewollt ist
- gs_output, gs_mdkp sind bestimmt eine globale Variablen - das ist böse und wird hier nicht geduldet.
- <gs_output> könnte lokal definiert werden ( vielleicht ist es ja das was D&P als veralteteten Stil bezeichnet ) und müsste dann natürlich umbenannt werden
- Die ganze CLEAR&REFRESH-Arie am Ende ist völlig überflüssig, da die Variablen doch gar nicht angefasst werden. Innerhalb des Loops erst recht
- best_idx wird nirgendwo gesetzt - du liest immer aus der 1. Zeile
black_adept hat geschrieben:ARGH. Das ist ja wie bei Edgar Wallace, wo kurz vor Schluss vorher unbekannte Personen auftauchen, die zur Aufklärung des Falls wichtig sind. Woher weißt du, dass dein Laufzeitfresser nicht in dem Teil drin ist, den du weggelassen hast.cuncon hat geschrieben:...dass ich nur ein Teil von meinem Code kopiert habe....
Code: Alles auswählen.
LOOP AT gt_bestandliste ASSIGNING <gs_bestandliste> WHERE delb0 = 'W-BEST' OR delb0 = 'KD-BST' OR delb0 = 'K-AUFT' OR delb0 = 'LIEFER' OR delb0 = 'SK-BED'.
CONCATENATE 'Lesen LOOP AT gt_bestandliste bei matnr' <gs_output>-matnr INTO gv_text SEPARATED BY space.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
* PERCENTAGE = 0
TEXT = gv_text.
Nur ein Beispiel: StattDas liegt natürlich voll im Auge des Betrachters. Ich finde das Coding i.O. und nicht veraltet.
Code: Alles auswählen.
i = best_idx + 1.
READ TABLE gt_bestandliste_temp INDEX i INTO gs_bestandliste_temp.
IF sy-subrc = 0.
IF gs_bestandliste_temp-planr <> <gs_bestandliste>-planr.
<gs_output>-ovflag = 'X'.
ENDIF.
ENDIF.
Habe ich hier noch nicht erlebt. Diejenigen, die noch Ente fahren, wagen es hier nicht aufzubegehren. Und es werden ja auch immer weniger. 7.40 ist ja längst kein brandneues Release mehr; wir sind schon lange bei 7.50 (eigentlich sogar bei 7.52, auch wenn das uns ERP 6.0'ern bislang verweigert wird).Und denk dran - wenn du zu neu programmierst bekommst du von einem anderen Teil der Leserschaft einen übergebraten.
Das kann aber eigentlich nicht sein. Hängenbleiben gibt der Code Deiner inneren Schleife nicht her.bei der 2.Schleife LOOP AT gt_bestandliste ist das Programm bei einer bestimmten Matnr hängen geblieben, also nach 20 Minuten stand das Programm. Sonst läuft ziemlich schnell bei meistens Materialnummer
Das bestreite ich. Im Text zum zweiten Codeblock habe ich betont, dass dieser dann eine Alternative darstellt, wenn es sich (dem Namen entsprechend) bei <gs_output>-ovflag um ein Flag handelt, welches ABAP-typisch die Werte 'X' und SPACE annehmen kann. Dafür spricht neben dem Namen des Feldes auch die Tatsache, dass cuncon ihm selber 'X' zuweist. Wenn dann noch sichergestellt ist, dass das Feld SPACE sein soll, wenn der IF nicht hinhaut (und auch das kommt mir bei diesem Coding durchaus wahrscheinlich vor), dann ist mein Coding eine funktionierende Alternative.1.) Die beiden blauen Codeblöcke ergeben nicht immer das selbe Ergebnis ( fehlerhafte Verwendung der COND-Anweisung )
Allein schon deshalb nicht, weil Du beim Ursprungscode noch außerhalb des zitierten Bereiches zwei weitere Zeilen für die Deklaration der Hilfsvariablen i und gt_bestandliste_temp brauchst.2.) Da nur der erste blaue Codeblock korrekt war: Das sind dann nicht 4 sondern 6 Zeilen. Und mit 6 Zeilen bekommt man das auch "altbacken" hin.
OK - muss dir recht geben. Aber nur, weil du in dem von dir zitierten Codeschnipsel vergessen hast die VorbedingungDeathAndPain hat geschrieben:Das bestreite ich. Im Text zum zweiten Codeblock habe ich betont, dass dieser dann eine Alternative darstellt, wenn es sich (dem Namen entsprechend) bei <gs_output>-ovflag um ein Flag handelt, welches ABAP-typisch die Werte 'X' und SPACE annehmen kann. Dafür spricht neben dem Namen des Feldes auch die Tatsache, dass cuncon ihm selber 'X' zuweist. Wenn dann noch sichergestellt ist, dass das Feld SPACE sein soll, wenn der IF nicht hinhaut (und auch das kommt mir bei diesem Coding durchaus wahrscheinlich vor), dann ist mein Coding eine funktionierende Alternative.1.) Die beiden blauen Codeblöcke ergeben nicht immer das selbe Ergebnis ( fehlerhafte Verwendung der COND-Anweisung )
Code: Alles auswählen.
IF <gs_output>-ovflag IS INITIAL.
DeathAndPain hat geschrieben:Jetzt mal ehrlich: Diese vier Zeilen gegen seinen ganzen Codeblock plus dafür erforderlche Hilfsvariablen: Das ist doch viel geiler! Etwas performanter obendrein.
Hilfsvariablen fressen kein Brot und machen Code nicht unleserlich. Und weniger Codezeilen/Anweisungen/Buchstaben oder was auch immer halte ich immer noch nicht für einen Indikator für gutes oder schlechtes Coding. Denn dann wäre der 1-Zeiler ( 1 Befehl ) deinem 4-Zeiler überlegen.DeathAndPain hat geschrieben:Allein schon deshalb nicht, weil Du beim Ursprungscode noch außerhalb des zitierten Bereiches zwei weitere Zeilen für die Deklaration der Hilfsvariablen i und gt_bestandliste_temp brauchst.
Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag:
cuncon
Würde ich nicht so sehen - bzw. nur bedingt. Edgar Wallace ist das alles insofern, als zumindest mir nicht klar ist, welchem Zweck die ganzen Felder dienen, die in cuncons Code hin- und hergeschoben werden (vielleicht auch deshalb, weil ich mit dem FB und dem SAP-Modul, in dem er da unterwegs ist, nicht vertraut bin). Das kann man nur versuchen, anhand bestimmter Merkmale (wie z.B. dem Feldnamen, der das Wort "Flag" enthält) zu erraten, was beabsichtigt ist.Wieder so ein Edgar Wallace Fall.
Das sehe ich anders. Ich finde es durchaus sprechender, die (in 7.40 gleichfalls erlaubte) SyntaxHilfsvariablen fressen kein Brot und machen Code nicht unleserlich.
Code: Alles auswählen.
READ TABLE ttt INDEX i + 1.
Code: Alles auswählen.
DATA temp_i type i.
temp_i = i + 1.
READ TABLE ttt INDEX temp_i.
Es ist kein absolut zwingender Zusammenhang, aber in den allermeisten Fällen ist der kürzere Code auch der besser lesbare. Das ist ja auch ein hier gerne ins Feld geführtes Kernargument für Ketten-Methodenaufrufe im Gegensatz zu Funktionsbausteinen. Nur in wenigen Fällen (zu denen insbesondere der zweifelhafte FOR-Befehl zählt) ist es anders.Und weniger Codezeilen/Anweisungen/Buchstaben oder was auch immer halte ich immer noch nicht für einen Indikator für gutes oder schlechtes Coding. Denn dann wäre der 1-Zeiler ( 1 Befehl ) deinem 4-Zeiler überlegen.