0

Datensatz in zweit Tabelle kopieren (mit Untertabelle)

Hallo in die Runde und ein frohes und gesundes Neues Jahr allen Forums-Teilnehmern.
Kaum hat das neue Jahr begonnen, so habe ich gleich eine Anfänger-Frage:

Ich habe eine Tabelle "Auftraege" mit eine Untertabelle "Auftragspositionen".
Ich möchte nun einen Auftrags-Datensatz inclusive aller dazugehörigen Positionen in eine zweite Tabelle (bzw. Tabelle mit Untertabelle) kopieren.

Kann mir bitte jemand mit einfachen Worten den Weg dorthin beschreiben?

Im Voraus schon einmal ganz herzlichen Dank.

Holger

8 Antworten

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

    Code für eine Schaltfläche in der Tabelle 'Auftraege':

    let me := this;
    let newA := (create HAUPTTABELLE);
    newA.(
       DATENFELD1 := me.DATENFELD1;
       DATENFELD2 := me.DATENFELD2;
       [...]
    );
    for i in Auftragspositionen do
       let newP := (create UNTERTABELLE);
       newP.(
          HAUPTTABELLE := newA;
          DATENFELD_A := i.DATENFELD_A;
          DATENFELD_B := i.DATENFELD_B;
          [...]
       );
    end
    

    Die Namen der Tabellen und Datenfelder sind natürlich durch die tatsächlichen zu ersetzen.

    • Holger_Wollnik.1
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Hallo planox.pro,

    herzlichen Dank für den Code. Hat bei mir (fast) gut geklappt.
    - Die Haupt- und Untertabelle werden erzeugt.
    - Die Datenfelder der Haupttabelle werden vollständig übergeben
    - Die Untertabelle 'Auftragspositionen' enthält zwei Auswahlfelder (Produkt-Name und Produkt-Art); diese Daten kommen aus der Tabelle Produkt bzw. Produkt-Art --> diese Felder bleiben in der Zieltabelle 'Rechnungspositionen' leer.
    Ich bekomme es leider allein nicht hin.

    Weiterhin habe ich ein Feld 'Einzelpreis', welches ebenfalls aus der Produkt-Tabelle gefüttert wird. Dieses Datum wird auch nicht übergeben.

    Vielleicht kannst du mir nochmal auf die Sprünge helfen.

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

      Holger Wollnik 

      Hallo Holger, normalerweise sollten sich alle Daten- und Verknüpfungsfelder eins zu eins von der einen in die andere Tabelle übernehmen lassen, sofern der Datentyp übereinstimmt. Das heißt, ein Zahlenfeld der Quelltabelle sollte auch in ein Zahlenfeld der Zieltabelle übertragen werden, Text zu Text, Datum zu Datum und so weiter. Bei Auswahlfeldern ist zudem darauf zu achten, dass die Nummern der Einträge übereinstimmen.

      Was heißt "diese Daten kommen aus der Tabelle Produkt bzw. Produkt-Art"? Ist die Quelltabelle mit Produkten verknüpft und es werden Daten aus dieser Verknüpfung in Formelfeldern angezeigt? Dann sollte man diese Verknüpfungen und Formelfelder auch in der Zieltabelle anlegen. Oder man referenziert den jeweiligen Wert schon bei der Übertragung.

      Wenn also bspw. der Preis über "Produkte.Preis" in einem Formelfeld angezeigt wird, aber als fester Wert in ein Zahlenfeld der Quelltabelle übertragen werden soll, dann muss er auch im Übertragungsscript so referenziert werden.

      [...]
      newP.(
         HAUPTTABELLE := newA;
         DATENFELD_A := i.DATENFELD_A;
         Preis := i.Produkte.Preis
      [...]

      Aber das ist jetzt zu großem Teil Spekulation meinerseits. Am besten wäre, du würdest die Datenbank mit Demodaten einfach mal hier hochladen, damit man direkt reinschauen kann.

    • Holger_Wollnik.1
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Hallo planox.pro,

    herzlichen Dank für dein Engagement.
    Ich weiss nicht woran es liegt, dass ich mit Ninox nicht so richtig warm werde. Eigentlich finde ich das Tool sehr gut, aber ich hadere immer wieder mit der Logik und der Syntax.
    Um so erfreulicher, dass es dieses Forum und hilfsbereite Menschen wie dich gibt.

    Ich habe die DB einmal angehängt. Evtl. ist ja mein Datenmodell ja auch fehlerhaft (obwohl recht überschaubar).

    Vielen Dank für die Unterstützung und noch einen schönen Rest-Sonntag.

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

      Holger Wollnik Klar, auch Ninox erfordert eine gewisse Einarbeitung. Sie lohnt sich aber, denn ich kenne kein anderes Tool, das mit vergleichbarem Aufwand so viele Möglichkeiten bietet.

      Du warst im Grunde auf dem richtigen Weg, hast in deinem Script aber versucht, dem Formelfeld 'Einzelpreis' einen festen Wert zuzuweisen. Das funktioniert nicht. Formelfelder können nur Berechnungen ausführen und dessen Ergebnis anzeigen. Du hättest in den Rechnungspositionen also dieselbe Formel nehmen müssen wie in Auftragspositionen. Dan hätte es funktioniert.

      Das eigentliche Problem ist aber kein technisches, sondern ein strukturelles. Formelfelder werden bei jedem Aufruf immer wieder neu berechnet. Das heißt, wenn du in Angeboten, Aufträgen oder Rechnungen nur auf Produkt-Felder referenzierst, dann ändern sich die Werte im Nachhinhein, sobald etwas im verknüpften Produkt-Datensatz geändert wird. Das darf natürlich nicht passieren (auch aus rechtlichen Gründen).

      Deshalb sollte man bei solchen Dokumenten sämtliche Werte immer als feste Werte in entsprechende Datenfelder übernehmen. Ich habe die DB mal entsprechend angepasst und statt des Formelfeldes 'Einzelpreis' ein Zahlenfeld namens 'EPreis' sowie zwei Textfelder für Produktart und -name hinzugefügt, die automatisch über einen Änderungstrigger im Verknüpfungsfeld 'Produkte / Leistungen' befüllt werden.

      Und im Button-Script zur Erstellung der Rechnung werden dann einfach sämtliche Felder eins zu eins aus dem Auftrag übernommen. Sieh's dir einfach mal an, und wenn dann noch Fragen sind, kannst du sie gerne hier stellen.

    • Holger_Wollnik.1
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Hallo planox.pro,

    so weit so gut. Verstanden und funktioniert ... bis auf 
    Produktart := 'Produkt / Leistung'.text(Art)
    Die Zeile erzeugt zwar keine Fehlermeldung, ergibt aber auch keinen Text bzw. bringt das gesamte script zum Klemmen.
    Du ahnst es bereits? ... ich finde den Fehler nicht, sorry.

    • Holger_Wollnik.1
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Kommando zurück. Irgendwie :-) habe ich es jetzt doch hinbekommen. Zumindest sieht es so aus und funktioniert nun doch so wie gedacht. 

    Herzlichen Dank bis dahin.

    • Holger_Wollnik.1
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Hallo planox.pro,

    soweit läuft mein kleines Projekt und ich bin in der Abteiung "schöner Wohnen" angekommen. ;-)

    Ein Problemchen stellt sich mir aber noch, wofür ich bislang keine Lösung gefunden habe:
    Stellt man bei der Dateneingabe fest, dass das gewünschte Datum in der verknüpften Tabelle noch nicht enthalten ist und gibt dieses dann über das Plus-Icon des Verknüpfungsfeldes oder über den Button "Neuer Datensatz" in der Maske der veknüpften Tabelle ein, dann wird der Preis nicht errechnet, sondern bleibt 0.
    Erfolgt die Dateneingabe jedoch direkt über die Tabelle und nicht über das Verknüpfungsfeld, dann funktioniert es (wäre auch blöd wenn nicht ;-) ).
    Wo/wie muss ich im ersten Fall etwas refreshen, damit die Daten wie erwünscht bereit stehen?

Content aside

  • vor 1 JahrZuletzt aktiv
  • 8Antworten
  • 135Ansichten
  • 2 Folge bereits