Home › Forum › Nuclos Entwicklung › Makros und Regeln › Groovy – Felder aus Subform auslesen und summieren
- Dieses Thema hat 5 Antworten und 4 Teilnehmer, und wurde zuletzt aktualisiert vor 9 Jahre, 3 Monaten von
Ramin Goettlich.
-
AutorBeiträge
-
28 Oktober 2013 um 12:14 Uhr #7198
Thorsten Forkel
TeilnehmerHallo 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
28 Oktober 2013 um 12:31 Uhr #7199Markus Glitzner
TeilnehmerHallo!
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 bBetragBruttofü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 bBetragBruttoIch 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ß
Hugo28 Oktober 2013 um 13:09 Uhr #7201Thorsten Forkel
TeilnehmerDanke, 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
28 Oktober 2013 um 13:12 Uhr #7202Markus Glitzner
Teilnehmerja klar, sah auch schon irgednwie komisch aus 😉
12 Dezember 2013 um 16:30 Uhr #7361Testuser Testlast
TeilnehmerHallo,
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?
21 Dezember 2013 um 14:30 Uhr #7392Ramin Goettlich
TeilnehmerVermutlich ein Fehler, am besten ein Ticket auf http://support.nuclos.de erstellen.
-
AutorBeiträge