[GELÖST]Mitarbeiter Status ändern Datum Inaktivität befüllt

14. März 2014 14:08

Hallo zusammen,

ich bin neu hier im Forum, deshalb gleich mal der erste Eintrag. Wie würdet Ihr folgendes Problem lösen:
In der NAV Mitarbeitertabelle gibt es die Felder Status und Datum Inaktivität.
Ich möchte nun den Status automatisch auf "Inaktiv" setzen, wenn das Datum Inaktivität >= Tagesdatum ist.
Folgenden Code habe ich in Table 5200 im OnModify erstellt:

IF Employee."Inactive Date" <= TODAY THEN
Employee.Status := 1;

Nur leider funktioniert das nicht. Wer kann mir da helfen?
Zuletzt geändert von Peter Klein am 17. März 2014 16:50, insgesamt 1-mal geändert.

Re: Mitarbeiter Status ändern wenn Datum Inaktivität befüllt

14. März 2014 14:20

Hallo Peter,

zuerst einmal ein herzliches Willkommen in unserer Community.

Zwei Dinge fallen mir bei deiner Anforderung auf:
  1. Du verwendest scheinbar eine Record-Variable, in welcher du den Status ändern möchtest.
    Prüfe und schreibe besser in den Rec, anstatt in eine separate Variable.
    Code:
    IF Rec."Inactive Date" <= TODAY THEN
      Rec
    .Status := 1;  // falls es ein Option-Feld ist, dann besser: Rec.Status := Rec.Status::"1";  

    (Das Rec. kannst du auch weglassen, da NAV ohne dieser Angabe sowieso immer davon ausgeht, dass du dann den Rec meinst.)
  2. Wenn das Inactive Date in der Zukunft liegt, ändert sich der Status nicht automatisch, sobald der Stichtag erreicht/überschritten wurde.
    Hier müsste eine Codeunit oder ein Report (Processing Only) per Projekt Warteschlange einmal die Datensätze prüfen und den Status setzen.

Re: Mitarbeiter Status ändern wenn Datum Inaktivität befüllt

14. März 2014 14:36

Hallo Timo,
vielen Dank für deine rasche Antwort. Ich werde es gleich mal ausprobieren. Meinst Du, wenn das Datum Inaktivität in der Zukunft liegt, dass der Code erst dann greift, wenn man den Datensatz nochmals öffnet.
Ich wollte mir eigentlich eine Anpassung mittels CU über JobQueue ersparen, da wir schon über 60 Einträge in 5 parallel laufenden JobQueues haben.

Re: Mitarbeiter Status ändern wenn Datum Inaktivität befüllt

14. März 2014 15:16

Hallo Peter,

genau das meine ich. Und es reicht dann auch nicht, den Datensatz nur zu öffnen, da dadurch ja kein Modify erforderlich wird, was den Trigger auslösen würde.
Wenn sich Daten in NAV "von alleine" ändern sollen, dann benötigst du die JobQueue.

Was darf ich unter "5 parallel laufenden JobQueues" verstehen?
Die sind doch sicher auf 5 verschiedene Mandanten verteilt, oder?
Mehrere JobQueues in demselben Mandanten machen meiner Meinung nach überhaupt keinen Sinn, es sei denn, man hat die JobQueue Entries um eine "Instanz" erweitert, so dass man diesen mitgeben kann, von welcher JobQueue dieser Eintrag abgearbeitet werden darf.

Da dieser zusätzliche Job (bei richtiger Filterung) nicht allzuviel Zeit benötigen wird, dürfte der ja höchsten ein paar Sekunden pro Tag benötigen.
Er braucht ja nur alle Mitarbeiter mit einem überfälligen Inaktivitätsdatum und Status <> Inactive abarbeiten:
Code:
Employee.RESET;
Employee.SETCURRENTKEY(Status,"Inactivate Date");  // Diesen Key gibt es im Standard noch nicht!
Employee.SETFILTER(Status,'<>%1',Employee.Status::Inactive);
Employee.SETFILTER("Inactivate Date",'>%1&<=%2',0D,TODAY);
IF Employee.FINDSET(TRUE) THEN BEGIN
  REPEAT
    Employee
.Status := Employee.Status::Inactive;
    Employee.MODIFY;
  UNTIL Employee.NEXT = 0;
END;

Re: Mitarbeiter Status ändern wenn Datum Inaktivität befüllt

14. März 2014 16:27

Hallo Timo,
vielen Dank für den Code Vorschlag. Ich werde es am Montag ausprobieren.
Zu deiner Frage:
normalerweise laufen die Jobs über die JobQueue immer sequentiell ab. Wir haben uns aber die JobQueue erweitern lassen, so dass wir eben mehrere JobQueue's gleichzeitig laufen lassen können. (siehe Screenshot)
JobQueueEntry.jpg

Die JobQueue läuft bei uns in 3 Mandanten, im Hauptmandanten laufen 6 JobQueue's parallel.
Vielen Dank dass man hier so schnell Hilfe bekommt. Ich wünsche noch ein schönes Wochenende und bis nächste Woche.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Re: Mitarbeiter Status ändern wenn Datum Inaktivität befüllt

14. März 2014 16:44

Hallo Timo,
habe deinen Code ausprobiert. Funktioniert fast perfekt. Wenn im Feld Datum Inaktivität kein Wert steht, muss der Status auf aktiv bleiben. Derzeit wird dies nun auch geändert. Hast Du hierfür auch noch einen Tipp für mich?

Re: Mitarbeiter Status ändern wenn Datum Inaktivität befüllt

14. März 2014 16:45

Peter Klein hat geschrieben:vielen Dank für den Code Vorschlag.
Ich hatte in meinem Code noch die REPEAT-Schleife vergessen. Diese habe ich jetzt gerade nachgetragen.

Peter Klein hat geschrieben:Wir haben uns aber die JobQueue erweitern lassen, so dass wir eben mehrere JobQueue's gleichzeitig laufen lassen können. (siehe Screenshot)
Das war meine Vermutung, da sonst alle Instanzen alle Jobs abarbeiten würden, was mit sehr hoher Wahrscheinlichkeit zu Fehlern und/oder Abbrüchen (durch gegenseitiges Sperren) führen würde.

Re: Mitarbeiter Status ändern wenn Datum Inaktivität befüllt

14. März 2014 16:46

Peter Klein hat geschrieben:Wenn im Feld Datum Inaktivität kein Wert steht, muss der Status auf aktiv bleiben. Derzeit wird dies nun auch geändert. Hast Du hierfür auch noch einen Tipp für mich?
Upps, na klar. Habe ich oben geändert.

Re: Mitarbeiter Status ändern wenn Datum Inaktivität befüllt

17. März 2014 12:16

Hallo Timo,
hab heute versucht eine CU mit deinem Code zu erstellen, leider bekomme ich beim Kompilieren folgenden Fehler:
Es wurde ein Feld einer Datensatzvariablen erwartet.
Ich habe zwei globale Variablen definiert (Employee und Inactivate Date)
Das Feld Inactivate date habe ich als zusätzlichen Key in Table 5200 definiert.
Was mach ich falsch?

Re: Mitarbeiter Status ändern wenn Datum Inaktivität befüllt

17. März 2014 12:34

Peter Klein hat geschrieben:Ich habe zwei globale Variablen definiert (Employee und Inactivate Date)


warum hast du nochmal eine Variable "Inactivate Date" angelegt?

Re: Mitarbeiter Status ändern wenn Datum Inaktivität befüllt

17. März 2014 12:55

Hallo zusammen,
war mein Fehler, das Feld heißt: Inactive Date. Habs im Code korrigiert und nun konnte ich einwandfrei kompilieren. Werde nun versuchen die CU über die JobQueue zu starten um das Ergebnis zu checken.

Re: Mitarbeiter Status ändern wenn Datum Inaktivität befüllt

17. März 2014 13:12

Hallo zusammen,
jetzt bekommen beim Aufruf über die JobQueue folgenden Fehler:
The codeunit was called with a Job Queue Entry record. It has no parameters.
Bitte um Hilfe

Re: Mitarbeiter Status ändern wenn Datum Inaktivität befüllt

17. März 2014 14:14

http://www.mibuso.com/forum/viewtopic.php?f=23&t=26560

Re: Mitarbeiter Status ändern wenn Datum Inaktivität befüllt

17. März 2014 16:48

Hallo zusammen,
nun hats funktioniert. Vielen Dank an alle.