Jörg: Daten eintragen (Lösungsansatz)

Beitrag lesen

Hallo Andreas,

ist das eine persistente Tabelle?

Ja, SQL.

Dann müßtest Du, bevor Du einzutragen versuchst, erst mal den neuesten Eintrag ermitteln.

Nicht zwingend. Ich trage einfach ein und habe zudem einen zusammengesetzten Schlüssel, der Doppeleinträge verhindert und stattdessen einen Error 1062 ausspuckt. Sorry, hatte ich vergessen, einfgangs zu erwähnen.

Ok, der Endzeitpunkt ist also entweder der vorige oder der jetzige Monat.

Nein, entweder der aktuelle oder der nächste Monat. Hintergrund ist ein Script, das automatisierte Rechnungen erstellt. Die sollen aber nie vor dem 20. des aktuellen monats für den nächsten Monat raus gehen.

Damit bekommst Du maximal 12 Monate in Deine Tabelle, angefangen mit Januar.

Ich habe mal Code nachgeliefert, in den auch das Jahr implementiert ist.,

Mein Ansatz wäre:

  • Ermittle das Start-Datum (fix oder aus der bestehenden Tabelle)
  • Ermittle das Ende-Datum (1. Tag von diesem/vorigem Monat abhängig vom Tag im Monat)
  • aus dem Start-Datum erzeuge das Datum für den 1. des Start-Datum-Monats (sei Start-Datum der 17.06.2019, dann nimm den 01.06.2019)
  • aktuellesDatum = startDatum (mit Tag = 1)
  • solange aktuellesDatum <= endeDatum, erzeuge den Eintrag, und addiere 1 Monat auf das aktuelle Datum

Den 1. des Monats würde ich für das Datum verwenden anstelle des aktuellen Tags, da das sonst ggf. Probleme gibt: was ist der 31. Januar + 1 Monat? Der 31. Februar? Der 3. März? Der 28. Februar (bzw. im Schaltjahr der 29. Februar?)

Mein Ansatz ist:

Ich erzeuge eine Tabelle, die alle zu berechnenden Einträge beinhaltet. Diese Tabelle enthält Flags für "erstellten Vorgeng", "erstellte Rechnung", "versandte Email" und hat einen Schlüssel, der Doppler vermeidet.

Anschließend arbeite ich die Tabelle ab und upodate entsprechend die Flags. Das Script kann über Cronjob am Monatsende gestartet werden.

Das nur Einträge für den Folgemonat in die Tabelle aufgenommen werden dürfen, ist hauptsächlich für Testzwecke wichtig.

Jörg