BASE - Vorgängerdatensatz - Differenz bilden

Ich versuche gerade die Base Sparte zu erkunden :wink:

Dazu habe ich mir zum Thema „Verbrauchsabrechnung“ eine Datenbank erstellt. Ich möchte gerne nach der Eingabe des aktuellen Zählerstandes die Differenz zum letzten Zählerstand errechnen lassen. Das Problem ist allerdings, dass der Zählerstand( den ich brauche um die Differenz zu bilden) im Vorgängerdatensatz gespeichert ist und ich keine Funktion/ Möglichkeit gefunden habe diesen „abzugreifen“.

Kann mir jemand auf die Sprünge helfen?

Hallo.

Da gibt es auch keine Funktion.

Dennoch ist es möglich in BASE bspw. eine Verbrauchsabrechnung (mit der einen oder anderen Einschränkung) zu erstellen.

Du solltest die DB-Tabellen “Mieterstammdaten”, “Zähler”, “Ablesung” und “Abrechnung” halten.

Packe in die Mieterstammdaten (hier nur der Einfachheit halber) das DB-Feld “Objekt” und das DB “Lage” (z.B. Erdgeschoß).

Verknüpfe die relevanten DB-Felder miteinander. Achte auf sinnvolle Vergabe von dynamischer und fester Verknüpfungsart.

Betrachte dazu einen Zähler als -fest- den Mieter als Verbraucher und -dynamisch-. Der Mieter kann sich ändern, der Zähler bleibt bzw. kann ausegtauscht werden. Lege also drei - vier zusätzliche DB-Felder für Zählernummer (und die Nummern der ggf. ausgetauschten Zähler) an.

Füge in die DB-Tabelle “Ablesung” u.a. auch ein Rechenfeld “Differenz” ein.

Führe jährlich die “Ablesung” durch. Ist sie durchgeführt, protokolliere Sie. (Das macht eine BASE-Report-Vorlage).

Mache die DB-Tabelle “Ablesung” wieder “scharf” für das Folgejahr. Fertige auch ein Protokoll bei Verbraucherwechsel an. (Verbraucherwechsel: der Mieter hat also gekündigt und die Abrechnung erfolgt mitten im Jahr.)

Betrachte Deine Datensätze in den DB-Tabellen “Zähler” und “Ablesung” eher als “statisch”. Es kommen im Regelfall keine neuen Datensätze hinzu. Die Zähler bleiben angenommen konstand und die Ablesungen auch. (Es gibt keine Unterformulare.)

Es kommen z.B. neue Datensätze hinzu, wenn Du ein neues Objekt übernommen hast oder in einem vorhandenen Objekt eine neue Verbrauchsstelle installiert wurde.

Ich hoffe es hilft etwas.

Danke für die Ideen!

Deine Vorschläge sind allerdings mehr als ich eigentlich im Sinn hatte. Ürsprüglich wollte ich einen Datensatz für jeden Tag anlegen, in dem der aktuelle Zählerstand, sowie einige Temperaturen erfasst werden. Das erste größere Problem war dann mein Versuch, irgendwie eine Differenz mit dem alten Zählerstand hinzubekommen. Die DB auszubauen um damit eine BK Abrechnung erstellen zu können ist sicherlich ein größeres Projekt, an das ich mich allerdings erstmal nicht heranwage, solange ich nicht die Basics beherrsche.

Ich versuche mal einen DB entwurf hier anzuhängen, da könntest Du mal reinschauen ob es für mein Problem eine einfache Lösung gibt.

Heizung.pb (2.12 KB)

Hallo.

Ich habe ein paar Änderungen eingefügt.

Beachte bitte auch die beigefügte PDF-Datei. Sie erklärt Schritt für Schritt, wie Du mit Deiner Datenbank nach den Änderungen umgehen solltest.

Ich klinke mich dann hier an dieser Stelle aus :slight_smile:

Demo_Tägliche Ablesung.zip (940 KB)

Hallo schreckag und dotpap

Ich habe mir eure Diskussion mal durchgelesen, sowie die Datenbanken angeschaut.

Die Lösung funktioniert ja, aber ist doch etwas umständlich.

Eine bessere Lösung wäre es doch im Sinne von:

Datensatz (“Nr.3” Feld “Zähler”) - Datensatz (“Nr.2” Feld “Zähler”)…?

Leider habe ich hier noch nicht die richtige Bezeichnung gefunden um die Datensatznummer einzusetzen.

(In der Tabellenansicht der Datenbank ganz am linken Rand, kann durch schieben (Zelle verbreitern) vor dem Feld “Datum” die Spalte mit der Datensatz Nummer aufgezogen werden. Diese ist automatisch vergeben und eine einmalige Grösse.)

Wenn mann dieses Feld nutzen könnte so wäre es möglich Felder/ Werte aus einem früheren Datensatz abzufragen.

Eben, alla [aus datensatz nummer 3 den wert des feldes “zähler”]

Stellt sich dann noch die Frage wie sage ich, dass es immer der Datensatz [atuelle nummer -1] sein soll?

Vielleicht hat jemand da eine Lösung?

Tüftel tüftel…

@ dotpap danke für die Lösung, ich hoffe es hat nicht zuviel Arbeit gemacht. Leider muss ich Alex.ch zustimmen, es ist wohl nicht die praktikabelste Lösung. Aber nochmal vielen Dank dafür.

Die Frage ob eine tägliche Abrechnung was bringt kann ich so nicht beantworten. Aber es wäre schön zu wissen wie das funktioniert.

@ Alex.ch ähnliche Versuche habe ich auch gemacht, ich war eben der Ansicht das mir die nötige Syntax fehlt, daher meine Frage hier im Forum.

Vielleicht sollten wir mal die Macher von Papyrus fragen ob sich dieses Problem noch einfacher lösen lässt.

Danke und Grüße aus Berlin

Hallo Alex,

hallo schreckag.

Das standardmäßig verdeckte DB Feld “Nr.” einer jeden DB-Tabelle wird nach meinem Verständnis

von papyrus als papyrus-interner Zeiger auf den Quelldatensatz verwendet. (Siehe Dlg. Feldeigenschaften - Lasche “Relationen” - Button “Neue Relation…” | “Ändern”. Der Einsatz dieses Zeigers wird empfohlen. Möglich wäre bspw. auch die Verwendung eines selbst angelegten DB-Feldes “LfdeNr” - eindeutig - als Zeiger…

Außerdem nutzt BASE dieses (interne) Feld für die Anzeige in der Statusleiste “Nummer von Anzahl Datensätzen”.

Eine Besonderheit des DB-Feldes “Nr.” ist auch, dass BASE ein Sonderzeichen im Feldnamen akzeptiert - in diesem Fall also den Punkt.

→ DB-Feldnamen müssen mit einem Buchstaben oder Unterstrich beginnen und dürfen keine Sonderzeichen enthalten.

Also ich denke, da gibt es keinen Anwenderzugriff drauf.

Erstmal auch von mir danke, Gerd, für diese Lösung, ein typischer “Workaround”: Wenn es nicht möglich ist, einen Wert aus einem anderen Datensatz derselben Tabelle automatisch zu übernehmen, dann lässt man sich den Wert eben auf dem Umweg über eine und aus einer anderen, verknüpften, Tabelle geben. (Das nennt man relationales DBS …!)

Super finde ich natürlich auch, dass du dir die Mühe gemacht hast, das Ganze auch noch gleich real auszubuchstabieren. Das kann Leuten (wie mir) mit wenig Routine bei der DB-Programmierung viel Zeit sparen bzw. viel lehren.

Auch ich führe (sporadisch – so viel zum Thema “Durchhalten”) tägliche Messungen durch, bspw. beim Heizstrom, um eine Anschauung zu bekommen, wie sich die Benutzung der im Haus eingesetzten Heizungen und die schwankende Außentemperatur auf die Quantität der Ladeströme auswirkt.

A propos: Nochmal zum Hauptthema: Vorgängerdatensatz - Differenz bilden: Ich möchte zur Ergänzung auf ein anderes Workaround hinweisen: Ich habe meine Messungen nämlich bisher nicht in BASE, sondern in einer “einfachen” Papyrus-Tabelle protokolliert: Da lässt sich ja ein Differenzwert zu einem Wert in der Vorgängerzeile mittels der Tabellenkalkulationsfunktionen jeweils locker ergänzen, das, was schreckag in BASE vergeblich suchte, ist dort eine Selbstverständlichkeit. Und eine solche Tabelle könnte man ja in gewissen Abständen in eine “richtige” BASE-Datenbank importieren …

Besten Gruß

Waldfried