0

Vermeidung doppelter Datensätze in Untertabelle

Hallo,

kenne mich nicht mit Ninox aus und finde irgendwie nicht die richtigen Handbücher, die mich weiter bringen würden.

Ich habe 2 Tabellen. A = master, b = detail über Untertabelle (Subtable) gelöst.

A beinhaltet Lieferanten, b Produktgruppen. Ein Lieferant kann mehrere Produktgruppen zugeordnet bekommen. Allerdings sollten die Produktgruppen nicht mehrfach pro Lieferant zugeordnet werden.

In der Form für die Untertabele versuche ich im update trigger festzustellen, ob diese Gruppe füe den aktuellen Lieferanten bereits vergeben wurde.

Mit select wird die spezielle Produktgruppe über alle Lieferanten gesucht. Ginge nur, wenn ich in der where clause die Beziehung zum Lieferanten vorgeben könnte. Hier die erste Frage. Wie wird die Beziehung von Master zu Detail technisch gelöst? gibt es im Detail die ID von dem Master als vestecktes Feld? Kann man darauf zugreifen? Wenn ja, wie?

2. Frage, wie kann ich ohne select genau für den aktuellen Lieferanten herausbekommen, ob die Produktgruppe bereits zugewiesen wurde? Befinde mich in der Eingabemaske für Tabele b.

let a := cnt((select b)[“Produkt Gruppe” = Z]); sucht über alle Lieferanten==> falsch

let a := cnt( b[“Produkt Gruppe” = Z]); gibt Fehler “Field not found b

3. Frage, wo finde ich Dokumentation, in der die Syntax von Befehlen mit Tabelle / Untertabelle beschrieben wird?

Vielen Dank

Roland

3 Antworten

null
    • Ninox-Professional
    • planoxpro
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Hallo Roland, mir sind das Datenmodell und der Ablauf nicht ganz klar. Die Tabelle “Produktgruppen” ist eine Untertabelle von “Lieferanten”? Und wenn du einem Lieferanten eine neue Produktgruppe zuordnen willst, legst du jedesmal einen neuen Datensatz in der Untertabelle an und tippst den Namen der “Produktgruppe” in ein gleichnamiges Textfeld? Nun willst du überprüfen, ob die eingetippte Produktgruppe zu diesem Lieferanten bereits existiert?

    1.) Die Verknüpfung auf Seiten der Untertabelle ist nur “versteckt”, wenn man das Formular von der Haupttabelle aus öffnet. Klickt man die Untertabelle direkt in der Liste links an und öffnet einen Datensatz, dann erscheint das Verknüpfungsfeld zur Haupttabelle. In Formeln und Skripten ansprechen kann man es immer über den Namen der Verknüpfung.

    2.) Eine Abfrage, ob die Produktgruppe bei diesem Lieferanten bereits exisitiert, könnte demnach bspw. so aussehen:

    let myPG := Produktgruppe;
    if cnt(Lieferanten.Produktgruppen[Produktgruppe = myPG]) > 1 then ...

    3.) In der Online-Doku gibt es eine Übersicht aller Funktionen:

    https://ninox.com/de/manual/erweiterte-Berechnungen/funktions-und-sprachreferenz

    Außerdem findet sich im Webinar-Team eine Referenz-Datenbank mit Kurzbeschreibungen und Anwendungsbeispielen.

    Grundsätzlich: Wenn ich mal davon ausgehe, dass Lieferanten mehrere Produktgruppe haben können und Produktgruppen auch bei mehreren Lieferanten vorkommen können, dann würde ich statt der Untertabellen-Lösung eine N:M-Verbindung empfehlen. 

    • Leonid_Semik
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Hallo Roland.

    Du befindest dich in der Tabelle Produktgruppen. In dieser Tabelle gibt es ein Textfeld “Produkt Gruppe” und ein Verknüpfungsfeld namens Lieferanten, wo du nur einen Lieferanten verknüpfen kannnst. Wenn ich richtig verstehe legst du eine Produktgruppe an und der Name der Produktgruppe kann mehrmals in der Tabelle vorkommen aber nur einmal pro Lieferant. Das die Gruppennamen nicht eindeutig sind, ist ungewöhnlich. Aber wenn es dennoch so ist kann man die Anzahl der Gruppen in dem angegebenen Lieferant mit den gleichen Namen über Punktnotation formulieren. Die Formel für ein Funktionsfeld:

    ---

    let me:=this;
    if me.Lieferant then
    cnt(me.Lieferant.Produktgruppen[“Produkt Gruppe”=me.“Produkt Gruppe”])
    end

    ---

    Leo

    • rolandprexler
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Vielen Dank für die Antworten. Bin erstaunt, wie schnell Ihr reagiert habt. Kenne ich von anderen DB Anbietern nicht so.

    Die Produktgruppen selbst werden in einer sepearten Tabelle  (X) gepflegt und sind eindeutig. 

    Ein Lieferant kann mehrere unterschiedliche Produktgruppen zugeordnet bekommen über LOV von (X) und mit test ob Gruppe in (X) existiert. Unterschiedliche Lieferanten können die selben Produktgruppen zugeordnet bekommen. Artikel hingegen können nur eine Produktgruppe von (X) zugeordnet bekomme