0

Ratenzahlung korrekt berechnen

Hallo zusammen,

es geht ums liebe Geld. Bei uns im Gartenverein wird jedes Jahr der Strom abgelesen und der Verbrauch er - und berechnet. Bei den Energiepreisen wollen wir eine Ratenzahlung anbieten. Es soll der Zahlbetrag in maximal 3. Raten bezahlt werden.Soweit der Sachverhalt.N un zur Berechnung.Zahlbetrag / 3 - war mein Ansatz, aber offensichtlich wohl nicht ganz richtig. Beispiel: Forderung 150,00 / 3 = 3 Raten zu je 50,00 Macht hinten dann +- 0,00 Bei 150,01 werden auch 3 Raten a 50, 00 berechnet. Dann ist aber der Saldo -0.01. bei 150,02 sind Raten 50, 01 und am Ende der Saldo +0,01. Ich hoffe Ihr versteht da Problem. Wie kann ich erreichen, das die 3 Raten so berechnet werden, das am Ende der  Saldo immer +- 0,00 ist. 

Schon Mal im vorraus vielen Dank.

Ach so ja NINOX läuft bei uns auf  iPad und Android Tablets für mit Cloud-Anbindung 

13 Antworten

null
    • mirko3
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Wenn die Zahl nicht durch die Anzahl teilbar ist, dann bleibt natürlich Rest. In meinem Beispiel ist die letzte Rate stets etwas größer. Schau mal ob es Dir nützt. Eine Funktion, die Ratenzahlungen berechnet. Erster Eintrag ist Gesamtbetrag, zweiter Eintrag ist die Anzahl der Raten. Wiedergabe ist ein Array mit den Einzelzahlungen. (Ohne Gewähr und so) Mirko

    function Ratenzahlung(betrag : number,teiler : number) do
        let rest := number(item(split(text(betrag), ","), 1));
        let first := floor(betrag) % teiler;
        let result := (floor(betrag) - first) / teiler;
        let aryPart := for i in range(0, teiler - 1) do
                result
            end;
        array(aryPart, [result + first + rest / 100])
    end;
    
    • KGV_Sonneneck_eV_Neuha
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Danke für die Antwort, werde es ausprobieren.

    • KGV_Sonneneck_eV_Neuha
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Hallo Mirko, leider komme ich nicht weiter. Das liegt wohl an meinem Wissen über die Programmierung in Ninox.  Ich hatte Deinen Code in ein Berechnungsfeld eingegeben. Es wird kein Wert ausgegeben. Ich habe auch versucht die Feldnamen meiner Tabelle zu integrieren. Ebenfalls ohne erfolg. Nun bin ich mit meinen Kenntnissen am Ende. Kannst Du mir helfen?

    Ich füge mal ein Bild mit den Feldnamen an.

    Bis jetzt habe ich die 3. Rate immer per Hand eingetragen.

    LG Axel

    • mirko3
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Hallo Axel. Lege mal eine Button an und gib folgendes ein:

    function Ratenzahlung(betrag : number,teiler : number) do
        let rBetrag := betrag * 100;
        let rester := rBetrag % 3;
        let corBetrag := (rBetrag - rester) / teiler;
        let firstPart := for i in range(0, teiler - 1) do
                corBetrag / 100
            end;
        array(firstPart, [round(corBetrag / 100 + rester / 100, 2)])
    end;
    let result := Ratenzahlung(Zahlbetrag, 3);
    do as server
        '1. Rate' := item(result, 0);
        '2. Rate' := item(result, 1);
        '3. Rate' := item(result, 2)
    end
    
    • mirko3
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Wenn du verschiedene Ratenzahlungen benutzt, dann lieber so und die Anzahl der Felder für die Raten beliebig erweitern.

    function Ratenzahlung(betrag : number,teiler : number) do
        let rBetrag := betrag * 100;
        let rest := rBetrag % teiler;
        let corBetrag := (rBetrag - rest) / teiler;
        let firstPart := for i in range(0, teiler - 1) do
                corBetrag / 100
            end;
        array(firstPart, [round(corBetrag / 100 + rest / 100, 2)])
    end;
    let result := Ratenzahlung(Zahlbetrag, Ratenzahl);
    do as server
        '1. Rate' := item(result, 0);
        '2. Rate' := item(result, 1);
        '3. Rate' := item(result, 2);
        '4. Rate' := item(result, 3);
        '5. Rate' := item(result, 4)
        .
        .
        .
    end
    
      • Tacho
      • vor 1 Jahr
      • Gemeldet - anzeigen

      Mirko 

      Da schednt etwas mit der Rundung nicht zu stimmen.

      Bei obigem Zahlbetrag von 82,18 und 4 Ratenzahlungen wirft Deine Funktion bei mir aus:

      1. Rate    20,5425 (Zahlenfeld)
      2. Rate    20,5425 (Zahlenfeld)
      3. Rate    20,5425 (Zahlenfeld)
      4. Rate    20,55 (Zahlenfeld)

      Rundet man das wieder auf 2. Stellen fehlt wieder 1 Cent (82,17)

      Bei 3 Ratenzahlungen stimmt die Berechnung (27.39,27.39,27.4).

      • mirko3
      • vor 1 Jahr
      • Gemeldet - anzeigen

      Tacho Hallo Tacho. Kann ich nicht nachvollziehen. Ergebnis ist bei mir (20.54,20.54,20.54,20.56), wenn ich nur die Funktion ausführe und result ausgebe. Ergibt exact 82.18. Mirko

      • mirko3
      • vor 1 Jahr
      • Gemeldet - anzeigen

      Tacho Jetzt habe ich es verstanden. Im vorletzten Script ist noch ein Fehler in Zeile 3. Den habe ich im letzten Script behoben.

      • Tacho
      • vor 1 Jahr
      • Gemeldet - anzeigen

      Mirko 

      mein Ergebnis kommt aus dem letzten Skript ;-)

      • Tacho
      • vor 1 Jahr
      • Gemeldet - anzeigen

      korrigiere, nu stimmts!

    • Ninox-Professional
    • planoxpro
    • vor 1 Jahr
    • Gemeldet - anzeigen

    'N Abend, oder vielleicht einfach so?

    let myRate := round(Zahlbetrag / 3, 2);
    '1. Rate' := myRate;
    '2. Rate' := myRate;
    '3. Rate' := round(Zahlbetrag - myRate * 2, 2)
    

    Bei einer variablen Anzahl von Raten würde ich mit einer Untertabelle arbeiten:

    let myR := Ratenanzahl;
    let myRate := round(Zahlbetrag / myR, 2);
    let myList := array(for i in range(0, myR - 1) do
       myRate end, [round(Zahlbetrag - myRate * (myR - 1), 2)]);
    let me := this;
    for i in myList do
       let newRZ := (create Untertabelle);
       newRZ.(Haupttabelle := me);
       newRZ.(Rate := i)
    end
    
    • KGV_Sonneneck_eV_Neuha
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Hallo zusammen, ich werde das mal ausprobieren. Danke

    • KGV_Sonneneck_eV_Neuha
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Hallo zusammen,

    ich nochmal. Habe mich für den Code von Mirko entschieden. In meinem Rechnungsmodul habe ich den Code als Trigger nach Änderung in ein Auswahlfeld (Status) eingebaut. Er funktioniert perfekt.

    Danke für Eure Hilfe. 

    Ich wünsche Euch eine schöne Weihnachtszeit.

     

    LG Axel

Content aside

  • Status Answered
  • vor 1 JahrZuletzt aktiv
  • 13Antworten
  • 94Ansichten
  • 4 Folge bereits