Array Assign [ERLEDIGT]

Still in use?

Moderator: Moderatoren

Antworten
Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1855
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Kontaktdaten:

Array Assign [ERLEDIGT]

Beitrag von Rolf Ramacher » Do, 02. Aug 2012 19:06

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 ?
Zuletzt geändert von Rolf Ramacher am Mo, 06. Aug 2012 14:07, insgesamt 1-mal geändert.
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de

Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 7287
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Kontaktdaten:

Re: Array Assign

Beitrag von Tom » Do, 02. Aug 2012 19:13

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.
Herzlich,
Tom

Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 11421
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg

Re: Array Assign

Beitrag von AUGE_OHR » Fr, 03. Aug 2012 1:34

Rolf Ramacher hat geschrieben:ein Kunde erhält beim Wareneingang nach auswahl
was für eine "auswahl" unter "Cl*pper" ?
gruss by OHR
Jimmy

Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1855
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Kontaktdaten:

Re: Array Assign

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

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.
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de

Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 13073
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Kontaktdaten:

Re: Array Assign

Beitrag von Jan » Fr, 03. Aug 2012 14:53

Ich tippe darauf, das x oder z größer sind als die Arraylänge.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.

Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 7287
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Kontaktdaten:

Re: Array Assign

Beitrag von Tom » Fr, 03. Aug 2012 15:14

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.
Herzlich,
Tom

Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 13073
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Kontaktdaten:

Re: Array Assign

Beitrag von Jan » Fr, 03. Aug 2012 17:05

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
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 14547
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

Re: Array Assign

Beitrag von brandelh » Fr, 03. Aug 2012 18:49

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 ;-)
Gruß
Hubert

Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 7287
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Kontaktdaten:

Re: Array Assign

Beitrag von Tom » Sa, 04. Aug 2012 12:42

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.
Herzlich,
Tom

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 14547
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

Re: Array Assign

Beitrag von brandelh » So, 05. Aug 2012 1:45

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.
Gruß
Hubert

Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 11421
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg

Re: Array Assign

Beitrag von AUGE_OHR » So, 05. Aug 2012 23:39

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
gruss by OHR
Jimmy

Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 7287
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Kontaktdaten:

Re: Array Assign

Beitrag von Tom » Mo, 06. Aug 2012 10:32

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.
Herzlich,
Tom

Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1855
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Kontaktdaten:

Re: Array Assign

Beitrag von Rolf Ramacher » Mo, 06. Aug 2012 12:57

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
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de

Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2081
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Kontaktdaten:

Re: Array Assign

Beitrag von Koverhage » Mo, 06. Aug 2012 13:15

Dann kannst Du das ja als erledigt kennzeichnen!
Wenn Du da schon dabei bist, die anderen erledigten auch.
Gruß
Klaus

Antworten