0

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

null
    • Fred
    • vor 5 Tagen
    • Gemeldet - anzeigen

    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.

      • dusticelli
      • vor 5 Tagen
      • Gemeldet - anzeigen

      Hello  

      Great, that works! 

      Thanks a lot!

      • dusticelli
      • vor 4 Tagen
      • Gemeldet - anzeigen

       sorry, I need to come back to this. Even though I was certain it had worked yesterday, things are different today.

      The only thing I have made, is added 2 more entries into the "Lagerbewegungen" table. Now suddenly it seems like "chargeMovements" only returns 1 iteration. The first image shows the "Lagerbewegungen" table with filters applied on "Gebinde" and "Lager" , second image shows the view we have added the  related code, last image the code from that view.

      Do you have any idea why this might return only like 1 iteration?

    • dusticelli
    • vor 4 Tagen
    • Gemeldet - anzeigen

    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