Mieteingänge verwalten

Setup:

SeaTable Selfhosted

Problem:

Ich hänge ein bisschen bei dem Layout einer wiederkehrenden Mieteinnahme. Ich habe jeweils eine Tabelle angelegt für Kontakte, Liegenschaften, Wohneinheiten und Aufgaben. Jede Liegenschaft gehören Wohneinheiten und darin befinden sich Mieter. In den Wohneinheiten sind Preis hinterlegt für Warm und Kaltmiete. Die Mieteingänge haben wir bis dato in seperaten Excel Tabellen (Für jede Liegenschaftt eine) nach Monaten getrennt festgehalten. Also im Januar jede Tabelle geöffnet und geprüft ob die Mieteinnahme da ist. War diese nicht da, wurde das Feld rot markiert, wurde zuviel gezahlt wurde das Feld Gelb markiert und ich hatte ein Plus für die Nebenkosten. Wurde zu wenig bezahlt wurde das Feld gelb markiert und ich hatte ein Minus bei der Kaltmiete.

Ich versuche das nun mit SeaTable “einfacher” zu bauen, scheitere aber an einer “Idee” des eigentlichen Aufbaus. Ich habe für die Liegenschaft eigene “Views” gebaut nach Strasse getrennt, das hätte ich gerne als Basis für die Mieteinnahme damit ich dies nicht neu Tippen muss. Also am liebsten beim anlegen einer Wohneinheit (dort ist die Mieteinnahme drin) soll es sofort auch eine Möglichkeit der Mieteinnahme geben. Aber halt eben für jeden Monat separat. Aber wie bekomme ich bei “zu wenig”, “zuviel” oder “gar nicht” einen Überblick? Am liebsten hätte ich für jede Mieteineinheit gefühlt 3 Knöpfe mit “zu wenig” oder “zuviel” oder “gar nicht”, dann wird geguckt in welchem Monat ich mich befinde und automatisch wird eine neue Spalte oder Zeile eingeführt mit dem jeweiligem Monat. Problem: Dann kann ich aber von Hand die Summe nicht eintragen. In der Regel stimmen die Summen ja, das es nicht stimmt ist die Ausnahme.

Ich hoffe ich habe mich verständlich ausgedrückt, ist etwas wild ich weiss :wink:

Für Ideen wirklich dankbar

thx

Anbei der Aufbau meiner Base:

— COMPLETE BASE STRUCTURE WITH ALL BASES AND COLUMNS —
.
Table: Aufgaben (ID: 5q0o)
→ ToDo (text)
→ Wer (multiple-select)
→ Mieter (link → heet)
→ Wann? (date)
→ Wiedervorlage (date)
→ Beschreibung (long-text)
→ Etage (link-formula)
→ Adresse (link-formula)
→ Status (single-select)
→ Fotos (image)
.
Table: Kontakte (ID: heet)
→ Mieter-ID (auto-number)
→ Name (text)
→ Vorname (text)
→ Telefon (text)
→ Mail (email)
→ Typ (single-select)
→ Geburtsdatum (date)
→ Adresse (text)
→ Bankverbindung (text)
→ Verträge (file)
→ Notizen (long-text)
→ Mietername (formula)
→ Wohnungen (link → 1BaJ)
→ Liegenschaft (link-formula)
→ Aufgaben (link → 5q0o)
→ Dateien (file)
.
Table: Liegenschaften (ID: 0000)
→ Liegenschafts-ID (auto-number)
→ Addresse (text)
→ Typ (single-select)
→ Bild (image)
→ Größe (qm) (number)
→ Nutzfläche (number)
→ Mieteinnahmen / Jahr (text)
→ # Einheiten (formula)
→ Wohnungen (link → 1BaJ)
→ Gebäudeinfos (long-text)
→ AllgemeinstromzählerNr (text)
→ WasserzählerNr (text)
→ WärmepumpenzählerNr (text)
→ GaszählerNr (text)
→ Zählerstände (link → NfGe)
.
Table: Wohneinheiten (ID: 1BaJ)
→ Wohnungs-ID (auto-number)
→ Geschoss (text)
→ Typ (single-select)
→ Liegenschaft (link → 0000)
→ Kaltmiete (number)
→ Raummiete (number)
→ Nebenkosten (number)
→ qm (number)
→ Mieter (link → heet)
→ Einzug (date)
→ Auszug (date)
→ Zimmer / KDB (number)
→ Personenzahl (number)
→ Bilder (image)
→ Dateien (file)
→ Personalausweisnr (text)
→ StromzählerNr (text)
→ WarmWasserZählerNr (text)
→ KaltwasserZählerNr (text)
→ Wohnungsschlüssel (number)
→ Hausschlüssel (number)
→ Briefkastenschlüssel (number)
→ Übergabeprotokoll (button)
→ Mieteinnahmen (link → VUWN)
.
Table: Mieteinnahmen (ID: VUWN)
→ Miet-ID (auto-number)
→ Jahr (number)
→ Wohnung (link → 1BaJ)
→ Mieter (link-formula)
→ KM (link-formula)
→ NK (link-formula)
→ Zusatzraum (link-formula)
→ Gesamtmiete (formula)
→ Mieteingang (button)
→ MieteOK (formula)
→ JahresKM (formula)
→ JahresNK (formula)
→ 1 (number)
→ 2 (text)
.
Table: Zählerstände (ID: NfGe)
→ Z-ID (auto-number)
→ Jahr (text)
→ Liegenschaft (link → 0000)
→ Strom ZählerNr (link-formula)
→ Strom (31-12) (number)
→ Wasser ZählerNr (link-formula)
→ Wasser (31-12) (number)
→ Gas ZählerNr (link-formula)
→ Gas (31-12) (number)
→ Wärmepumpe ZählerNr (link-formula)
→ Wärmepumpe (31-12) (number)

Hallo hellspawny2k,

danke für die ausführliche Beschreibung – das hilft sehr! Dein Grundaufbau mit den verlinkten Tabellen ist schon richtig gut. Das Problem liegt im Aufbau der Mieteinnahmen-Tabelle. Du denkst noch in Excel-Logik (pro Monat eine Spalte). In SeaTable funktioniert das besser mit einer Zeile pro Wohnung pro Monat.

Empfohlener Aufbau der Tabelle “Mieteinnahmen”

Spalte Typ Erklärung
Wohnung Link → Wohneinheiten Bereits vorhanden
Monat Datum (oder Zahl 1-12) Der Abrechnungsmonat
Jahr Zahl Bereits vorhanden
Soll-KM Formel/Link-Formel Kaltmiete aus Wohneinheit ziehen
Soll-NK Formel/Link-Formel Nebenkosten aus Wohneinheit ziehen
Soll-Gesamt Formel {Soll-KM} + {Soll-NK}
Ist-Betrag Zahl Hier trägst du den tatsächlichen Zahlungseingang ein
Differenz Formel {Ist-Betrag} - {Soll-Gesamt}
Status Formel Siehe unten

Status-Formel

if({Ist-Betrag} = 0, "Nicht bezahlt",
  if({Differenz} = 0, "OK",
    if({Differenz} > 0, "Zu viel",
      "Zu wenig")))

Damit bekommst du automatisch den Status pro Zahlung – ohne Buttons.

Farbliche Hervorhebung

Nutze bedingte Zeilenfarben in der Ansicht (Ansicht → Farbe → Regeln):

  • Grün: Status = “OK”
  • Rot: Status = “Nicht bezahlt”
  • Gelb: Status = “Zu viel” oder “Zu wenig”

Das gibt dir exakt den Überblick, den du vorher mit den farbigen Excel-Zellen hattest.

Monatliche Einträge automatisch anlegen

Damit du nicht jeden Monat manuell Zeilen anlegen musst: Erstelle eine Automation (Automationen → Periodisch ausführen → Monatlich), die per “Zeile hinzufügen”-Aktion für jede aktive Wohneinheit eine neue Zeile in der Mieteinnahmen-Tabelle erzeugt.

Ansichten für den Überblick

Erstelle Ansichten in der Mieteinnahmen-Tabelle:

  • Pro Liegenschaft: Filter nach verlinkter Liegenschaft, gruppiert nach Monat
  • Offene Zahlungen: Filter: Status ≠ “OK”, sortiert nach Datum
  • Monatsübersicht: Filter nach aktuellem Monat, gruppiert nach Liegenschaft

Workflow im Alltag

  1. Am Monatsanfang werden automatisch neue Zeilen für alle Wohnungen erzeugt (Soll wird aus Wohneinheit gezogen, Ist-Betrag = 0 → Status “Nicht bezahlt”)
  2. Du öffnest die Ansicht “Offene Zahlungen” und trägst die eingegangenen Beträge im Feld Ist-Betrag ein
  3. Status und Farbe aktualisieren sich automatisch
  4. Am Monatsende siehst du auf einen Blick, wer nicht oder falsch gezahlt hat

So brauchst du keine Buttons und keine manuellen Spalten pro Monat – und hast trotzdem alle Informationen plus die farbliche Übersicht.

Ich hoffe, ich habe das so richtig verstanden und meine Hinweise helfen dir weiter.

Guten Morgen,

wow… das war mal ein absoluter Gamechanger für mich. Das hat mein Problem ziemlich auf den Punkt getroffen. Konnte es gestern Abend noch umsetzen und es sieht jetzt fast genauso aus wie ich es hier benötige. Die Automation muss ich noch in Ruhe testen aber das bekomme ich bestimmt hin.

Vielen Dank dafür…

Hallo leider ich noch mal :wink:

Die Automation macht nicht ganz das was ich möchte oder ich hänge wieder.

Ich hab nun alle Daten soweit eingetragen, das funktioniert auch wunderbar.

Jetzt habe ich die Automation gebaut, wenn ein neuer Monat beginnt dann soll er eine neue Zeile einfügen.

Das tut er auch. Eine neue Zeile wird hinzugefügt.

Diese ist natürlich leer und es ist natürlich nur eine Zeile.

Klar kann ich das jetzt ca. 90 mal kopieren und bekomme 90 neue Zeilen. Ich hätte allerdings den Wunsch, dass er die View “Alle Mieten” im Endeffekt einmal kopiert (Ich kann eine Zeile so auch kopieren mit allen Inhalten), die Spalte “Ist-Mieteingang” leer macht und das jeden Monat aufs neue.

Bekomme ich das mit einer Automation hin oder muss ich mir etwas Skripten (das wird dann eine neue Herausforderung für mich :wink: )

vielen Dank

In diesem Fall ist eine Automation mit 90 × “Lege eine Zeile an” nicht das Richtige. Wenn du die Zeilen manuell anlegen würdest, was würdest du dann tun?

Mit diesem Wissen werde ich dir helfen, ein kleines Python oder Javascript Script zu schreiben.

Danke für die Unterstützung, wirklich.

Also.

Aktuell sind das 89 Zeilen (Mieteingänge) mit den entsprechenden Verlinkungen zu den anderen Tabellen. Pro Monat.

Diese kann ich einfach markieren und dann auf duplizieren klicken, dann werden mir diese 89 Zeilen dupliziert.

Danach gehe ich hin und leere die Spalte “IST-Mieteingang”. Das mache ich dann jeden Monat, weil ich ja jeden Monat einen neuen Start benötige. Den neuen Monat erkennt SeaTable durch die Spalte Abrechnungsmonat wo einfach nur das aktuelle Datum angelegt wird (wie oben beschrieben).

Folgende Herausforderung ist allerdings noch da:

Sollte ich weitere Zeilen hinzufügen, sind es nicht mehr 89 sondern entsprechend mehr Eingänge. Sinnig wäre es, immer den aktuellen Monat zu kopieren und die Spalte “IST-Mieteingang” zu löschen. Dann kann man sich sicher sein, dass immer die richtige Anzahl an Zeilen kopiert wird.

Nochmals vielen Dank für die Unterstützung

Hallo und guten Morgen,

ich wollte mich noch einmal in Erinnerung bringen :wink:

Im Endeffekt benötige ich über alle Mieteinnahmen eine Sollstellung jeweils zum 01. eines Monats. Hätten Sie eine Idee?

Hier ein Python-Script, das du als Automation (zeitgesteuert, am 1. jeden Monats) einrichten kannst.

Was das Script macht:

  • Es holt alle Wohneinheiten aus der Tabelle “Wohneinheiten”
  • Für jede Wohneinheit wird eine neue Zeile in “Mieteinnahmen” erstellt
  • Der Abrechnungsmonat wird auf den aktuellen Monat gesetzt
  • IST-Mieteingang bleibt leer
  • Die Verknüpfung zur jeweiligen Wohnung wird gesetzt

Vorteil: Das Script ist unabhängig vom Vormonat. Neue Wohneinheiten (bzw. ALLE Wohneinheiten) werden automatisch berücksichtigt, ohne dass man manuell Zeilen kopieren muss. Wenn du Wohneinheiten z.B. auf Basis Ihrer Status oder sowas ausschließen willst, müsste man das noch einbauen.

Voraussetzung:

  • Tabelle “Wohneinheiten” mit allen Wohnungen
  • Tabelle “Mieteinnahmen” mit den Spalten: Wohnung (Verknüpfung → Wohneinheiten), Abrechnungsmonat (Datum), IST-Mieteingang (Zahl)
  • Soll-Werte (Kaltmiete, Nebenkosten etc.) sollten über Lookup-Formeln aus der verknüpften Wohneinheit kommen, dann werden sie automatisch befüllt
from seatable_api import Base, context
from datetime import datetime

base = Base(context.api_token, context.server_url)
base.auth()

TABLE = 'Mieteinnahmen'
LINK_COLUMN = 'Wohnung'
OTHER_TABLE = 'Wohneinheiten'

current_month = datetime.today().strftime('%Y-%m-01')

link_id = base.get_column_link_id(TABLE, LINK_COLUMN)

wohnungen = base.query(f"SELECT _id, Name FROM `{OTHER_TABLE}`")

if not wohnungen:
    print("Keine Wohneinheiten gefunden.")
else:
    for wohnung in wohnungen:
        new_row = {
            'Abrechnungsmonat': current_month,
            'IST-Mieteingang': None,
        }
        result = base.append_row(TABLE, new_row)
        new_row_id = result['_id']

        base.add_link(
            link_id, TABLE, OTHER_TABLE,
            new_row_id, wohnung['_id']
        )

    print(f"{len(wohnungen)} Zeilen für {current_month} erstellt.")

Die Tabellen- und Spaltennamen musst du ggf. an deine Base anpassen.

Hilft dir das weiter?
Bitte versuch zu verstehen, was wir hier machen. Es bringt nichts, wenn du einfach nur ein Script kopierst und dann es dann nicht mehr funktioniert, wenn du auch nur einen Spaltennamen änderst und du dir dann nicht helfen kannst. Unsere Dokumentation zu Python-Skripten unter Python hilft dir vielleicht weiter.

Viele Grüße
Christoph

Hallo hellspawny2k,

wenn dir meine Antworten gefallen haben, dann würde ich mich sehr über eine positive Rückmeldung bei Capterra (https://de.trustpilot.com/review/seatable.io), G2 (https://www.g2.com/products/seatable-seatable/reviews), Trustpilot (https://de.trustpilot.com/review/seatable.io) oder sonst wo freuen.

Ich danke dir.

Vielen lieben Dank,

ja, das hat mir massiv geholfen. In der Tat musste ich “Name” in “Geschoss” ändern aber dann läuft es und hat mir einen guten Einstieg in Python gegeben.

Ich hole mir die Eingänge über n8n aus einem anderen Programm, jetzt geht das sogar schon automatisch…

Ich liebe Seatable und jetzt beschäftige ich mich mal intensiver mit Python.

Vielen lieben Dank nochmals, Ihr habt mich einen ordentlichen Schritt weiter gebracht.

This topic was automatically closed 2 days after the last reply. New replies are no longer allowed.