0

Daten in Tabelle kopieren

Hallo Zusammen,

ich schreibe mit Ninox meine Angebote und Rechnungen, früher habe ich das mit Excel gemacht. Aus den Excel Zeiten habe ich noch ein paar Dokumente, die ich in Ninox bearbeiten möchte. Ich habe schon ein Dokument über CSV importiert, diese Tabelle habe ich nun in der Datenbank. Gibt es eine Möglichkeit die Daten aus der Tabelle in die Positionstabelle der Rechnungen eizulesen? Die Felder sind gleich.

Viele Grüße

Christian

23 Antworten

null
    • T_Bartzsch
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Wenn die Felder gleich sind, kannst du die Datensätze via CSV doch direkt in die richtige Tabelle importieren. Du gehst dazu links in der blauen Ansicht deiner Tabellen ganz oben auf den Namen deiner Datenbank, drückst auf die Schaltflöche "Daten importieren", wählst deine CSV, wählst das Trennzeichen und unten deine Tabelle in die die neuen Daten fließen sollen... dann kannst Du die Feder aus der CSV deinen Feldnamen zuweisen.... 

    • info.12
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Das geht leider nicht, ich müsste die Datensätze in die verknüpfte Positionstabelle importieren.

    • mirko3
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Hi, Christian. Wenn Du den folgenden Code in einen Button einbettest, kannst Du Deinen Daten in die Positionstabelle kopieren. Da ich Deine Datenstruktur nicht kenne, habe ich hier mal meine funktionstüchtige Version abgeändert. Ich benutze es für  Inventuren, bei denen ich aus der Inventarliste Datensätze kopiere. Je nach Datenmenge dauert es etwas. Du kannst den Code noch ändern, also einen Filter benutzen (select Importtabelle[Filter=Kriterium]), wenn Du nicht alle Daten kopieren willst. Mache sicherheitshalber vorher eine Datensicherung. Mirko

    for i in select IMPORTTABELLE do
    let new := (create POSITIONSSTABELLE);
    new.(
    FELD1 := i.FELD1;
    FELD2 := i.FELD3;
    FELD3 := i.FELD3;
    )
    end

    • info.12
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Hi Mirko,

    danke für den Code, ich bekomme es aber nicht zum laufen. Ich habe den Code eingefügt und abgeändert aber wenn ich den Button klicke passiert nichts. Die Positionstabelle ist 1:N mit der Rechnungstabelle verknüpft, nicht als Untertabelle. Kann es daran liegen?

    Viele Grüße

    Christian

    • mirko3
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Schreib doch bitte mal Deinen abgeänderten Code. Ich habe aus Deinem Text gelesen, dass Du Deinen CSV Import in eine eigene Tabelle durchgeführt hast, welche nicht verknüpft ist mit der Tabelle "Positionstabelle". Wie heißt diese? Die Verknüpfung dürfte keine Rolle spielen. Mirko

    • info.12
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Ja die CSV Importtabelle ist nicht verknüpft mit den anderen Tabellen.

    Hier mein Versuch:

    TEST ist die CSV Import Tabelle

    01_Rechnung ist die Rechnungstabelle

    Positionen ist die verknüpfte Positionstabelle

    for i in select TEST do
    let new := (create '01_Rechnung').Positionen;
    new.(
    Pos_Nr := i.Pos;
    Beschreibung = i.Kurztext;
    Menge = i.Menge;
    Einzelpreis = i.Epreis;
    Gesamt = i.GPreis
    )
    end

    • mirko3
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Was ich anders machen würde ist, ".Positionen" weglassen. Dann sieht das so aus:

    for i in select TEST do
    let new := (create '01_Rechnung');
    new.(
    Pos_Nr := i.Pos;
    Beschreibung = i.Kurztext;
    Menge = i.Menge;
    Einzelpreis = i.Epreis;
    Gesamt = i.GPreis
    )
    end

    • info.12
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Das funktioniert gar nicht, da meckert Ninox das es die Spalten nicht findet.

    Was mir bei dem Code oben aufgefallen ist, das Ninox neue Datensätze anlegt in der Anzahl wie Datensätze in der Importtabelle vorhanden sind.

    • mirko3
    • vor 4 Jahren
    • Gemeldet - anzeigen

    for i in select TEST do
    let new := (create '01_Rechnung');
    new.(
    Pos_Nr := i.Pos;
    Beschreibung := i.Kurztext;
    Menge := i.Menge;
    Einzelpreis := i.Epreis;
    Gesamt := i.GPreis
    )
    end

    hab gesehen, dass Doppelpunkte gefehlt haben

    • Christian.2
    • vor 4 Jahren
    • Gemeldet - anzeigen

    funktioniert immer noch nicht, die Spalten werden nicht gefunden. Irgendwie schaffe ich es nicht, die Daten in die Positionstabelle zu schreiben.

    • mirko3
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Sind die Felder der Positionstabelle auch beschreibbar? Es dürfen keine Funktionsfelder sein, da geht es m. W. nicht. Ideal wäre, wenn die Art der Felder Ursprung und Ziel identisch wären.
    Wenn es Dich nicht nervt, können wir ja noch etwas weiter probieren. Ich kann nur sagen, dass es bei mir reibungslos funktioniert und ich versuche mitzudenken, was noch den Fehler verursachen könnte. Wenn wir Glück haben, lesen ja Copytexter oder Leo oder andere Wissende mit, und können noch Tipps geben. Mirko

    • Christian.2
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Ich hoffe ich nerve dich nicht, vielen Dank für deine Geduld. Die Felder sind gleich, Funktionsfelder sind auch keine drin.

    • mirko3
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Vielleicht kannst Du eine Kopie erstellen, die Daten und überflüssigen Tabellen löschen und mir die Datei zuschicken, dann würde ich es mir ansehen. M

    • Christian.2
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Wie kann ich dir die Datenbank schicken?

    • T_Bartzsch
    • vor 4 Jahren
    • Gemeldet - anzeigen

    for i in select TEST do
    let new := (create '01_Rechnung');
    new.(
    Pos_Nr := i.Pos;
    Beschreibung := i.Kurztext;
    Menge := i.Menge;
    Einzelpreis := i.Epreis;
    Gesamt := i.GPreis
    )
    end

    Mit obiger Formel werden ja auch in der Tabelle 01_Rechnung neue Felder angelegt, also neue Rechnungen...

    Du möchtest aber doch die Felder aus dem Import in die Tabelle Positionen. Die Frage ist, sollen ALLE Datensätze aus dem import in die verknüpfte Tabelle Positionen? Dann muss es natürlich heißen:

    for i in select TEST do
    let new := (create 'Positionen');
    new.(
    Pos_Nr := i.Pos;
    Beschreibung := i.Kurztext;
    Menge := i.Menge;
    Einzelpreis := i.Epreis;
    Gesamt := i.GPreis
    )
    end

    • T_Bartzsch
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Und dann bleibt die Fage: Willst Du einfach nur durch den Import deinen Pool an Positionen erweitern (und somit die Tabelle Positionen befüllen), oder sollen innerhalb einer jeweiligen Rechnung die ausgewählten Positionen ergänzt werden....?

    Willst Du Positionen pro Rechnung erweitern, muss sowieso eine Untertabelle her, welche mit Daten aus Positionen befüllt wird. In dieser Untertabelle können dann pro Rechnung auf Klick neue Positionen erzeugt werden.

    • Christian.2
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Hallo Tobias,

    ja das stimmt mit der obiger Formel. Wenn ich es mit der unteren versuche, kann ich die Tabelle Positionen nicht ansprechen. Da bekomme ich die Fehlermeldung das die Tabelle nicht gefunden wird. Ich schaffe es einfach nicht die verknüpfte Positionstabelle anzusprechen.

    • Tacho
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Ein Screenshot des Datenmodells könnte schon für Aufklärung sorgen.

    • Christian.2
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Die Positionstabelle habe ich ja schon, da füge ich ja schon Artikel und Leistungen ein. Die Positionstabelle habe ich aber nicht als Untertabelle angelegt damals, das funktioniert aber alles. Mein Traum wäre es wenn ich die Positionen aus der Import Tabelle da automatisch einfügen könnte um sie dann da weiter zu bearbeiten und auch zu ergänzen.

    Das ist das Datenmodell:

    Bildschirmfoto 2020-08-20 um 09.03.54

    • mirko3
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Nach dem Bild heißt doch Deine Positionstabelle "Rechnungspositionen". Hast Du es damit im Code versucht? Bisher hieß es immer "Positionen" oder, wie Tobias schrieb, hatten wir ja fälschlicherweise "01_Rechnungen" benutzt. 

    • Christian.2
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Ja habe ich, da passiert aber nichts. Kann es sein, das die Daten in die Positionstabelle geschrieben werden, aber nicht dem Datensatz zugeordnet werden?

    Die Tabelle 01_Rechnung ist die Tabelle wo die Rechnung geschrieben wird. Die Tabelle Rechnungsposition ist als Positionstabelle verknüpft und in Positionen benannt.

    • mirko3
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Genau. Ich war der Meinung, deine Importtabelle enthält die Positionen, die beim Anlegen einer Rechnung in Tabelle "Positionen" gespeichert werden. Diese willst Du in Deine Ninoxtabelle "Rechnungsposition" kopieren (Siehe Dein erster Text). Dafür war der Code. Einen Import der Rechnungen in die Rechnungstabelle 01_Rechnungen und gleichzeitig die Tabelle Rechnungsposition zu füllen geht wahrscheinlich nicht, oder ich weiß es zumindest nicht. Übrigens spielt der Name, den Du der Tabelle in einem Verknüpfungfeld vergibst, zumindest in diesem Fall keine Rolle, zum Ansprechen der Tabelle (create) benötigst Du den Tabellennamen, hier "Rechnungsposition". Wenn jetzt klarer ist, was herauskommen kann und Dir das reicht, dann kannst Du die abgespeckte Version noch zusenden: level1(at)online.de. Mirko

    • Christian.2
    • vor 4 Jahren
    • Gemeldet - anzeigen

    So, bin jetzt ein Stück weiter. Mit folgenden Code bekomme ich den letzten Datensatz der Importtabelle in die verknüpfte Positionstabelle geschrieben:

    let ma := this;
    for i in select TEST do
    let new := (create Rechnungsposition);
    new.(
    ma.Positionen.(Pos_Nr := i.'Pos.');
    ma.Positionen.(Beschreibung := i.Kurztext);
    ma.Positionen.(Menge := i.Menge);
    ma.Positionen.(Einzelpreis := i.Epreis)
    )
    end

    Warum ich die vorherigen Datensätze nicht bekomme verstehe ich nicht, das sieht nach einem Problem mit der for Schleife aus.