0

Tabelle samt Untertabelle duplizieren mit "duplicate(this)"

Hallo zusammen, 

ich würde gerne einen Datensatz (Angebot) samt Untertabelle duplizieren um somit eine Rechnung zu erzeugen. Wenn ich es richtig verstanden habe, dient dazu der Befehl "duplicate(this)". Allerdings wird da bei mir die Untertabelle nicht mit kopiert.

Hat jemand eine Idee warum?

5 Antworten

null
    • Paul_J_Herberhold
    • vor 6 Jahren
    • Gemeldet - anzeigen

    Hier die vbon mir verwendete Formel:

    duplicate(this);
    let NeuerDS := max((select Angebote).number(Nr));
    let NewRecord := (select Angebote)[number(Nr) = NeuerDS];
    let ReJahr := format(today(), "YY");
    let LfdNr := cnt(select Angebote where substr(Rechnungsnummer, 2, 2) = ReJahr) + 1;
    NewRecord.(Rechnungsnummer := "RE" + ReJahr + format(LfdNr, "000"));
    openRecord(record(Angebote,number(NeuerDS)))

    • Leonid_Semik
    • vor 6 Jahren
    • Gemeldet - anzeigen

    Hallo Paul,

    Die Untertabelle ist vermutlich eine 1:n Beziehung zu der Tabelle Positionen. Wenn die Untertabelle auch in den duplizierten Datensatz übernommen soll, bedeutet es, dass die Datensätze der Tabelle Positionen alle auch dupliziert und neu zugeordnet werden sollen. Theoretisch können aber mehrere solche Untertabellen und andere Beziehungen vorhanden sein. Diese zu duplizieren wird dann echt schwierig. Deswegen begrenzt Ninox sich bei duplicate() nur auf einfache Felder und n:1 Beziehungsfelder. Die Untertabelle solltest du dann manuell einpflegen, z.B. mit Schleife.

    Leo

    • Paul_J_Herberhold
    • vor 6 Jahren
    • Gemeldet - anzeigen

    Hallo Leo,

     

    vielen Dank für deine Antwort. Könntest du mir ein Beispiel für eine solche Schleife geben?

    • Leonid_Semik
    • vor 6 Jahren
    • Gemeldet - anzeigen

    Hallo Paul,

    ohne Datenmodel ist es schwierig eine Passende Formel zu finden. Ich habe hier eine Beispieldatenbank. 

    https://www.dropbox.com/s/3e9g4762ipr175l/Duplizieren.ninox?dl=0

    In der Tabelle Vorgänge kann mann ein Angebot erstellen und mehrere Positionen einfügen. Biem Klick auf button "Rechnung erstellen" wird der Datensatz  mit Positionen dupliziert .

    die Formel:

    let my := this;
    duplicate(this);
    let new := last(select 'Vorgänge');
    new.(Status := 2);
    for ii in my.Positionen do
    duplicate(ii);
    last(select Positionen).(Vorgang := new)
    end;
    popupRecord(new)

     

    Leo

    • Paul_J_Herberhold
    • vor 6 Jahren
    • Gemeldet - anzeigen

    Wow, es klappt! Vielen Dank, da habe ich mir jetzt schon Ewigkeiten den Kopf zerbrochen.

     

    Eine Frage habe ich noch: Mit der Formel werden ja die einzelnen Positionen dupliziert. Daher ist eine Auswertung was wieviel verkauft wurde nicht wirklich möglich. Könnte man in die Tabelle Positonen ein Feld einbauen, welches man mit dieser Formel ändert (also zb Gebucht=Ja)? Dann könnte man danach Filtern und hätte nur die tatsächlich auch in Rechnung gestellten Positonen in einer Liste.

Content aside

  • vor 6 JahrenZuletzt aktiv
  • 5Antworten
  • 2509Ansichten