[gelöst] Fehlerstatistik zeigt zu wenige Einträge

31. März 2008 12:19

Hallo,
ich habe einen Report, der Fehler in der Produktion nach Fehlerart und Schicht auszählt und dann ausgibt. Leider zeigt dieser viel weniger Fehler an, als tatsächlich entstanden sind.

Der Report bezieht sich auf die Tabellen "Defects" (Auflistung der Fehlerarten) und "Item defects" (entstandene Fehler, enthält Eintragsnummer, Datum, Schicht und eben auch Fehlerarten). "Item defects" wird als eingerückte Tabelle gewählt.

Bis hierhin zählt der Report noch richtig (habe mir eine Variable zum Durchzählen der gefundenen Datensätze gebastelt und während der Verarbeitung ausgeben lassen):
OnPreDataItem=BEGIN "Serial No. Information".COPYFILTER "Date GPV", "Item Defects"."Date GPV");
END;


Das heisst für mich, der Fehler müsste irgendwo nach "OnAfterGetRecord" stecken:
BEGIN
ctr := 1;
WHILE (ShiftArray[ctr] <> "Produced by") AND (ctr < 10) DO
ctr += 1;

IF ShiftArray[ctr] = "GPV Shift" THEN BEGIN
QtyArray[ctr] += 1;
QtyArray[11] += 1;
SumArray[ctr] += 1;
SumArray[11] += 1;
printSection := TRUE;
END;
END;


Dabei gibt ShiftArray die verschiedenen Schichten an, QtyArray die absoluten Fehlerwerte pro Fehler und SumArray die absoluten Fehlerwerte gesamt. ctr ist eine Zählvariable, klar.

Ich versteh einfach nicht, wo da ein Fehler sein kann...
Zuletzt geändert von MariaNav am 31. März 2008 14:04, insgesamt 1-mal geändert.

31. März 2008 12:28

Hi MariaNav, bitte verwende für Codestücke den tag [ code] statt [ quote].
So bleiben deine Einrückungen erhalten.

Könnte es sein, dass im OnAfterGetRecord ein BEGIN fehlt? So z.B:
Code:
ctr := 1;
WHILE (ShiftArray[ctr] <> "Produced by") AND (ctr < 10) DO BEGIN
  ctr += 1;

  IF ShiftArray[ctr] = "GPV Shift" THEN BEGIN
    QtyArray[ctr] += 1;
    QtyArray[11] += 1;
    SumArray[ctr] += 1;
    SumArray[11] += 1;
    printSection := TRUE;
  END;
END;

31. März 2008 13:14

Nein, das ist eigentlich irrelevant.
Der Report setzt ctr solange um eins höher, bis die richtige Schicht gefunden wurde. Dann erst wird die Fehleranzahl (QtyArray und SumArray) erhöht.

Ich habe jetzt die IF-Bedingung herausgenommen und komme damit interessanterweise zur Lösung. Fragt sich nur noch, warum...

31. März 2008 13:25

Ist ShiftArray ein Array vom Typ Option oder was fragst du mit "GPV Shift" ab?
Options werden so abgefragt: IF OptionFeld = OptionFeld::OptionWert THEN ...

31. März 2008 13:29

Ja, ist es... :oops:
Aber ich hab den Code auch nicht ursprünglich fabriziert.

Gleich noch ein paar Fragen hinterher:
-Warum funktioniert die Abfrage trotzdem bei WHILE?
-wenn ShiftArray vom Typ Option ist, "Produced by" aber nicht (ich nehme an, Text), muss ich dann den ShiftArray-Wert konvertieren? Wie?

Danke schonmal im Voraus!
Zuletzt geändert von MariaNav am 31. März 2008 13:33, insgesamt 1-mal geändert.

31. März 2008 13:31

Jaja, immer sinds die anderen ;-)
Klappt es denn jetzt?

31. März 2008 13:36

Du antwortest aber schnell... kannst Du Dir nochmal die obigen Fragen anschauen? Danke!

31. März 2008 13:47

Ich hab's jetzt mit
Code:
IF FORMAT(ShiftArray[ctr])="Produced by"
probiert und das hat geklappt. Dabei ist mir auch gleich der echte Fehler aufgefallen:

Obwohl ctr nach Vergleich mit "Produced by" erhöht wurde, war die spätere Bedingung für die Fehlerausgabe "GPV Shift". Diese Spalte gibt in meiner Tabelle aber nur an, wer den Fehler eingetragen hat und nicht, wer der Verursacher ist (ausserdem hat nicht jede Zeile einen Eintrag, daher das Missverhältnis der Zahlen).

...hätt' ich schon eher drauf können kommn :oops:

31. März 2008 13:52

MariaNav hat geschrieben:-Warum funktioniert die Abfrage trotzdem bei WHILE?


Du meinst, warum du keine Fehlermeldung erhalten hast?
Weil die C/AL-Syntax das nunmal zulässt. Ob das an anderen Stellen vielleicht Sinn macht, entzieht sich meiner Kenntnis.

-wenn ShiftArray vom Typ Option ist, "Produced by" aber nicht (ich nehme an, Text), muss ich dann den ShiftArray-Wert konvertieren? Wie?


Dazu müsst ich erst einmal verstehen, wie deine Tabelle aufgebaut ist.
Also langsam: Die Felder "Produced by" und "GPV Shift" - sind dies überhaupt wirklich Tabellenfelder? Wenn ja, welcher Tabelle?
Suche diese Felder und schaue, von welchem Datantyp sie wirklich sind.
Wenn ein Feld ein Optionfeld sein sollte, schau in den Feldeigenschaften nach, welche Werte das Optionfeld annehmen kann.

Edit: Scheint sich jetzt doch erledigt zu haben.