OnValidate Trigger

17. September 2021 08:25

Guten Morgen,

ich habe eine kleine Anforderungen für die Fachabteilung realisiert, die gut klappt. Im Artikelstamm habe ich zwei zusätzliche Felder hinzugefügt (show Document Note (Boolean) und Document Note). Hier kann die Abteilung ein Hinweistext eintragen. Im OnValidate Trigger der Item No. in der Tabelle 39 habe ich folgenden Code geschrieben.
Code:
IF Type = Type::Item THEN BEGIN
  IF Item.GET("No.") THEN
    IF Item."show Document Note" THEN
      MESSAGE(Item."Document Note");
  IF SKU.GET("Location Code","No.","Variant Code") THEN
    IF SKU."show Document Note" THEN
      MESSAGE(SKU."Document Note")
END;


Bei der Erstellung einer Bestellung, sei es manuell oder über den Bestellvorschlag ploppt die Textmeldung auf wenn ein Document Text aktiviert wurde. Das Ganze wollte ich ebenfalls für die Produktion erstellen. In Tabelle 4506 habe ich das Ganze übernommen. Bei der Erstellung eines Fertigungsauftrags (Manuell) bekomme ich die Textmeldung.
Problem: Wenn ich einen Fertigungsauftrag jedoch durch den Planungsvorschlag generiere wird die Textmedeldung ignoriert. Ist die Vorgehensweise vom System hier anders ?
Code:
IF Item.GET("Item No.") THEN BEGIN
     IF Item."show Document Note" THEN
       MESSAGE(Item."Document Note");
   IF SKU.GET("Location Code","Item No.","Variant Code") THEN
     IF SKU."show Document Note" THEN
       MESSAGE(SKU."Document Note")
  END;

Re: OnValidate Trigger

17. September 2021 08:56

Hallo,

solche Messages (nicht Error) solltest du nach Möglichkeit in der Page ausführen, damit Programme die diese Daten per Programm erstellen nicht auf die Nase fallen bzw. dich mit endlosen Messages bombardieren.

Außerdem könnte es sein, das der "Location Code" bzw. "Variant Code" in beiden Fällen noch gar nicht gefüllt ist, wenn du die Artikelnummer eingegeben hast. Der SKU.Get greift dann u.U. ins leere.

Wie ich schon sagte, ich würde das in den OnModify/OnInsert der Page einbauen, mit weiteren Prüfungen auf "Location Code" und "Variant Code" bzw. in alle drei Trigger einbauen. Da hast du dann wieder das Problem, das du die falsche Info oder Infos mehrfach anzeigst.

Neben den oben genannten Gründen, kann es natürlich auch sein, dass ein Programm den Onvalidate- Trigger von "Item No." gar nicht aufruft und die Variable einfach nur direkt zuweist.

Das Thema ist nicht ganz so einfach, wie es auf den ersten Blick aussieht. :wink:

Gruß fiddi

GELÖST: Re: OnValidate Trigger

17. September 2021 09:49

Hallo fiddi,

danke für deinen Hinweis zur Einsetzung von Hinweis Meldungen. Ich konnte das Problem nun lösen.
Dass Auslösen einer Bestellung vom Bestellvorschlag passiert in CodeUnit 333, hier wird bei der Übergabe der Artikelnummer das Feld noch zusätzlich validiert. Für der Erstellung von einem FA aus dem Planungsvorschlag heraus ist die CU 99000813 zuständig, hier fehlte in der Funktion InsertProdOrderLine die Validierung des Feldes.

Code:
InsertProdOrderLine(ReqLine : Record "Requisition Line";ProdOrder : Record "Production Order";Item : Record Item)
ProdOrderLine.SETRANGE("Prod. Order No.",ProdOrder."No.");
ProdOrderLine.SETRANGE(Status,ProdOrder.Status);
ProdOrderLine.LOCKTABLE;
IF ProdOrderLine.FINDLAST THEN
  NextLineNo := ProdOrderLine."Line No." + 10000
ELSE
  NextLineNo := 10000;

ProdOrderLine.INIT;
ProdOrderLine.BlockDynamicTracking(TRUE);
ProdOrderLine.Status := ProdOrder.Status;
ProdOrderLine."Prod. Order No." := ProdOrder."No.";
ProdOrderLine."Line No." := NextLineNo;
ProdOrderLine."Item No." := ReqLine."No.";
//HHU 
[align=]ProdOrderLine.VALIDATE("Item No.",ReqLine."No.");[/align]
ProdOrderLine.VALIDATE("Unit of Measure Code",ReqLine."Unit of Measure Code");
ProdOrderLine."Production BOM Version Code" := ReqLine."Production BOM Version Code";
ProdOrderLine."Routing Version Code" := ReqLine."Routing Version Code";
ProdOrderLine."Routing Type" := ReqLine."Routing Type";

Re: OnValidate Trigger

17. September 2021 10:01

Hallo,

!!!!!!! VORSICHT !!!!!!!!
Wenn du dir nicht 200% sicher bist, das in dem OnValidate- Trigger nicht ungewöhnliches passiert, dann solltest du ein Feld nicht per Validate füllen.
Insbesondere in den Belegzeilen kann es tödlich sein, weil ein OnValidates externe Records erstellen wollen, die eine Salesline benötigen, die noch gar nicht da ist.

!!!!!!! VORSICHT !!!!!!!!

Gruß Fiddi

Re: OnValidate Trigger

17. September 2021 10:17

Da sagst du was....
Hier passiert im Trigger viel, was ich auf anhieb nicht verstehe (Branchenanpassungen). Ich kläre das lieber vorher mit unserem Partner ab.
Danke für deinen Einsatz.