0

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

null
    • Torsten_Stang.1
    • vor 5 Jahren
    • Gemeldet - anzeigen

    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

    • Torsten_Stang.1
    • vor 5 Jahren
    • Gemeldet - anzeigen

    örgs, und direkt einen Typo entdeckt, es sollte in der vorletzten Zeile heissen:

     

    myZE.('für Monat' := item(myMonate,i-1);

     

    lg, Torsten

    • Leonid_Semik
    • vor 5 Jahren
    • Gemeldet - anzeigen

    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

    • info.28
    • vor 5 Jahren
    • Gemeldet - anzeigen

    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)
    )
    end

    Aber das Ergebnis ist noch nicht ganz das, was ich wollte:

    Bildschirmfoto 2019-08-05 um 20.21.09

    Auch nicht schlecht, Absichtlich hätt ich das nie geschafft :)
    Habt ihr vielleicht noch eine Idee?
    LG und Danke!

    • info.28
    • vor 5 Jahren
    • Gemeldet - anzeigen

    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 !

    • info.28
    • vor 5 Jahren
    • Gemeldet - anzeigen

    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...

    • info.28
    • vor 5 Jahren
    • Gemeldet - anzeigen

    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