0

Hilfe für Einsteiger

Hallo,

ich habe eine Tabelle mit Wohnungen.

Diese haben qm und Eigentumsanteile.

 

Dann habe ich eine zweite Tabelle (vermutlich unnötig) Haus.

Weil die gesamten Wohnungen auf 2 Häuser verteilt sind

 

Nun möchte ich eine Tabelle anlegen (Verteilerschlüssel) und

je nach Name der Verteilung die Summe aus Tabelle Wohnung summieren

 

BSP

MEA Objekt - Summe aller Eigentumsanteile (aller Wohnungen)

MEA Haus - Summe aller Eigentumsanteile der Wohnungen zugehörig zu Haus 1

 

Wie muss ich das umsetzten?

 

VG

Kai

19 Antworten

null
    • Ninox-Professional
    • planoxpro
    • vor 6 Monaten
    • Gemeldet - anzeigen

    Hallo Kai, mir ist das aktuelle Datenmodell nicht ganz klar, aber grundsätzlich: Da sich Betriebskosten u. ä. Basisdaten ja immer auf ein Gebäude/Grundstück beziehen, würde ich die Häuser in einer eigenen Tabelle belassen und die dazugehörigen Wohnungen mit ihren jeweiligen Flächen und Anteilen in einer Untertabelle speichern (lässt sich auch im Nachhinein noch machen). So lassen sich alle relevanten Werte sehr einfach in ein Verhältnis zum übergeordneten Haus setzen und entsprechende Berechnungen vornehmen.

    • Ninox-Professional
    • planoxpro
    • vor 6 Monaten
    • Gemeldet - anzeigen

    Ich habe mal eine kleine Demo-Datenbank dazu gemacht (herunterladen, entpacken und über "Archiv importieren" in den eigenen Arbeitsbereich laden).

    • dervespakai
    • vor 6 Monaten
    • Gemeldet - anzeigen

    Super Klasse, vielen Dank vorab.

    Ich schaue es mir ganz gespannt nachher an.

     

    VG

    Kai

    • dervespakai
    • vor 6 Monaten
    • Gemeldet - anzeigen

    Also, dickes dickes Lob, wie nah Du schon mit meiner eher bescheidenen Beschreibung gekommen bist.

    Ich habe mir dazu jetzt viele Gedanken gemacht und möchte meine Rückmeldung in zwei Teile splitten.

    1) zu Deiner DB

    Ich verstehe es so, dass eine „Wohnung“ angelegt wird und diese dann einem Objekt Haus zugeordnet wird.  Wie kann ich denn eine aus Versehen falsche Zuordnung verändern, ohne gleich zu löschen?

     

    2) Das funktioniert so leider nicht, weil die Sache doch wesentlich komplexer ist.

    Ich beschreibe es mal so:

    Es gibt gesamt aktuell 2 Eigentümergemeinschaften

    Zu jeder dieser Gemeinschaften gehören je 2 Häuser. (gesamt also 4 Häuser)

    In diesen Häusern sind je 9 Wohnungen.

    Die Betriebskosten werden mal nach Mea, mal nach Qm, mal nach Anzahl der Wohneiheiten Je Gemeinschaft (also 18)mund natürlich nach Verbrauch aufgeteilt.

    Also leider mehrernSchlüssel je nach Art (Kategorie) der Kosten.

    Strom gibt es zb 3 Mal

    Einmal für Haus 1 zb Flur

    Einmal für Haus 2

    für die Tiefgarage

    (und das dann jeweils auch für die anderen beiden Häuser)

     

    Grobe Richtung war halt, 1 x dies Verteilung mit Tabellen aufzubauen.

    Danach werden die Belege erfasst und zuletzt wird dann festgelegt,

    welcher Schlüssel für welche Kategorie greift.

     

    Vg

    Kai

      • Ninox-Professional
      • planoxpro
      • vor 5 Monaten
      • Gemeldet - anzeigen

       

      Man muss natürlich nicht nicht mit Untertabellen arbeiten, sondern kann statt dessen auch normale 1:N-Verknüpfungen nutzen. Allerdings sind Häuser und darin befindliche Wohnungen das ideale Beispiel für den sinnvollen Gebrauch von Untertabellen. Denn eine Wohnung lässt sich nicht verschieben, sie ist und bleibt immer an ein bestimmtes Haus gebunden. Wird dieses Haus entfernt (Datensatz gelöscht), löst sich zwangsläufig auch die Wohnung in Wohlgefallen auf (wird automatisch mitgelöscht).

      Deshalb legt man zuerst das Haus/Objekt an und dort dann die dazugehörigen Wohnungen, welche dadurch automatisch fest dem betreffenden Haus untergeordnet sind. Eine Änderung der Verknüpfung, also das Verschieben einer Wohnung von Haus A in Haus B, ist dabei gerade nicht vorgesehen (wäre technisch aber möglich).

       

      Zum Thema Verknüpfungen gibt es weitere Informationen:

      https://forum.ninox.de/t/p8h0t0r/einsteiger-tutorial-zu-verknupfungen-in-ninox

       

      Zu den verschiedenen Berechnungsmethoden:

      Alle basieren ja letztlich auf der Zahl an Wohnungen oder deren Größe. Beide Informationen liegen vor. In meinem Beispiel hatte ich der Einfachheit halber nur einen Gesamtwert für die Betriebskosten angegeben, um die Berechnung nach MEA zu demonstrieren. In der Praxis sind es natürlich viele verschiedene Posten, die ebenfalls in einer Untertabelle zum jeweiligen Objekt erfasst werden können. Dort ließe sich auch der jeweilige Schlüssel hinterlegen und zur Berechnung der anteiligen Kosten heranziehen (z. B. über ein Auswahlfeld mit den Optionen MEA/Fläche/Einheit).

    • dervespakai
    • vor 5 Monaten
    • Gemeldet - anzeigen

    Also vorweg ein dickes Lob und vielen vielen Dank.

    Ich denke, dass ich gedanklich schon viel weiter gekommen bin.

    Ich lese eifrig Eure Anleitungen und schaue Eure Videos. Auch Deinen Link betreffend der Beziehungen habe ich „durchgearbeitet“. Ich versuche gerade parallel zu Lernen und auch schon praktisch anzuwenden. Das kollidiert leider ein wenig :)

     

    Ich füge mal meinen Ansatz an.

     

    Kurze Fragen:

    - Wenn ich ein dynamisches Auswahlfeld nutze. Erstelle ich dann eine Beziehung zwischen den Tabellen?

    - Speicher ich mit dem dynamischen Auswahlfeld quasi den Index auf die ursprüngliche

    Tabelle Kategorie, oder speicher ich in dem Beleg jedes Mal die Kategorie?

     

    Weitere Frage:

    Ich habe nun quasi die Anteile der jeweiligen Wohnung hinterlegt.

    1 x nach mea

    1x nach qm

    1x nach anzahl

    und 1 x für einen ind. Verbrauch.

     

    Die Idee war nun, Belege zu erfassen und diese dann einer Kategorie zuzuordnen.

    In der Kategorie ist bereits hinterlegt, ob diese umlagefähig ist, oder nicht.

    (Das ist später für die Abrechnung wichtig)

    Auch ist mit einem dynamischen Mehrfachauswahlfeld hinterlegt, ob der Beleg für 

    - die Abrechnung

    - den Wirtschaftsplan, oder

    - der Rücklage

    relevant ist.

     

    Mehrfachauswahl deswegen, weil wenn der geplante Betrag aus

    dem Wirtschaftsplan gleich dem tatsächlichen aus der Abrechnung ist, dann spar

    ich mir es den Beleg nochmals zu erfassen und kann einfach beides anwählen.

     

    Hast Du einen Tip für mich, wie ich nun eine Verbindung von dem Beleg zu dem Anteil schaffe?

    Muss ich mir noch einen Buchungsort schaffen?

    In der Abrechnung soll es wie folgt und beispielhaft aussehen:

     

    Strom            Haus 1                 Belegbetrag     mein Anteil

    Strom            Haus 2                 Belegbetrag     kein Anteil, weil anderes Haus

    Strom            Tiefgarage          Belegbetrag     mein Anteil

    (Wie wird dieser Ort eingebunden)

    Hausmeister Gemeinschaft 1 Belegbetrag   mein Anteil

     

    Ey ey ey - ob das einer kapiert?

    vg

    Kai

    • dervespakai
    • vor 5 Monaten
    • Gemeldet - anzeigen

    OK, den Teil mit der Verknüpfung bei dem Auswahlfeld dynamisch ziehe ich zurück.

    Die Antwort hat sich aus einem Video Tutorial ergeben.

    Es wird keine Verknüpfung erstellt.

     

    Die Frage nach dem wie geht es weiter bleibt leider noch

      • Ninox-Professional
      • planoxpro
      • vor 5 Monaten
      • Gemeldet - anzeigen

       

      Genau, ein Dynamisches Auswahlfeld (DAF) stellt keine Verknüpfung im engeren (ninox'schen) Sinne dar. Es speichert lediglich die Information, welcher Eintrag, also welcher Datensatz ausgewählt wurde. Rückgabewert bei einer Abfrage ist die Datensatznummer (bei Mehrfachauswahlfeldern als Array), anhand derer bei Bedarf eine Beziehung zu dem betreffenden Datensatz und dessen Inhalten hergestellt werden kann (Ansichten, Auswertungen u. ä.).

      Grundlegender Unterschied zwischen Verknüpfungen und DAF ist wohl der, dass bei letzteren die Gegentabelle nichts von der Verbindung weiß. Verknüpfungen hingegen sind automatisch immer auf beiden Seiten sichtbar, und man kann mit einem Klick den jeweils verknüpften Datensatz öffnen.

      DAF sind als Ergänzung bzw. Alternative zu den normalen (statischen) Auswahlfeldern gedacht und dienen in erster Linie dem Zweck, Auswahlen mit häufig wechselnden Einträgen besser und flexibler handhaben zu können. Sich nicht oder selten ändernde Auswahlen, die sich nicht aus sowieso vorhandenen Tabellen ergeben, würde ich nach wie vor eher mit normalen Auswahlfeldern umsetzen. In deiner DB gilt das bspw. für 'tblBuchung'. Die Verbindung von 'tblBuchung' zu 'tblKategorie' wiederum würde ich wahrscheinlich eher als Verknüpfung umsetzen (statt DynAF), weil dann dort sofort alle entsprechenden Belege angezeigt würden und auch aus der Kategorie heraus ein neuer Beleg dazu erfasst werden könnte.

      Das andere müsste ich mir noch  mal genauer ansehen.

    • Ninox-Professional
    • planoxpro
    • vor 5 Monaten
    • Gemeldet - anzeigen
     said:
    Hast Du einen Tip für mich, wie ich nun eine Verbindung von dem Beleg zu dem Anteil schaffe?

    Was heißt "Verbindung von dem Beleg zu dem Anteil"? Soll zu jedem einzelnen Beleg der Anteil jeder Wohnung ermittelt werden? Das würde ja voraussetzen, dass sämtliche Kosten immer auf alle 4 Häuser bezogen und umgelegt werden. Kann natürlich sein, kommt mir aber seltsam vor.

    Anders ließe es sich im vorliegenden Datenmodell m. E. aber gar nicht machen, denn der Beleg hat augenscheinlich keine Zuordnung zu einem Haus oder einer WEG. Und bei den Wohnungen sind zwar die verschiedenen Prozentwerte hinterlegt, aber aus der Kategorie geht nicht hervor, welcher davon zur Anteilsberechnung herangezogen werden soll.

    Vielleicht sollte man das Datenmodell insgesamt noch mal überdenken. Ich bin kein Immobilien-Experte. hatte aber schon mit solchen Sachen zu tun, und bisher kannte ich es so, dass sämtliche Kosten immer auf das jeweilige Objekt (Liegenschaft/Gebäude/Adresse/Vertragspartner/Auftraggeber) bezogen waren. Und dass sie im Falle von Sammelrechnungen nach Objekt gesplittet werden. Dann hat man genaue Werte pro Haus und kann daraus die Anteile je Wohneinheit berechnen.

    Für mich wären deshalb die Objekte/Häuser auf der obersten Ebene, darunter wie gehabt die dazugehörigen Wohneinheiten. Die Eigentümergemeinschaften würde ich ebenfalls in einer (Haupt-) Tabelle speichern und darunter die Mitglieder/Eigentümer. Das Objekt ließe sich dann mit der betreffenden WEG verknüpfen, die Wohnungen mit den jeweiligen Eigentümern.

    Bei den Kategorien würde ich den Berechnungsschlüssel hinterlegen und die Belege zusätzlich mit dem Objekt verknüpfen (bei Sammelrechnungen für mehrere Objekte ggf. gesplittet).

    Damit hätte man m. E. die Grundlage, alle relevanten Berechnungen vornehmen zu können.

    Leider habe ich gerade nicht die Zeit, das zur Veranschaulichung mal in einer Demo-DB umsetzen zu können. Deshalb hier erst mal nur in der Theorie.

    • dervespakai
    • vor 5 Monaten
    • Gemeldet - anzeigen

    Hab vielen Dank,

    ich werde mich mit dieser Idee des Datenmodells beschäftigen.

     

    vg

    Kai

    • dervespakai
    • vor 5 Monaten
    • Gemeldet - anzeigen

    Ich bekomme das leider nicht hin und würde nochmals um Hilfe bitten.

    Wenn ich eine neue Tabelle "A" erstelle und dort

     

    eine Spalte 

    - Bezeichnung 

    - und eine Formel einfüge, die mir aus einer anderen Tabelle (B) einen Datensatz Nr. "3" und dort das Feld "y" zurückgeben soll.

    Wie geht das dann?

    Die Formel müsste aber für jeden Datensatz der Tabelle (A)  auf ein anderes Feld der

    Tabelle (B) zugreifen

    (case, if ...... ?)

     

    VG

    Kai

     

    PS besteht die Möglichkeit gegen Zahlung von Geld 1ne Stunde Hilfe zu erhalten?

    • dervespakai
    • vor 5 Monaten
    • Gemeldet - anzeigen

    Wobei ich glaube, dass Formel hier nicht stimmt - 

    es geht darum den Wert des Feldes aus einem bestimmten Datensatz der Tabelle (B)

    in eine Tabelle (A) zu übernehmen.

     

    vg

    Kai

      • Developer by Smartplanung
      • smartplanung
      • vor 5 Monaten
      • Gemeldet - anzeigen

       wie Du die Konstellation beschrieben hast ginge es so:

      record('Tabelle B', 3).y

      oder

      first(select 'Tabelle B' where Nr = 3).y

       

      Wenn die Records in Tabelle B gleich bleiben und es z.B. nur 4 Stück gibt, könnte man das so lösen:

      let vCases := "abc"
      let result := switch vCases do
        case "abc": record('Tabelle B', 1).y
        case "bcd": record('Tabelle B', 2).y
        case "cde": record('Tabelle B', 3).y
        case "def": record('Tabelle B', 4).y
      end;
      result
      

      Wenn Du diesen Code in ein Formelfeld packst, kannst Du "let result :=" auch weglassen, dann werden die Cases direkt angezeigt. Willst Du aber mit dem Case weiter arbeiten, empfiehlt sich das setzen einer Variable.

    • dervespakai
    • vor 5 Monaten
    • Gemeldet - anzeigen

    prima Danke

    ich versuche mal mit dieser Variante weiterzukommen.

    let vCases := Ort;
    let result := switch vCases do
        case "MEA Objekt":
            record(Wohnung,3).'Wohnung_MEA_Objekt %'
        case "MEA Haus 16":
            record(Wohnung,3).'Wohnung_MEA_Haus %'
        case "MEA Qm":
            record(Wohnung,3).'Wohnung_Qm_%'
        case "MEA Einheiten":
            record(Gemeinschaft,1).'Prozent von Einheiten'
        case "Verbrauch":
            100
        default:
            0
        end;
    result

     

    Frage: Dort wo jetzt Wohnung, D R E I steht,

    würde ich gerne einen Wert aus einer anderen Tabelle einsetzen.

    quasi so:

    record(Wohnung,        WERT AUS ANDERER TABELLE.       ). 'Wohnung_MEA_Objekt %'

    Wenn ich das aber versuche erhalte ich die Fehlermeldung, dass dieser Wert mehrere Werte beinhalten kann.

     

    Gibt es dafür auch eine Lösung?

     

    vg

    Kai
        

     

    ps dieser Wert aus der anderen Tabelle hat eben genau die Eigenschaft, dass

    er aus einem Auswahlfeld stammt

    • Ninox-Professional
    • planoxpro
    • vor 5 Monaten
    • Gemeldet - anzeigen
     said:
    ps dieser Wert aus der anderen Tabelle hat eben genau die Eigenschaft, dass
    er aus einem Auswahlfeld stammt

    Ist es vielleicht sogar ein Mehrfachauswahlfeld? Diese geben immer ein Array zurück, also quasi eine Liste mit mehreren Werten.

    • dervespakai
    • vor 5 Monaten
    • Gemeldet - anzeigen

    Nein, es ist das Feld der

    Wohnungs Nr

    • Ninox-Professional
    • planoxpro
    • vor 5 Monaten
    • Gemeldet - anzeigen

    Dann erkläre doch bitte mal genauer, was sich hinter WERT AUS ANDERER TABELLE verbirgt.

     said:
    record(Wohnung,        WERT AUS ANDERER TABELLE.       ). 'Wohnung_MEA_Objekt %'

    Die Syntax der record()-Funktion lautet:

    record(TABELLENNAME, DATENSATZNUMMER)
    

    Damit wird der Datensatz mit der angegebenen Nummer (Zahl) in der angegebenen Tabelle adressiert. Die Angabe

    record(Wohnung, 3)

    führt beispielhaft also zum Datensatz mit der Nr. 3 in der Tabelle 'Wohnung'.

    Soll aus diesem Datensatz auch direkt der Wert eines bestimmten Datenfeldes eingelesen werden, kann man selbiges auch gleich mit adressieren:

    record(TABELLENNAME, DATENSATZNUMMER).FELDNAME
    

    Das heißt, aus der Tabelle 'Wohnung' lässt sich kein Wert aus einer anderen Tabelle einsetzen. Aber vielleicht meintest du was anderes.

    • dervespakai
    • vor 5 Monaten
    • Gemeldet - anzeigen

    Danke Dir, genau das meine ich 

    und auch wieder nicht.

     

    Ich möchte statt der fest vorgegebenen Datensatznummer (also Zahl 3)

    gerne eine Variable haben. Nennen wir Sie „x“

     

    record (Tabellenname, X).Feld aus Datensatz der Tabellenname

    Und „x“ soll quasi den Wert eines Feldes aus einer anderen Tabelle annehmen.

     

    vg

    Kai

      • Ninox-Professional
      • planoxpro
      • vor 5 Monaten
      • Gemeldet - anzeigen

       

      Man kann für die Datensatznummer prinzipiell auch eine Variable einsetzen, klar. Inwieweit das inhaltlich Sinn macht, weiß ich jetzt nicht, aber rein technisch gesehen müsste man den Wert auf andere Weise ermitteln, in der Variable 'x' speichern und diese dann in die record()-Funktion einsetzen. Dazu müsste man wissen, aus welchem Datensatz welcher Tabelle der Wert für 'x' geholt werden soll. Und der Wert selber sollte sinnvollerweise eine Nummer eines Datensatzes der beim record() adressierten Tabelle sein. Was im Grund nur auf ein dynamisches Auswahlfeld zutrifft.

      Das ist aber jetzt sehr viel Spekulation. Mir ist aus den Beschreibungen die Ausgangssituation nicht klar geworden, was genau erreicht werden soll und welche Tabellen sowie Felder daran beteiligt sind.

Content aside

  • vor 5 MonatenZuletzt aktiv
  • 19Antworten
  • 128Ansichten
  • 3 Folge bereits