Zusammengesetztes Array mit 2 werten vergleichen
- Michi.1
- vor 1 Jahr
- 22Antworten
- Answered
Hallo,
wie kann ich denn das zusammengesetzte array, welches von zwei DMFA gefüllt wird, mit der Tabelle vergleichen? Ich bekomme das nur bei einem Wert hin. Sobald man beide Werte vergleichen möchte, geht es nicht mehr. Dabei spielt es keine Rolle, welcher Wert es ist.
let daten := (select Dashboard);
let vArray1 := [];
let vArrayObj1 := [];
let vObj1 := "";
for j in numbers(Jahr) do
vObj1 := concat(record(Jahr,j).text(Jahr));
vArrayObj1 := [vObj1];
vArray1 := array(vArray1, vArrayObj1)
end;
let vArray := [];
let vArrayObj := [];
let vObj := "";
for j in numbers(Monat) do
vObj := concat(record(Monat,j).text(Zahl));
vArrayObj := [vObj];
vArray := array(vArray, vArrayObj)
end;
let vArrayMOJA := array(vArray, vArray1);
"/
//ergibt ein Array aus gewählten Monat & Jahr
//formatJSON(vArrayMOJA)=["1","2","3","4","2024","2025","2026"]
/"
for i in vArrayMOJA do
let AA := (daten[year('Datum beginn') = i][month('Datum beginn') = i] order by 'Datum beginn');
for aa in AA do
"/
// weiterverarbeitung für html Tabelle
/"
22 Antworten
-
- Michi.1
- vor 1 Jahr
- Gemeldet - anzeigen
Hab mal eine Test-DB angefügt. Ziel soll es werden die Termine in der HTML-Tabelle angezeigt zu bekommen, wenn die Dauer z. B. 3 Tage ist, dann soll auch jeder Tag einzeln angezeigt werden und farbig hervorgehoben sein, oder dass die betreffende Zeile höher wird in der HTML-Tabelle mit den entsprechenden Wochentagen. So in der Art. Gerne auch andere Ideen.
Name Datum. Wochentag
Paul. 14.05.2023. Samstag
Müller. 17.07.2023. Montag
18.07.2023. Dienstag
Ich bekomme es einfach nicht hin.
-
- truthein
- vor 1 Jahr
- Gemeldet - anzeigen
Ich denke nicht, dass das das Probleme nun löst, aber jedenfalls sieht das für mich so aus, dass
(daten[year('Datum beginn') = i][month('Datum beginn') = i]
nach Datensätzen filtert, die Jahresnummer = i *und* Monatsnummer = i haben, solche Datensätze gibt es dann nicht.
Du brauchst vermutlich zwei ineinandergeschachtelte for-Schleifen für Jahr und Monat. Ob das aber klappt weiss ich auch nicht, denn ich verstehe nicht, welche Kombinationen du definieren möchtest, alle Monate in allen Jahren? Und sind die Namen Eigenschaften der Jahre oder wie ich vermute eher die Jahre Eigenschaften der Namen? So dass Peter an diesem Datum und Paul an jenem, so dass das nach einer Schleife über die Namen «riecht» ... ok, mehr fällt mir nicht ein, sorry, aber das mit den zwei Schleifen wollte ich halt noch sagen - vielleicht bringt's ein bisschen was.
-
- Michi.1
- vor 1 Jahr
- Gemeldet - anzeigen
so geht es ansatzweise für den ersten Tag, aber nicht bei mehrtägigen Sachen und es werden immer "," über die Tabelle geschrieben. Die zwei dmfa Jahr & Monat geben mir die anzuzeigenden Monate & Jahre als Text aus. year(datum) zb.:23 und month(datum) zb.: 7 geben mir die Parameter zurück, welche verglichen werden sollen.
bspw.: gewählt ist Jahr 2023 und Monat Juli, so hat man von den dmfa die werte 23 & 7 dies wird oder soll mit dem Datum von dem Termin verglichen werden, fällt da ein Termin rein, so wird er angezeigt, da die Bedingung erfüllt ist.
for j in numbers(Jahr) do for t in numbers(Monat) do let AA := (daten[year('Datum beginn') = record(Jahr,j).Jahr and month('Datum beginn') = record(Monat,t).Zahl] order by 'Datum beginn'); for aa in AA do
-
- Leonid_Semik.2
- vor 1 Jahr
- Gemeldet - anzeigen
Mir ist nicht besonders klar, wozu das Ganze gut sein sollte.
Aber grundsätzlich ist so, dass man hier zuerst die Tabelle mit Terminen über Chosen eingrenzen sollte. Danach muss man die Tabelle durchlaufen und bei jedem Datum innerhalb start und Ende wieder prüfen ob das Datum angezeigt werden sollte (es gibt bei dir auch Termine mit mehreren Monaten).
Habe jetzt so ein Model für dich (fx-Feld):
let myYearsItem := {}; for i in (select Jahr) order by Jahr do setItem(myYearsItem, i.Jahr, number(i.Id)) end; let me := this; let y := Jahr; let m := Monat; let myChoice := (select Dashboard where (not y or chosen(me.Jahr, number(item(myYearsItem, text(year('Datum beginn'))))) or chosen(me.Jahr, number(item(myYearsItem, text(year('Datum ende')))))) and (not m or chosen(me.Monat, number(month('Datum beginn'))) or chosen(me.Monat, number(month('Datum ende'))))); let myObject := myChoice.{ nid: raw(Id), name: Name, date: join(for i in range(days('Datum beginn', 'Datum ende') + 1) do let myDate := date(year('Datum beginn'), month('Datum beginn'), day('Datum beginn') + i); if (not y or chosen(me.Jahr, number(item(myYearsItem, text(year(myDate)))))) and (not m or chosen(me.Monat, number(month(myDate)))) then format(myDate, "DD.MM.YYYY") end end, "<br>") }; let start := " <style> table{ width:100%; } .tableFixHead { overflow-y: auto; height: 378px; } .right { text-align: right } .center { text-align: center } th { font-size:small; padding: .1em .5em .1em .5em; border-radius: .3em .3em .3em .3em; vertical-align: top; } td{ font-size:small; background-color: #DFDFDF; padding: .1em .5em .1em .5em; border-radius: .3em .3em .3em .3em; vertical-align: top; } thead,tfoot{ background-color:#DFDFDF; position: sticky; font-size:small; } thead { top: -.2em; text-align:center; } tfoot{ bottom: -.2em; } tr:nth-child(odd) td{ /*ungerade Zeile einfärben*/ background-color: rgb(240,240,240); } </style> <table ><thead> <tr> <th> Name </th> <th> Datum </th> <th> Button </th> </tr> </thead><tbody>"; let mitte := for i in myObject do "<tr> <td style=background-color: >" + i.name + " </td> <td style=background-color: >" + i.date + " </td> <td style=background-color:" + --- border="" "> <button onclick="ui.popupRecord('{ i.nid }')">{ "wählen" }</button> --- + " </td> </tr>" end; html(start + mitte)
LG
Leo -
- Leonid_Semik.2
- vor 1 Jahr
- Gemeldet - anzeigen
Habe jetzt festgestellt, dass diese Formel nur funktioniert, wenn die Angeklagten Monaten am Anfang oder am ende des Termins sitzen. Anbei die Korrigierte Formel:
let myYearsItem := {}; for i in (select Jahr) order by Jahr do setItem(myYearsItem, i.Jahr, number(i.Id)) end; let me := this; let y := Jahr; let m := Monat; let myObject := do as server (select Dashboard).{ nid: raw(Id), name: Name, date: join(for i in range(days('Datum beginn', 'Datum ende') + 1) do let myDate := date(year('Datum beginn'), month('Datum beginn'), day('Datum beginn') + i); if (not y or chosen(me.Jahr, number(item(myYearsItem, text(year(myDate)))))) and (not m or chosen(me.Monat, number(month(myDate)))) then format(myDate, "DD.MM.YYYY") end end, "<br>") } end; myObject := myObject[date]; let start := " <style> table{width:100%;} .tableFixHead {overflow-y: auto;height: 378px;} .right {text-align: right} .center {text-align: center} th {font-size:small;padding: .1em .5em .1em .5em;border-radius: .3em .3em .3em .3em;vertical-align: top;} td{ font-size:small;background-color: #DFDFDF; padding: .1em .5em .1em .5em;border-radius: .3em .3em .3em .3em;vertical-align: top;} thead,tfoot{background-color:#DFDFDF;position: sticky;font-size:small;} thead { top: -.2em; text-align:center; } tfoot{bottom: -.2em;} tr:nth-child(odd) td{ /*ungerade Zeile einfärben*/ background-color: rgb(240,240,240);} </style> <table ><thead> <tr> <th> Name </th> <th> Datum </th> <th> Button </th> </tr> </thead><tbody>"; let mitte := for i in myObject do "<tr> <td style=background-color: >" + i.name + " </td> <td style=background-color: >" + i.date + " </td> <td style=background-color:" + --- border="" "> <button onclick="ui.popupRecord('{ i.nid }')">{ "wählen" }</button> --- + " </td> </tr>" end; html(start + mitte)
-
- Michi.1
- vor 1 Jahr
- Gemeldet - anzeigen
danke dir.
Es soll am ende eine übersichtliche Aufstellung von Terminen werden, für einen über die Auswahl festgelegten Anzeige Zeitraum. Hier soll auch einfach zu sehen sein ob mehrere Termine an betreffenden Tagen sind. Termine werden schon teilweise 2 Jahre im voraus gebucht. Irgendwie möchte ich es halt übersichtlich bekommen, so das man am ende mit einem Blick sehen kann wo ist die Veranstaltung, wie viele Personen, was für Wochentage, Name, Anlass.... Die wichtigsten dinge halt. Wie ich das wirklich klug abbilden kann weis ich selber nicht, da kam mir die Idee hier.
In der tabelle Dashboard selber hab ich als bezug halt nur Datum beginn und Datum ende.
Über monate geht keine Veranstaltung. Meistens für einen Tag, bei größeren sachen sind es mal 3 tage. Aber zum glück eher selten.
Grüße Michi
-
- Michi.1
- vor 1 Jahr
- Gemeldet - anzeigen
Ninox warnt zwar schon beim Angebot erstellen, das an den betreffenden Tag oder in dem Zeitraum weiter Termine sind und zeigt diese an, doch da ist es schon ziemlich spät. Daher die Aufstellung der Termine, so das man beim besprechen schon sieht, da hab ich noch Kapazitäten weil kleinere sachen anliegen, oder ich kann an besagten Tag keine feier ausstatten da die Location schon gebucht ist.
-
- Michi.1
- vor 1 Jahr
- Gemeldet - anzeigen
es funktioniert wunderbar. Vielleicht kannst mir ja noch mal helfen?
Das erste ist die Wochentag anzeige auf Deutsch hinzubekommen.
Das zweite ist die Sache mit dem Hinweis auf mehrerer Veranstaltungen an einem Tag, sodass sofort das Auge darauf aufmerksam wird. Vielleicht kann man ja irgendwie so was wie im Bild realisieren, gerne nehme ich auch andere Ideen.
let myYearsItem := {}; for i in (select Jahr) order by Jahr do setItem(myYearsItem, i.Jahr, number(i.Nr)) end; let me := this; let y := Jahr; let m := Monat; let myObject := do as server (select Dashboard).{ nid: raw(Nr), name: Kunde.Firma + Kunde.Name, art: 'Bitte art der Feier eingeben', ort: text('Ort der Veranstaltung wählen'), Pers: "Erwachsene: " + Erwachsene + " / " + "Kinder: " + 'Kinderzahl unter 12', wert: 'Brutto Gesamt', anzahl: "", tag: join(for i in range(days('Datum beginn', 'Datum ende') + 1) do let myDate := date(year('Datum beginn'), month('Datum beginn'), day('Datum beginn') + i); if (not y or chosen(me.Jahr, number(item(myYearsItem, text(year(myDate)))))) and (not m or chosen(me.Monat, number(month(myDate)))) then weekdayName(myDate) end end, "<br>"), date: join(for i in range(days('Datum beginn', 'Datum ende') + 1) do let myDate := date(year('Datum beginn'), month('Datum beginn'), day('Datum beginn') + i); if (not y or chosen(me.Jahr, number(item(myYearsItem, text(year(myDate)))))) and (not m or chosen(me.Monat, number(month(myDate)))) then format(myDate, "DD.MM.YYYY") end end, "<br>") } end; myObject := myObject[date]; let start := " <style> table{ width:100%; } .tableFixHead { overflow-y: auto; height: 378px; } .right { text-align: right } .center { text-align: center } th { font-size:small; padding: .1em .5em .1em .5em; border-radius: .3em .3em .3em .3em; } td{ font-size:small; background-color: #2EFE2E; padding: .1em .5em .1em .5em; border-radius: .3em .3em .3em .3em; } thead,tfoot{ background-color:#A4A4A4; position: sticky; font-size:small; } thead { top: -.2em; text-align:center; } tfoot{ bottom: -.2em; } tr:nth-child(odd) td{ /*ungerade Zeile einfärben*/ background-color: #FAFAFA; } </style> <table ><thead> <tr> <th> Name </th> <th> Datum </th> <th> Wochentag </th> <th> Feiern an einem Tag </th> <th> Veranstaltungsart </th> <th> Veranstaltungsort </th> <th> Personen </th> <th> Wert </th> <th> zum Auftrag </th> </tr> </thead><tbody>"; let mitte := for i in myObject do "<tr> <td style=background-color:> " + i.name + " </td> <td style=background-color: >" + i.date + " </td> <td style=background-color: >" + i.tag + " </td> <td style=background-color: >" + i.anzahl + " </td> <td style=background-color: >" + i.art + " </td> <td style=background-color: >" + i.ort + " </td> <td style=background-color: >" + i.Pers + " </td> <td style=background-color: >" + i.wert + " </td> <td style=background-color:" + --- border="" "> <button onclick="ui.popupRecord('{ i.nid }')">{ "wählen" }</button> --- + " </td> </tr>" end; html(start + mitte)
-
- Rafael_Sanchis
- vor 1 Jahr
- Gemeldet - anzeigen
Michi Hi Michi.
Is it possible to share your DB, appreciate.
-
- Leonid_Semik
- vor 1 Jahr
- Gemeldet - anzeigen
zum erstenweekdayName(myDate, "de")
-
- Leonid_Semik
- vor 1 Jahr
- Gemeldet - anzeigen
let myYearsItem := {}; for i in (select Jahr) order by Jahr do setItem(myYearsItem, i.Jahr, number(i.Nr)) end; let me := this; let y := Jahr; let m := Monat; let myObject := do as server (select Dashboard).{ nid: raw(Nr), name: Kunde.Firma + Kunde.Name, art: 'Bitte art der Feier eingeben', ort: text('Ort der Veranstaltung wählen'), Pers: "Erwachsene: " + Erwachsene + " / " + "Kinder: " + 'Kinderzahl unter 12', wert: 'Brutto Gesamt', anzahl: "", dateNumber: join(for i in range(days('Datum beginn', 'Datum ende') + 1) do let myDate := date(year('Datum beginn'), month('Datum beginn'), day('Datum beginn') + i); if (not y or chosen(me.Jahr, number(item(myYearsItem, text(year(myDate)))))) and (not m or chosen(me.Monat, number(month(myDate)))) then text(number(myDate)) end end, "<br>"), date: join(for i in range(days('Datum beginn', 'Datum ende') + 1) do let myDate := date(year('Datum beginn'), month('Datum beginn'), day('Datum beginn') + i); if (not y or chosen(me.Jahr, number(item(myYearsItem, text(year(myDate)))))) and (not m or chosen(me.Monat, number(month(myDate)))) then format(myDate, "DD.MM.YYYY") end end, "<br>") } end; myObject := myObject[date]; let datesArray := split(join(myObject.text(dateNumber), "<br>"), "<br>"); let datesOb := for i in datesArray do { dateNumber: i } end; let dubles := {}; for i in unique(datesArray) do if cnt(datesOb[text(dateNumber) = text(i)]) > 1 then setItem(dubles, text(i), true) end end; for i in myObject do let newTag := join(for k in split(text(i.dateNumber), "<br>") do weekdayName(number(k), "de") + if item(dubles, text(k)) then " ︎" else "" end end, "<br>"); setItem(i, "tag", newTag) end; let start := " <style> table{ width:100%; } .tableFixHead { overflow-y: auto; height: 378px; } .right { text-align: right } .center { text-align: center } th { font-size:small; padding: .1em .5em .1em .5em; border-radius: .3em .3em .3em .3em; } td{ font-size:small; background-color: #2EFE2E; padding: .1em .5em .1em .5em; border-radius: .3em .3em .3em .3em; } thead,tfoot{ background-color:#A4A4A4; position: sticky; font-size:small; } thead { top: -.2em; text-align:center; } tfoot{ bottom: -.2em; } tr:nth-child(odd) td{ /*ungerade Zeile einfärben*/ background-color: #FAFAFA; } </style> <table ><thead> <tr> <th> Name </th> <th> Datum </th> <th> Wochentag </th> <th> Feiern an einem Tag </th> <th> Veranstaltungsart </th> <th> Veranstaltungsort </th> <th> Personen </th> <th> Wert </th> <th> zum Auftrag </th> </tr> </thead><tbody>"; let mitte := for i in myObject do "<tr> <td style=background-color:> " + i.name + " </td> <td style=background-color: >" + i.date + " </td> <td style=background-color: >" + i.tag + " </td> <td style=background-color: >" + i.anzahl + " </td> <td style=background-color: >" + i.art + " </td> <td style=background-color: >" + i.ort + " </td> <td style=background-color: >" + i.Pers + " </td> <td style=background-color: >" + i.wert + " </td> <td style=background-color:" + --- border="" "> <button onclick="ui.popupRecord('{ i.nid }')">{ "wählen" }</button> --- + " </td> </tr>" end; html(start + mitte)
-
- Michi.1
- vor 1 Jahr
- Gemeldet - anzeigen
jetzt will es leider nicht
-
- Rafael_Sanchis
- vor 1 Jahr
- Gemeldet - anzeigen
Hi Again, I have tried to modify your code for my needs but it is complicate for me, have problem with the lunes 10 to 15.
-
- Michi.1
- vor 1 Jahr
- Gemeldet - anzeigen
ich brauch ja selber hilfe um es ab zu bilden.
-
- Michi.1
- vor 1 Jahr
- Gemeldet - anzeigen
es erkennt die selben Daten. Jedoch werden diese nicht gezählt bzw. die nicht zutreffenden auch angezeigt.
-
- Leonid_Semik
- vor 1 Jahr
- Gemeldet - anzeigen
da habe ich nicht richtig verstandenen. In meinem Code habe ich bei Duplikaten neben Wochentag noch ein Pfeil gemacht. Mit Zählen ist es viel komplexer. muss ich nachdenken.
-
- Leonid_Semik
- vor 1 Jahr
- Gemeldet - anzeigen
let myYearsItem := {}; for i in (select Jahr) order by Jahr do setItem(myYearsItem, i.Jahr, number(i.Nr)) end; let me := this; let y := Jahr; let m := Monat; let myObject := do as server (select Dashboard).{ nid: raw(Nr), name: Kunde.Firma + Kunde.Name, art: 'Bitte art der Feier eingeben', ort: text('Ort der Veranstaltung wählen'), Pers: "Erwachsene: " + Erwachsene + " / " + "Kinder: " + 'Kinderzahl unter 12', wert: 'Brutto Gesamt', anzahl: "", dateNumber: join(for i in range(days('Datum beginn', 'Datum ende') + 1) do let myDate := date(year('Datum beginn'), month('Datum beginn'), day('Datum beginn') + i); if (not y or chosen(me.Jahr, number(item(myYearsItem, text(year(myDate)))))) and (not m or chosen(me.Monat, number(month(myDate)))) then text(number(myDate)) end end, "<br>"), date: join(for i in range(days('Datum beginn', 'Datum ende') + 1) do let myDate := date(year('Datum beginn'), month('Datum beginn'), day('Datum beginn') + i); if (not y or chosen(me.Jahr, number(item(myYearsItem, text(year(myDate)))))) and (not m or chosen(me.Monat, number(month(myDate)))) then format(myDate, "DD.MM.YYYY") end end, "<br>") } end; myObject := myObject[date]; let datesArray := split(join(myObject.text(dateNumber), "<br>"), "<br>"); let datesOb := for i in datesArray do { dateNumber: i } end; let dubles := {}; for i in unique(datesArray) do if cnt(datesOb[text(dateNumber) = text(i)]) > 1 then setItem(dubles, text(i), 1) end end; for i in myObject do let newTag := join(for k in split(text(i.dateNumber), "<br>") do weekdayName(number(k), "de") end, "<br>"); let newEvent := join(for k in split(text(i.dateNumber), "<br>") do let myItem := number(item(dubles, text(k))); if myItem then myItem := myItem + 1; setItem(dubles, text(k), myItem); "event " + (myItem - 1) + " am " + weekdayName(number(k), "de") + " " + format(date(number(k)), "DD.MM.YYYY") else "" end end, "<br>"); setItem(i, "tag", newTag); setItem(i, "event", newEvent); debug(formatJSON(dubles)) end; let start := " <style> table{ width:100%; } .tableFixHead { overflow-y: auto; height: 378px; } .right { text-align: right } .center { text-align: center } th { font-size:small; padding: .1em .5em .1em .5em; border-radius: .3em .3em .3em .3em; } td{ font-size:small; background-color: #2EFE2E; padding: .1em .5em .1em .5em; border-radius: .3em .3em .3em .3em; } thead,tfoot{ background-color:#A4A4A4; position: sticky; font-size:small; } thead { top: -.2em; text-align:center; } tfoot{ bottom: -.2em; } tr:nth-child(odd) td{ /*ungerade Zeile einfärben*/ background-color: #FAFAFA; } </style> <table ><thead> <tr> <th> Name </th> <th> Datum </th> <th> Wochentag </th> <th> Feiern an einem Tag </th> <th> Veranstaltungsart </th> <th> Veranstaltungsort </th> <th> Personen </th> <th> Wert </th> <th> zum Auftrag </th> </tr> </thead><tbody>"; let mitte := for i in myObject do "<tr> <td style=background-color:> " + i.name + " </td> <td style=background-color: >" + i.date + " </td> <td style=background-color: >" + i.tag + " </td> <td style=background-color: >" + i.event + " </td> <td style=background-color: >" + i.art + " </td> <td style=background-color: >" + i.ort + " </td> <td style=background-color: >" + i.Pers + " </td> <td style=background-color: >" + i.wert + " </td> <td style=background-color:" + --- border="" "> <button onclick="ui.popupRecord('{ i.nid }')">{ "wählen" }</button> --- + " </td> </tr>" end; html(start + mitte)
-
- Michi.1
- vor 1 Jahr
- Gemeldet - anzeigen
einfach nur geil, eins ist noch.
Die Ordnung beim Datum passt noch nicht, weis aber nicht wie ich oder wo ich order by oder sort einfügen müste. Sehe ja so schon nicht mehr durch.
-
- Michi.1
- vor 1 Jahr
- Gemeldet - anzeigen
noch besser, deine beiden varianten zusammen
-
- Leonid_Semik.2
- vor 1 Jahr
- Gemeldet - anzeigen
let myObject := do as server (select Dashboard order by 'Datum beginn').{ nid: raw(Nr), name: Kunde.Firma + Kunde.Name, art: 'Bitte art der Feier eingeben', ..............
-
- Michi.1
- vor 1 Jahr
- Gemeldet - anzeigen
Danke dir noch mal für die tolle hilfe!
-
- Rafael_Sanchis
- vor 1 Jahr
- Gemeldet - anzeigen
Will I be lucky today?
Content aside
- Status Answered
- vor 1 JahrZuletzt aktiv
- 22Antworten
- 163Ansichten
-
4
Folge bereits