Home Forum Nuclos Entwicklung Makros und Regeln Groovy – Felder aus Subform auslesen und summieren

Ansicht von 6 Beiträgen - 1 bis 6 (von insgesamt 6)
  • Autor
    Beiträge
  • #7198
    Thorsten Forkel
    Teilnehmer

    Hallo zusammen,
    ich habe in Anlehnung an das Wiki folgenden Groovy-Code für das Attribut Gesamtsumme erstellt:
    def bBetragBrutto = new java.math.BigDecimal(0.000)
    context."#{DEF.Leistungspositionen}".each {
    item -> bBetragBrutto = bBetragBrutto.add(java.math.BigDecimal.valueOf(item."#{DEF.Leistungspositionen.Gesamtpreis}"))
    }
    return bBetragBrutto.setScale(4, java.math.RoundingMode.HALF_UP).doubleValue()

    leider klappt dieser Code nicht, bei Änderung oder Hinzufügen von Positionen wird der Wert nicht berechnet. 🙁

    Die Entität „Leistungspositionen“ ist ein Subform zu Aufträge und das Attribut „Gesamtpreis“ ist vom Typ Double mit zwei Kommastellen. Das Zielfeld ist ebenfalls vom Typ Double mit zwei Kommstellen.

    Vielleicht bin ich ja irgendwo auf dem Holzweg, deshalb für jeden Hinweis dankbar.

    Grüße Thorsten

    #7199
    Markus Glitzner
    Teilnehmer

    Hallo!

    1. du musst null Werte vom gesamtpreis abfangen
    2. Gesamtpreis wird eher klein geschrieben werden müssen
    3. Wenn du zwei Zahlen mit scale 2 addierst, wird die scale immer 2 bleiben
    4. ein return value .doubleValue() ist nicht nötig, es genügt return bBetragBrutto

    für den Anfang könntest du es mal so versuchen (nicht getestet):def bBetragBrutto = 0.0
    context."#{DEF.Leistungspositionen}".each {
    if (item."#{DEF.Leistungspositionen.gesamtpreis}" != null) {
    item -> bBetragBrutto += item."#{DEF.Leistungspositionen.gesamtpreis}"
    }
    }
    return bBetragBrutto

    Ich persönlich verwende kein BigDecimal in groovy, ist mir zu umständlich. Die tatsächliche Berechnung erfolgt bei mir ohnehin in einer Regel und dort natürlich mit BigDecimal. Groovy ist ja für das tatsächliche Berechnen auch nur bedingt geeignet, da es bei bestimmten Umständen nicht funtioniert, z.B. bei Sammelbearbeitungen wo sich die Summe aus zwei Feldern ergibt gar nichts berechnet.

    Gruß
    Hugo

    #7201
    Thorsten Forkel
    Teilnehmer

    Danke, das hat viel gebracht.
    Ich habe folfgenden Code verwendet:
    def bBetragBrutto = 0.0
    context."#{DEF.Leistungspositionen}".each {item ->
    if (item."#{DEF.Leistungspositionen.gesamtpreis}" != null) {
    bBetragBrutto += item."#{DEF.Leistungspositionen.gesamtpreis}"
    }
    }
    return bBetragBrutto

    Habe also nur noch „item ->“ an den Anfang der Schleife gesetzt und schon gings. Super lieben Dank.

    Thorsten

    #7202
    Markus Glitzner
    Teilnehmer

    ja klar, sah auch schon irgednwie komisch aus 😉

    #7361
    Testuser Testlast
    Teilnehmer

    Hallo,

    ich habe quasi genau die gleiche Regel und folgendes Problem:
    Die Aktualisierung des Gesammtbetrages funktioniert nur für bereits exisitierende Spalten:

    Neues Objekt wird angelegt.
    Im Subform wird ein Item1 mit Kosten 5 hinzugefügt.
    Im Subform wird ein Item2 mit Kosten 10 hinzugefügt.
    -> Das Gesamtbetragfeld bleibt leer
    Speichern
    -> Das Gesamtbetragsfeld bleibt leer
    Im Subform wird ein Item3 mit Kosten 2 hinzugefügt.
    -> Das Gesamtbetragsfeld aktualisiert sich zu „15“
    Im Subform werden die Kosten von Item1 auf 10 geändert.
    -> Das Gesamtbetragsfeld aktualisiert sich zu „20“
    Speichern
    -> Das Gesamtbetragsfeld zeigt immernoch 20 an
    Im Subform werden die Kosten von Item3 auf 3 geändert
    -> Das Gesamtbetragsfeld aktualisiert sich zu 23.

    Es werden bei der Regel also nur die Spalten einbezogen die bereits gespeichert wurden, Spalten die neu hinzukommen werden ignoriert. Wie kann ich dafür sorgen, dass alle Spalten, auch Neue, mit einbezogen werden?

    #7392
    Ramin Goettlich
    Teilnehmer

    Vermutlich ein Fehler, am besten ein Ticket auf http://support.nuclos.de erstellen.

Ansicht von 6 Beiträgen - 1 bis 6 (von insgesamt 6)