0

IF Anweisung Formel

Hallo liebe Forumsmitglieder stehe mal wieder auf dem Schlauch.

Ich habe ein Feld welches die Arbeitszeit in AW umwandelt, nun sollte zu diesem AW noch automatisch eine Rüstzeit dazugezählt werden.

Ich habe das über eine if then Lösung versucht bekomme aber nicht die Werte die ich bräuchte.

Von 1 bis 5 AW soll zusätzlich 1 AW gerechnet werden

von 6 bis 10 AW zusätzlich 2 AW usw.

Wie kann ich das lösen?

was klappt ist 

if AW >=20 then 5

und

if AW <=20 then 4

12 Antworten

null
    • Tacho
    • vor 1 Jahr
    • Gemeldet - anzeigen

    vielleicht so:

    if AW > 20 then
        AW + 5
    else
        if AW < 20 and AW >= 16 then
            AW + 4
        else
            if AW < 16 and AW >= 11 then
                AW + 3
            else
                if AW < 11 and AW >= 6 then
                    AW + 2
                else
                    if AW < 6 and AW >= 1 then AW + 1 else AW end
                end
            end
        end
    end

      • Tacho
      • vor 1 Jahr
      • Gemeldet - anzeigen

      dabei ist "AW" ein Zahlenfeld mit den jeweiligen Werten und obige Formel in einem Berechnungsfeld hinterlegt. Je nach Wert des Feldes "AW" ist der Wert im Berechnungsfeld entsprechend um die Addition der Formelwerte erhöht.

      • Heinrich Frey Maschinenbau GmbH
      • Christian_Rott
      • vor 1 Jahr
      • Gemeldet - anzeigen

      Tacho Danke hat mich schon etwas weiter gebracht.

      Was aber nicht geht ist wenn zum bsp direkt 16 ist dann kommt nix ist 17,18,19,20 geht es 

      *grubel*

      • Tacho
      • vor 1 Jahr
      • Gemeldet - anzeigen

      Christian Rott 

      bei mir schon

      • Heinrich Frey Maschinenbau GmbH
      • Christian_Rott
      • vor 1 Jahr
      • Gemeldet - anzeigen

      Tacho hmmmm liegt es dann vielleicht an der Berechnung von AW ??

       

      Die AW kommen aus einer Berechnung denke das evtl da schon der Fehler liegt.

    • Heinrich Frey Maschinenbau GmbH
    • Christian_Rott
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Denke das es in der Zeitumrechnung liegt.

    Ich habe eine Anfangszeit und eine Endzeit. Dann habe ich Gesamt Zeit also Endzeit minus Anfangszeit ergibt Gesamtzeit in Stunden:Minuten.

    Und nun ist 1 AW gleich 6 min wenn ich dann die Gesamtzeit teile bekomme ich ganz ungerade Zahlen da muss ich mich erst noch zurecht finden.

    15 AW = 90min bzw 01:30 hh/mm dann passt die Rechnung sind es aber 

    sind es dann aber 01:35 hh/mm so geht die Rechnung nicht auf kann mir jemand sagen wie ich das hinbekomme???

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

      Christian Rott 

      Hm, ich verstehe das Problem nicht so ganz. Wenn man eine Dauer von 1:35 (= 95 Minuten) in 6-Minuten-AWs umrechnet, kommt zwangsläufig ein Ergebnis mit Nachkommastellen raus. Das muss man halt runden. Wobei es nicht genügt, bspw. nur das angezeigte "Zahlenformat" auf X Nachkommastellen zu setzen. Gerechnet wird ggf. weiterhin mit dem tatsächlichen Wert. Man sollte deshalb in den Formeln die Funktion round() nutzen. Alternativ ceil() oder floor(), um immer auf die nächste Ganzzahl auf- bzw. abzurunden.

      Die Dauer zwischen den beiden Uhrzeiten könnte man in Minuten umrechnen:

      (number(Uhrzeit_bis) - number(Uhrzeit_von)) / 60000
      

      Oder direkt in AWs zu je 6 Minuten:

      (number(Uhrzeit_bis) - number(Uhrzeit_von)) / 360000
      

      Die Abfrage und das Hinzurechnen würde ich mit switch-case vornehmen:

      AW := AW + switch AW > 0 do
          case AW <= 5: 1
          case AW >= 6 and AW <= 10: 2
          case AW >= 10 and AW <= 15: 3
          case AW >= 15 and AW <= 20: 4
          case AW > 20: 5
      end
      

      Oder, wenn immer pro 5 AWs jeweils 1 dazugerechnet werden soll, mit der einfachen Formel:

      AW := AW + floor(AW / 5)
      
      • Ninox-Professional
      • planoxpro
      • vor 1 Jahr
      • Gemeldet - anzeigen

      Korrektur Die letzte Formel müsste lauten

      AW := AW + if AW < 5 then 1 else floor(AW / 5) end
      
      • Heinrich Frey Maschinenbau GmbH
      • Christian_Rott
      • vor 1 Jahr
      • Gemeldet - anzeigen

      planox. pro Danke Dir schonmal ich werde mich da mal dran machen bin halt ein absoluter Neuling mit den Formeln und script schreiben.

      Learning by doing 

      Danke Gruß Christian

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

      Christian Rott 

      Hallo Christian, die Einarbeitung lohnt sich, denn das Scripting eröffnet völlig neue Möglichkeiten und ist zudem wirklich kein Hexenwerk (auch wenn es auf den ersten Blick vielleicht manchmal den Anschein hat). Und Fragen werden hier i. d. R. zeitnah beantwortet. Je genauer die Angaben, desto größer die Wahrscheinlichkeit einer hilfreichen Antwort.

      Also, noch mal systematisch:

      Ich gehe jetzt einfach mal davon aus, dass die Arbeitszeit mit zwei Von-/Bis-Uhrzeitfeldern erfasst wird. Aus diesen lassen sich wie gesagt direkt die 6-Minuten-Arbeitswerte ermitteln:

      (number(Uhrzeit_bis) - number(Uhrzeit_von)) / 360000
      

      Je nach Dauer der Arbeitszeit kann es dabei natürlich zu "krummen" Ergebnissen mit Nachkommastellen kommen. Im Falle der beispielhaften 1:35 bzw. 95 Minuten wäre es 15,833333333333334. Man muss also eine Grundsatzentscheidung treffen, auf welche Weise berechnete AWs auf wieviele Nachkommastellen gerundet werden sollen. Dazu gibt es die Funktion round(). Wenn das Ergebnis bspw. kaufmännisch auf zwei Nachkommastellen gerundet werden soll, dann ergänzt man obige Formel einfach folgendermaßen:

      round((number(Uhrzeit_bis) - number(Uhrzeit_von)) / 360000, 2)
      

      Dann wäre das Ergebnis 15,83. Wenn jedoch auf die nächste Ganzzahl gerundet werden soll, dann ersetzt man die 2 einfach durch 0. Das Ergebnis würde in diesem Fall 16 lauten. Soll jedoch immer auf die nächste Ganzzahl abgerundet werden , dann ginge das mit floor():

      floor((number(Uhrzeit_bis) - number(Uhrzeit_von)) / 360000)
      

      Das Ergebnis wäre nun 15. Soll immer aufgerundet werden, weil jede angefangene AW voll zählt, nimmt man statt floor() einfach ceil(). Dann würde bspw. auch aus 15,25 die Ganzzahl 16.

      So oder so - wenn man die AW-Zahl hat, lässt sich daraus auch die Rüstzeit ermitteln. Entweder mit einer switch-Abfrage wie in meinem gestrigen Posting oder, sofern es eine feste Systematik gibt (+ 1 je 5 AWs), mit der ebenfalls bereits gestern genannten Berechnungsformel.

      Wenn Fragen: Fragen! 😉

      PS: Die meisten Ninox-Funktionen lassen sich übrigens in der englischsprachigen Doku nachschlagen: https://docs.ninox.com/en/script/functions

      Außerdem gibt es im allgemein zugänglichen Team "Webinar DE 2022" eine Datenbank namens "0001_Ninox-Referenz", die ebenfalls Erläuterungen und Praxisbeispiele zu allen Funktionen enthält. Dank UweG  nicht nur auf deutsch, sondern in verschiedenen Sprachen.

      • Heinrich Frey Maschinenbau GmbH
      • Christian_Rott
      • vor 1 Jahr
      • Gemeldet - anzeigen

      planox. pro Dank Dir für die super ausführliche Darstellung ich habe mich für den floor weg entschieden da von der Firma diese AW Rest AW ja vorgegeben sind und ich ja nur versuche es meinen Kollegen dadurch etwas zu erleichtern so das Sie es nicht erst handschriftlich aufschreiben müssen sondern auf em Tablet es machen können.

      Ja super das einem Neulinge durch die Forummitglieder hier immer gut geholfen wird.

      GROSSEN DANK AN ALLE HIER

      Besten Dank Dir auch nochmal. 👍👍👍

    • Heinrich Frey Maschinenbau GmbH
    • Christian_Rott
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Ergebnis passt jetzt wieder ein Schritt weiter 😉

Content aside

  • Status Answered
  • vor 1 JahrZuletzt aktiv
  • 12Antworten
  • 98Ansichten
  • 3 Folge bereits