Seite 1 von 1

Array Assign [ERLEDIGT]

Verfasst: Do, 02. Aug 2012 19:06
von Rolf Ramacher
ein Kunde erhält beim Wareneingang nach auswahl der Bestellung die besagte Fehlermeldung. Einzelne WE aus dieser Bestellung gingen bisher ohne Probleme. Auch andere Bestellungen ohne Probleme.

Hat jemand eine idee ?

Re: Array Assign

Verfasst: Do, 02. Aug 2012 19:13
von Tom
Hat jemand eine idee ?
Könnte an einem Programmfehler liegen. :badgrin:

Spaß beiseite. Wieder mal eine exzellent ausführliche Beschreibung der Fehlersituation, ergänzt um Informationen, die wir natürlich sofort verarbeiten können, weil wir a) alle mit Deinem Bestellsystem arbeiten und b) auch die Quellcodes davon haben. :wink:

"Array assign" ist vermutlich nicht der gesamte Fehlertext. Hilfreich wäre auch noch die Sourcecode-Zeile, in der der Fehler auftritt. Vermutlich aber versuchst Du an dieser Stelle, auf einen Bereich im Array zuzugreifen, der nicht existiert, etwa wie hier:

Code: Alles auswählen

a := { 1, 2, 3 }
? a[4] // dürfte den fraglichen Fehler generieren
Es kommen vermutlich Daten, die weitgehend leer sind, und Du versuchst trotzdem, in irgendeinem Hilfsarray rumzudoktoren.

Re: Array Assign

Verfasst: Fr, 03. Aug 2012 1:34
von AUGE_OHR
Rolf Ramacher hat geschrieben:ein Kunde erhält beim Wareneingang nach auswahl
was für eine "auswahl" unter "Cl*pper" ?

Re: Array Assign

Verfasst: Fr, 03. Aug 2012 14:47
von Rolf Ramacher

Code: Alles auswählen

         for x = 1 to 34
            z = (zz - 1) * 34 + x  && z = Index von vmegr bezgl. Fil. + GrӇe
            vmegr[z]=sumegr[x]     && absoluter Index, alles auf eine Filiale
            vmegrb[z]=sumegr[x]    && verteilt
         next
Der Fehler tritt in der Zeile auf vmegr[z]=sumegr[x]

Aber wie gesagt nur bei dieser einen Bestellung. An den Daten kann ich nichts falsches erkennen.

Re: Array Assign

Verfasst: Fr, 03. Aug 2012 14:53
von Jan
Ich tippe darauf, das x oder z größer sind als die Arraylänge.

Jan

Re: Array Assign

Verfasst: Fr, 03. Aug 2012 15:14
von Tom
Toller Tip, Jan. Zumal es überhaupt kein y gibt. :wink:

@Rolf:

1. Was enthält "zz"? Grundsätzlich und im Moment des Fehlers?
2. Bist Du sicher, dass "(zz - 1) * 34 + x" so richtig ist? Punktrechnung geht vor Strichrechnung. "zz - 1" würde zunächst mit 34 multipliziert werden, danach käme x hinzu. Falls "34 + x" zum Ergebnis von "zz - 1" addiert werden sollte, müsstest Du den letzten Term klammern.

Der Hase liegt sehr wahrscheinlich in 1. begraben. zz enthält einen Wert, der zu einem z führt, das außerhalb des Arrays zeigt - entweder 0 (Null) oder > Länge des Arrays. Eins von beidem.

Re: Array Assign

Verfasst: Fr, 03. Aug 2012 17:05
von Jan
Tom hat geschrieben:Toller Tip, Jan. Zumal es überhaupt kein y gibt. :wink:
Gnagnagna :doubt: Hast ja Recht. Nehmen wir also statt y ein z.

Aber grundsätzlich liegt es meiner Menung nach daran, das eine der beiden Varibalen einen Wert enthält, der nicht ein Arrayelement ansprechen kann. Ob das jetzt ein zu hoher Wert ist, oder 0, oder sonstwas, ist dann auch egal.

Jan

Re: Array Assign

Verfasst: Fr, 03. Aug 2012 18:49
von brandelh
Ich schließe mich Jan an und vermute, dass durch Rundungsfehler z.B. mehr als 34 oder weniger als 1 rauskommt die Indexwerte überschritten werden.
Hier wäre ein MAX() und MIN() eine gute Idee ;-)

Re: Array Assign

Verfasst: Sa, 04. Aug 2012 12:42
von Tom
Hier wäre ein MAX() und MIN() eine gute Idee
Die bessere Idee wäre, so zu programmieren, dass das nicht auftreten kann. Immerhin scheinen die Arraydaten ja irgendwie zu den "zz"-Werten zu gehören. Baut man jetzt Begrenzungsmechanismen für seltsame Fehlersituationen ein, vermeidet man zwar möglicherweise diesen Fehler, aber zugleich riskiert man, mit inhaltlich falschen Daten zu arbeiten.

Re: Array Assign

Verfasst: So, 05. Aug 2012 1:45
von brandelh
Hallo Tom,

gerade weil oben der Indexwert z berechnet wird, halte ich die Begrenzung auf die möglichen Arraygrenzen für sehr sinnvoll.
Das meinte ich mit min() und max(), aber natürlich kann man dieses auch anders erreichen.

Re: Array Assign

Verfasst: So, 05. Aug 2012 23:39
von AUGE_OHR
Aber wie gesagt nur bei dieser einen Bestellung.
An den Daten kann ich nichts falsches erkennen.
ich versuche mal einen anderen Weg und gehe davon aus das deine Berechnungen doch stimmen dann wäre wieder die Frage was an
"nur bei dieser einen Bestellung" anders ist ?

da du hier nach Filialen gehst würde ich mir mal "alles" von "der" Filiale ansehen ob dir etwas auffällt
auch würde ich "davor" und "danach" die Daten durchsehen denn die Fehlermeldung / Zeile muss nicht immer "exakt" stimmen ...

zur Fehlersuche, wenn du es nicht reproduzieren kannst, würde ich mit BEGIN / SEQUENCE / RECOVER arbeiten und die Fehler mit Var2Char() in ein Logfile schreiben

Re: Array Assign

Verfasst: Mo, 06. Aug 2012 10:32
von Tom
Hallo, Hubert.

Ich vermute, dass dieser Code von Rolf eindeutige Bedinungen/Voraussetzungen hat. Die Ermittlung irgendwelcher Werte aus dem Array ist vermutlich der umgekehrte Weg eines vorigen, der den Arrayindex überhaupt erst erzeugt hat. Ich habe x Positionen, aus denen ich etwas wählen kann, und speichere dann die Positionsnummer (den Index). Will ich wieder damit arbeiten (oder irgendwas anzeigen), ermittle ich aus dem Array der Positionen über meinen Indexwert wieder den dazu passenden Eintrag, was im gezeigten Code geschehen soll. Das ist wahrscheinlich eine vereinfachte Wiedergabe dessen, was da geschieht oder geschehen soll. Deshalb wären Bedingungen/Begrenzungen in dieser Abfrage bestenfalls Kosmetik; aus irgendeinem Grund referenziert ein gespeicherter Wert nicht mehr richtig auf das Array. Das kann daran liegen, dass ein Eintrag unerwarteterweise leer ist, also eine Null erzeugt, und einen Nulleintrag gibt es bei Arrays nicht. Oder es ist inzwischen ein Referenzeintrag gelöscht worden, das Array ist also kürzer als es im Moment war, als der zu speichernde Wert erzeugt wurde. Auch hier wäre mit einer Begrenzung ein Fehler zu vermeiden, aber der Rückgabewert wäre dann inhaltlich falsch. Und das wäre in meinen Augen bei einer Geschäftsanwendung noch schlimmer als ein Laufzeitfehler. Rolf muss also herausfinden, warum die Referenz nicht mehr stimmt, und daran arbeiten.

Re: Array Assign

Verfasst: Mo, 06. Aug 2012 12:57
von Rolf Ramacher
Ich habe es inzwischen herrausgefunden. Es wurde ein bestimmtes feld nicht befüllt. daher hat er Zähler nicht richtig funtk. jetzt wieder OK

danke

Re: Array Assign

Verfasst: Mo, 06. Aug 2012 13:15
von Koverhage
Dann kannst Du das ja als erledigt kennzeichnen!
Wenn Du da schon dabei bist, die anderen erledigten auch.