BC14 - Veralteter Wert per Count nach Änderung auf Page

13. August 2024 15:13

Hallo Miteinander,

nachdem ich meinen neuen Job angetreten habe und von einer Führungsposition von einem großen Team hin zu einer kleinen One Man Show geworden bin, was ich super finde, darf ich nun nach etlichen Jahren auch mal wieder etwas programmieren.

Grundsätzlich muss ich viel wieder lernen, KI hilft hierbei sicher sehr, aber einen Fehler bekomme ich nicht weg.

Im Prinzip will ich wissen wie viele Datensätze ich von einer bestimmten Kombination habe, und wie viele davon gesperrt sind. Das Ergebnis will ich dann nutzen um ein Option Field zu verändern. Mein Problem ist das der zweite ermittelte Wert nicht stimmt.

Mein Code liegt in der Table auf dem On Validate Trigger des entsprechenden Boolschen Feldes.

Die Gesamtzahl der gefilterten Datensätze ist korrekt.

Die Zahl der davon gesperrten Datensätze ist es nicht. Sie scheint immer einen manuellen Schritt hinterher zu hängen.

Dementsprechend habe ich das Problem das er mir die Änderung des Option Fields nicht korrekt ausführt.

Wenn das mal sauber läuft würde ich es auch in eine Codeunit verlagern wollen, aber zum Ausprobieren dachte ich das passt erstmal soweit.

Code:
// X 100 - AS - Start
// Anlegen von zwei Variablen noSamplesColour und noDisposed
// Setzen der Variablen auf Null

NoSamplesColour := 0;
NoDisposed := 0;

// Anzahl der Muster ermitteln
      SampleVendorColour.RESET;
      SampleVendorColour.SETFILTER("Sample No.", Rec."Sample No.");
      SampleVendorColour.SETFILTER("Vendor No.", Rec."Vendor No.");
      NoSamplesColour := SampleVendorColour.COUNT;
      MESSAGE('Anzahl der Datensätze: %1', NoSamplesColour);

// Anzahl der Entsorgten Muster ermitteln
      SampleVendorColour.RESET;
      SampleVendorColour.SETFILTER("Sample No.", Rec."Sample No.");
      SampleVendorColour.SETFILTER("Vendor No.", Rec."Vendor No.");
      SampleVendorColour.SETFILTER(Disposed, '%1', TRUE);
      NoDisposed := SampleVendorColour.count;
      MESSAGE('Anzahl der entsorgten Muster Datensätze: %1', NoDisposed);

// Prüfen ob Sätze existieren wenn ja schauen ob keine gesperrt sind.
IF NoDisposed = 0 THEN BEGIN
  MESSAGE('NULL');
  SampleVendor.RESET;
  SampleVendor.GET("Sample No.","Vendor No.");
  SampleVendor.DisposedVendor := 0;
  SampleVendor.MODIFY;
END;

// Prüfen ob Anzahl ungleich, dann Teilweise gesperrt
IF NoDisposed <> NoSamplesColour THEN BEGIN
  MESSAGE('Einige');
  SampleVendor.RESET;
  SampleVendor.GET("Sample No.","Vendor No.");
  SampleVendor.DisposedVendor := 1;
  SampleVendor.MODIFY;
END;

// Prüfen ob alle gesperrt
IF NoDisposed = NoSamplesColour THEN BEGIN
  MESSAGE('ALLE');
  SampleVendor.RESET;
  SampleVendor.GET("Sample No.","Vendor No.");
  SampleVendor.DisposedVendor := 2;
  SampleVendor.MODIFY;
END;

CurrPage.UPDATE;

//WX100 - End



Danke schonmal im Vorraus!
Andy

Re: BC14 - Veralteter Wert per Count nach Änderung auf Page

13. August 2024 15:40

Das heißt dein Code ist im OnValidate Trigger des Felds "Disposed"? Welche BC Version nutzt du? Es wäre geschickt einen OnAfterValidate Event Subscriber zu verwenden, dann ist sicher dass das Validieren schon durch ist und du tatsächlich den neuen/geänderten Wert im Feld hast.

Re: BC14 - Veralteter Wert per Count nach Änderung auf Page

13. August 2024 15:51

Hallo Enh,

ich nutze BC 14. Hab ich auch Brav im Titel angegeben.

Das ist korrekt. Ich bin im On Validate Trigger meines Boolean Feldes in dem ich zu Testzwecken immer den Haken setze bzw. entferne.

Die Table in der ich mich befinde ist Sample Vendor Colour, dessen Daten ich eben versuche zusammenzufiltern.

Wie gestalte ich denn einen solchen Event Subscriber? Da komme ich doch über eine Codeunit hin, richtig? Das hatte ich im Prinzip eh vor den Code, wenn er einmal funktioniert, auszulagern. Aber gerade scheiter ich wie gesagt am korrekten Zählen des zweiten Wertes noDisposed.

Re: BC14 - Veralteter Wert per Count nach Änderung auf Page

13. August 2024 16:02

Hallo,

das sieht mir fast nach KI generiertem Code aus. :roll:
Und wenn dem so ist, lass die KI bitte KI sein, und - sorry - denke lieber selber. :wink:

Also ich würden den OnValidate- Trigger ganz in Ruhe lassen, den Count wirkt nur auf die gespeicherten Datensätze, und das ist es nach dem OnValidate noch nicht.

Außerdem sind in dem Code noch ein Fehler drin.
Der Code kann noch nicht damit umgehen, wenn noch keine Datensätze in der SampleVendorColour drin sind.

Ich persönlich würde versuchen zwei Flowfields in SampleVendor einzubauen. eins mit exist Disposed=true in SampleVendorColour und eins mit exist Disposed=false in SampleVendorColour.

Gruß Fiddi

Re: BC14 - Veralteter Wert per Count nach Änderung auf Page

13. August 2024 16:09

Hallo Fiddi,

ist tatsächlich mit Hilfe von KI generiert, habe aber tatsächlich selber geschrieben und manchmal eben überprüfen lassen. Mir hat es grundsätzlich geholfen meine eingerosteten rudimentären Skills wieder zu entdecken.

Die Fehler hab ich schon gefunden, ich hab ja noch mit vorher gekämpft. Aber jetzt würde er, denke ich, sauber funktionieren wenn die Anzahl der jeweiligen Sätze stimmt. Glaube KI hätte die Fehler nicht hin bekommen :-D

Gut, dann werde ich mal den Code umziehen. Und Danke für die Ideen mit den Flow Fields. :-)

Ggf. meld ich mich hier nochmal, aber für heute raucht mir der Kopf.
Danke Euch allen :-)
Schönen Abend.
Andy

Re: BC14 - Veralteter Wert per Count nach Änderung auf Page

13. August 2024 16:35

Hallo,

das was ich bisher an KI- generiertem Code gesehen habe, war alles in der Liga und schlimmer. Und ich fürchte irgendeine KI wird diesen Code hier auch zum lernen benutzen und noch größeren Blödsinn verzapfen. :oops: :lol:

Wenn du etwas suchst, wie man etwas programmiert, dann schau dir lieber den Code von NAV an.
Das hat zwei Vorteile:
1. Die NAV- Programmierer - zumindest bei den älteren Versionen - waren sehr sparsam beim Programmieren. Da ist selten ein Bit zu viel vorhanden.
2. Du lernst die Anwendung besser kennen, und programmierst weniger doppelt.

Gruß Fiddi

P.S.: wenn du die KI was fragen willst, dann frage Sie nach wo du etwas finden kannst oder frage Sie nach Quellen für Beispiele, aber lasse dir besser keinen Code von der KI generieren.