Formelproblem scheinbar nach Versionsupdate
Hallo liebe Community,
Ich muss mich nach sehr langer Zeit nochmal mit einem Problem melden. Habe vor einem Jahr eine App zur Massenrechnungserstellung im Vermietungsgewerbe erstellt. Es werden ca. alle 4 Kalenderwochen ein Rechnungslauf gestartet. Leider ist jetzt beim aktuellen Rechnungslauf ein Fehler aufgetreten uns zwar in der Berechnung einer Mindestabnahme (z.B eine Miettoilette muss mindestens für 4 Wochen bezahlt werden wenn sie auch nur kürzer gemietet wird).
Diese Mindestabnahme hat jetzt problemlos ein Jahr lang funktioniert aber in dieser Formel wird nun plötzlich immer die Mindestabnahme berechnet. Die Formel wirkt sehr kompliziert es kommt aber eigentlich nur auf die letzte IF Bedingung an. Hier wird nun immer die Mindestabnahme durchgeführt obwohl das entsprechende Feld (Auftragesende bzw. let Abholung := Auftragsende) leer ist.
Hier der entsprechende Ausschnitt:
if Abholung != null then
Mindestabnahmepruefung
else
cnt(unique(for i in range(0, anzahl_normal + 1) do
week(date(year(RG_Anfang), month(RG_Anfang), day(RG_Anfang) + i))
end))
end
Hier die gesamte Formel:
let RG_Anfang := if week('RG abgerechnet bis') = null then
Lieferdatum
else
if weekday('RG abgerechnet bis') = 0 then
'RG abgerechnet bis' + 8
else
'RG abgerechnet bis' + 7
end
end;
let RG_Ende := if 'RG Abzurechnen bis' < RG_Anfang then
RG_Anfang
else
if weekday('RG Abzurechnen bis') = 0 then
'RG Abzurechnen bis' + 1
else
'RG Abzurechnen bis'
end
end;
let Abholung := Auftragsende;
let Lieferung := Lieferdatum;
let anzahl_normal := days(RG_Anfang, RG_Ende);
let gesamtanzahl_mindestabnahme := days(Lieferung, Abholung);
let RG_Anfang_mindestabnahme := if week('RG abgerechnet bis') = null then
Lieferdatum
else
'RG abgerechnet bis'
end;
let anzahlabgerechnet_mindestabnahme := days(Lieferung, RG_Anfang_mindestabnahme);
let Mindestabnahmepruefung := if cnt(unique(for i in range(0, gesamtanzahl_mindestabnahme + 1) do
week(date(year(Lieferung), month(Lieferung), day(Lieferung) + i))
end)) < 4 then
if week('RG abgerechnet bis') = null then
5 - cnt(unique(for i in range(0, anzahlabgerechnet_mindestabnahme + 1) do
week(date(year(Lieferung), month(Lieferung), day(Lieferung) + i))
end))
else
4 - cnt(unique(for i in range(0, anzahlabgerechnet_mindestabnahme + 1) do
week(date(year(Lieferung), month(Lieferung), day(Lieferung) + i))
end))
end
else
cnt(unique(for i in range(0, anzahl_normal + 1) do
week(date(year(RG_Anfang), month(RG_Anfang), day(RG_Anfang) + i))
end))
end;
if Abholung != null then
Mindestabnahmepruefung
else
cnt(unique(for i in range(0, anzahl_normal + 1) do
week(date(year(RG_Anfang), month(RG_Anfang), day(RG_Anfang) + i))
end))
end
7 Antworten
-
Hallo Robby. Ich würde mal nachforschen, ob das Feld "Abholung" wirklich leer ist. Gib doch mal am Ende vom Script folgendes ein. Mirko
Abholung = null
-
Hallo Mirko,
dann gibt er mir Ja im Feld aus was für mich bedeutet das Feld ist leer, oder?
-
Es sieht so aus, als ob das Ergebnis der Berechnung für die Variable 'Mindestabnahmepruefung' immer dem errechneten Wert der 'else-Bedingung' :
cnt(unique(for i in range(0, anzahl_normal + 1) do
week(date(year(RG_Anfang), month(RG_Anfang), day(RG_Anfang) + i))
end))entspricht, und es deshalb so scheint, als ob immer die Mindestabnahme berechnet wird.
Ich würde mal überprüfen, ob der richtige Wert für die Variable 'Mindestabnahmepruefung' berechnet wird. -
Hi Robby Kurze ,
Ich verstehe das Problem/Ursache so: wieso auch immer ist deine Variable "Abholung" eben nicht NULL, auch wenn Du das eigentlich erwartest.
=> Es ist ein Unterschied ein Feld auf NULL (wurde noch nie beschrieben) abzufragen
oder auf != "" (leer) abzufragen.
Generell kannst du statt "if Abholung != null" auch kürzer "if Abholung" schreiben.
Prüfe doch mal ob es richtig berechnet wird, wenn Du es so schreibst:if Abholung or Abholung != "" then Mindestabnahmepruefung else cnt(unique(for i in range(0, anzahl_normal + 1) do week(date(year(RG_Anfang), month(RG_Anfang), day(RG_Anfang) + i)) end)) end
Viel Erfolg
Ronald -
Hallo Uwe,
hallo Ronald,
danke für die Antworten.
Das Hauptproblem war tatsächlich in einem anderen Script zu suchen. Die Berechnung dieses Script war richtig nur auf Grund der Änderung an einem Vorschritt und der größe des Scripts wirkte es für mich falsch.
Jedoch muss das Problem beim Versionsupdate (Cloudversion) entstanden sein. Ich habe eine uralte Backup-Version von Rechnungen mit dem damaligen Ausdruck verglichen. Diese hatten deutliche Abweichungen genau in den Punkten die mir nun aufgefallen sind. Ist denn bei den Neuerungen am Scripting-Editor irgendetwas geändert worden was eventuell Teile von Scripts verändert? Ich denke, dass die Antwort natürlich nein sein wird. Darf ja eigentlich nicht aber ich kann es mir nicht anders erklären, da ich seit Monaten keine Veränderungen mehr durchgeführt habe und nun nach meinem letzten Rechnungslauf sind enorme Veränderungen entstanden. Leider sind die Backups ja immer nur mit der "neuer Technik" anzuschauen, sonst hätte ich die Veränderungen in den "Problemscripts" ja schnell im Vergleich rausgefunden.
Content aside
- vor 2 JahrenZuletzt aktiv
- 7Antworten
- 68Ansichten
-
3
Folge bereits