FINDSET

Die Funktion findet eine Menge an Datensätzen, anhand der gesetzten Filter und Schlüssel.

Parameter

Record: Der Record in welchem die Menge gesucht wird.

ForUpdate: Boolean, Standardwert FALSE. Dieser optionale Wert sollte auf TRUE gesetzt werden, wenn die Datensätze innerhalb des Records modifiziert werden. Unmittelbar danach wird dadurch die LOCKTABLE-Funktion auf der Tabelle ausgeführt bevor die Datensätze gelesen werden. Wird FALSE übergeben kann der Record weiterhin modifiziert werden, allerdings ist dieses Vorgehen nicht optimal.

UpdateKey: Boolean, Standardwert FALSE. Dieser Parameter wird nur benötigt, wenn ForUpdate TRUE ist. Dieser optionale Wert sollte auf TRUE gesetzt werden, wenn Schlüssel-Felder modifiziert werden. Wird FALSE übergeben können Schlüssel-Felder weiterhin modifiziert werden, allerdings ist dieses Vorgehen nicht optimal.

Rückgabewert

Die Funktion liefert TRUE zurück, wenn Datensätze gefunden werden, andernfalls FALSE. Wird der optionale Rückgabewert nicht ausgewertet und gibt dieser FALSE zurück, kommt es zu einem Runtime-Error.

Hinweis

FINDSET sollte stets in Verbindung mit einer REPEAT-UNTIL-Schleife angewendet werden.

Beispiel 1

In diesem Beispiel wird die Funktion ohne Modifizierung des Records ausgeführt. Dafür wird die Funktion CopyLine und die folgende Variable benötigt.

Name Datentyp Subtyp
PurchaseLine Record Purchase Line

Anschließend wird folgender C/AL-Code eingefügt.

PurchaseLine.SETFILTER(Quantity,'>10');
IF PurchaseLine.FINDSET THEN BEGIN
  REPEAT
    CopyLine(PurchaseLine);
  UNTIL PurchaseLine.NEXT = 0;
END;

Beispiel 2

In diesem Beispiel wird die Funktion mit Modifizierung des Records ausgeführt. Dafür wird die Funktion GetNewRespCenter und die folgenden Variablen benötigt. Es wird davon ausgegangen dass den Variablen entsprechende Werte zugeordnet wurden.

Name Datentyp Subtyp
SalesLine Rec Sales Line
DocumentType Option  
DocumentNo Code  

Anschließend wird folgender C/AL-Code eingefügt.

SalesLine.SETRANGE("Document Type",DocumentType);
SalesLine.SETRANGE("Document No.",DocumentNo);
IF SalesLine.FINDSET(TRUE,FALSE) THEN BEGIN
  REPEAT
    SalesLinSalesLine."Responsibility Center" := 
      GetNewRespCenter(SalesLine);
    SalesLine.MODIFY;
  UNTIL SalesLine.NEXT = 0;
END;

Beispiel 3

In diesem Beispiel wird der Funktion mit Modifizierung eines Schlüsselfeldes ausgeführt. Dafür werden die folgenden Variablen benötigt. Es wird davon ausgegangen, dass den Variablen entsprechende Werte zugeordnet wurden.

Name Datentyp Subtyp
ProdOrder Record Production Order
ProdOrderLine Record Production Order Line
ProdOrderLine2 Record Production Order Line
LineNo Integer  

Anschließend wird folgender C/AL-Code eingefügt.

ProdOrderLine.SETCURRENTKEY(Status,"Prod. Order No.","Line No.");
ProdOrderLine.SETRANGE(Status,ProdOrder.Status);
ProdOrderLine.SETRANGE("Prod. Order No.",ProdOrder."No.");
ProdOrderLine.SETRANGE("Line No.",LineNo);
IF ProdOrderLine.FINDSET(TRUE,TRUE) THEN BEGIN
  REPEAT
    ProdOrderLine2 := ProdOrderLine;
    ProdOrderLine2."Line No." := ProdOrderLine."Line No." + 10000;
    ProdOrderLine2.MODIFY;
  UNTIL ProdOrderLine.NEXT = 0;
END;