2 Auswahlfeldern werte zuweisen....
Grüßt euch,
bin am verzweifeln mit Bedingungen für die Zuweisung von 2 Auswahlfeldern.
Sie sollen den Status von Rechnungen abbilden. (Beim start auf Tabellenebene über select / beim bearbeiten der Rechnung (Geldeingang, Mahnung usw. ) im Rekord.
Das Problem ist , das dies immer nur funktioniert wenn es für Ninox nur EINE richtige Lösung/ Variante gibt. Hier bin ich echt am verzweifeln. Geht das nicht irgendwie anders??
hier mal der Ansatz für die Bearbeitung imRekord. (geht noch nicht, weil fehler in den Bedingungen sind)
if Rechnungstyp = 1 and 'in Rechnung wandeln' = false then
Rechnungsstatus := 9
else
if Rechnungstyp = 1 and 'in Rechnung wandeln' = true then
Rechnungsstatus := 11
else
if '1.Mahnung erzeugt' = true and 'Zahlungserrinnerung erzeugt' = true then
Rechnungsstatus := 10
else
if 'Zahlungserrinnerung erzeugt' = true then
Rechnungsstatus := 13
else
if '2.Mahnung erzeugt' = true and 'Zahlungserrinnerung erzeugt' = true and '1.Mahnung erzeugt' = true then
Rechnungsstatus := 12
else
if 'Offener Rechnungsbetrag' < 1 then
Rechnungsstatus := 5
else
if 'Offener Rechnungsbetrag' > 1 and 'Offener Rechnungsbetrag' < 'Brutto-Gesamt:' then
Rechnungsstatus := 8
else
if Rechnungstyp > 1 and 'erwarteter Zahlungseingang' > today() and 'Offener Rechnungsbetrag' = 'Brutto-Gesamt:' then
Rechnungsstatus := 2
else
if 'Versandart wählen' = 7 then
Rechnungsstatus := 6
else
if Rechnungstyp = 4 or 'in Gutschrift wandeln' = true then
Rechnungsstatus := 7
else
if Rechnungstyp = 2 and 'erwarteter Zahlungseingang' < today() and 'Offener Rechnungsbetrag' = 'Brutto-Gesamt:' and 'in Gutschrift wandeln' = false and '1.Mahnung erzeugt' = false and '2.Mahnung erzeugt' = false and 'Zahlungserrinnerung erzeugt' = false then
Rechnungsstatus := 4
end
end
end
end
end
end
end
end
end
end
end;
if Rechnungsstatus = 13 and 'Neues Zahlungsziel errinnerung' < today() then
Mahnstatus := 3
else
if Rechnungsstatus = 10 and 'Neues Zahlungsziel 1. Mahnung' < today() then
Mahnstatus := 4
else
if Rechnungsstatus = 10 and 'Neues Zahlungsziel 1. Mahnung' > today() then
Mahnstatus := null
else
if Rechnungsstatus = 12 and 'Neues Zahlungsziel 2. Mahnung' < today() then
Mahnstatus := 5
else
if Rechnungsstatus = 12 and 'Neues Zahlungsziel 2. Mahnung' > today() then
Mahnstatus := null
else
if 'Mahnstop Zahlungserrinnerung' = true and Rechnungsstatus = 13 then
Mahnstatus := 6
else
if 'Mahnstop 1. Mahnung' = true and Rechnungsstatus = 10 then
Mahnstatus := 6
else
if 'Mahnstop 2. Mahnung' = true and Rechnungsstatus = 12 then
Mahnstatus := 6
else
if 'Mahnstop Zahlungserrinnerung' = false and 'Mahnstop 1. Mahnung' = false and 'Mahnstop 2. Mahnung' = false and Rechnungsstatus = 4 then
Mahnstatus := null
end
end
end
end
end
end
end
end
end
Das hier ist der bestehende (funktionierender teil, aber nur für ein Auswahlfeld beim start auf Tabellenebene)
do as server
let myR := (select Rechnungsstellung);
myR[Rechnungstyp = 1 and 'in Rechnung wandeln' = false].(Rechnungsstatus := 9);
myR[Rechnungstyp = 1 and 'in Rechnung wandeln' = true].(Rechnungsstatus := 11);
myR['1.Mahnung erzeugt' = true].(Rechnungsstatus := 10);
myR['2.Mahnung erzeugt' = true].(Rechnungsstatus := 12);
myR['Offener Rechnungsbetrag' < 1].(Rechnungsstatus := 5);
myR['Offener Rechnungsbetrag' > 1 and 'Offener Rechnungsbetrag' < 'Brutto-Gesamt:'].(Rechnungsstatus := 8);
myR[Rechnungstyp > 1 and 'erwarteter Zahlungseingang' > today() and 'Offener Rechnungsbetrag' = 'Brutto-Gesamt:'].(Rechnungsstatus := 2);
myR['Versandart wählen' = 7].(Rechnungsstatus := 6);
myR[Rechnungstyp = 4 or 'in Gutschrift wandeln' = true].(Rechnungsstatus := 7);
myR[Rechnungstyp = 2 and 'erwarteter Zahlungseingang' < today() and 'Offener Rechnungsbetrag' = 'Brutto-Gesamt:' and 'in Gutschrift wandeln' = false and '1.Mahnung erzeugt' = false and '2.Mahnung erzeugt' = false].(Rechnungsstatus := 4)
end
10 Antworten
-
Ich nochmal,
Brauch in dem Fall mal keine fertige Lösung, nur einen Ansatz wie es vielleicht besser geht. (Bin glaube ich gefangen in meinem ansatz, welcher für die bestehende DB funktioniert, jedoch für die neue erweiterte nicht brauchbar ist. Rechnugsstellung wird in eine große bestehende DB eingebaut) Wichtig ist nur das es automatisch geht für alle Rechnungen beim Start der DB. Sonst können die wirklich vielen Rechnungen nicht auf stand gehalten werden.
Michi
-
Hi Michi. Mal drei Vorschläge. 1. Zuerst würde ich auf switch-case umstellen, damit es etwas übersichtlicher wird und 2. würde ich die Bedingungen zusammenfassen, die das gleiche Ergebnis erreichen, z.B.
case (Bedingung A and Bedingung B) or (Bedingung A and Bedingung C) or (Bedingung A and Bedingung D) : Mahnstatus := 6
3. Würde ich die Reihenfolge so wählen, dass die komplexesten Bedingungen zuerst stehen.
Mirko
-
Hab jetzt nen anderen Ansatz. Komm aber mit dem Skript nicht klar. "Zahl für Auswahl" wird mit number() gefüllt sind (fx felder).
case 17 or 1017 : (Ergebins: Wahr/Falsch, bei wahr führe nachfolgendes Script aus)
setze 'Rechnungsstatus/ Test' auf 3
macht Ninox aber nicht... sondern geht auf default (klammer oder anführungszeichen für werte ändern daran nichts)
let zahl := 'Zahl für Auswahl'; 'Rechnungsstatus/ Test' := switch zahl do case 1 or 1001: 1 case 2: 2 case 17 or 1017: 3 case 602 or 1602: 4 case 502 or 1502: 5 case 1002: 6 case 1013 or 1613: 7 case 1025 or 1625: 8 case 1038 or 1638: 9 default: 10 end
würde das wenn es geht auch gleich für die ganze Tabelle machen wollen, ist denk ich mal von der performens besser, da nur ein select vorhanden ist.
let myR := (select Rechnungsstellung); let zahl := myR.'Zahl für Auswahl'; myR.'Rechnungsstatus/ Test' := switch zahl do case 1 or 1001: 1 case 2: 2 case 17 or 1017: 3 case 602 or 1602: 4 case 502 or 1502: 5 case 1002: 6 case 1013 or 1613: 7 case 1025 or 1625: 8 case 1038 or 1638: 9 default: 10 end
-
Ich meinte eher so. Die Klammern sind nur zur Verdeutlichung, wahrscheinlich tilgt der Scripteditor sie wieder. So kannst Du Deine if-else Konstruktion nur umtragen. Mirko
let michi := "admin"; switch michi = "admin" do case ('Mahnstop Zahlungserrinnerung' = true and Rechnungsstatus = 13) or ('Mahnstop 1. Mahnung' = true and Rechnungsstatus = 10) or ('Mahnstop 2. Mahnung' = true and Rechnungsstatus = 12): Mahnstatus := 6 case ... end
-
Füge mal die Bedingung an die Zahl, sonst geht das Konstrukt nicht.
'Rechnungsstatus/ Test' := switch zahl > 0 do
-
für die Tabelle
do as server for i in select Rechnungsstellung where Nr = Nr do let zahl := number(i.'Zahl für Auswahl'); i.('Rechnungsstatus/ Test' := switch zahl > 0 do case zahl = 1 or zahl = 1001: 1 case zahl = 2: 2 case zahl = 17 or zahl = 1017: 3 case zahl = 602 or zahl = 1602: 4 case zahl = 502 or zahl = 1502 or zahl = 1538 or zahl = 1525 or zahl = 1513: 5 case zahl = 1002: 6 case zahl = 1013 or zahl = 1613: 7 case zahl = 1025 or zahl = 1625: 8 case zahl = 1038 or zahl = 1638: 9 default: 10 end) end end
Content aside
- Status Answered
- vor 2 JahrenZuletzt aktiv
- 10Antworten
- 78Ansichten
-
2
Folge bereits