0

Neuen Datensatz per Schaltfläche erstellen inkl. Verknüpfungen

Hallo,

ich erstelle gerade Wartungsplanung.

Umgesetzt werden soll folgendes:

Ein Wartungsvorgang, hier benannt als AKTION beinhaltet mehrere Vorgänge.

Beispiel: Bei der Aktion Motorwartung sollen die Vorgänge Ölwechsel und Filterwechsel ausgeführt werden. Sind alle Vorgänge als Erledigt markiert kann man per Schaltfläche die Aktion neu anlegen.

Es gibt folgenden Tabellen:

‚Aktionen‘ -> hier wird die Wartung geplant es gibt eine Rückverknüpfung von ‚Vorgänge bei Aktionen‘, in dieser Tabelle ist auch die Schaltfläche hinterlegt. 

‚Vorgänge‘ -> hier werden die unterschiedlichen Vorgänge erfasst, es gibt eine Rückverknüpfung mit ‚Vorgänge bei Aktionen‘

‚Vorgänge bei Aktionen‘  -> hier werden Aktionen mit den Vorgängen zusammengeführt, es gibt eine Verknüpfung auf ‚Vorgänge‘ und eine Verknüpfung auf ‚Aktionen‘, hier werden Vorgänge auch als erledigt makiert

 

An einer Stelle komme ich allerdings nicht weiter. Es gelingt mir nicht, die Vorgänge mit in den per Schaltfläche aus dem vorhandenen in den neu angelegten Datensatz der Aktion zu übernehmen. Dort sollen die Vorgänge dann auch als nicht erledigt aufgeführt werden.

Bin für jede Hilfe dankbar.

VG

Andre

16 Antworten

null
    • Team Lead Customer Service
    • joerg
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Hallo Andre,

    das ist ein interessanter Anwendungsfall. Ohne das Datenmodell genauer zu kennen, kann man dazu nicht allzuviel sagen.

    Das Kopieren von Datensätzen ist in den meisten Fällen nicht notwendig/sinnvoll. Of reicht es z.B. Aktionen mit verschiedenen Stati zu versehen wie "Geplant", "In Bearbeitung" oder "Erledigt", wobei aber die Datensätze alle in der gleichen Tabelle verbleiben. 

     

    Das wäre eine gute Frage für unser Webinar und es wäre schön, wenn du sie dort einmal zur Sprache bringen könntest.

    Dort können sicher auch einige Nutzer mit ähnlichen Anwendungsfällen Erfahrungen beisteuern.

    Für das Webinar, das wöchentlich mittwochs stattfindet, kannst du dich über den folgenden Link anmelden: 

    https://zoom.us/webinar/register/WN_Asq34-biQxGS93h03BmyfQ

    Vielen Dank.

    Gruß, Jörg

    • Andre
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Neue Idee...

    Wenn ich den Datensatz manuell über das Menü kopiere werden alle Daten wie gewünscht übernommen. Ich müsste also nur noch das geplante Datum ändern.

    Jetzt versuche ich gerde eine Schaltfläche dafür anzulegen. Ich versuche gerade mit "duplicate" den Datensatz zu duplizieren. Das gelingt mit aber nicht. Kann mit bitte mal jemand die Verwendung von "duplicate" erläutern?

    Danke +VG

    • Andre
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Sorry, Fehler meinerseits. Das Kopieren der Verknüpfungen mit den Untertabellen funktioniert leider doch nicht. 

    Duplicate habe ich inzwischen erfolgreich getestet, bringt mich aber in der Sache dann leider auch nicht weiter.

    • Dirk_Pulver_2020
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Ich verwende die duplicate Funktion öfters. Verknüpfte Untertabellen werden ebenfalls kopiert - natürlich muss man dann evtl. nach dem duplicate per Script die Status in der Untertabelle setzen, wenn diese sich nach der Kopie ändern (z.B. zurücksetzen) sollen, was man aber in einer Schleife gut lösen kann. Mann muss nur wissen dass man nach der dupklicate Funktion im ursprünglichen Datensatz stehen bleibt. Will man also den neu erzeugten ändern, muss man diesen erst öffnen. Ich löse das z.B. so:

    let nralt := this.Nummer;
    let zznew := duplicate(this);
    openRecord(zznew);

    • Dirk_Pulver_2020
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Kleine Korrektur:

    wenn man so schreibt

    let nralt := this;
    let zznew := duplicate(this);
    openRecord(zznew);

    kann man dann mit nralt.[Feldname] im neuen Datensatz auf die Felder des ursprünglichen Satzes zugreifen und so auch gegenseitige Verknüpfungen setzen usw....

    • Andre
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Vielen Dank, aber ich komme leider nicht weiter (bin aber auch Datenbank Neuling)

     

    Ich schildere mein Problem noch einmal ausführlicher.

     

    Tabelle1 -> Wartung

    Tabelle2 -> Werkzeug

    Tabelle3 -> Verknüpfung von Wartung und Werkzeug. Es sollen mehrere Werkzeuge mit einer Wartung verknüpft werden.

     

    In Tabelle1 ( Wartung) möchte ich eine Schaltfläche mit die der Datensatz dupliziert wird. Dabei sollen auch die benötigten Werkzeuge wieder in dem neuen Datensatz angezeigt werden. 

     

    Das duplizieren funktioniert, die Werkzeuge werden aber nicht mit übernommen.

     

    Nach meinem Verständnis müsste dazu in Tabelle 3 ausgelesen werden welche Verknüpfungen für die alte Wartung mit welchem Werkzeug vorhanden sind und dann auf dieser Basis neue Datensätze mit Verknüpfung von Werkzeug un neuer Wartung angelegt werden.

     

    Oder wie auch immer man das umsetzten kann….

    Oder ist meine Herangehensweise / Datenbankmodell ganz falsch?

    • Torsten_Stang.1
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Hallo Andre,

     

    da je Wartung mehrere Werkzeuge zum Einsatz kommen - ein Werkzeug aber auch in mehreren Wartungen benötigt wird, ist Dein Ansatz mit der n:m-Beziehung mittels Deiner 'Tabelle3' vollkommen korrekt.

     

    Der Trick ist es, in Deiner 'Tabelle3' die Verknüpfung zur Tabelle 'Wartung' als Komposition einzurichten, dann wird eine Befehlsschaltfläche mit dem Script

     

    let myNew := duplicate(this);
    popupRecord(myNew)

     

    die Wartung wie gewünscht samt n:m-Verknüpfungen duplizieren.

     

    Zum Spicken hab ich das mal grob nachgebaut:

    https://www.dropbox.com/s/xgik09r9pzdnuae/Wartungen.ninox?dl=0

     

    lg, Torsten

    • Andre
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Danke Thorsten!

    sieht genau nach dem aus, was ich gesucht habe.

    ich probier das mal in meine Datenbank einzubauen.

     

    VG

    Andre

    • Andre
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Ich hänge gleich mal noch eine Frage an:

    In der Untertabelle soll es eine Checkbox "erledigt" geben.

    Jetzt möchte ich eine Abfrage generieren mit der geprüft wird, ob alle zugehörigen Datensätze der Untertabelle als "erledigt" markiert sind.

    let my := this;
    let counter := 0;
    for i in my.Task do
    if Task.'durchgeführt' = false then
    counter = counter + 1
    end
    end;
    if counter = 0 then ergebnis := "ja" else ergebnis := "nein" end

     

    Als Ergebnis erhalte ich jedoch immer "ja"

    • Leonid_Semik
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Hallo Andre,

    Man kann die Aufgabe auch ohne Schleifen erledigen:

    ---

    if cnt(Task[not 'durchgeführt'])=0 then "ja" else "nein"

    ---

    Nninox prüft die Anzahl der Datensätze in der Untertabelle Task, wo 'durchgeführt' nicht angeklickt ist (not 'durchgeführt' kann man auch mit  'durchgeführt'!=true ersetzen ). Wenn die Anzahl gleich Null ist, sind alle Datensätze erledigt.

     

    Leo

    • Andre
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Funktioniert bei mir nicht, ich hbae da wohl noch einen Fehler eingebaut.

    Das Ergebnis soll als "ja" oder "nein" in dem Texfeld namens Ergebnis ausgegen werden

     

    if 'VK Task bei Projekt'.'durchgeführt' = true then
    ergebnis := "nein"
    else
    ergebnis := "ja"
    end

     

    Es wird aber immer nur "ja" ausgegeben

    • Andre
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Sorry habe in dem Beitrag dirket hier drüber die falschen Zeilen reinkopiert.

    Ich verwende

    if cnt('VK Task bei Projekt'.'durchgeführt') != true then
    ergebnis := "Nein"
    else
    ergebnis := "Ja"
    end

    und das Ergebnis ist immer JA

    • Leonid_Semik
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Hallo Andre,

    die Eckklammern sind hier obligatorisch:

    ---

    ergebnis:=if cnt('VK Task bei Projekt'[not 'durchgeführt'])=0 then "Ja" else "Nein"

    ---

    Leo

    • Andre
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Danke Leo :-)

    • Andre
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Kann man die "Abfragerichtung" auch umdrehen?

    Soll heißen, ist es möglich aus der Untertabelle in welcher sich die Checkbox "durchgeführt" befindet, bei setzen des Häkchens zu prüfen, ob in allen zum einem Projekt gehörigen Untertabellen die Checkbox durchgeführt gesetzt wurde um dann in einem Feld der Obertabelle Projekt einen Wert in einem Feld zu setzen?

    • Team Lead Customer Service
    • joerg
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Hallo Andre, 

    ja, das sollte auch möglich sein. Du kannst die einzelnen Bedingungen (also cnt('VK Task bei Projekt'[not 'durchgeführt'])=0 ) durch ein 

    and 

    mit einander verbinden und somit mehr als eine Untertabelle überprüfen.

    Gruß, Jörg

Content aside

  • vor 4 JahrenZuletzt aktiv
  • 16Antworten
  • 3443Ansichten