Hallo Rolf,
Antwort 2:
Wenn der Kunde 4711 neu ins System kommt und März '20 die erste Rechnung bekommt, müsste in deiner Table also ein Satz für ab_jahr 2020 und ab_monat 3 geschrieben werden. Wenn ich deine Idee richtig verstehe, ist das der Keim für dein Verfahren. Wenn Ende März 2020 der Cron-Job Läuft, findet er den Satz für März '20 und probiert nun Sätze für Jan, Feb und März 2020 zu schreiben (du beginnst ja bei 1 zu zählen). Jan und Feb werden durch deinen IF abgefangen. Im März geht es schief, weil der Satz schon da ist. Und für den April gelingt der Insert.
Fast. Wenn der Kunde im März 20 neu kommt und der Cron Ende März zum erstem Mal läuft, liest das script aus Tabelle 1 den neuen Kunden ein, versucht für Jan und Feb Einträge vorzunehmen, was die If verhindert. März und April werden aber klappen. Anschließend greift die "for-Schleife" und verhindert im "Ende März", dass für Mai und folgende ein Eintrag in T2 versucht wird. Also wird über die "while-Schleife" nun der nächste Eintrag aus T1 verarbeitet.
Soweit, so gut. Betrachten wir den nächsten Cron-Job, Ende April. Der findet den März 20. Die Schleife läuft los, Jan - nö. Feb - nö. März - dup. April - dup. Mai - Erfolg.
Ja, genau.
Als nächstes findet er den April 20. Und es geht von vorn los. Jan - nö. Feb - nö. März - dup. April - dup. Mai - dup. Das war vergebliche Liebesmühe.
Nein, als nächstes findet er den nächsten eintrag aus T1 und beginnt die Monatsschleife wieder von vorne.
Deswegen meinte Mudgard, du müsstest den jeweils jüngsten schon vorhandenen Satz finden, und ab diesem loslaufen.
Und ich meine, ich fange einfach im Januar des aktuellen jahres an. Praxisrelevant ist ja, dass ohnehin die RGs monatlich raus ,müssen und wenn das script aus welchen Gründen auch immer mal in einem Monat versagt, muss ich ran. Ich lasse mich aber gerne besserer Löungen belehren.
Betrachten wir einen anderen Fall. Die Tabelle enthält für Kunde 4711 genau einen Satz mit ab_jahr=2020 und ab_monat=12. Der nächste Cron-Job Ende Dezember startet. $Jahr ist bei Dir nun 2021 und $Monat ist 1.
So konstruiert hättets Du recht, aber der Fall kann in der Praxis so nicht auftreten. Wenn ein Kunde neu eintritt, kann ich nicht erst ein Jahr später rückwirkend die erste RG schreiben. Soll heißen, wenn der Kunde ab 12/20 berechnet wird, findet der Cron (das Script) den Kunden im Dez. 20.
Aber Du hast dennoch recht, Du hast eine Fehlerquelle aufgetan: Nämlich, wenn das Script im Dez. nen Bock schießt, werde ich im Januar so oder so ein Problem bekommen.
Jahresübergreifende Verarbeitung geht also schief.
Ja, genau hier sprichst Du es nochmal an... 👍
Bevor wir auf Lösungsmöglichkeiten eingehen, würde ich gern wissen, ob wir nun inhaltlich beieinander sind.
Ok, ich glaube, hier sind wir jetzt inhaltlich beieinander. Und gut, dass ich mal nachgefragt habe... ich hatte den Jahreswechsel übersehen. Hierzu denk ich mir jetzt mal was aus und melde mich. Es sei denn, Du oder Andreas hat hier eine Lösung quais auf den Lippen liegenb, dann nehm ich die auch gerne.
Jörg