Tabelle automatisch ausfüllen lassen
Hallo liebe Experten,
Ich habe folgendes Problem:
Ich pflege eine Kundentabelle mit den Spalten Name, Brache, PLZ
In einer zweiten Tabelle werden alle Kunden regelmäßig bewertet, dort gibt es die Spalten Name, Status, Umsätze
Die Tabellen sind verknüpft, so dass man bei der zweiten Tabelle als Namen nur die Namen aus der ersten Tabelle einfügen kann.
Jetzt möchte ich, dass wenn ich einen neuen Kunden in Tabelle 1 anlege dieser auch als Datensatz in Tabelle 2 auftaucht.
Also in Tabelle 1 lege ich folgenden Datensatz an:
Kunde, Branche, PLZ
Und in Tabelle 2 soll dann automatisch angelegt werden:
Kunde, leer, leer
Somit sehe ich direkt neue Kunden in Tabelle 2 und kann diese auch direkt bewerten.
Wie mache ich das? Ich nehme an mit Skript Befehl? Wie geht das? ;)
19 Antworten
-
Hallo Lutz,
Wenn in der Tabelle 2 das Feld Kunde (oder doch Name wie am Anfang geschrieben???) ein Verknüpfungsfeld zu der Tabelle 1 ist. Sollte es mit dem Trigger auf Tabellenebe "bei neu" der Tabelle 1 gehen:
---
let me:=this;
let newTable2:=create 'Tabelle 2';
newTable2.Kunde:=me
---Hier nehme ich an, dass das Feld Kunde in der Tabelle 1 ein Textfeld ist und nicht eine Verknüpfung zu der driteen Tabelle ( z.B. Kunden).
Leo
-
Hallo Leonid Semik,
vielen Dank für deine Antwort. Du hast Recht, oben habe ich mich vertippt.
Leider verstehe ich immer noch nicht wie ich was Skripten soll. Ich weiß auch nicht was die Befehle heißen, wann deutsch wann englisch usw. Eine Übersicht habe ich nicht gefunden.
Wärst du so nett und könntest nochmal Schritt für Schritt erklären, bitte?
Neuer Ausgangspunkt: leere Datenbank
Ich erstelle eine neue Tabelle mit Namen „Tabelle1“
Mit 2 Textfeldern mit den Namen „Kunde“ und „PLZ“
Alles Standard
Ich erstelle eine neue Tabelle mit Namen „Tabelle2“
Mit 2 Textfeldern mit den Namen „Kunde“ und „Bewertung“
Alles Standard
Ich möchte nun, dass wenn ich in Tabelle1 einen Datensatz (z.B. Kunde=Lidl und PLZ=12345) eintrage, als Folge ein Datensatz in Tabelle2 automatisch erzeugt wird. In diesem Fall soll dort stehen: Kunde=Lidl und Bewertung=NIX (kein Eintrag)
Wo trage ich jetzt das passende Skript ein?
Ich bin fast sicher, hat man einmal die Art der Befehle verstanden, wird alles leichter. Aber dieses Grundwissen fehlt mir einfach…1000 Dank !!! -
Hallo Lutz,
Ok, du hast gar keine Beziehungen in der Datenbank. In diesem Fall würde ich dir empfehlen auf youtube die Ninox Lernvideos anzuschauen. Wenn du Tatsächlich nur diese Funktionalität brauchst, dann:in der Tabelle 1 Feld Kunde in erweiterten Optionen das Feld "Nach Änderungen folgendes Skript ausführen" anklicken und dort oben bei Visuel/Text auf Text umschalten.
Dann die Formel:
---
"
//mit Variable me wird der Datensatz festgehalten, wo ich mich gerade befinde
";
let me:=this;
"
//Es wir geprüft ob das Feld Kunde nicht Leer ist
";
if Kunde!=null then
"
//Wenn die Bedingung WAHR ist, wird ein neuen Datensatz in der Tabelle2 erstellt (mit create) und der neue Datensatz der Variable new übergeben
";
let new:=create Tabelle2;
"
//Jetzt wird der Inhalt des Textfeldes Kunde aus Tabelle 1 in die Tabelle 2 überschrieben
";
new.Kunde:=me.Kunde
end---
Leo
-
Nochmal vielen Dank.
Funktioniert fast ;)
Ninox erstellt jetzt zwei neue Datensätze statt nur einen in Tabelle 2.
-
Mit dieser Formel ?
-
ja hab alles eins zu eins gemacht
-
Neuer Versuch zu erklären, was ich brauche. Sorry ich komm mir schon zu blöd vor das zu beschreiben;)
Kundentabelle
beinhaltet Spalten Kunde und PLZ
Aktuell 10 Datensätze
Auftragstabelle
Beinhaltet Spalten Auftragsnummer und Kunde
Aktuell 0 Datensätze
Beide Tabellen sind verknüpft: wenn man einen Datensatz in der Auftragstabelle anlegen möchte, gibt man die Auftragsnummer an und erhält die 10 Kunden aus der Kundentabelle als Auswahl. So weit so gut.
In einer dritten Tabelle werden die Kunden bewertet. Es gibt die Spalten Kunde und Bewertung. In dieser Tabelle sollen immer so viele Datensätze sein, wie auch in der Kundentabelle. Also jetzt 10 stk. Heißt, wenn ich einen Kunden in der Kundentabelle hinzufüge, muss dieser ohne Bewertung auch in der Dritten Tabelle erscheinen. UND wenn ich einen Datensatz in die Auftragstabelle einfügen möchte, muss der neue Kunde als Auswahlmöglichkeit zur Verfügung stehen.
Ist mein Wunsch unlogisch?
Danke und Gruß
-
Hallo Lutz, "unlogisch" ist es vielleicht nicht, aber man fragt sich halt, warum die Kunden-Bewertungen in einer externen Tabelle gespeichert werden sollen und nicht im Stamm-Datensatz des Kunden. Das Auslagern kundenbezogener Informationen macht normalerweise ja nur Sinn, wenn mehrere Einträge möglich sind (z. B. verschiedene Adressen, Telefonnummern, Kontakte usw.). Das Ziel einer Aktion zu verstehen, kann u. U. dabei helfen, eine Lösung zu finden.
Davon abgesehen stellt sich rein technisch gesehen die Frage, ob auch Kunden- und Bewertungstabelle miteinander verknüpft sind. Deiner Beschreibung zufolge offenbar nicht. Es müsste also der Inhalt des Feldes "Kunde" an den neuen Datensatz übergeben werden. Das macht man am besten auch wieder mit einem Trigger "Nach Änderung" im Feld "Kunden" in der Kundentabelle. Der Code wäre exakt der, den Leo oben schon gepostet hat, nur, dass sich der Name der Tabelle beim "create" ändert:
let me := this;
if Kunde != null then
let new := create Bewertungstabelle;
new.(Kunde := me.Kunde)
end
Zu beachten ist dabei, dass der Code wirklich bei JEDER Änderung des Feldes "Kunde" ausgeführt wird. Wenn man also bspw. erstmalig eine Eingabe in das Feld macht, sie dann löscht und nochmal etwas eingibt, dann hat man schon zwei Datensätze in der Bewertungstabelle erzeugt. Das ließe sich durch eine Prüfung zwar auch verhindern, aber - wie gesagt: Wenn man nicht weiß, was der Fragende eigentlich genau vorhat, ist es oft ein Stochern im Nebel.
-
Vielleicht noch mal zur Klarstellung: Ninox bietet verschiedene Trigger auf verschiedenen Ebenen. Auf Tabellenebene gibt es "Bei neuem Datensatz" und "Nach Änderung". Hat man bei letzterem etwas eingetragen, dann wird die Aktion in der Tat bei jeder Änderung IN JEDEM DATENFELD der betreffenden Tabelle ausgeführt. Also immer dann, wenn sich irgendetwas in dem Datensatz ändert,
Den Trigger "Nach Änderung" gibt es aber auch auf Feldebene. Dann wird die dort festgelegte Aktion nur nach Änderungen IN DIESEM EINEN DATENFELD ausgeführt.
Wenn du also sagst, nach jeweils einer Änderung in den Feldern "Kunde" und "Datum" würde die Aktion - Neuanlage eines Datensatzes - zwei mal ausgeführt, dann kann es sich nur um einen Trigger auf Tabellenebene handeln. Gedacht waren die oben genannten Skripte aber für einen Trigger, der sich konkret auf das Feld "Kunde" bezieht ("Erweitere Optionen" in den Feldoptionen), die Aktion also nur dann zur Ausführung kommt, wenn in diesem Feld eine Änderung vorgenommen wird. Das solltest du dir nochmal etwas genauer anschauen.
-
genau dem werde ich nochmal nachgehen. Danke für eure Hilfe!!!
-
Und noch etwas zum Thema "viele Datenfelder in einer Tabelle". Ninox ist keine Tabellenkalkulation, sondern eine Datenbank. Die tabellarische Ansicht dient hier im Grunde nur der groben Übersicht und Auswahl von Datensätzen, die Anzeige der Detail-Informationen erfolgt im Formular. Zur optischen Gliederung gibt es verschiedene Gestaltungselemente wie z. B. Karteireiter. Und in der Tabellenansicht kann man alle Spalten (= Felder) ausblenden, die man dort nicht benötigt.
Es gibt viele Ninox-Lösungen, die Tabellen mit hundert oder mehr Datenfeldern haben. In eine Kundentabelle gehört alles, was als Information zum Kunden gehört, in eine Artikeltabelle alles, was zum Artikel gehört, usw. Wenn es vorkommen kann, dass ein Kunde bspw. mehrere Adressen haben oder ein Artikel in mehrere Ausführungen vorliegen kann, dann legt man dafür Untertabellen an, die wiederum mehrere, automatusch dem Kunden zugeordnete Einträge haben können. Alles weitere wie Rechnungen, Lagerbewegungen etc. bildet man mit eigenen Tabellen ab, die sinnvoll mit den Stammdaten-Tabellen verknüpft werden.
Die inhaltliche Strukturierung der Tabellen sollte also nicht nach der Menge an Einzelfeldern richten, sondern nach sachlicher Zugehörigkeit der Informationen. Und wenn die Kundentabelle dann am Ende hundert Datenfelder umfasst, dann ist das eben so. Genau für sowas ist Ninox gemacht.
-
Den Punkt würde ich gerne noch mal aufgreifen bevor ich ein neues Thema aufmache.
Also ich habe eine Tabelle mit 20 Spalten. Zur Übersichtlichkeit habe ich 2 verschiedene Ansichten erstellt.
Eine Ansicht mit 10 Spalten für den Vertrieb und 10 Spalten für die Produktion.
Möchte ich jetzt als Vertriebler etwas eintragen, dann bekomme ich im Eingabeformular alle 20 Felder zu sehen. Kann man das Abstellen?
Also mir gehts darum, dass Felder eines Datensatzes von zwei verschiedenen Abteilungen ausgefüllt werden sollen. Wie mache ich das?
-
Die verschiedenen Ansichten der Tabellen bieten die Möglichkeit, häufig benötigte Darstellungen, Sortierungen, Filter und Gruppierungen immer wieder schnell abrufen zu können, ohne die entsprechenden Einstellungen jedes Mal neu vornehmen zu müssen. Auf die Darstellung im Formular haben sie keinen Einfluss.
In Formularen werden einzelne Datensätze angezeigt, da gibt es nichts zu filtern oder zu gruppieren. Zur visuellen Gestaltung kann man die Felder in der Größe anpassen und so platzieren, wie man es optisch und ergonomisch für sinnvoll hält. Zusätzlich gibt es Gestaltungselemente wie Überschriften, Platzhalter oder auch Zeilenumbrüche. Auf diese Weise lassen sich ansehnliche und dennoch dynamische Formulare erstellen, die sich der Bildschirmfläche des jeweiligen Endgerätes anpassen.
Hat man sehr viele Datenfelder oder möchte die Informationen aus anderen Gründen optisch voneinander trennen, bieten sich dazu Karteireiter an. Das Prinzip kennt man ja aus vielen anderen Programmen. Sachlich zusammengehörige Datenfelder werden jeweils zusammengefasst und mit aussagekräftiger Bezeichnung versehen. So kann es in einer Kundentabelle bspw. Reiter für "Adressdaten", "Ansprechpartner", "Konditionen" und "Notizen" geben. Oder auch noch mehr, wenn man will. Wobei natürlich alle in Karteireitern befindliche Daten Teil des Datensatzes bleiben, aber es ist halt immer nur eine Teilmenge sichtbar.
Es ist zudem möglich, einzelne Datenfelder oder auch ganze Karteireiter ein- und ausblenden zu lassen. Zm Beispiel über "Zeigen/Nichtzeigen"-Schalter oder auch automatisiert nach Benutzer oder Rolle. Es gibt also viele Möglichkeiten zur Gestaltung und Steuerung der Anzeige von Datenfeldern in Formularen.
-
genau und diese Karteireiter finde ich nicht ;)
aktuelles Beispiel bei mir ist eine Tabelle mit folgenden Spalten:
Kunde, Bewertung, Umsatz
jetzt soll über die erste Eingabemaske zum jeweiligen Kunden eine Bewertung eingetragen und auch angezeigt werden
über eine andere Eingabemaske soll der Umsatz passend zum Kunden eingetragen und angezeigt werden
-
Formular öffnen und mot dem Schraubenschlüssel rechts oben den Administratormodus aktivieren. Dann erscheint unten eine Werkzeugleiste mit Optionen zu Feldern und Verknüpfungen sowie einem Punkt "Gestaltungslement". Klickt man dararuf, öffnet sich ein Untermenü, das u. a. auch "Karteireiter" enthält.
-
Mittlerweile zweifel ich an mir selbst, aber auch ein wenig an Ninox.
Ein Auftrag hat mehrere Schritte und die bekomme ich einfach nicht hin.
Verstanden habe ich, dass alles zu einem Auftrag in der gleichen Tabelle steht, auch wenn dann jeder Auftrag 100 einzelne Felder hat.
Um es übersichtlich zu halten nutzt man verschiedene Ansichten (Formular, Tabelle, etc) und benutzt in denen nur die Felder die wichtig sind
einfaches Beispiel:
Auftragstabelle mit den Spalten:
Anfragedatum, Kunde, Bezeichnung, Liefertermin, Auftragswert
In der Ansicht "Erfassung" soll der Bearbeiter nur die Daten für
Anfragedatum, Kunde, Auftrag
eintragen
In der Ansicht "Bearbeitung" soll der Bearbeiter nur die Daten
Auftrag
sehen
und die Daten für
Liefertermin und Auftragswert
eintragen
Die beiden Ansichten werden auch richtig angezeigt, nur wenn ich einen Datensatz eintragen möchte erscheint von rechts die Eingabemaske wieder mit ALLEN (Anfragedatum, Kunde, Bezeichnung, Liefertermin, Auftragswert) Feldern
Und den Kartenreiter an sich habe ich gefunden, nur wie man ihn einsetzt erschließt sich mir nicht.
-
Ich hoffe ich habe es richtig Verstanden, Vlt hilft dir das.
du kannst Felder nur für bestimmte Gruppen anzeigen lassen.
Sobald die Daten nichts mehr mit den eigentlichen Daten zu tun haben würde ich eine neue Tabelle machen oder wenn es eine mögliche sinvolle 1:n Verbindung gibt.
Fallbeispiel:
Es gibt eine Kunden Tabelle, ein Kunde kann mehrere Adressen/Emails/Telefonnummern haben. Das wäre dann eine 1:n Verbindung, jetzt musst du überlegen macht das Sinn, in diesem Fall nicht dann bleibt man bei einer 1:1 diese kann in der selben Tabelle Dargestellt werden also kommen die ganzen Adress/Telefon felder vom Kunden mit in die Kunden Tabelle.
Ein Kunde kann N viele Bestellungen aufgeben ( 1:N ). Überlegen ob es Sinn macht, ja tut es also eine Neue Tabelle KundenBestellung.
1 Kundenbestellung kann mehrere ArtikelPos. haben (1:N). Macht auch Sinn der Kunde soll ja mehr Bestellen können :D, da ArtikelPos sich nur auf Bestellungen bzieht würde ich es dann als Untertabelle von Kundenbestellungen machen.
Das wäre jetzt meine Denkweise wie ich eine Datenbank aufstelle.
-
Nochmal speziell zu Ansichten und Karteireitern:
Tabellenansichten dienen dem Blick auf die Gesamtmenge aller Datensätze für verschiedene Bedarfssituationen. Man kann Spalten ein- und ausblenden, die Daten sortieren, filtern oder gruppieren. Neben tabellarischen Ansichten sind auch Darstellungen in Form von Karten oder Diagrammen möglich. Erstellt man mit dem Plus-Zeichen eine "Neue Ansicht", bekommt man eine Auswahl, die u. a. den Punkt "Formular" anbietet. Dabei handelt es aber lediglich um eine spezielle Formular-Ansicht, die den gesamten Anzeigebereich einnimmt und hier keine Rolle spielt.
Die normalen Datenformulare, die erscheinen, wenn man in der Tabellenansicht auf einen Eintrag klickt, stellen jeweils einen einzelnen Datensatz mit allen Datenfeldern dar. Wenn man nicht alle Datenfelder auf einmal im Formular sehen will, gibt es verschiedene Möglichkeiten der optischen Gliederung. Eine dieser Möglichkeiten ist das Gestaltungselement "Karteireiter". Ein erster Karteireiter mit dem Namen der Tabelle wird von Ninox immer automatisch angelegt (plus drei weitere für "Dateianhänge", "Kommentare" und "Änderungshistorie") und alle Felder darin angeordnet. Bei Bedarf kann man aber selbst auch weitere Karteireiter erstellen, ihnen einen sinnvollen Namen vergeben und die Datenfelder darauf verteilen.
Um Datenfelder in andere Karteireiter zu verschieben kann man sie einfach per Drag 'n' Drop auf den gewünschten Reiter ziehen. Alternativ lässt sich - ebenfalls per Drag 'n' Drop - auch die Reihenfolge der Elemente in der Feldliste unter "Felder bearbeiten" ändern. Diese Reihenfolge bestimmt auch die Anzeige. Alle Felder, die unterhalb eines Karteireiters angeordnet sind, werden auch diesem Karteireiter angezeigt.
Nebenbei: Man kann Daten ähnlich wie in Excel auch direkt in der Tabelle bearbeiten. Normalerweise führt ein einfacher Klick in die Tabelle ja dazu, dass sich das Formular öffnet. Mit einem DOPPELklick in den sichtbaren Bereich der Tabelle bleibt das Formular geschlossen und die Spalten der Tabelle können direkt bearbeitet werden. Das ist eine zusätzliche Option, wenn man mal schnell einen Eintrag ändern will, ohne dazu das Formular aktivieren zu müssen.
Grundsätzlich: Es ist gut, wenn man ein Ziel vor Augen hat. Und im Vergleich zu konventionellen Entwicklungssystemen ist der Ninox-Weg in der Regel deutlich(!) kürzer. Aber auch er beginnt mit kleinen Schritten.
Content aside
- vor 3 JahrenZuletzt aktiv
- 19Antworten
- 1746Ansichten