0

Abwertung des VK erstellen ?

Hallo bow, auch für dich du musst den Beitrag den du geschrieben hast vorher kopieren abschicken und dann wird erstmal das thema erstellt anschließend das kopierte nochmal posten erst dann erscheint er hier. Ich konnte ihn nur sehen da ich ihn als mail bekommen habe. Hier deine Frage nochmal.

Hallo
Ich möchte folgendes umsetzten.
Ich möchte einen Verkaufspreis abwerten

Z.B. 199,99 als festes Feld
Im Hintergrund wird über eine Funktion zwischen wareneingang und heute in Monaten das Alter ermittelt.

3 M 199,99 0% Restwert 199,99
9 M 199,99 - 15% Restwert 169,99
15 M 199,99 - 25% Restwert 149,99
36 M 199,99 - 100% Restwert 0,00

Mit OpenOffice Base konnte ich dies bereits umsetzen, hier komme ich nicht weiter.

Bitte um eure Hilfe - Vielen Dank im Voraus

16 Antworten

null
    • Leonid_Semik
    • vor 6 Jahren
    • Gemeldet - anzeigen
    Hallo bow.
    Das Alter in Monaten kannst du so Berechnen:
    let MONATE := if day(today()) >= day(Datum) then
    if month(today()) >= month(Datum) then
    month(today()) - month(Datum) + (year(today()) - year(Datum)) * 12
    else
    (year(today()) - year(Datum)) * 12 - 1 - month(Datum) + month(today())
    end
    else
    if month(today()) >= month(Datum) then
    month(today()) - month(Datum) + (year(today()) - year(Datum)) * 12
    else
    (year(today()) - year(Datum)) * 12 - 1 - month(Datum) + month(today())
    end - 1
    end;


    Die Berechnung des Restwertes hängt davon ab, ob du eine Stufenberechnung machst oder monatlich.Also ob mit 8 Monaten der Restwert immer noch mit 0% berechnet wird oder doch mit (15/6*5)%

    Grüße
    Leo
    • AxelE
    • vor 6 Jahren
    • Gemeldet - anzeigen
    Hi bow, mir ist die Logik der Abstufung nicht ganz klar. Was genau bedeutet die jeweilige Anzahl der Monate? "Von/ab" oder "bis"? Ausgehend vom ersten Eintrag "3 M" mit 0 Prozent Wertverlust wäre es m. E. wohl "bis". Dann ergäbe jedoch der letzte Eintrag keinen Sinn, es sei denn, der Artikel würde sich nach 36 Monaten automatisch in Luft auflösen. Denn weniger als Null kann er ja nicht kosten.

    Ich habe jetzt einfach mal angenommen, bei einer Lagerdauer zwischen 15 und 36 Monaten betrüge der Wertverlust 50 %, und erst AB 36 Monaten 100 %. Dann könnte eine simple Lösung so aussehen (als Funktion im Berechnungsfeld 'Restwert' o. ä.):

    let AnzMonate := ceil(days(Wareneingang, today()) / 30.4);
    if AnzMonate > 3 then
    if AnzMonate > 9 then
    if AnzMonate > 15 then
    if AnzMonate > 36 then
    round(Normalpreis - Normalpreis / 100 * 100, 2)
    else
    round(Normalpreis - Normalpreis / 100 * 50.001, 2)
    end
    else
    round(Normalpreis - Normalpreis / 100 * 25.001, 2)
    end
    else
    round(Normalpreis - Normalpreis / 100 * 15.001, 2)
    end
    else
    Normalpreis
    end


    Wobei die Berechnung der Anzahl der Monate hier nicht exakt auf den Tag genau erfolgt. Da habe ich's mir einfach gemacht. Wie das besser geht, hat Leo ja gepostet.
    • VVW-Internethandel
    • Wolf_Karl
    • vor 6 Jahren
    • Gemeldet - anzeigen
    Hallo Danke für eure Hilfe.
    Das mit den Angabe der Monate hatte ich vor dem Beitrag bereits so mit der eingabe Funktion gelöst

    (year(today()) - year(Wareneingang)) * 12 + month(today()) - month(Wareneingang) + day(today()) - day(Wareneingang)

    Hoffe ist so richtig

    Zu der Abwertung: die % und M sind Beispiele, real anders.

    Der Artikel wird nach einer Weile abgewertet,
    Hier wird dann dann darauf geachtet das die Ware zu einem bestimmten
    Zeitpunkt verkauft sein muss, und was dieser im VK noch wert ist. Z.B Preisauszeichnung

    Es geht hierbei auch den Artikel nicht unter Wert zu verkaufen,
    Oder was gewinne ich wenn der Artikel früher verkauft wird, als das er in den nächsten Abschnitt rutscht.

    1-3 M 199,99 0% Keine Abwertung 199,99
    4-14 M 199,99 – 15% Restwert 169,99
    15 - 35 M 199,99 – 25% Restwert 149,99
    36 M 199,99 – 100% Restwert 0,00

    In welchem Bereich wird der Code eingegeben und welche Sprache wird
    Verwendet.

    Gruß Bow
    • AxelE
    • vor 6 Jahren
    • Gemeldet - anzeigen
    Hast du deine Formel zur Berechnung der Monate ausprobiert? So, wie sie da steht, berechnet sie nämlich alles Mögliche, aber nicht die Anzahl der Monate seit dem Wareneingang.

    Beispiel Wareneingang am 17.12.2017. Gerechnet wird:

    2018 - 2017 = 1
    * 12 = 12
    + 03 = 15
    - 12 = 03
    + 10 = 13
    - 17 = -4 <-- Monate?

    Wenn du es exakt haben willst, dann nimm doch einfach Leos Code. Wenn er sich doch schon die Mühe macht. Oder falls es nicht taggenau sein muss, geht wahrscheinlich auch meine einfache Variante.

    So oder so: An der weiteren Berechnung der Wertverluste ändert das natürlich erst mal nichts. Aber deine Aufstellung der Stufen ist jetzt eine andere. Oben ist noch der Zeitraum "9 Monate" dabei. Deshalb fehlte ein Prozentwert. Jetzt passt es von den Zeiträumen und den Abwertungen her. Der angepasste Code wäre dann (einzugeben unter "Funktion" eines beliebigen Berechnungsfeldes):

    let AnzMonate := ceil(days(Wareneingang, today()) / 30.4);
    if AnzMonate > 3 then
    if AnzMonate > 14 then
    if AnzMonate > 35 then
    round(Normalpreis - Normalpreis / 100 * 100, 2)
    else
    round(Normalpreis - Normalpreis / 100 * 25.001, 2)
    end
    else
    round(Normalpreis - Normalpreis / 100 * 15.001, 2)
    end
    else
    Normalpreis
    end


    Wobei die hier im Code genutzten Prozentwerte natürlich auch aus Datenfeldern ausgelesen werden könnten. Z. B. so (mit Stufe2 als numerisches Datenfeld):

    round(Normalpreis - Normalpreis / 100 * Stufe2, 2)

    Wie gesagt, mein Code ist zugegebenermaßen etwas grobschlächtig, weil genau an deine Beschreibung angepasst. Wenn die Zeitstufen und Prozentwerte für verschiedene Artikel variabel sind, dann wird's natürlich etwas komplizierter.
    • AxelE
    • vor 6 Jahren
    • Gemeldet - anzeigen
    PS: Ach so, meintest du mit "Eingabe Funktion" vielleicht die visuelle Zusammenstellung von Formeln per Mouse? Falls ja: Schalte mal oben im Funktionsfenster von "Visuell" auf "Text" um und füge den obigen Beispielcode testweise per Copy and Paste dort ein.
    • VVW-Internethandel
    • Wolf_Karl
    • vor 6 Jahren
    • Gemeldet - anzeigen
    guten Abend
    irgendwas mache ich falsch nach Eingabe des Codes von Leo wird nichts ausgegeben (Datum habe ich Wareneingang geändert)

    Gruß Bow
    • AxelE
    • vor 6 Jahren
    • Gemeldet - anzeigen
    Leos Code ermittelt nur die Anzahl der Monate. Mit diesem Wert (MONATE) erfolgt dann die Berechnung der Wertverluste.

    Versuche es doch bitte einfach mal mit meinem Code, und zwar genau so, wie ich ihn um 3:27 pm gepostet habe. Damit sich in deinem Formular mal irgendwas Sichtbares tut. Verbessern kann man es dann immer noch.
    • Leonid_Semik
    • vor 6 Jahren
    • Gemeldet - anzeigen
    Hallo Bow,
    die Formel zeigt nur wie die Formel aussehen kann. Die Variable MONATE ist für weitere Berechnungen gedacht. Um die Monate anzuzeigen muß du zusätzlich unten MONATE schreiben
    let MONATE := if day(today()) >= day(Datum) then
    if month(today()) >= month(Datum) then
    month(today()) - month(Datum) + (year(today()) - year(Datum)) * 12
    else
    (year(today()) - year(Datum)) * 12 - 1 - month(Datum) + month(today())
    end
    else
    if month(today()) >= month(Datum) then
    month(today()) - month(Datum) + (year(today()) - year(Datum)) * 12
    else
    (year(today()) - year(Datum)) * 12 - 1 - month(Datum) + month(today())
    end - 1
    end;
    MONATE


    Grüße
    Leo
    • VVW-Internethandel
    • Wolf_Karl
    • vor 6 Jahren
    • Gemeldet - anzeigen
    Super Danke
    die Monate werden nun angezeigt.
    ------
    welche Sprache wird hier in Ninox verwendet ? (Swift3?)
    gibt es eine ausführliche Sprachreferenz zum nachschlagen
    ------

    ich habe mir mal den Code aus openoffice gezogen
    wie es später Berechnet werden soll mit den richtigen Monaten und Abwertungen

    hoffe es macht nichts mit den verschiedenen Angaben

    Gruss Bow

    PS:
    der Login hier zum Forum ist schwer zu finden, sollte man mal überdenken

    CASE

    WHEN DATEDIFF( 'mm', "Wareneingang", CURRENT_DATE ) < 2 THEN "VK-Wert"
    WHEN DATEDIFF( 'mm', "Wareneingang", CURRENT_DATE ) < 5 THEN "VK-Wert" * 0.95
    WHEN DATEDIFF( 'mm', "Wareneingang", CURRENT_DATE ) < 11 THEN "VK-Wert" * 0.90
    WHEN DATEDIFF( 'mm', "Wareneingang", CURRENT_DATE ) < 18 THEN "VK-Wert" * 0.85
    WHEN DATEDIFF( 'mm', "Wareneingang", CURRENT_DATE ) < 24 THEN "VK-Wert" * 0.60
    WHEN DATEDIFF( 'mm', "Wareneingang", CURRENT_DATE ) < 36 THEN "VK-Wert" * 0.35
    WHEN DATEDIFF( 'mm', "Wareneingang", CURRENT_DATE ) > 36 THEN "VK-Wert" * 0.00

    END AS "RESTWERT",
    • VVW-Internethandel
    • Wolf_Karl
    • vor 6 Jahren
    • Gemeldet - anzeigen
    Guten Abend so hab es ich nun eingegben
    mal sehen ob es klappt.

    let ALTER := ceil(days(Wareneingang, today()) / 30.4);
    if ALTER > 2 then
    if ALTER > 5 then
    if ALTER > 11 then
    if ALTER > 18 then
    if ALTER > 24 then
    if ALTER > 36 then
    if ALTER > 36 then
    round(VK - VK / 100 * 100, 2)
    else
    round(VK - VK / 100 * 25.001, 2)
    end
    else
    round(VK - VK / 100 * 65.001, 2)
    end
    else
    round(VK - VK / 100 * 40.001, 2)
    end
    else
    round(VK - VK / 100 * 15.001, 2)
    end
    else
    round(VK - VK / 100 * 10.001, 2)
    end
    else
    round(VK - VK / 100 * 5.001, 2)
    end
    else
    VK
    end
    • AxelE
    • vor 6 Jahren
    • Gemeldet - anzeigen
    Moin Bow, im Prinzip sieht's gut aus. Aber du hast da jetzt zwei mal "> 36" drin. Das führt zu keinem Fehler, ist aber überflüssig. Und die 25 % kommen niemals zur Anwendung. Nach deiner Formel hast du jetzt folgende Stufen:

    Alter > 2 Monate = 5 Prozent
    Alter > 5 Monate = 10 Prozent
    Alter > 11 Monate = 15 Prozent
    Alter > 18 Monate = 40 Prozent
    Alter > 24 Monate = 65 Prozent
    Alter > 36 Monate = 100 Prozent

    Wenn es das ist, was du wolltest: Glückwunsch. Funktioniert!

    Nun könntest du noch die erste Zeile zur Ermittlung des Alters in Monaten ("let ALTER :=" [...]) durch Leos Code ersetzen, dann hättest du für ALTER ein noch genaueres Ergebnis.

    Was die Dokumentation betrifft: Das ist so eine Sache. Es gibt ein Manual, welches aber eher eine Funktions-Referenz und bei weitem nicht vollständig ist. Den Rest muss man sich zusammensuchen oder erfragen (entweder hier im Forum oder in den Kommentaren unter den Themen des Online-Manuals).

    Online-Manual, Start:
    http://manual.ninoxdb.de/de/first-steps/

    Neue Funktionen, kurz angerissen:
    https://ninoxdb.de/de/whatsnew
    • VVW-Internethandel
    • Wolf_Karl
    • vor 6 Jahren
    • Gemeldet - anzeigen
    Guten Abend zusammen,
    bis jetzt funktioniert die Abwertung super.

    ich hatte noch eine Idee die ich gerne einbauen würde.

    es soll der nächste Zeitpunkt (Datum) angezeigt werden
    wann es in die nächste Abwertung rutscht und wieviel Geld mir
    verloren geht.

    Gruss Bow
    • VVW-Internethandel
    • Wolf_Karl
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Hallo zusammen

    leider habe ich obiges noch nicht umsetzten können, da ich mit der Umsetztung des Codes noch nicht klar komme.

    ich würde gerne folgendes umsetzen

    die Artikel haben ein bestimmtes alter und  nun würde ich gerne, wissen wieviel Tage mir noch bleiben bis zur nächsten Stufe und wieviel Geld mir verloren geht (oder abgewertet wird).

     

    Vielen Danke für eure Hilfe.

    @ Ninox - es wäre nicht schlecht wenn es ein video fürs coden gäbe

     

    let ALTER := ceil(days(Wareneingang, today()) / 30.4);

    if ALTER > 2 then

    if ALTER > 5 then

    if ALTER > 11 then

    if ALTER > 18 then

    if ALTER > 24 then

    if ALTER > 36 then

    round(VK - VK / 100 * 100, 2)

    else

    round(VK - VK / 100 * 75.001, 2)

    end

    else

    round(VK - VK / 100 * 40.001, 2)

    end

    else

    round(VK - VK / 100 * 19.001, 2)

    end

    else

    round(VK - VK / 100 * 10.001, 2)

    end

    else

    round(VK - VK / 100 * 5.001, 2)

    end

    else

    VK

    end;

    ALTER

    • Leonid_Semik
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Hallo Bow,

    so als Berechnungsfeld:

    ---

    switch today() > Wareneingang do
    case today() < date(year(Wareneingang), month(Wareneingang) + 2, day(Wareneingang)):
    (
    let AW := 'VK-Wert';
    let ND := date(year(Wareneingang), month(Wareneingang) + 2, day(Wareneingang));
    let DD := days(today(), date(year(Wareneingang), month(Wareneingang) + 2, day(Wareneingang)));
    let DS := 'VK-Wert' - 'VK-Wert' * 0.95;
    "der Aktueller Wert ist: " + AW + ".
    Bis zur nächsten Stufe am: " + ND + " bleibt dir noch " + DD + " Tage.
    Du verlierst " + DS + " Euro"
    )
    case today() < date(year(Wareneingang), month(Wareneingang) + 5, day(Wareneingang)):
    (
    let AW := 'VK-Wert' * 0.95;
    let ND := date(year(Wareneingang), month(Wareneingang) + 5, day(Wareneingang));
    let DD := days(today(), date(year(Wareneingang), month(Wareneingang) + 5, day(Wareneingang)));
    let DS := AW - 'VK-Wert' * 0.9;
    "der Aktueller Wert ist: " + AW + ".
    Bis zur nächsten Stufe am: " + ND + " bleibt dir noch " + DD + " Tage.
    Du verlierst " + DS + " Euro"
    )
    case today() < date(year(Wareneingang), month(Wareneingang) + 11, day(Wareneingang)):
    (
    let AW := 'VK-Wert' * 0.9;
    let ND := date(year(Wareneingang), month(Wareneingang) + 11, day(Wareneingang));
    let DD := days(today(), date(year(Wareneingang), month(Wareneingang) + 11, day(Wareneingang)));
    let DS := AW - 'VK-Wert' * 0.85;
    "der Aktueller Wert ist: " + AW + ".
    Bis zur nächsten Stufe am: " + ND + " bleibt dir noch " + DD + " Tage.
    Du verlierst " + DS + " Euro"
    )
    case today() < date(year(Wareneingang), month(Wareneingang) + 18, day(Wareneingang)):
    (
    let AW := 'VK-Wert' * 0.85;
    let ND := date(year(Wareneingang), month(Wareneingang) + 18, day(Wareneingang));
    let DD := days(today(), date(year(Wareneingang), month(Wareneingang) + 18, day(Wareneingang)));
    let DS := AW - 'VK-Wert' * 0.6;
    "der Aktueller Wert ist: " + AW + ".
    Bis zur nächsten Stufe am: " + ND + " bleibt dir noch " + DD + " Tage.
    Du verlierst " + DS + " Euro"
    )
    case today() < date(year(Wareneingang), month(Wareneingang) + 24, day(Wareneingang)):
    (
    let AW := 'VK-Wert' * 0.6;
    let ND := date(year(Wareneingang), month(Wareneingang) + 24, day(Wareneingang));
    let DD := days(today(), date(year(Wareneingang), month(Wareneingang) + 24, day(Wareneingang)));
    let DS := AW - 'VK-Wert' * 0.35;
    "der Aktueller Wert ist: " + AW + ".
    Bis zur nächsten Stufe am: " + ND + " bleibt dir noch " + DD + " Tage.
    Du verlierst " + DS + " Euro"
    )
    case today() < date(year(Wareneingang), month(Wareneingang) + 36, day(Wareneingang)):
    (
    let AW := 'VK-Wert' * 0.35;
    let ND := date(year(Wareneingang), month(Wareneingang) + 36, day(Wareneingang));
    let DD := days(today(), date(year(Wareneingang), month(Wareneingang) + 36, day(Wareneingang)));
    let DS := AW;
    "der Aktueller Wert ist: " + AW + ".
    Bis zur nächsten Stufe am: " + ND + " bleibt dir noch " + DD + " Tage.
    Du verlierst " + DS + " Euro"
    )
    default:
    "der Aktueller Wert ist:  0,00 Euro. Du hast alles verloren"
    end

    ---

    Zieh das Fenster höher damit alle Zeilen zu sehen sind

     

    Leo

    • VVW-Internethandel
    • Wolf_Karl
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Hallo leo

    danke für deine hilfe.

    hast du ne Info wie man, das programmieren lernen kann.

    gruss Bow

    • Leonid_Semik
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Hallo Bow,

    zum Selbststudium gibt es hier ziemlich detailliert die Funktionsbeschreibung:

    https://ninoxdb.de/de/manual/erweiterte-Berechnungen/funktions-und-sprachreferenz

    In den live Webinaren Mittwochs 16:00-18:00 zeigt Birger, wie man in Ninox "programmiert". Früher waren es "Tipps und Trix", jetzt erklärt Birger jedes Mal ein neues Thema.

    Außerdem kann ich die Datenbank 0001_Ninox-Referenz im Webinar-Team 2019 empfehlen. Da hat der Copytexter tolle Arbeit geleistet.

    Es gab mal auch eine Idee, dass Ninox selbst die live Workshops anbietet. Ich weiß aber nicht ob daraus etwas geworden ist.

     

    Leo

Content aside

  • vor 4 JahrenZuletzt aktiv
  • 16Antworten
  • 5384Ansichten