mehrere Datensätze in einer Tabelle erzeugen mit den Angaben aus einem Mehrfachauswahlfeld
Hallo!
Vielleicht kann mir jemand helfen...
Aus einer Tabelle sollen auf Buttonklick Felder in eine andere übertragen werden.
Eines dieser Felder ist ein Mehrfachauswahlfeld.
Sind in diesem Feld beispielsweise drei Optionen angewählt, dann sollen drei Datensätze erstellt werden.
Das funktioniert auch schon.
Aber es soll in jedem neuen Datensatz nur eine der ausgewählten Optionen dargestellt werden.
Im Moment werden in jeden neuen Datensätze ALLE gewählten Monate übertragen.
let myKurs := this.Nr;
let myTeilnehmer := 'Hundeführer';
let myHund := Hund;
let myStatus := text(Status);
let myMonat := 'gewählte Sommermonate';
let myMonatsanzahl := 'Anzahl gewählte Sommermonate';
for i in range(myMonatsanzahl) do
let myZE := (create Zahlungserinnerungen);
myZE.(Kursbezeichnung := myKurs.(Kursdetails.Kursbezeichnung + ", " + Kursdetails.Wochentag + ", " + Kursdetails.Beginn + ", " + Kursdetails.Trainer.Mitglied.Vorname + " " + Kursdetails.Trainer.Mitglied.Nachname));
myZE.(Teilnehmer := myTeilnehmer.(Vorname + " " + Nachname));
myZE.(Hund := myHund.Rufname);
myZE.(Status := myStatus);
myZE.('für Monat' := myMonat);
popupRecord(myZE)
end
Mit diesem Code werden zwar entsprechend viele Datensätze in der neuen Tabelle erzeugt, aber es werden immer alle gewählten Monate in jedem Datensatz eingetragen.
Ich hätte aber gerne für jedes Monat einen einzelnen Datensatz.
Also wenn die Monate Mai, Juni und August ausgewählt sind, dann soll ein Datensatz mit Mai, ein Datensatz mit Juni und ein Datensatz mit August angelegt werden.
Wie kann ich auf die jeweiligen Auswahlen zugreifen?
Danke!
Lg,
Wolfgang
7 Antworten
-
Hallo Wolfgang,
ich probier's mal aus der Hüfte:
let myKurs := this.Nr;
let myTeilnehmer := 'Hundeführer';
let myHund := Hund;
let myStatus := text(Status);
let myMonate := chosen('gewählte Sommermonate');
let myMonatsanzahl := cnt(chosen('Anzahl gewählte Sommermonate'));
for i in range(myMonatsanzahl) do
let myZE := (create Zahlungserinnerungen);
myZE.(Kursbezeichnung := myKurs.(Kursdetails.Kursbezeichnung + ", " + Kursdetails.Wochentag + ", " + Kursdetails.Beginn + ", " + Kursdetails.Trainer.Mitglied.Vorname + " " + Kursdetails.Trainer.Mitglied.Nachname));
myZE.(Teilnehmer := myTeilnehmer.(Vorname + " " + Nachname));
myZE.(Hund := myHund.Rufname);
myZE.(Status := myStatus);
myZE.('für Monat' := item(myMonat,i-1);
end
das popupRecord() wird bei mehreren erstellen Datensätzen nicht zum Ziel führen, deshalb hab ich's weggelassen. Code nicht geprüft, daher ohne Gewähr. ;)
lg, Torsten
-
örgs, und direkt einen Typo entdeckt, es sollte in der vorletzten Zeile heissen:
myZE.('für Monat' := item(myMonate,i-1);
lg, Torsten
-
Hallo Wolfgang, Hallo Torsten,
wie sehen den die Felder 'gewählte Sommermonate' und 'für Monat' aus? sind es beide Mehrfachauswahlfelder? Wenn Ja, welche Monate sind dort gespeichert? und unter welcher ID?
Problem ist es: man kann dem Mehrfachauswahlfeld die Werte per skript nur als ein Array mit IDs übergeben. Wenn die beiden Felder die volle Anzahl der Monaten haben, dann sollte der Skript vielleicht so aussehen:
---
let my := this;
for i in numbers( 'gewählte Sommermonate') do
let myZE := (create Zahlungserinnerungen);
myZE.(
Kursbezeichnung := my.Kursdetails.(Kursbezeichnung + ", " + Wochentag + ", " + Beginn + ", " + Trainer.Mitglied.(Vorname + " " + Nachname));
Teilnehmer := my.Teilnehmer.(Vorname + " " + Nachname));
Hund := my.Hund.Rufname;
Status := my.Status;
'für Monat' := i)
end
---
Das gilt wie gesagt nur wenn beide Mehrfachauswahlfelder die Monate von Jan bis Dez haben. Wenn bei 'gewählte Sommermonate' nur die drei Sommermonaten forhanden sind, müsste man die IDs präparieren.
Leo
-
Hallo Torsten, hallo Leo!
Ich habe das Skript ein wenig anpassen müssen. numbers('gewählte Sommermonate) funktioniert nicht. Fehlermeldung numbers[string]Nur das Feld 'gewählte Sommermonate' ist ein Mehrfachauswahlfeld mit den Auswahlmöglichkeiten für Mai - September. Das Feld 'gewählte Monate' in der Zieltabelle ist ein einfaches Textfeld. Wo die beiden Monate am besten mit einem Beistrich getrennt eingetragen werden sollen.
Mit diesem Code habe ich immerhin ein Ergebnis geschafft:
let myKurs := this.Nr;
let myTeilnehmer := 'Hundeführer';
let myHund := Hund;
let myStatus := text(Status);
let myMonat := 'gewählte Sommermonate';
let myMonatsanzahl := 'Anzahl gewählte Sommermonate';
if myMonatsanzahl > 1 then
for i in myMonat do
let my := this;
let myZE := (create Zahlungserinnerungen);
myZE.(
Kursbezeichnung := my.Kursdetails.(Kursbezeichnung + ", " + Wochentag + ", " + Beginn + ", " + Trainer.Mitglied.(Vorname + " " + Nachname));
myZE.(Teilnehmer := my.'Hundeführer'.(Nachname + " " + Vorname));
myZE.(Hund := my.Hund.Rufname);
myZE.(Status := text(my.Status));
myZE.('für Monat' := i)
)
endAber das Ergebnis ist noch nicht ganz das, was ich wollte:
Auch nicht schlecht, Absichtlich hätt ich das nie geschafft :)
Habt ihr vielleicht noch eine Idee?
LG und Danke! -
Da hab ich jetzt eine falsche Erklärung geschrieben!!!
!!! Falsch: ....Das Feld 'gewählte Monate' in der Zieltabelle ist ein einfaches Textfeld. Wo die beiden Monate am besten mit einem Beistrich getrennt eingetragen werden sollen.....
!!! Richtig: Das Feld 'gewählte Monate' in der Zieltabelle ist ein einfaches Textfeld. Wo jeweils die einzelnen Monate in einem eigenen Datensatz abgelegt werden sollen ! -
Und noch ein Fehler in meiner Erklärung:
das Feld 'gewählte Sommermonate' ist ein Mehrfachauswahlfeld - stimmt nicht.
Dieses Feld ist ein Funktionsfeld wo ich mittels
let myAuswahl := chosen('Sommermonate für Rechnung auswählen');
concat(myAuswahl)die ausgewählten Monate des Mehrfachauswahlfeldes 'Sommermonate für Rechnung auswählen' zusammengefasst habe!
Entschuldigt bitte die Fehler in der Erklärung...
-
Und jetzt wo ich die ganzen Probleme erkannt habe, habe ich den richtigen Code geschafft!!!
DANKE euch für eure Hilfe!
let myKurs := this;
let myTeilnehmer := 'Hundeführer';
let myHund := Hund;
let myStatus := text(Status);
let myMonat := 'gewählte Sommermonate';
let myMonate := 'Sommermonate für Rechnung auswählen';
let myMonatsanzahl := 'Anzahl gewählte Sommermonate';
if myMonatsanzahl > 1 then
for i in chosen(myMonate) do
let myZE := (create Zahlungserinnerungen);
myZE.(
Kursbezeichnung := myKurs.Kursdetails.(Kursbezeichnung + ", " + Wochentag + ", " + Beginn + ", " + Trainer.Mitglied.(Vorname + " " + Nachname));
myZE.(Teilnehmer := myKurs.'Hundeführer'.(Nachname + " " + Vorname));
myZE.(Hund := myKurs.Hund.Rufname);
myZE.(Status := text(myKurs.Status));
myZE.('für Monat' := i)
)
end
Content aside
- vor 5 JahrenZuletzt aktiv
- 7Antworten
- 2617Ansichten