0

Automatische Stundensatzerhöhung

Servus,

ich habe eine Tabelle in der die Stundensätze eingetragen werden und diese sich bei den meisten Kunden automatisch um 2% pro Jahr erhöhen. hierfür habe ich für jedes Jahr eine Spalte erstellt (wahrscheinlich würden einige das einfacher lösen). Dort wo die Erhöhung jährlich erfolgt, klappt das ohne Probleme. Es gibt wenige Ausnahmen, wo die Erhöhung nur alle 3 Jahre stattfindet. Es müsste also Startjahr + 3 Jahre + 3 Jahre ...... eine Erhöhung stattfinden, nicht jedoch jährlich. Beispiel bei alle drei Jahre Erhöhung: 2021-2024-2027.....

Hat jemand eine Idee wie das in der Formel abgebildet werden könnte. Relevante Felder sind:

'Entw. %' + '2022' = prozentuale Erhöhung des Stundensatzes

'Intervall' = Häufigkeit der Erhöhung, 1 ist jährlich, 2 ist alle zwei Jahre, 3 alle drei Jahre etc. 

'Start Stundensatz' = Anfänglicher Stundensatz

Startjahr = Beginn der Vertragsbeziehung

'2021' = für jedes Jahr ab 2021 und fortlaufend für jedes Jahr das Feld mit dem entsprechenden erhöhten Stundensatz (2022, 2023, 2024 .....)

 

Das ist die Formel für 2023:

if number(Startjahr) = 2023 then
    'Start Stundensatz'
else
    if number(Startjahr) < 2023 then
        '2022' * 'Entw. %' + '2022'
    else
        if number(Startjahr) > 2023 then
            0
        end
    end
end

 

Ich gehe davon aus, ich habe es mir zu aufwendig gemacht.

Vielen Dank vorab für die Hilfe

6 Antworten

null
    • mirko3
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hallo Christian. Hier mal eine Anregung für Dich. Ich würde in den Stammdaten der Kunden ein Auswahlfeld anlegen (TURNUS), in diesem dann die Auswahl für jährlich, zweijährlich, dreijährlich. Dann ein Feld STARTDATUM und ein Feld STARTPREIS, die wohl selbsterklärend sind. Wenn Du dann in ein Funktionsfeld daneben das folgende Script eingibst, dann sollte nach Auswahl des Turnus und Eintrag in die anderen Felder der korrekte Wert erscheinen und entsprechend des Turnus auch steigen. 

    Mirko

    let endPreis := STARTPREIS;
    let diff := year(today()) - year(STARTDATUM);
    let increase := 2;
    switch endPreis != 0 do
    case TURNUS = 1:
        (
            let endPreis := STARTPREIS;
            for i in range(1, diff + 1) do
                endPreis := endPreis + increase * endPreis / 100
            end;
            round(endPreis, 2)
        )
    case TURNUS = 2:
        (
            let endPreis := STARTPREIS;
            for i in range(1, floor(diff / 2) + 1) do
                endPreis := endPreis + increase * endPreis / 100
            end;
            round(endPreis, 2)
        )
    case TURNUS = 3:
        (
            let endPreis := STARTPREIS;
            for i in range(1, floor(diff / 3) + 1) do
                endPreis := endPreis + increase * endPreis / 100
            end;
            round(endPreis, 2)
        )
    end
    
      • A.M.U. Beratung Ingenieurbüro Schünzel
      • Christian_Schunzel
      • vor 2 Jahren
      • Gemeldet - anzeigen

      Servus

      Im Nachhinein habe ich noch das Feld hinzugefügt, das ein Startjahr angibt, wann die Preiserhöhung starten soll. Wenn Kunden bisher keine automatische Stundensatzerhöhung aufwiesen.

      Wie kann ich das Feld oben einbinden?

      Ist das einfach umsetzbar?

      Vielen Dank und viele Grüße

      Christian

      • + Maßanzug statt Massenware +
      • RonaldP
      • vor 1 Jahr
      • Gemeldet - anzeigen

      Moin Christian Schünzel ,

      das kannst du mit einer if - Abfrage vor/um Mirkos-Code machen:

      if ZAHL <= year(today()) then
      MIROS-CODE
       end
      

      Meine Annahme hier, dass du ein Zahlenfeld ZAHL hast, in welches du das Jahr als z.B. so einträgst 2023.
      Dann wird Mirkos-Code nur ausgeführt, wenn das eingegebene Jahr kleiner oder gleich dem aktuellen Jahr ist.

      VG Ronald

      • A.M.U. Beratung Ingenieurbüro Schünzel
      • Christian_Schunzel
      • vor 1 Jahr
      • Gemeldet - anzeigen

      Servus DIGITOOL 

      Danke für den Input. Ich bin jetzt erst dazu gekommen, mir das noch mal anzuschauen, da meine Datenbank gecrasht war.

      Die Idee mit der IF Formel ist gut, dass Problem ist jedoch, dass ich so nicht ganz zum Ziel komme.

      Beispiel:

      Beauftragung durch Kunde: ab September 2021

      Erhöhung ab: 2023

      Im Falle der If Formel wird zwar erst 2024 die Formel durchgeführt, aber trotzdem dann zwei Mal für 2022 und dann wieder 2023. 

      Die Erhöhung soll aber 2023 das erste Mal durchgeführt werden.

      Wenn die Beauftragung Anfang des Jahres erfolgt und im nächsten Jahr die Erhöhung festgelegt wurde, dann klappt es mit der Formel natürlich wunderbar wie bisher.

      Viele Grüße

    • A.M.U. Beratung Ingenieurbüro Schünzel
    • Christian_Schunzel
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hallo Mirko,

    durch Urlaub und Arbeit kam ich jetzt erst dazu, dass zu testen.

    Vielen lieben Dank für die Hilfe. Es klappt wunderbar.

    Zuerst hatte ich die Infos in einer Untertabelle, Startdatum, Entwicklung Stundensatz und Startpreis. Hier hatte mir Ninox bei der Formel Fehler bei drei Klammern angezeigt. Als ich es in die Kunden Tabelle eingegeben habe (Spalten erstellt). Hatte es sofort geklappt.

     

    Viele Grüße

    Christian

    • mirko3
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Versuche mal so. Ohne Zusatzfeld. Die Erhöhung beginnt im year(STARTDATUM), vorher bleibt der Startpreis erhalten. Mirko

    if year(today()) < year(STARTDATUM) then
        STARTPREIS
    else
        let endPreis := STARTPREIS;
        let diff := year(today()) - year(STARTDATUM);
        let increase := 2;
        switch endPreis != 0 do
        case TURNUS = 1:
            (
                let endPreis := STARTPREIS;
                for i in range(0, diff + 1) do
                    endPreis := endPreis + increase * endPreis / 100
                end;
                round(endPreis, 2)
            )
        case TURNUS = 2:
            (
                let endPreis := STARTPREIS;
                for i in range(0, floor(diff / 2) + 1) do
                    endPreis := endPreis + increase * endPreis / 100
                end;
                round(endPreis, 2)
            )
        case TURNUS = 3:
            (
                let endPreis := STARTPREIS;
                for i in range(0, floor(diff / 3) + 1) do
                    endPreis := endPreis + increase * endPreis / 100
                end;
                round(endPreis, 2)
            )
        end
    end