Archiv des Intrexx Live! Forums

Hier sehen Sie die Foreneinträge aus dem Intrexx Live! Forum. Bis November 2016 war es das Forum für alle Fragen rund um die Software Intrexx von United Planet.
Seit November 2016 gibt es ein neues moderiertes Forum, das Intrexx Community Forum. Nutzen Sie bitte unbedingt dieses für aktuelle Fragen, Antworten und Informationen.

Wichtig: Dieses Forum dient als Archiv. Die Einträge beziehen sich oft auf ältere Versionen von Intrexx und entsprechen nicht mehr den aktuellen technischen Gegebenheiten.
Daher sollten alle Inhalte ausschließlich von Experten genutzt werden. Bei unsachgemäßer Anwendung kann es zu zeitaufwändigen Problemen oder Datenverlust kommen.
Übersicht > Intrexx Professional: General Questions > Summe Kinddatensätze

Summe Kinddatensätze

Hallo,

ich habe eine Datengruppe "Bestellung", und darunter eine Kinddatengruppe "Positionen".
In der Kinddatengruppe gibt es das Feld "Positionspreis".

In einer Ansichtsseite möchte ich eine Ansichtstabelle stellen, in der alle Bestellungen angezeigt werden. Mit Hilfe der Formeln in Intrexx möchte ich für jede Bestellung den Gesamtwert anzeigen lassen (also die Summe der entsprechenden Kinddatensätze).
Aber leider rechnet mir Intrexx entweder alle Datensätze aus der Kinddatengruppe zusammen, oder es heißt nur "Es ist ein Fehler aufgetreten".

z.B.:
sum(table("<tableGuid>"), childSum(dataGroup("<tableDataGroupGuid>"), rowDataField("<tableDataFieldGuid>")))


oder:
childSum(dataGroup("<dataGroupGuid>"), dataField("<dataFieldGuid>"))


Kann mir jemand sagen, welche Formel die richtige dafür ist?
01.08.2016 08:43 von MatzeHH
Ich glaube die erste macht eine Gesamtsummer aller Kinddatensätze aller Datensätze, die zweite nur die SUmmer der Kinddatensätze zum aktuellen Datensatz.
01.08.2016 09:04 von MartinW
Das könnte sein.
Aber es muss doch auch möglich sein, die Summe der entsprechenden Kinddatensätze in einer Tabelle zu berechnen.
01.08.2016 10:58 von MatzeHH
Hi,

nehmen wir folgenden Fall an:

"Bestellung" (one-to-many) "Position"
D.h. eine Bestllungen kann mehrere Positionen haben, eine Position gehört zu einer Bestellung.

Die Ansichtsseite mit der Tabelle der Bestellungen muss außerhalb der Datengruppe liegen.
Innerhalb der Ansichtstabelle für die Datengruppe "Bestellung" fügst Du eine neue Berechnung hinzu.
Diese Berechnung zeigt sich dann wie folgt:


childSum(
dataGroup("GUID - Datengruppe Position"),
dataField("GUID - Datenfeld Preis",
0)
)


Dann bekommst Du auch die kumulierten Preise der Positionen je Bestellung.

VG,
Sven
01.08.2016 13:01 von svenbartak
Hallo Sven,

Hallo Sven,

ja, den Fall hast du richtig zusammengefasst.
Die Ansichtsseite mit der Tabelle der Bestellungen liegt "ganz oben", darüber gibt es keine Datengruppe mehr.
Datengruppe Bestellungen ist 1. Ebene
Datengruppe Positionen ist 2. Ebene

Wenn ich deine Formel nehme, wird mir weiterhin "Es ist ein Fehler aufgetreten." angezeigt.
Mit Glück wird manchmal noch eine weitere Fehlermeldung angezeigt:
The datagroup 'E6A82AAE6017DA21C22D06BACD83D1AE92D4A7D1/XDATAGROUP4E83A156 is not a valid child data group.


Meine Formel sieht so aus:
childSum(
dataGroup("E6A82AAE6017DA21C22D06BACD83D1AE92D4A7D1"),
dataField("9FBE70562CA86E668F3DA1CCD9B9A61B5C835561",
0)
)


Im Anhang ist ein Bild der Applikationsstruktur.
Auf der Seite "Verwaltung" habe ich die Ansichtstabelle stehen, die die Berechnung enthalten soll.
01.08.2016 13:42 von MatzeHH
Hallo Matze,

ich hab Deinen Anwendungsfall mal nachgebaut.

Auf erster Ebene gibt es eine Verwaltungsseite und die Datengruppe "Bestellung".
Auf der zweiten Ebene gibt es eine Kinddatengruppe zu "Bestellung" mit dem Namen "Position".
Die Datengruppe "Position" hat ein Feld "Preis" vom Typ "Fließkommazahl".

Mit ein wenig "Schmuck" herum, damit ich Datensätze anlegen kann, kann ich mehrere Positionen mit ne einem Preis zu genau einer Bestellung zuordnen.
Die Bestellung an sich gebe ich dann auf der Verwaltungsseite aus (Tabelle).
In dieser Tabelle kumuliere ich dann - je Bestellung - alle Positionen und zwar das Datenfeld "Preis".

Ich habe Dir mal ein paar Screenshots sowie meine Beispielapplikation angehangen.
In der Berechnung ist dabei die erste GUID die der Datengruppe "Position" und die zweite GUID die des Datenfeldes "Preis" (aus der Datenrguppe Position).

Vielleicht findest Du bei einem Abgleich den Fehler / Unterschied.

VG,
Sven
01.08.2016 14:21 von svenbartak
Hallo Matze,

mir fällt gerade auf, dass Du als Fremdschlüssel einen nicht numerischen Wert benutzt (FKSTRID).
Die Datengruppe "Bestellung" hat bestimmt einen numerische Schlüssel. Bitte prüfe einmal, ob die Zuordnung der FKs sauber passt.
Nicht das hier ggfs. der "Hase im Pfeffer" liegt und Intrexx die Zuordnung der Relation bei der Berechnung nicht sauber auflösen kann.

VG,
Sven
01.08.2016 15:05 von svenbartak
Hallo Sven,

vielen Dank für deine Hilfe.
Deine Applikation funktioniert bei mir problemlos.

Nein, die Datengruppe "Bestellungen" hat auch einen nicht-numerischen Wert (STRID).

Und jetzt fällt es mir auch gerade auf...
Der Fehler sitzt doch meistens vor dem Bildschirm...
In der Ansichtsseite "Verwaltung" werden die Datensätze aus der Datengruppe "Visitenkarten" angezeigt, und nicht "Bestellungen". Ich will ja gar nicht den Gesamtpreis pro Bestellung wissen (ok, das will ich auch, das funktioniert auch richtig), sondern den Gesamtpreis je Visitenkarte (also je Mitarbeiter). Die beiden Datengruppen sind nur über eine Referenz miteinander verknüpft. (Also "Positionen" hat eine Referenz zu "Visitenkarten".)
D.h. die Verknüpfung der beiden Datengruppen kann nicht über Key und Foreign-Key laufen, sondern müsste über den Key (der Visitenkarte) und der Referenz (Positionen) erfolgen.
Funktioniert das überhaupt mit den Berechnungen?
Ansonsten würde ich es mit einem Prozess mit einem Groovy-Script lösen.
02.08.2016 06:16 von MatzeHH
Es gibt glaube ich einen Weg mit den Berechnungen, ich kann das momentan leider nicht testen.
Man müsste dafür keine childSum sondern eine richtige sum erzeugen und darin mit case abfragen ob im Referenzfeld die aktuelle ID drinsteht.
Wenn ja dann den Wert aus dem Datensatz, wenn nein dann 0.
Ist nur eine Vermutung, müsste man wie gesagt testen.
02.08.2016 06:24 von MartinW
Hallo Martin,

ich habe dazu noch etwas gesucht, und bin auf deinen Beitrag aus April letzten Jahres gestoßen: https://www.unitedplanet.com/forum/index.php?page=Thread&postID=35796

Die Berechnung aus deiner Beispielapplikation habe ich etwas angepasst:

totalSum(
dataGroup("<GUID der Datengruppe Positionen>"),
case(
equals("<GUID der Visitenkarten-ID (in der Ansichtstabelle als Spalte enthalten)>", "<GUID des Referenz-Feldes in der Datengruppe Positionen, das auf die Visitenkarten-ID zeigt>"),
rowDataField("<GUID des Datenfeldes Positionspreises in der Datengruppe Positionen>"),
0.0
)
)


Aber egal, was für eine GUID ich bei dataGroup() eintrage, es heißt immer:
java.lang.IllegalArgumentException: No datarange with the name (die GUID, die ich angegeben habe) found.

02.08.2016 07:18 von MatzeHH
In der Beispielapp wird in der Formel nicht auf dataGroup sondern auf table zugegriffen.

totalSum, sum und subTotalSum können soweit ich weis kein dataGroup.

Du müsstest also eine Ansichtstabelle platzieren die alle Datensätze beinhaltet welche du berechnen möchtest.
02.08.2016 07:27 von MartinW
Das ist natürlich möglich.
Wenn ich die Ansichtstabelle platziere, kann ich aber in dem Formeleditor nicht auf die Tabelle zugreifen.
Evtl. geht es auch nicht, aus einer Ansichtstabelle auf eine andere Ansichtstabelle zuzugreifen?

/Edit: Ich habe die GUID jetzt von Hand eingetragen, jetzt kann ich plötzlich auch mit einem Rechts-Klick auf die Ansichtstabelle zugreifen...
Aber es wird als Gesamtpreis immer 0,00 ausgegeben. Ich vermute, dass es etwas mit dem Case und Equals zu tun hat.
02.08.2016 07:37 von MatzeHH
Zurück | Alles über Intrexx | Impressum | Datenschutzerklärung

Über United Planet
© 2019 United Planet GmbH
Schnewlinstraße 2
79098 Freiburg