0

Dynamisches Auswahlfeld abfragen

Hallo zusammen,

ich möchte gerne das Dyn.Auswahlfeld Fahrer 1 abfragen. Wenn ich in Tabelle Name das Datum "bis" ändere soll in Tabelle test Verglichen werden ob der Fahrer 1 gleich "Name" von Tabelle Name ist. wenn dem so ist so soll Fahrer 1 auf null gesetzt werden und Urlaub mit dem Namen befüllt werden. Das befüllen klapt, jedoch wird immer der Fahrer 1 auf null gesetzt. egal ob gleich oder nicht. Die ID´S (NR) sind ja gleich, warum geht es dann nicht??

Im feld "bis" bei änderung:

let me := this;
let num := me.Nr;
if (select test)[number(num) = number('Fahrer 1')] then
(select test).(
'Fahrer 1' := null;
Urlaub := number(num)
)
else
(select test).(Urlaub := number(num))
end

 

Bildschirmfoto 2021-03-29 um 14.47.26

19 Antworten

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

    Brauch mal hilfe bitte,

    beispiel eins funktioniert ( nur ein Fahrer ausgewählt ).

    let me := this;
    let ID := number(me.Nr);
    let array := first((select test).number('Fahrer 1'));
    let tabelle := (select test);
    tabelle[ID = array].(
    'Fahrer 1' := null;
    Urlaub := ID
    );
    tabelle[ID != array].(Urlaub := ID)

    Versuche ich dies jetzt aber als Array für mehrere Fahrer, wird das Dyn Auswahlfeld angesprochen, auch optisch leer gemacht, jedoch nicht als leer gekennzeichnet. Erst wenn dies der fall ist kommt der in Urlaub zu Schreibende Name (Nr)zum vorschein.

    let me := this;
    let ID := number(me.Nr);
    let array := first(select test).[number('Fahrer 1'), number('Fahrer 2')];
    let tabelle := (select test);
    tabelle[ID = array].(
    array := null;
    Urlaub := ID
    );
    tabelle[ID != array].(Urlaub := ID)

     

    So muß es ausehen (beispiel 1 )

     Bildschirmfoto 2021-04-01 um 12.12.37

     

    So sieht es bei Beispiel 2 aus... ist leer aber "leer ist nicht ausgewählt"

    Bildschirmfoto 2021-04-01 um 12.12.05

    • T_Bartzsch
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Leer heiß ja, dass im Auswahlfeld kein Eintrag ausgewählt ist. Woher kommt denn das (leer) in deinem Beispiel? ist das ein extra Datensatz? Was passiert denn, wenn du das mit (leer) gewählte Feld ausliest? Was gibt er dir zurück?

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

    Hab mal die Test DB hier rein gestellt. Da ist es einfacher zu sehen.

     

    https://gofile.me/4mF3s/0c1bjNovy

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

    Hat einer ne Idee von euch?

    • Ninox-Professional
    • planoxpro
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Hallo Michi, ich habe mir die DB angesehen, verstehe aber nicht, was genau da passieren soll. Okay, in den dynamischen Auswahlfeldern (DAF) der Tabelle 'Einsatzplan' sollen offenbar immer nur die Personen angezeigt werden, die in keinem der anderen Auswahlfelder ausgewählt wurden. Das funktioniert ja auch.

     

    Auf den Button in der Tabelle 'Personal' schreibst du "Funktioniert nur mit einem  Fahrer". Das ist klar, denn das DAF 'Urlaub' ist ja ein einfaches, bei dem immer nur ein Eintrag ausgewählt sein kann. Wollte man dort mehrere Einträge markieren, müsste man ein dynamisches Mehrfachauswahlfeld (DMFAF) nehmen. Bei dem wäre allerdings die Zuweisung recht kompliziert. Siehe
    https://ninox.com/de/forum/technische-hilfe-5ab8fe445fe2b42b7dd39ee8/dynamische-auswahlfelder-in-skripten-nutzen-605a1334b7e1d62b6241a1a7

     

    Ich würde aber sowieso einen anderen Ansatz wählen. Die Einsatzplanung bezieht sich ja sicher auf ein bestimmtes Datum. An anderer Stelle werden Abwesenheiten mit Von-/Bis-Daten eingetragen. Da böte sich an, diese Werte miteinander zu vergleichen und in der Tabelle 'Einsatzplan' im DAF 'Fahrer' von vornherein nur die Personen anzuzeigen, die an dem betreffenden Tag verfügbar, also nicht "krank" oder "im Urlaub" sind.

     

    Ich weiß nicht, ob es dein Problem löst, aber ich habe das als Beispiel mal so in der DB umgesetzt (Tabellen mit "NEU" am Ende). Vielleicht hilft es weiter.

     

    https://www.dropbox.com/s/5628cdb6jupb4sg/PEP_Michi.ninox?dl=0

     

    PS: Bei der select-Abfrage im DAF der Einsatzplanung hat Leo geholfen. Ich hatte gestern ein ähnliches Problem und er hat mich auf die richtige Spur gebracht.

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

    Danke dir erst mal für deine Mühe 👍

    Der zeitliche Kontext fehlt natürlich noch. Geht nur erst mal darum zu testen was ich mit den DAF anstellen kann und wie ich sie ansprechen bzw auslesen kann. 

    Wenn ich zum Beispiel im einsatzplan jemand von der Reserve auf einen Fahrer setzen will, so kann ich ihn in der Reserve auf leer setzen und habe so die Auswahl ihn bei allen Fahrern einzusetzen. Was ja sehr übersichtlich mit den DAF jetzt geht. 

    Bekommt man einen urlaubsantrag, so soll dieser natürlich direkt beim ( personal ) eingetragen werden. Hier soll dann dementsprechend bei änderung der urlaubsdaten im Pep geschaut werden wo dieser eingesetzt ist. (Also alle Fahrer und die Reserve werden überprüft, wenn hier der Name des entsprechenden Fahrers enthalten ist, soll dieses DAF gelehrt werden. Danach der entsprechende Mitarbeiter in ein leeres DAF Urlaub eingetragen werden) das funktioniert eben leider nicht wenn ich alle Fahrer und die Reserve in ein array packen möchte. Wenn man explizit nur ein DAF anspricht funktioniert das. 

    Schau mir gerne deine db am Dienstag an, wünsche dir ein schönes Osterfest 

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

    Jetzt war ich doch neugierig. Leider ist mein problem immer noch da. 

    wie bekomm ich es hin alle DAF abzufragen, so das nur das eine was es betrift geändert wird. 

    let me := this;
    let ID := number(me.Nr);
    let array := first(select Einsatzplan).[number('Fahrer 1'), number('Fahrer 2')];
    let tabelle := (select Einsatzplan);
    tabelle[ID = array].(
    array := null;
    Urlaub := ID
    );

     

    es findet das entsprechende DAF , jedoch muss man extra manuell "leer" wählen. Wenn man dann auf Urlaub clickt oder neu läd erscheint das richtige ergebniss.

    Das soll mal in eine Globale funktion welche immer aufgerufen werden kann. 

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

    Fehler gefunden, das entsprechende DAF im array wird zwar angesprochen und die Auswahl ist leer (nichts eingetragen ) wenn man das DAF jedoch mit record ausliest , dann sieht man das die NR  nicht auf Null gesetzt ist. Wie bekommt man das denn hin ?

     

    Kann mir jemand helfen wie ich das Skript richtig schreiben muß ?

    let me := this;
    let ID := number(me.Nr);
    let array := first(select Einsatzplan).[number('Fahrer 1'), number('Fahrer 2')];
    let tabelle := (select Einsatzplan);
    tabelle[ID = array].(
    array := null;
    Urlaub := ID
    );

    • Leonid_Semik
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Hallo Michi,

    ich habe jetzt das ganze bestimmt schon 10 Mal durchgelesen und verstehe überhaupt nicht was du möchtest. Deine Datenbank hilft auch nicht weiter. Einsatzplan hat nur einen Datensatz und überhaupt kein Datumsfeld. Zu der Formel - wenn du die Tabelle Einsatzplan nach IDs aus dem Array filtern möchtest, dann würde ich es so versuchen:

    ---

    let myTAB:=for i in array do 

    record(Einsatzplan,i)

    end

    ---

    Was ich nicht verstehe, was ist das für ein Feld array in der Tabelle Einsatzplan?

    Leo

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

    Bildschirmfoto 2021-04-07 um 12.42.56

    So ist das derzeit mit Excel gelöst. Umständlich und Fehleranfällig. Ich würde es gern mit den DAF feldern lösen wollen. Hierzu wollte ich die DAF felder in ein array packen, da ich ja nicht weis wo welcher Fahrer eingestzt ist. 

    Es sind alle Fahrer eingetragen in der Tabelle. Ich bekomm von Michi (siehe Bild) einen Urlaubsantrag, trage diesen in Tabelle Namen ein. Nun soll das Skript in der Tabelle Einsatzplan nach Michi suchen, Ihn dort als Fahrer raus nehmen und in ein freies DAF Urlaub einsetzten 

    Die Tages bzw Wochen zuordnung ist noch nicht vorhanden... Es geht nur um das suchen - finden - auf null setzen - in Urlaub einsetzen 

    • Leonid_Semik
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Meiner Meinung nach, der größte Fehler was man bei Ninox machen kann ist es sich die Excel Tabellen als Beispiel zu nehmen. Die flachen excel strukturen sind für Kalkulationen gut, ansonsten nicht zu gebrauchen. Es steht doch bei dir,  oben Datum und KW, das heißt die DB soll so aufgebaut werden dass mach die Einsatzplannung für diese Urlaubstage und diesen Fahrer sperrt. Wenn du einfach die Funktionalität überprüfen möchtest dann ist es bei drei Fahrer so:
    Du befindest dich in der Tabelle Fahrer:

    ---

    let myID:=number(Nr);
    let myChoice:=select Einsatzplanung[number('Fahrer 1')=myID or number( 'Fahrer 2')=myID or number( 'Fahrer 3')=myID];
    for i in myChoice do
    if number('Fahrer 1')=myID then
    i.( 'Fahrer 1':=null
    end;
    if number('Fahrer 2')=myID then
    i.( 'Fahrer 1':=null
    end;
    if number('Fahrer 3')=myID then
    i.( 'Fahrer 1':=null
    end;
    i.Urlaub:=myID
    end

    ---

     

    Leo

    • Leonid_Semik
    • vor 3 Jahren
    • Gemeldet - anzeigen

    let myID:=number(Nr);
    let myChoice:=select Einsatzplanung[number('Fahrer 1')=myID or number( 'Fahrer 2')=myID or number( 'Fahrer 3')=myID];
    for i in myChoice do
    if i.number('Fahrer 1')=myID then
    i.'Fahrer 1':=null
    end;
    if i.number('Fahrer 2')=myID then
    i.'Fahrer 2':=null
    end;
    if i.number('Fahrer 3')=myID then
    i. 'Fahrer 3':=null
    end;
    i.Urlaub:=myID
    end

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

    Danke dir erst mal Leo,

    von dem blöden Excel will ich ja weg! Da das Personal ja eh schon in der DB ist, mit Urlaubs und Krankentagen, wollt ich dies natürlich mit einbinden. Insgesamt sind das dann aber halt 140 DAF für die Fahrer!! (Da wird das Skript ellen lang)  Daher wollt ich eben einen anderen weg finden diese anzusprechen. Diese in ein Array packen um so zu suchen, was ja auch funktioniert, Ninox findet das betrefende DAF Fahrer, setzt dies aber eben nicht auf Null. (DAF ist optisch leer, jedoch bleibt die NR bestehen)

    Am ende soll man ja die Fahrer frei "umherschieben" können für die Planung zum einem, zum anderen sollen die Fahrer eben bei Krankschreibung oder Urlaub automatisch in die betreffenden felder gesetzt werden. Dies geschieht zur zeit alles noch per hand, was sehr "unangenehm" ist. Der vorteil der jetzt verfügbaren DAF ist das immer nur der Fahrer zur "Auswahl" steht, welcher in keinem anderen DAF ausgewählt ist.

    • Leonid_Semik
    • vor 3 Jahren
    • Gemeldet - anzeigen

    140 DAF in einem Datensatz?

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

    Ja 😲,

    Daher wollt ich ja schauen was wie geht. Soll so wie ein Dashboard werden. Ob dies überhaupt geht weis ich nicht. Das Angebot für frei programmiert (kein ninox) liegt bei 25.000. Das steht in keinem Kosten/ nutzen Verhältnis 😢

    Es soll halt optisch für die Planung helfen und gleichzeitig die Daten von Urlaubs und kranktagen berücksichtigen. 

    Bin für jeden Vorschlag offen. Planung erfolgt wochenweise.

    • Leonid_Semik
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Hallo Michi,

    Kann ich mir beim besten Willen nicht vorstellen dass so viele DAF für diese Aufgabe nötig sind. Ich habe zwar noch nicht gründlich getestet  aber die DAFs bsieren auf select Anweisungen. Wenn du 140 Select Anweisungen in einem Datensatz hast und dann die Tabelle mit 100 Datensätze laden möchtest...Aber wozu 140? Drei Fahrer, Krank, Urlaub, reserve was noch?  Ist das wichtig ob ein Michi der Fahrer 1, Fahrer 2 oder Fahrer 3 ist? Wenn nicht, dann würde ich ein Dynamischen Mehrfachuswahl zum Auswählen verwenden, die Auswahl aber direkt in eine Untertabelle schreiben.
    Dann noch die Tabele für abwesenheiten wo alle Abwesenheiten mit Anfangs- und Enddatum pro Person aufgelistet werden. Noch besser (für die Berechnungen) eine n:m Tabelle mit einem Datensatz pro Tag und Mitarbeiter und Abwesenheitsart. 
    Frag doch einen der Ninox Partner oder schreib an Ninox-support. Dann findet eine Ausschreibung statt und du kannst für dich den passenden Partner auswählen.

    Leo

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

    Die Übersicht wird so benötigt : 

    Bildschirmfoto 2021-04-08 um 09.28.13

    • Leonid_Semik
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Also es sind, wenn überhaupt, max. 7 Auswahlfelder pro Datensatz. So eine Excel-Tabelle kannst du natürlich nicht in ninox 1:1 nachbauen (allein wegen Gruppierungen).
    Ich würde es aber lieber mit Tabellen-Verknüpfungen realisieren. Diese lassen sich auch als Auswahlfelder darstellen, sind aber bei der späteren Bearbeitung wesentlich schneller bei Berechnungen. Von Vorgehensweise würde ich wie gesagt die Fahrer mit einem Mehrfachauswahlfeld auswählen. Für reserve auch. Die Spalten Krank und Urlaub würde ich komlett entfernen und stattdessen die Farbmarkierungen bei Fahrer benutzen. So sieht man sofort on ein geplanter Fahrer Verfügbar, krank oder im Urlaub ist. Und man kann bei der Abwesenheitsmeldung auch sofort anzeigen lassen wo der Fahrer für diesen Zeitraum geplant ist.
    Ich glaub schon, dass es von einem Ninox-Partner realisierbar ist.

    Leo

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

    Danke Dir