0

Neuer Ansatz - neues Problem, Datensätze aus DMAF per Button löschen

Hallo zusammen,

ich habe meinen workflow umgestellt bzw neuen Bedingungen angepasst.

In Bild 1 sieht man quasi ausgewählte Datensätze (grün), mögliche Datensätze (gelb) und nicht gewollte Datensätz (rot). Diese werden auch korrekt im Drucklayout angezeigt.

 

In einem weiteren Schritt möchte ich alle gelben und roten Datensätze löschen. Dies habe ich mit

delete 'ausgewählte Dekaden'[Auswahl = 2 or Auswahl=3]

auch gelöst wie man in Bild 2 sieht, jedoch im Drucklayout bleibt der Datensatz.

 

Ich habe verstanden, dass es daran liegt, dass dieser Datensatz im MDAF noch 'angeklickt' ist.

Wie schaffe ich es, dass per Button alle 'gelben' und 'roten Datensätze gelöscht werden bzw im DMAF 'entklickt' werden.

Natürlich kann ich das im DMAF manuell machen, aber ich würde es gerne mit einem Button lösen.

Das DMAF ertellt die Datensätze mit folgendem Skript:

let me := this;
let cat := concat('ausgewählte Dekaden'.Tabelle1.Nr);
let multi := numbers('Mehrfachauswahl (dynamisch)');
for i in multi do
    if not contains(cat, text(i)) then
        let c := (create Dekadenauswahl);
        c.(Haupttabelle := me);
        c.(DekadenBeginn := record(Tabelle1,i).Datum);
        c.(DekadenEnde := record(Tabelle1,i).'Datum 2');
        c.(Dauer := record(Tabelle1,i).Zahl);
        c.(Tabelle1 := number(i))
    end
end;
for i in 'ausgewählte Dekaden' do
    if not contains(text(multi), text(i.Tabelle1)) then
        delete i
    end
end

Ich weiss, dass hier der Ansatz liegt und habe schon einiges ausprobiert und im Forum gesucht, aber ich komme zu keinem Ergebnis und hoffe, dass mir hier jemand auf die Sprünge helfen kann. Die BspDB habe ich ebenso eingefügt.

Vielen Dank schon mal.

Gruß Kruna

12 Antworten

null
    • Michi.1
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Vielleicht hilft das von Leo/ speziell fürs Drucken https://forum.ninox.de/t/g9h2hxl#x2h2at0

    • Kruna
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Guten Morgen Michi,

    vielen Dank für Deinen Tip. Ich habe mir das mal angeschaut, aber so wie ich das verstanden habe, hilft mir das leider nicht weiter.

    Eigentlich geht es ja nur darum, ob es möglich ist mit einem Button die Datensätze aus dem dmaf wieder abzuwählen, aber eben in Abhängigkeit von der Auswahl, die man in der Untertabelle hat.

    Gruß Kruna

    • Ninox-Professional
    • planoxpro
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Hallo Kruna, vielleicht habe ich Tomaten auf den Augen, aber in deiner DB konnte ich kein DMAF (= Dynamisches Mehrfachauswahlfeld) finden. Das Feld 'Auswahl' ist ein normales, einfaches Auswahlfeld. Deshalb ist mir auch nicht klar, was da genau passieren soll.

    Wenn es im Kern aber um die Frage geht, wie man per Script Einträge in DMAF abwählen kann, dann hilft als Ansatz vielleicht ein vereinfachtes Schema weiter. Mehrfachauswahlfelder geben ja immer Arrays zurück, bei dynamischen enthält es die Record-Nummern der ausgewählten Einträge. Angenommen, du hast ein DMAF, dass eine Tabelle mit den Einträgen "A", "B", und "C" anzeigt. Um nun bspw. den Eintrag "B" abzuwählen, benötigt man man dessen Record-Nummer (Zeile 1). Anhand derer lässt sich überprüfen, ob der Eintrag "B" überhaupt ausgewählt ist (2) und ggf. das Array ohne die Record-Nummer von "B" neu aufbauen (3 - 7):

    1 let myRecord := first(select Tabelle where Textfeld = "B");
    2 if chosen(DMAF, number(myRecord)) then
    3    let myArray := numbers(DMAF);
    4    let myNewArray := for ii in myArray do
    5       if ii != number(myRecord) then ii end
    6    end;
    7    DMAF := myNewArray
    8 end
    

    Um Datensätze zu löschen, die in einem DMAF ausgewählt sein könnten, würde ich sie wohl erst abwählen und dann löschen. Vielleicht ist die Reihenfolge aber auch egal, das habe ich jetzt nicht ausprobiert.

    • Kruna
    • vor 1 Jahr
    • Gemeldet - anzeigen

    HAllo Axel,

    vielen Dank auch für Deine Hilfe.

    Das dmaf befindet sich in der Tabelle 'Standorte'.

    Meine Haupttabelle ist ja 'Dekadenplanung'. Diese hat eine Untertabelle Standortauswahl und Tabelle 'Dekadenauswahl' ist Untertabelle von Tabelle 'Standortauswahl', in etwa so:

    - Dekadenplanung

        - Standortauswahl

             -Dekadenauswahl

     

    Die Tabelle1 ist für dahingehend wichtig, da ich dort die Dekaden aufzeige, die ich für das dmaf brauche.

    Ich habe die Tabelle noch etwas verändert und hier neu beigefügt.

    Ich habe auch nochmal versucht, in diesem Bild darzustellen, was ich meine.

     

    Ich weiss, dass ich die Datensätze (Dekaden) natürlich auch manuell wieder 'abwählen' kann bzw es im Moment auch so mache. Ich möchte aber, falls überhaupt möglich, den workflow mit einem Button realisieren.

    Das hat folgende Gründe - 1. sind es insgesamt 34 Dekaden und es können 15-20 Dekaden mit sehr vielen Strassen bzw Standorten sein. Zumal ich das dmaf angezeigt habe als Combobox und nicht wie im Bild, als switch.

    Gruß Kruna

      • Ninox-Professional
      • planoxpro
      • vor 1 Jahr
      • Gemeldet - anzeigen

      Kruna Um mit einem Button alle Einträge abzuwählen, die in der Untertabelle 'Dekadenauswahl' bei 'Auswahl' > 1 sind, müsste man o. a. Script noch mal in eine Schleife packen (DMAF habe ich hier abgekürzt):  

      let me := this;
      let myRecords := 'ausgewählte Dekaden'[Auswahl > 1].number(Tabelle1);
      for ix in myRecords do
          if chosen(me.DMAF, number(ix)) then
              let myArray := numbers(me.DMAF);
              let myNewArray := for iy in myArray do
                      if iy != ix then iy end
                  end;
              me.(DMAF := myNewArray)
          end
      end

      Das Löschen der betreffenden Datensätze erfolgt bei dir ja über den Änderungstrigger im DMAF. Man könnt das "delete" statt dessen aber auch noch in dieses Button-Script einbauen. 

      • Kruna
      • vor 1 Jahr
      • Gemeldet - anzeigen

      planox. pro Axel,

      DU BIST MEIN HELD!!!

      Jetzt funktioniert es endlich. Seit Tagen bastele ich daran herum, durchforste Foren und bin nicht weitergekommen.

      Das ist wirklch eine Erleichertung, wenn man mit einem Klick durch ist, anstatt 50, 60 oder noch mehr Klicks. Möglche Fehlerquellen lassen sich dadurch auch vermeiden.

      Mir ist dabei noch etwas aufgefallen:

      delete 'ausgewählte Dekaden'[Auswahl != 1]

      erübrigt sich, da durch den letzten Teil des Scripts im dmaf, also durch Abwahl eines dmaf, der Datensatz bereits gelöscht wird:

      for i in 'ausgewählte Dekaden' do
          if not contains(text(multi), text(i.Tabelle1)) then
              delete i
          end
      end

      Millionen, tausend Dank für Deine mega Hilfe, große Klasse!👍

       

      Gruß Kruna

      • Rafael_Sanchis
      • vor 1 Jahr
      • Gemeldet - anzeigen

      Kruna Hi Kruna excelent Can you post the DB example with the solución.

      Appreciate

      • Kruna
      • vor 1 Jahr
      • Gemeldet - anzeigen

      Rafael Sanchis sure, here we go 🙂

      • Rafael_Sanchis
      • vor 1 Jahr
      • Gemeldet - anzeigen

      Kruna Thanks

    • Ninox-Professional
    • planoxpro
    • vor 1 Jahr
    • Gemeldet - anzeigen
    Kruna said:
    Mir ist dabei noch etwas aufgefallen:
    delete 'ausgewählte Dekaden'[Auswahl != 1]
    erübrigt sich, da durch den letzten Teil des Scripts im dmaf, also durch Abwahl eines dmaf, der Datensatz bereits gelöscht wird:

    Das meinte ich ja. Mit dem Button-Script wird das DMAF geändert, so dass dort der Trigger "Bei Änderung" anschlägt, welcher das "delete" auslöst.

    • Kruna
    • vor 1 Jahr
    • Gemeldet - anzeigen

    tja, das kommt davon, wenn man vor lauter Freude und Begeisterung nicht bis zum Ende liest bzw überliest!😆

      • Ninox-Professional
      • planoxpro
      • vor 1 Jahr
      • Gemeldet - anzeigen

      😛