0

Datensatz inkl. der Untertabelle duplizieren

Guten Morgen.

Ich stehe seit einigen Tagen vor einem Problem.

Ich möchte mit KLICK auf dem Button "Datensatz kopieren", diesen nochmals anlegen inklusive der Untertabelle "Auditplan". Nur wenn ich das kopiere, dupliziert er nur den Datensatz (ohne den Auditplan)

Könnt Ihr mir da helfen?

 Das Script des Buttons "Auditplan kopieren"

let my := this;
duplicate(this);
let new := last(select Auditplanung1);
for ii in my.Auditplan do
    duplicate(ii);
    last(select Auditplan)
end

 

Vielen Dank

Grüße, Jens

10 Antworten

null
    • Ninox-Professional
    • planoxpro
    • vor 3 Monaten
    • Gemeldet - anzeigen

    Hallo Jens, bist du sicher, dass es sich bei 'Auditplan' um eine Untertabelle (Komposition = Ja) handelt, und nicht um eine normale 1:N-Verknüpfung (Komposition = Nein)? Bei letzterer werden die Einträge beim duplicate() nämlich nicht übernommen, sondern müssen im Script selbst erstellt werden. Zum Beispiel so:

    let meUT := Auditplan;
    let newHT := duplicate(this);
    for ii in meUT do
        let newUT := (create Auditplan);
        newUT.(
            Auditplanung1 := newHT;
            Datum := ii.Datum;
            Uhrzeit := ii.Uhrzeit;
            usw ....
        );
    end

    Be einer "echten" Untertabelle müsste ansonsten das duplicate(this) genügen, um die Einträge mit zu übernehmen. Der Rest davor und dahinter wäre überflüssig.

      • Jens_Waschwill
      • vor 3 Monaten
      • Gemeldet - anzeigen

      Du hast da absolut Recht. Es ist tatsächlich eine 1:N Verknüpfung. Es funktioniert hervorragend. Vielen Dank für die Hilfe. 👍

      • Jens_Waschwill
      • vor 3 Monaten
      • Gemeldet - anzeigen

      Hallo. Eine Frage noch. Wenn ich aber zwei Tabellen mit 1:N habe und kopieren möchte, sollte die Formel doch in etwa so aussehen. Richtig? Funktioniert nur leider nicht.

      Auditplan funktioniert, der Massnahmenplan leider nicht.

      let meUT := Auditplan;
      let newHT := duplicate(this);
      let newMT := duplicate(this);
      for ii in meUT do
          let newUT := (create Auditplan);
          newUT.(
              Auditplanung := newHT;
              Datum := ii.Datum;
              Zeit := ii.Zeit;
              Inhalte1 := ii.Inhalte1;
              'Bereich / Standort/ Gesprächs-partner' := ii.'Bereich / Standort/ Gesprächs-partner'
          )
      end;
      let meMT := Massnahmenplan;
      for aa in meMT do
          let newbt := (create Massnahmenplan);
          newbt.(
              Auditplanung1 := newMT;
              Nr := aa.Nr;
              'Maßnahme' := aa.'Maßnahme';
              'Thema/Aufgabe/Bereich' := aa.'Thema/Aufgabe/Bereich';
              Termin := aa.Termin;
              Verantwortlich := aa.Verantwortlich;
              Erledigt := aa.Erledigt
          )
      end;
      

      Kannst Du mir da helfen?

      Grüße, Jens

      • Ninox-Professional
      • planoxpro
      • vor 3 Monaten
      • Gemeldet - anzeigen

       

      Versuch's mal so:

      let meUT1 := Auditplan;
      let meUT2 := Massnahmenplan;
      let newHT := duplicate(this);
      for ii in meUT1 do
          let newUT1 := (create Auditplan);
          newUT1.(
              Auditplanung1 := newHT;
              Datum := ii.Datum;
              Uhrzeit := ii.Uhrzeit;
              usw ...
          );
      end;
      for aa in meUT2 do
          let newUT2 := (create Massnahmenplan);
          newUT2.(
              Auditplanung1 := newHT;
              Nr := aa.Nr;
              'Maßnahme' := aa.'Maßnahme';
              usw ...
          );
      end

      Nebenei: Man sollte Datenfelder nie einfach "Nr" nennen, weil diese Kennung eigentlich der internen Datensatznummer vorbehalten ist. Das kann zu Problemen führen. Also am besten einfach ein Zeichen davor oder dahinter setzen
       

      • Jens_Waschwill
      • vor 3 Monaten
      • Gemeldet - anzeigen

      Ok. Vielen Dank. Ich bekomme hier eine Fehlermeldung. Zur Erklärung:

      Unterhalb von Auditplanung befindet sich die Verknüpfung zur Tabelle Auditplan und

      Unterhalb von Auditdokumentation die Tabelle Massnahmenplan. Aber was sagt der Fehler aus ?

      • Jens_Waschwill
      • vor 3 Monaten
      • Gemeldet - anzeigen

        Echt komisch. Eigentlich ist es doch gleich. Er nimmt es aber nicht an.
       Den Auditplan kopiert er hervorragend. Beides befindet sich auch innerhalb der Auditplanung.

      • Jens_Waschwill
      • vor 3 Monaten
      • Gemeldet - anzeigen

      Sorry nochmals. Bin total verzweifelt und habe damit fast die halbe Nacht verbracht :-)

      Ich habe mal die Datenbank hier eingestellt. Vielleicht könntest Du so besser den Fehler finden. Das würde mich echt glücklich machen.

       

       

      Das ist der Maßnahmenplan der mit koppiert werden soll.

    • Ninox-Professional
    • planoxpro
    • vor 3 Monaten
    • Gemeldet - anzeigen
     said:
    Echt komisch. Eigentlich ist es doch gleich. Er nimmt es aber nicht an.

    Verknüpfungen bekommen automatisch immer erst mal den Namen der verknüpften Tabelle, können aber umbenannt werden. Das ist hier offenbar geschehen. Die Tabellen Auditplan und Massnahmenplan sind beide N:1 mit der Tabelle Auditplanung1 verknüpft. In Auditplan heißt das Verknüpfungsfeld aber "Auditplanung", ohne "1" dahinter.

    Deshalb ist die Zuweisung in der ersten for-Schleife richtig, in der zweiten zu Massnahmenplan müsste es jedoch heißen:

    ...
    let newUT2 := (create Massnahmenplan);
        newUT2.(
            Auditplanung1 := newHT;
    ...

    In deinem Screenshot zeigst du allerdings die Verknüpfung der Untertabelle Auditdokumentation zu Massnahmenplan (benannt "Maßnahmeplan"). Die Übernahme dieser Daten würde wieder eine ganz andere Herangehensweise erfordern. Die Sinnhaftigkeit dieser indirekt doppelten Verknüpfung kann ich aus Zeitgründen jetzt aber nicht ergründen.

    Erschwert wird das Verstehen deines Datenmodells dadurch, dass manche der Tabellen versteckt, Verknüpfungsfelder ausgeblendet und die Bezeichnungen nicht eindeutig sind.

    Ich würde deshalb dringend empfehlen, das Datenmodell noch mal zu prüfen und vor allem die Bezeichnungen der Tabellen und Verknüpfungen zu vereinheitlichen. Und verstecken bzw. ausblenden würde ich Tabellen und Verknüpfungen erst, wenn das Datenmodell und die Funktionen wirklich feststehen.

    Zusätzlicher Tipp: Man kann in den erweiterten Feldoptionen als Bedingung bei "Nur anzeigen, wenn" auch angeben

    isAdminMode()

    Dann werden die betreffenden Felder nur bei aktiviertem Admin-Modus angezeigt, so dass man während der Entwicklungsphase jederzeit umschalten kann.

      • Jens_Waschwill
      • vor 3 Monaten
      • Gemeldet - anzeigen

      Ich glaube, dass ich etwas weiter bin. Du hast mit den Namensgebungen recht. Habe das mal geändert. OK.
      Wenn ich unter Auditplanung 1 den Massnahmenplan habe,  geht es. Dann wird es auch dupliziert. Nur ist es bei mir so, dass ich in der Tabelle Auditdokumentation den Massnahmenplan eingebaut habe.
      Und nur dieser soll dupliziert werden.  Geht das dann nicht über den Button in Auditplanung1?

       

      • Ninox-Professional
      • planoxpro
      • vor 3 Monaten
      • Gemeldet - anzeigen

       

      Die Anzeige der Massnahmen in Auditplanung1 ist nur eine Ansicht, keine Verknüpfung. Direkt verknüpft ist lediglich Auditdokumentation und dort jeweils wieder die Massnahmen.

      Das heißt, es gibt keinen direkten Weg von Auditplanung1 zu Massnahmenplan, der Weg führt über Auditdokumentation.

      Problem: Auditdokumentation ist eine Untertabelle von Auditplanung1. Das heißt, die Einträge werden beim duplicate() übernommen, nicht jedoch deren Verknüpfungen zu Massnahmeplan.

      Ich habe deshalb die Komposition entfernt, so dass Auditdokumentation als 1:N-Verknüpfung bestehen bleibt, aber nicht als Untertabelle. So kann man die Einträge einzeln kopieren und in einer Unterschleife auch die jeweils dazugehörigen Einträge in Massnahmenplan.

      Vielleicht gibt es eine elegantere Lösung, mir ist auf die Schnelle aber keine eingefallen. Und so müsste es immerhin funktionieren.
       

Content aside

  • vor 3 MonatenZuletzt aktiv
  • 10Antworten
  • 55Ansichten
  • 2 Folge bereits