0

Formel für Schichtplan

Hallo,

 

ich habe vor zwei-drei Jahren diese Formel von dem Support bekommen, für einen Schichtplan mit Vier Kolonnen, die jeweils drei Tage im Einsatz, dann drei Tage frei, dann wieder im Einsatz usw. sind. Es gibt dort eine Nachtschicht und eine Tagschicht und die Freischicht.

Die Formel wird über einen Button gestartet, und schreibt die Daten in einen Schichtplan.

 

Nun hat sich dieses Jahr einiges geändert, und wir arbeiten dort nur noch mit zwei Kolonnen, und diese jetzt wochenweise im Wechsel Tagschicht und Nachtschicht, die Freischicht entfällt.

 

Diese Formel hat damals schon ein bischen mein Wissen über die Programmiersprache überstiegen, die meisten Punkte kann ich alle selber anpassen, aber der Punkt mit dem aufteilen der Schichten ist für mich nicht nachvollziehbar.

Wie bekomme ich es hin, dass jetzt die Formel immer 7 Tage Tagschicht und dann 7 Tage Nachtschicht schreibt, bis zu dem angegebenem Datum.

 

Hier der Code:

let myID := this.Nr;
let myDay := “Schichtplan ab”;
let myDays := “für x Tage”;
let myStart := number(“Beginnt mit Schicht”) * 3;
for i in range(0, myDays) do
let mySp := (create “Schichtplan Flughafen”);
mySp.(Flughafen := number(myID));
mySp.(Datum := myDay + i);
let myNumber := floor((i + myStart) / 3) % 4;
if myNumber = 3 then
mySp.(Schicht := “Nacht”);
mySp.(Von := time(18, 0));
mySp.(Bis := time(6, 0))
else
if myNumber = 1 then
mySp.(Schicht := “Tag”);
mySp.(Von := time(6, 0));
mySp.(Bis := time(18, 0))
else
void
end
end
end

 

Gruß

Mirko

5 Antworten

null
    • Mirko.1
    • vor 3 Jahren
    • Gemeldet - anzeigen
    • Mirko.1
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Irgendwie bekomme ich kein Bild rein.

    • mirko3
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Hi Mirko, versuch es doch mal damit. Für ‘Schichtplan ab’ und ‘Schichtplan Flughafen’ mußt Du noch die einfachen Anführungszeichen ein- oder ersetzen und alle doppelten müssen ebenfalls ausgetauscht werden, da das Format hier im Forum beim kopieren im Moment nicht mehr stimmt. Ich hoffe ich habe Dein Datenmodell richtig übersetzt (Tabelle Flughafen und Tabelle Schichtplan Flughafen, Button in Tabelle Flughafen)

    *

    let myID := this.Nr;

    let myDay := “Schichtplan ab”;

    for i in range(0, 14) do

    let mySp := (create “Schichtplan Flughafen”);

    mySp.(Flughafen := number(myID));

    mySp.(Datum := date(year(myDay), month(myDay), day(myDay) + i));

    if i < 7 then

    mySp.(Schicht := “Nacht”);

    mySp.(Von := time(18, 0));

    mySp.(Bis := time(6, 0))

    else

    mySp.(Schicht := “Tag”);

    mySp.(Von := time(6, 0));

    mySp.(Bis := time(18, 0))

    end

    end

    *

    Gruß Mirko

    • Mirko.1
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Hallo Namensvetter ;-),

     

    leider klappt es nicht mit Deinem Code, damit kann ich ja maximal 14 Tage füllen.

     

    Der Plan geht aber immer ab Anfang November bis Ende März oder Mitte April, daher in dem ersten Code das Feld “Schichtplan bis”, und das Feld “für x Tage”.

     

    Ich habe jetzt den alten Code etwas angepasst, so generiert er mir einen Plan von Anfang bis Ende der angegebenen Zeit.

    Dort sind zwar alle zwei Wochen dann keine Einträge in den Zeiten, dann generiere ich den Plan um zwei Wochen nach hinten versetzt noch einmal, und lösche nachträglich alle Leerfelder heraus, klappt so auch erst mal.

     

    Gruß

    Mirko

    • mirko3
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Wenn “Beginn mit Schicht” ein Auswahlfeld ist, dann wird es so gehen. Ich wußte den Wert nicht, der für Tag, Nacht und Frei hinterlegt war, deswegen die if-Sache. Lg. M

    *

    let myID := this.Nr;

    let myDay := “Schichtplan ab”;

    let myDays := “für x Tage”;

    let myStart := if text(“Beginn mit Schicht”) = “Tag” then

    14

    else

    if text(“Beginn mit Schicht”) = “Nacht” then

    7

    end

    end;

    for i in range(0, myDays) do

    let mySp := (create “Schichtplan Flughafen”);

    mySp.(Flughafen := number(myID));

    mySp.(Datum := myDay + i);

    let myNumber := floor((i + myStart) / 7) % 2;

    if myNumber = (not 0) then

    mySp.(Schicht := “Nacht”);

    mySp.(Von := time(18, 0));

    mySp.(Bis := time(6, 0))

    else

    if myNumber = 0 then

    mySp.(Schicht := “Tag”);

    mySp.(Von := time(6, 0));

    mySp.(Bis := time(18, 0))

    end

    end

    end

    *

Content aside

  • vor 3 JahrenZuletzt aktiv
  • 5Antworten
  • 516Ansichten