Join(select) Variante um CNT() erweitern
ich lasse für eine Druckansicht Mitarbeiter herausfiltern die an einem gewissen Datum einen Dienstfrei sind.
dafür verwende ich diesen Code.
let my := this;
let myDate := Druckdatum;
join((select Diensttabelle where Datum = myDate and Auswahl = 2 and Wache = "KM").(Name + " " + Vorname + " " + Diensteinteilung.Personal.Dienstgrad), "
")
das funktioniert wunderbar.
Jetzt würde ich gerne diesen Code erweitern um die Funktion wenn mehrere Dienstfreie Tage aufeinander folgen(max 5 in Folge) diese Zahl dahinter Angefügt wird in dieser Darstellung.
let my := this;
let myDate := Druckdatum;
join((select Diensttabelle where Datum = myDate and Auswahl = 2 and Wache = "KM").(Name + " " + Vorname + " " + Diensteinteilung.Personal.Dienstgrad + " " + 'ANZAHL' + "x DF"), "
")
Österreicher Peter MEISTER 2x DF
Schweizer Hans Geselle 1x DF
Stellt sich das Problem das ich die Variable 'ANZAHL' vermutlich per cnt() in einer for 0-7 step 2 Schleife auslesen lannsen muss..
eventuell kennt einer ein Lösung dafür..
mfg
8 Antworten
-
ich möchte mal aufzeigen dürfen..
ich habe hier das ganze nochmals als Grafik wie ich mir das vorstelle es umzusetzten..
eventuell hatt doch einer einen Tipp für mich.. ich stehe def. an
-
ich habe es noch immer nicht ganz hin bekommen und habe nun den code umgeschrieben das zwar schon teilweise funktioniert aber bei der Berechnung bei IF in Verbindung mit SELECT falsch berechnet..
eventuell sieht jemand den Fehler..
let my := this;
let myDate := today();
let myDFPersAnz := 0;
let myDFPersKomp := "";
let myDFPersKomp1 := "";
let myDFAnz := 0;
let myPersArray := (select Diensttabelle where Datum = date(myDate) and Auswahl = 2).Name;
myDFPersAnz := cnt(select Diensttabelle where Datum = date(myDate) and Auswahl = 2);
for counter from 0 to myDFPersAnz do
if select Diensttabelle where Datum = date(myDate) and Auswahl = 0 and Name = item(myPersArray, counter) then
myDFAnz := 0;
for datecounter from 0 to 4 do
if select Diensttabelle where Datum = date(myDate + datecounter * 2) and Auswahl = 0 and Name = item(myPersArray, counter) then
myDFAnz := myDFAnz + 1;
myDFPersKomp := item(myPersArray, counter) + " " + myDFAnz + "x DF "
else
myDFPersKomp := item(myPersArray, counter) + " " + myDFAnz + "x DF "
end
end
end;
myDFPersKomp1 := myDFPersKomp1 + "
" + myDFPersKomp
end;
myDFPersKomp1so schaut das Ergebnis und die Tabelle aus.
übrigens der Titel Master ist nett gemeint aber an der Realität weit vorbei...:))) eher DAU danke der Nachfrage.. LEO bitte übernehmen sie .. Spaß beiseite es gibt x Gurus hier ...
-
Hallo Martin:
---
let myDay := Today();
join((select Diensttabelle)[Datum = myDay and Auswahl = 2].(Name + " " + (
let myName := Name;
if Auswahl = 2 then
let my := this;
let myMax := min((select Diensttabelle)[Name = myName and Datum > myDay and Auswahl = 1].Datum);
if myMax then
cnt((select Diensttabelle)[Name = myName and Datum >= myDay and Datum < myMax])
else
cnt((select Diensttabelle)[Name = myName and Datum >= myDay and Auswahl = 2])
end
end
) + "xDF"), "
")
---
Leo
-
Sorry Schreibfeler:
Erste Zeile
let myDay := today()
---
Habe Today() geschrieben
-
Mein Held, vielen Dank... ich habe mir das Historien-Protokoll angesehen und ich hoffe ich habe Dir keine schlaflose Nacht bereitet..
Ehrliche Meinung deinerseits.. das war schon ne Nuss.. zumindest für mich als Anfänger... den Master können sie mir wieder auf DAU ändern.. dass ist ja ein komplett anderer Ansatz..
Werde das ganze mal in mein Projekt fließen lassen..
Nochmals vielen Dank..
-
wurde eingepflegt und angepasst und schaut nun so aus..
let myDay := Druckdatum ;
join((select Diensttabelle)[Datum = myDay and Wache = "KM" and Auswahl = 2].(Name + " " + (
let myName := Name;
if Auswahl = 2 then
let my := this;
let myMax := min((select Diensttabelle)[Name = myName and Datum > myDay and Auswahl = 1].Datum);
if myMax then
cnt((select Diensttabelle)[Name = myName and Datum >= myDay and Datum < myMax])
else
cnt((select Diensttabelle)[Name = myName and Datum >= myDay and Auswahl = 2])
end
end
) + "x DF"), "
")funktioniert 1A
ich suche mir mal eine Selbsthilfegruppe ums zu verarbeiten das ich seit dem 22.1 das PRoblem nicht selber lösen konnte... nein Spaß beiseite.. tolle Arbeit vielen Dank nochmals.. auch nochmals an Hr Hansen der sich dem Problem auch angenommen hatte... ich hoffe er hat sich nicht aus dem Fenster gestürzt deswegen ;)
-
Hallo Martin,
danke für die Blumen . Es ist tatsächlich nicht trivial und ohne Datenbank eigentlich nicht zu lösen. Deswegen war es gut, dass du mich in dein Team eingeladen hast. Habe bis Mitternacht versucht zu verstehen wie das Problem angepackt werden kann und wofür man sowas überhaupt braucht. Du wirst lachen, ich bin heute mit der Idee aufgewacht, wie ich das ganze lösen kann. Mein Tipp für solche komplexe Aufgaben: einzelne Schritte als f(x) Felder anlegen und dann zusammenführen.
Leo
-
Hallo Leo, dass sind KEINE Blumen...die Wahrheit muss schon gesagt werden können auch und ich sehe das nicht als selbstverständlich an, was Du und andere auch hier an Hilfe leisten..
das mit den FX Feldern muss ich sogar anwenden, da es in Ninox keine Debuggingoption gibt..versuche dabei immer die Zwischenergebnisse anzuzeigen um Fehler zu vermeiden oder zu umschiffen..
Das mit der Einladung hat mir Birger Hansen als Tipp gegeben da ich erkennen musst nicht der beste Erklärbär zu sein um Probleme verständlich darzustellen was mir so scheints nicht mal mit der Tabellenansicht wirklich gelungen ist..
also nochmals, vielen vielen Dank dafür
Content aside
- vor 5 JahrenZuletzt aktiv
- 8Antworten
- 3329Ansichten