0

Berechnung für Wochen mit Bedingung

Hallo,

kann mir einer helfen... raff einfach nicht wie ich vorgehen muß.

Bildschirmfoto 2021-12-08 um 11.12.35

20 Antworten

null
    • Michi.1
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Ergebniss soll natürlich die Differenz zwischen Rechnungsbetrag und Umsatz sein. Im Beispiel also 100

    • Michi.1
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Kann mir einer von euch Profis helfen ?

    • UweG
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hallo Michi
    Folgendes Denkmodell.
    Zwei Array's erzeugen mit:
    let Array1 := (((select Tabelle1 where Kalenderjahr = 2020) order by Kalenderwoche).Rechnungsbetrag;
    let Array2 := (((select Tabelle2 where Kalenderjahr = "2020") order by number(Kalenderwoche)).Zahlenfeld;
    let vErgebnis := 0;
    for i in range (0,cnt(Array1)-1,1) do
    if item(Array1,i) < item(Array2,i) then vErgebnis := vErgebnis +(item(Array2,i)-item(Array1,i)) endend
    vErgebnis

    Vorausgesetzt, dass die Anzahl der Werte beider Array's identisch ist. Kann man vorab mit einem if abfragen.
    Gibt sicherlich noch andere Wege, die zum Ziel führen.

    • Michi.1
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Danke dir 

    • Michi.1
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hallo Uwe,

    komm leider nicht klar. Das Array1 hat variable einträge aus der Rechnungsstellung. (mind. 3 einträge pro Kalenderwoche.. können aber auch mehr sein ) Array2 hat immer nur 1 eintrag pro Kalenderwoche.

    so wie ich es übernommen hab, kommt leider ein falsches ergebniss raus.

    let Array1 := ((select Differenzen where Rechnungen.'Abrechnung zu Kalenderjahr' = 1) order by Rechnungen.'KW Leistungsdatum').'Brutto Rechnungsbetrag';
    let Array2 := ((select Dispoumsatz where number(Kalenderjahr) = 1) order by number('KW Auswahl')).Dispoumsatz;
    let vErgebnis := 0;
    for i in range(0, cnt(Array1) - 1, 1) do
    if item(Array1, i) < item(Array2, i) then
    vErgebnis := vErgebnis + (item(Array2, i) - item(Array1, i))
    end
    end;
    vErgebnis

    • UweG
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Das Beispiel hat darauf abgezielt, dass Jahr/KW nur einmalig vorkommt und das Zahlenfeld nur einen Eintrag enthält. .
    Kannst du beispielhaft zeigen, wie das Array1 für 5 Kalenderwochen aussieht wenn auch Zahlbeträge mit mehreren Einträgen vorhanden sind.
    Einfach mal ein Funktionsfeld erstellen mit formatJSON(((select Differenzen where Rechnungen.'Abrechnung zu Kalenderjahr' = 1) order by Rechnungen.'KW Leistungsdatum').'Brutto Rechnungsbetrag') und den Screenshot vom Funktionsfeld posten. Das Gleiche mit Array2. Und dann kann man mal schauen ob der Weg mit anderen Ansätzen der Richtige ist oder was anderes gemacht werden muss.
    Wie können in einem Zahlenfeld mehrere Einträge stehen?
    So rate ich halt nur was du meinst. 
    Mehr Input wäre manchmal hilfreich.

    • Michi.1
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Es gibt in Array1 meherere zu den Kalenderwochen zugeordnete Datensätze. Array2 hat nur einen Datensatz pro Kalenderwoche.

    Anbei der Screenshot ... 5 Kalenderwochen von beiden Array´s ( zahlen sind jetzt ausgedacht... sorry dauerte ein bischen )

     

    Bildschirmfoto 2021-12-09 um 11.23.28

    • UweG
    • vor 2 Jahren
    • Gemeldet - anzeigen

    So wie ich es sehe, gibt es mehrere Records mit identischem Jahr und KW aber unterschiedlichen Zahlbeträgen. Das nehme ich jetzt mal so an, da ich nicht mehr Informationen zur Verfügung habe. Wenn man mit der Array-Sache zu einer Lösung kommen möchte, müsste man im ersten Schritt alle Zahlbeträge mit gleichem Jahr/KW zusammenführen. Das kann man bspw. mit 

    let vArray1:=[];
    let i =1
    Hier Schleife mit  durchlauf für jede KW im betreffenden Jahr. {sowas wie for i in range(0,51,1) do}
    let aKW:= sum(((select Differenzen where KalenderJahr =2020 and KW=i)).'Brutto Rechnungsbetrag')
    vArray1 :=array( vArray1,aKW)
    end
    Das müsste eigentlich die Summe der in KW 1und folgenden vorhandenen Zahlbeträge ergeben. Wenn man sowas in eine verschachtelte Schleifen packt, müsste sich für jede KW ein Array bilden, welches man zu einem neuen Array zusammenführt. Damit hätte man ein Array mit nur noch 52 Einträge welches man abschließend mit dem angegebenen Script zu Array2 vergleicht.

    Ich würde erst einmal in einem Funktionsfeld eine Abfrage für eine KW bauen und sehen ob das Ergebnis formatJSON(sum(select ...)) stimmt.
    Dann stichprobenartig mit anderen KW testen.
    Wenn es soweit klappt, eine Schleife darum bauen mit vllt. 5 Durchläufen (KW1 - KW5) und wie das Ergebnis aussieht.
    Klappt es mit 5, wird es auch mit 52 funktionieren und man kann die beiden Array dann vergleichen.
    Das klingt vielleicht etwas kompliziert aber mir fällt momentan nichts anderes ein.

    • Michi.1
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Ja du hast recht, es gibt in Array1 verschiedene Zahlenbeträge welche zu der KW/ Jahr zugeordnet sind.

    Ich versuch das mal umzusetzen... geb mir aber nicht viel hoffnung. 

    Danke für deine mühe

    • Michi.1
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Da bin ich zu blöd für das hin zu bekommen. sum(select...) für die KW/Jahr klappt... das aber in einer schleife abzufragen und immer ein neues Array zu bilden bekomm ich nicht hin  😢

    weis aber auch nicht wie ich es anders machen kann, da die Auswertung der ganzen geschichte Diagramme, Zahlen,  ect.  über (let b := Kalenderjahr;
    Rechnungen.'Abrechnung zu Kalenderjahr' = b) angestoßen wird. Cheffe will es aber gern haben 😡

    • UweG
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hallo Michi.
    Mal schauen wie wir das hinbekommen.
    Schreib mal den select für 3 Kalenderwochen einzeln.
    let vArrray1 :=[]
    let vKW1:= sum(Deine Select für die 1. KW)
    let vKW2:= sum(Deine Select für die 2. KW)
    let vKW3:= sum(Deine Select für die 2. KW)

    vArray1 := array(vArray1,vKW1)
    vArray1 := array(vArray1,vKW2)
    vArray1 := array(vArray1,vKW3)
    formatJSON(vArray)

    Veröffentliche mal das von dir um die select Anfrage ergänzte Scrpt damit ich sehen kann, wie sich die select-Abfragen von KW1 zu KW3 hin unterscheiden.
    Der Inhalt von vArray1 müsste 3 Objekte umfassen, die jeweils die Summen der Zahlbeträge von KW1,KW2,KW3 anzeigen.
    Prüfe mal ob die Zahlen stimmen.
    Wenn du das jetzt 52x händisch machst, ist das mühsam. Deshalb als nächstes eine Schleife für die Ermittlung der Summen für 52KW.
    Wenn die Ergebnisse des Scripts stimmen kann man den nächsten Schritt angehen.
    Also erst einmal die manuelle Version.

    • Michi.1
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Bildschirmfoto 2021-12-09 um 15.03.11

    let vArrray1 :=[]
    let vKW1:= sum((select Differenzen where Rechnungen.'Abrechnung zu Kalenderjahr' = 1 and Rechnungen.'KW Leistungsdatum' = 1).'Brutto Rechnungsbetrag')
    let vKW2:= sum((select Differenzen where Rechnungen.'Abrechnung zu Kalenderjahr' = 1 and Rechnungen.'KW Leistungsdatum' = 2).'Brutto Rechnungsbetrag')
    let vKW3:= sum((select Differenzen where Rechnungen.'Abrechnung zu Kalenderjahr' = 1 and Rechnungen.'KW Leistungsdatum' = 3).'Brutto Rechnungsbetrag')
    vArray1 := array(vArray1,vKW1)
    vArray1 := array(vArray1,vKW2)
    vArray1 := array(vArray1,vKW3)
    formatJSON(vArray)

     

    Bildschirmfoto 2021-12-09 um 15.10.41

    Code für sum select ... ergebniss passt.

    let vKW1 := sum((select Differenzen where Rechnungen.'Abrechnung zu Kalenderjahr' = 1 and Rechnungen.'KW Leistungsdatum' = 1).'Brutto Rechnungsbetrag');
    formatJSON(vKW1)

    • Michi.1
    • vor 2 Jahren
    • Gemeldet - anzeigen

    let vArrray1 hatte nen r zuviel..beseitigt.   Jetzt ist die fehlermeldung: "Die Funktion ist nicht definiert: array([viod],number) in Zeile 6, Spalte 7"

    • Michi.1
    • vor 2 Jahren
    • Gemeldet - anzeigen

    vArray1 := array(vArray1, [vKW1]);
    vArray1 := array(vArray1, [vKW2]);
    vArray1 := array(vArray1, [vKW3]);
    formatJSON(vArray1)

    fehlermeldung weg... ergebnis: []

    • UweG
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Wie lauten denn die Select Abfragen für KW2 und KW3 ?

    • Michi.1
    • vor 2 Jahren
    • Gemeldet - anzeigen

    es ändert sich nur die Zahl dahinter:

    Rechnungen.'KW Leistungsdatum' = 1;

    Rechnungen.'KW Leistungsdatum' = 2;

    Rechnungen.'KW Leistungsdatum' = 3

    • UweG
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Dann wie folgt:
    let vArray1 := [];
    let vaKW := [];
    for i in range(1, 53, 1) do
    vaKW := sum((select Differenzen where Rechnungen.'Abrechnung zu Kalenderjahr' = 1 and Rechnungen.'KW Leistungsdatum' = i).'Brutto Rechnungsbetrag');
    vArray1 := array(vArray1, vaKW)
    end;
    formatJSON(vArray1)

    Das müsste ein Array mit 52 Objekten/Zahlbeträgen sein. Wenn zuviel oder Wenig, am Range ändern.

    • Michi.1
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Danke dir Uwe,

    Probiere ich gern morgen aus. Bin für jede Hilfe dankbar. 

    • UweG
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hallo Michi
    Das sollte das vollständige Script sein für deine Berechnung.
    let vArray1 := [];
    let vArray2 := [];
    let vaKW := [];
    let vErgebnis := 0;
    for i in range(1, 53, 1) do
    vaKW := sum((select Differenzen where Rechnungen.'Abrechnung zu Kalenderjahr' = 1 and Rechnungen.'KW Leistungsdatum' = i).'Brutto Rechnungsbetrag');
    vArray1 := array(vArray1, vaKW)
    end;
    vArray2 := ((select Dispoumsatz where number(Kalenderjahr) = 1) order by number('KW Auswahl')).Dispoumsatz;
    for i in range(0, cnt(vArray1), 1) do
    if item(vArray1, i) < item(vArray2, i) then
    vErgebnis := vErgebnis + number(item(vArray2, i)) - number(item(vArray1, i))
    end
    end;
    vErgebnis

    • Michi.1
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Danke Dir für dein Einsatz Uwe,

    passt perfekt 👍

Content aside

  • vor 2 JahrenZuletzt aktiv
  • 20Antworten
  • 464Ansichten