Hilfe beim Erstellen eines RecordArrays

Hallo Leute, ich beisse mir mal wieder die Zähne aus, und auch die verschiedenen KI Tools helfen nicht richtig weiter, weil sie regelmäßig in eventuell grundsätzliche Muster verfallen, z.B. select auf select, aber dabei eben nicht die Eigenarten von Ninox kennen, bzw. berücksichtigen.
Ich möchte gerne aus einer Tabelle, bestimmte Datensätze für eine Ansicht filtern. Es geht um die Tabelle Lagerbewegungen. Hier werden Produkte ein- oder ausgelagert. Die Produkte stehen im Feld "Gebinde". Einlagerungen haben positive Werte im Feld "Menge Gebinde" Auslagerungen haben negative Werte im selben Feld.
Wie man sieht, sind die Felder Lager, Gebinde, Charge verknüpfte Tabellen.
Ich würde gerne für eine Ansicht diejenigen Datensätze filtern, die das ausgewählte Lager und Gebinde enthalten,
und nach Charge zusammengefasst einen Bestand > 0 haben. Es könnten also zu einem Produkt (Gebinde) Einträge in der Tabelle existieren, die mit einer bereits aufgebrauchten Charge gebucht wurden. Der Bestand für diese Charge wäre 0, und deswegen wollte ich diese Datensätze nicht sehen.
Angezeigt werden sollten nur Chargen des Produktes, die noch Bestand haben.
Ich habe es bis zu folgenden Code geschafft
let me := this;
let movements := (select Lagerbewegungen where Gebinde = me.Gebinde and Lager = me.Lager);
let myUniqueCharges := unique (movements.Charge.Chargennummer) ;
let mySelection := [];
for i in myUniqueCharges do
let chargeMovements := movements [Charge.Chargennumer = i];
let mySum := sum(chargeMovements.'Menge Gebinde');
if mysum > 0 then
mySelection := concat(mySelection, chargeMovements)
end
end;
concat(mySelection)
Irgendwie verliert sich der Code immer, ich glaube weil es an irgendeiner Stelle switcht vom recordArray zu einem normalen Array und die sich unterschiedlich verhalten oder so. Es ist für mich schwer, das zu debuggen.
Weiß hier jemand Rat?
Danke.
4 Antworten
-
You can try:
let me := this; let movements := (select Lagerbewegungen where Gebinde = me.Gebinde and Lager = me.Lager); let myUniqueCharges := unique (movements.Charge.Chargennummer) ; for i in myUniqueCharges do let chargeMovements := movements [Charge.Chargennumer = i]; let mySum := sum(chargeMovements.'Menge Gebinde'); if mysum > 0 then chargeMovements end end
This should return an array of array of records from movements.
-
habe die Lösung gerade gefunden.
Hier hat Jacques TUR beschrieben:
"The exact syntax to create one typed empty array is :"
https://forum.ninox.com/t/h7hstxz#35hstkd
Das war notwendig, um den Code korrekt anzupassen, das leere (record) Array zu initialisieren und dann in der Schleife zu ergänzen mit Datensätzen, die die Bedingung erfüllen.
let me := this; let movements := (select Lagerbewegungen where Gebinde = me.Gebinde and Lager = me.Lager); let myUniqueCharges := unique(movements.Charge); let myResult := (select Lagerbewegungen)[false]; for i in myUniqueCharges do let chargeMovements := movements[Charge = i]; let mySum := sum(chargeMovements.'Menge Gebinde'); if mySum > 0 then myResult := array(myResult, chargeMovements) end end; myResult
Content aside
- Status Answered
- vor 4 TagenZuletzt aktiv
- 4Antworten
- 38Ansichten
-
2
Folge bereits