[Gelöst] [CC] Auf "IF VALIDATE" Prüfen

11. März 2016 10:21

Hi,

ich möchte prüfen ob ein IF VALIDATE durchgeführt werden kann.

z.B. möchte ich mittels CU eine Artikel Basiseinheit ändern, vorrausgesetzt, die Validierung schlägt nicht fehl. Ändern geht da ja nicht wenn z.B. Gebuchte Posten vorhanden sind, oder die EInheit nicht exisitiert.

Bin da über folgende CU gestolpert:

http://forum.mibuso.com/discussion/3176 ... e-function

Mir Leuchtet aber nicht so ganz ein wie diese Funktioniert und ob die für mein Vorhaben geeignet ist.

Ich möchte das hier einbauen:
Code:
IF (MustValidateField()) THEN BEGIn
     //TODO: Prüfen ob Valiederung möglich ist, sonst Fehler speichern
     FldRef2.VALIDATE(NewValue);
END ELSE
     FldRef2.VALUE := NewValue;


Vielleicht kann mir jemand auf die Sprünge helfen, ob ich mein Vorhaben mit dieser CU dort realisieren kann, oder ob es eine andere Methode gibt.

Danke
Zuletzt geändert von elTorito am 11. März 2016 12:46, insgesamt 2-mal geändert.

Re: Auf "IF VALIDATE" Prüfen

11. März 2016 11:26

In deinem Link ist ein Beispiel angegeben, wie die Codeunit (hier mit Variable "cu" angesprochen) verwendet wird:

Code:
txtconst := 'NeuerFeldwert';
tbtest.FINDLAST; // nur ein Beispiel. tbtest muss sich auf dem Datensatz befinden, in welchen du validieren möchtest!
cu.FNTGetPar(cu.FNTGetTableNo(tbtest.TABLENAME),tbtest.FIELDNO(DeinFeldname),tbtest.GETPOSITION(FALSE),txtconst);
IF cu.RUN THEN BEGIN
  
// Validierung war möglich!
  tbtest.VALIDATE(DeinFeldName,txtconst);
  tbtest.MODIFY;
END ELSE BEGIN
  
// Validierung war nicht möglich!
END


Wichtig:
- tbtest ist eine Recordvariable; hier musst du die Tabelle auswählen, in welche du validieren möchtest. Vor Aufruf der Codeunit musst du dich auf den gesuchten Datensatz positionieren.
- Ersetze DeinFeldname durch den Namen das Feldes, in welches validiert werden soll
- Setze txtconst auf den neuen Inhalt des Feldes, welcher validiert werden soll

Re: Auf "IF VALIDATE" Prüfen

11. März 2016 12:04

Hallo,

elTorito hat geschrieben:Ich möchte das hier einbauen:
Code:
IF (MustValidateField()) THEN BEGIN
         //TODO: Prüfen ob Valiederung möglich ist, sonst Fehler speichern
         FldRef2.VALIDATE(NewValue);
    END ELSE
         FldRef2.VALUE := NewValue;


Das im ELSE- Zweig solltest du tunlichst lassen, wenn es der Basiseinheitencode eines Artikels ist, und du noch etwas länger mit deinem System arbeiten möchtest. :wink:

Gruß Fiddi

Re: Auf "IF VALIDATE" Prüfen

11. März 2016 12:40

Hallo Natalie,

danke für deine Antwort.

Ich hatte in der CU im OnRun den Aufruf "FNTValidate;" vergessen ;)

Jetzt geht es, hatte mich schon die ganze Zeit gewundert warum ich nirgendwo ein Verweis auf die Funktion hatte.
Hatte mich gefragt warum wird da in der CU diese Funktion beschrieben wenn Sie nicht verwendet wird ... Bald Wochenende ...

Jetzt geht es:

Code:

        IF(CheckForValidate(FldRef2.NUMBER)) THEN BEGIN
          //Check if can validate
          ValMgt.FNTGetPar(ToTableNo,FldRef2.NUMBER,OldRecRef.GETPOSITION(FALSE),NewValue);
          IF ValMgt.RUN THEN BEGIN
            FldRef2.VALIDATE(NewValue);
          END ELSE BEGIN
             MESSAGE(GETLASTERRORTEXT);
          END;
        END ELSE
          FldRef2.VALUE := NewValue;

Re: Auf "IF VALIDATE" Prüfen

11. März 2016 12:42

fiddi hat geschrieben:Das im ELSE- Zweig solltest du tunlichst lassen, wenn es der Basiseinheitencode eines Artikels ist, und du noch etwas länger mit deinem System arbeiten möchtest. :wink:
Gruß Fiddi


Ja, schon Klar :)

Sonst sind auf einmal alle STK dann auf einmal QM, oder im Schlimmsten Fall LEER ...