Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi Einträge nach Datum/Zeit in eine Tabelle schreiben (https://www.delphipraxis.net/210617-eintraege-nach-datum-zeit-eine-tabelle-schreiben.html)

NoGAD 18. Mai 2022 09:03

Einträge nach Datum/Zeit in eine Tabelle schreiben
 
Hallo,

ich benötige bitte eine Hilfestellung beim Speichern von Daten in einer Tabelle.

Die Anwendung ist eine Terminverwaltung, Einträge werden pro Tag und Uhrzeit benötigt. Den Start und das Ende der Einträge pro Tag kann der Benutzer selbst festlegen.
Außerdem, das ist hier wichtig, soll es so sein, dass die Daten bei Bedarf an einen neuen Tagesrhythmus angepasst werden.

Als Beispiel:
Montag = 07:00 - 12:00, alle 15 Minuten
Dienstag = 08:00 - 12:00, alle 15 Minuten

Nun möchte der Anwender ab Datum x seinen Tagesablauf umstellen und der neue Tagesplan sähe so aus:
Montag = 08:00 - 12:00, alle 15 Minuten
Dienstag = 07:00 - 12:00, alle 15 Minuten


Reicht es hier aus, einfach per Timestamp die Einträge zu speichern?
Durch die Änderung müsste ich dann alle Tabelleneinträge neu berechnen.

Gibt es eine einfachere Möglichkeit?


LG Mathias

jobo 18. Mai 2022 16:52

AW: Einträge nach Datum/Zeit in eine Tabelle schreiben
 
Ja, Du kannst ein Update auf bestehende Daten machen und die Terminslots verschieben.
Problematisch sind ggF. regellose Termine, die dazwischen funken.
Oder Terminslots die Richtung Nachtschicht gehen und original keinen Tageswechsel enthalten, nach Verschiebung aber schon. (oder umgekehrt)
Oder wenn es mehrere Wechsel gibt: Wir sind im Januar, es gilt Winterplan, dann kommt irgendwann zur Sommersaison, ab Oktober wieder Winter.

Pläne sind letztlich Schall und Rauch, solange sie nicht konkret sind. Sprich ein Slot ist ein Slot, who cares. Erst ein vereinbarter Termin ist wichtig und sollte nicht ohne weiteres verschoben werden. Man könnte also diese Slots auch einfach virtuell einblenden. Dann braucht man sie nicht zu verschieben, kommt mit keinen bestehenden Terminen in Berührung und zeigt sie einfach neu an, wenn "verschoben" wird.

himitsu 18. Mai 2022 17:23

AW: Einträge nach Datum/Zeit in eine Tabelle schreiben
 
Termine einseitig zu verschieben, kann auch nett enden, wenn die andere Seite es nicht direkt mitbekommt.

Klar, du weißt ja wie jetzt der Zeitplan (Arbeitsbeginn) ist und wenn das geändert wird, dann alle Termine um diese Zeit verschieben.
Also vorher wurde 7:00 begonnen und jetzt 8:00, dann alle Termine an diesem Tag +1h.

So lange der Tag also gleich lang ist, passt es dann.
Wird aber kürzer gearbeitet und Termine ragen hinten hinaus, was passiert dann damit?



Vielleicht ist es einfacher die Termine nicht automatisch zu verschieben (außer der Nutzer sagt explizit "jetzt alles neu anordnen")
und nach Änderung des Zeitplans die Termine zu hervorheben, welche außerhalb liegen, damit sich der Nutzer darum kümmern kann,

denn wie soll man was allgemeingültig automatisch lösen?
* alle Termine verschieben
* nur die Termine verschieben, welche außerhalb liegen
* und wenn was verschoben wird, wo hin

NoGAD 18. Mai 2022 18:07

AW: Einträge nach Datum/Zeit in eine Tabelle schreiben
 
Danke euch beiden für die Hinweise.


Habt ihr eventuell eine Idee, wie das besser umgesetzt werden kann?

Am Ende benötige ich ja dennoch eine Referenz auf die Termine (Datum-Uhrzeit).

Die Handhabung ist hier sehr schwierig.

LG Mathias :-)

Sharky 18. Mai 2022 19:18

AW: Einträge nach Datum/Zeit in eine Tabelle schreiben
 
Hai NoGAD,

nur mal so ins Blaue gedacht.

Was wäre, wenn Du die "Tagesrhythmen" in einer Tabelle speicherst und die Termine dann in einer zweiten mit Angabe der "Rythmus-ID" und auf diese bezogen.
Dann wären die Termine immer in relativ zu den Zeiten der Tagesrythmen.

Also:
Code:
Rythmus_1 : Montag = 07:00 - 12:00
Rythmus_2 : Dienstag = 08:00 - 12:00
Rythmus_3 : Montag = 08:00 - 12:00
Rythmus_4 : Dienstag = 07:00 - 12:00
Code:
Termin_1 : Bassiert auf Rythmus_1  alle 15 Minuten
Termin_2 : Bassiert auf Rythmus_3  alle 21 Minuten
Der Rest wäre dann rechnen.

Gruß
Sharky

jobo 18. Mai 2022 19:34

AW: Einträge nach Datum/Zeit in eine Tabelle schreiben
 
Zitat:

Zitat von NoGAD (Beitrag 1506042)

Habt ihr eventuell eine Idee, wie das besser umgesetzt werden kann?

Am Ende benötige ich ja dennoch eine Referenz auf die Termine (Datum-Uhrzeit).

Ich habe es schon erwähnt, Termine die nirgendwo stehen, braucht man nicht zu verschieben.
Also wenn es sich um ein leeres Raster handelt.
Termine, die bereits vereinbart sind mit einer Gegenstelle, nennen wir sie echte Termine, sollte man vielleicht nicht ohne weiteres verschieben. Technisch wäre da irgenwas notwändig, wie es bspw. Outlook macht.

Lokal in der TerminDB Deiner Anwendung ist es m.E. nicht mehr als ein Update. Die meisten DB können ganz gut mit Datums / Zeitwerten rechnen, leider nicht ganz standardisiert. Also es geht, aber überall anders. Tageswechsel, Schaltjahr usw. wird alles berücksichtigt, egal ob + oder - 1h.
Hilfreich ist dabei, wenn die Datenhaltung in einer gemeinsamen Spalte Datum und Uhrzeit betrifft. Meist geht das seitens der DB bereits in einer Spalte vom Typ Date. Werden Datum und Zeit in getrennten Spalten gespeichert, muss man Überläufe bei der Zeit feststellen und den Tag nachziehen. Oder man rechnet davor beides zusammen, ändert den Wert gemäß Plan und teilt es wieder.

Was das Raster angeht (leere Termine):
Es besteht nur aus dem Plan, "multipliziert" mit den Vorschautagen. Dieses berechnete Raster kann aus einem View kommen, der keine gespeicherten Daten enthält. Erst wenn ein Slot aus dem Raster mit Ort, Teilnehmer, ... versehen wird, wird er wirklich in der TerminTabelle gespeichert. Und ersetzt in der Gesamtabfrage einen leeren Slot. Ob das in Summe einfacher zu handhaben ist, kann ich aus dem Stand nicht sagen, kommt mir aber so vor. Die leeren Slots sind eigentlich nur eine zunächst grafische Darstellung (eben ein Raster), das theoretisch beliebig per Klick geändert werden kann. Natürlich wird es beim Selektieren/Anlegen eines Termins übernommen.

Weiß nicht, ob das verständlich ist.
Ich habe das mal so ähnlich für Serientermine implementiert. Also nicht ein kompletes Tagesraster, sondern eben typische Wochen- oder monatliche Termine. Spätestens wenn der Anwender die Option "Laufzeit unbegrenzt" wählt, wird auch eine Motivation klar. Man erstellt nicht bis in alle Ewigkeit feste Termine als individuelle Datensätze.

Die Referenz eines echten Termins oder eines leeren Slots zeigt auf den Plan.
Wird der Plan geändert (neuer Plan), wird ab Inkrafttreten der neue Plan referenziert.

Ja, Sharkies Beitrag ist auch sowas.

KodeZwerg 18. Mai 2022 19:50

AW: Einträge nach Datum/Zeit in eine Tabelle schreiben
 
Zitat:

Zitat von NoGAD (Beitrag 1505974)
Gibt es eine einfachere Möglichkeit?

Hallo Mathias,
ich habe noch nicht so ganz verstanden was "alle 15 Minuten" bedeuten soll und ob es wirklich um absolut flexible Zeiten gehen muss oder nur eine Auswahl bestimmter Zeiten.
Meine Idee wäre es in Deiner Datenbank verschiedene Zeiten zu definieren aus denen sich ein User dann was auswählen kann anstelle das der User eine Start und Endzeit eingeben muss (alle xx Minuten)
Dass ganze dann über einen Kalendar mappen und fertig ist.

Falls es verständlich war worauf ich hinaus wollte, gern geschehen, falls ich daneben liege, mein Fehler :-]

NoGAD 18. Mai 2022 23:17

AW: Einträge nach Datum/Zeit in eine Tabelle schreiben
 
Danke für eure Geduld, wieder einmal.

Die Idee ist schwer zu erklären. Ich denke, könnte ich sie erklären, hätte ich eine Lösung. Ich versuchte es noch einmal vorn.

1 Programmnutzer (PN) kann für jeden Tag einen Zeitraum festlegen, ebenso den Intervall innerhalb des Zeitraums.
1.1. Mein Projekt erzeugt eine Zeitliste für jeden Tag, in dieser können Termine eingetragen werden. (7:00, 7:15, 7:30 ... 12:00)
2. PN trägt nun in dieses Raster Termine ein.
2.2. Diese Termine werden in einer Tabelle abgelegt. Bisher mache ich das über einen Timestamp, der unique ist, es kann definitiv keine zwei gleichen Termine zu einem Datum+Uhrzeit geben.

... Inzwischen ist ein halbes Jahr Vorlauf entstanden ...

Jetzt möchte der PN den Intervall ändern. Alle Termine müssten angepasst werden. (Zumindest für die Zeit von jetzt bis zum letzten Termin im Vorlauf); (Ob und wie das mit den Personen, die die Termine wahrnehmen werden, abgesprochen wird, ist nicht meine Aufgabe oder die des Programms)

Meine Frage nun:

Wie lässt sich das Problem von Überschneidungen, eventueller Wegfall oder sonstiges vermeiden?

Idee 1: Alle Termine für den Tag werden weiterhin im Original angezeigt (Timestamp) und bei Überschneidungen mit dem neuen Raster werden die Termine z.B. kursiv dargestellt. Das würde so lange passieren, bis alle Termine "durch" sind.

Idee 2: Alle Termine werden auf das neue Raster umgerechnet. Hier kann es aber zu Verlust kommen, wenn der Intervall vergrößert wird.

Habt ihr so etwas schon einmal programmiert?

Anmerkung: Es gibt nur fixe Termine, keine virtuellen.

LG Mathias :-)

mytbo 19. Mai 2022 13:04

AW: Einträge nach Datum/Zeit in eine Tabelle schreiben
 
Zitat:

Zitat von NoGAD (Beitrag 1506054)
Idee 1: Alle Termine für den Tag werden weiterhin im Original angezeigt (Timestamp) und bei Überschneidungen mit dem neuen Raster werden die Termine z.B. kursiv dargestellt. Das würde so lange passieren, bis alle Termine "durch" sind.

Ja, nur kursiv reicht nicht. Den Hintergrund am besten fett Rot machen.
Zitat:

Zitat von NoGAD (Beitrag 1506054)
Idee 2: Alle Termine werden auf das neue Raster umgerechnet. Hier kann es aber zu Verlust kommen, wenn der Intervall vergrößert wird.

Einen Button einbauen, mit dem der Nutzer die regelbasierte Umstellung anstoßen kann. Je nachdem, wie teuer ausgefallene Termine werden können, gegebenenfalls für jeden Tag einzeln. Überschneidungen nach der Umstellung wieder deutlich hervorheben. Einen Gesamtbericht erstellen, bei dem die Überschneidungen gruppiert nach Datum aufgelistet werden. Damit überträgst du die Verantwortung an den Nutzer.

Bis bald...
Thomas

Sinspin 19. Mai 2022 13:45

AW: Einträge nach Datum/Zeit in eine Tabelle schreiben
 
Hallo,

eventuell habe ich das überlesen. Die Termine bestehen aus zwei Datum+Zeit Werten (Start bis Ende) oder aus Datum+Zeit als Start und eine Laufzeit in Sekunden oder einem anderen Zeit-slot Format?

Zum Verschieben und speichern von Terminen ist es schön nur den Startwert und die Laufzeit zu haben. Lässt sich besser verwalten.
Berechnen von Überschneidungen mat sich mit zwei Zeit Werten besser.

Eigentlich ist egal wie du das Datum bisher gespeichert hast. Zum Umrechnen musst du nur dafür sorgen dass das du einen Zwischenwert hast der feingliedrig genug ist um damit umrechnen zu können. Beide Slotgrößen müssen sich damit eindeutig darstellen lassen. Mit Sekunden zum Beispiel.
Überschneidungen kannst du nicht verhindern wenn nach der Änderung weniger Slots vorhanden sind.
Das solltest du auch dem Anwender überlassen diese Termine dann anzupassen.
Was du machen könntest wäre ein Trockenlauf. Also ermitteln wo es Probleme geben wird und diese dem Anwender vorher anzeigen.

Grüße nach Weimar, oh du ferne Heimat.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:24 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz