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
-
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....
-
Das geht leider nicht, ich müsste die Datensätze in die verknüpfte Positionstabelle importieren.
-
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
-
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
-
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
-
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 -
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
-
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.
-
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
-
funktioniert immer noch nicht, die Spalten werden nicht gefunden. Irgendwie schaffe ich es nicht, die Daten in die Positionstabelle zu schreiben.
-
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 -
Ich hoffe ich nerve dich nicht, vielen Dank für deine Geduld. Die Felder sind gleich, Funktionsfelder sind auch keine drin.
-
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
-
Wie kann ich dir die Datenbank schicken?
-
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
-
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.
-
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.
-
Ein Screenshot des Datenmodells könnte schon für Aufklärung sorgen.
-
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:
-
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.
-
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.
-
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
-
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)
)
endWarum ich die vorherigen Datensätze nicht bekomme verstehe ich nicht, das sieht nach einem Problem mit der for Schleife aus.
Content aside
- vor 4 JahrenZuletzt aktiv
- 23Antworten
- 2151Ansichten