Finds a set of records in a table based on the current key and filter.

[Ok :=] Record.FINDSET([ForUpdate][, UpdateKey])

Parameters

Record

Type: Record

If the record is found, then the record is returned in this parameter and any FlowFields in the record are set to zero. You must update the FlowFields by using the CALCFIELDS Function (Record).

ForUpdate

Type: Boolean

Set this parameter to true if you want to modify any records in the set; otherwise, set the parameter to false.

If you set this parameter to true, then the LOCKTABLE Function (Record) is immediately run on the table before the records are read.

If you set this parameter to false, then you can still modify the records in the set, but these updates will not be performed optimally.

The default value is false.

UpdateKey

Type: Boolean

Set this parameter to true if you want to modify any field value within the current key.

This parameter only applies if the ForUpdate parameter is true.

If you set this parameter to false, then you can still modify the records in the set, but these updates will not be performed optimally.

The default value is false.

Property Value/Return Value

Type: Boolean

true if the record set was found; otherwise, false.

If you omit this optional return value and if the record cannot be found, then a run-time error occurs. If you include a return value, then you must handle any errors.

Remarks

FINDSET can only retrieve records in ascending order. If you want to loop from the bottom up, then you should use FIND('+').

You should use this function only when you explicitly want to loop through a recordset. You should only use this function in combination with REPEAT.. UNTIL.

Example

This example shows how to use the FINDSET function to loop through a set without updating it. This example requires that have a CopyLine function and that you create the following variable.

Variable name DataType Subtype

SalesLine

Record

Sales Line

 Copy Code
SalesLine.SETFILTER("Purch. Order Line No.",'<>0');
IF SalesLine.FINDSET THEN BEGIN
  REPEAT
    CopyLine(SalesLine);
  UNTIL SalesLine.NEXT = 0;
END;

Example

This example shows how to use the FINDSET function to loop through a set and update a field that is not within the current key. This example requires that you create the following variables.

Variable name DataType Subtype

SalesLine

Record

Sales Line

DocumentType

Option

Not applicable

DocumentNo

Code

Not applicable

This example assumes that you have assigned values to the DocumentType and DocumentNo variables and that you have a GetNewLocation function, which returns a value that is a Code data type.

 Copy Code
SalesLine.SETRANGE("Document Type",DocumentType);
SalesLine.SETRANGE("Document No.",DocumentNo);
IF SalesLine.FINDSET(TRUE, FALSE) THEN BEGIN
  REPEAT
    SalesLine."Location Code" := GetNewLocation(SalesLine);
    SalesLine.MODIFY;
  UNTIL SalesLine.NEXT = 0;
END;

Example

This example shows how to use the FINDSET function to loop through a set and update a field that is within the current key. This example requires that you create the following variables.

Variable name DataType Subtype

SalesShptLine

Record

Sales Shipment Line

SalesShptLine2

Record

Sales Shipment Line

SalesLine

Record

Sales Line

 Copy Code
SalesShptLine.SETCURRENTKEY("Order No.","Order Line No.");
SalesShptLine.SETRANGE("Order No.",SalesLine."Document No.");
SalesShptLine.SETRANGE("Order Line No.",SalesLine."Line No.");
IF SalesShptLine.FINDSET(TRUE, TRUE) THEN BEGIN
  REPEAT
    SalesShptLine2 := SalesShptLine;
    SalesShptLine2."Order Line No." := SalesShptLine."Order Line No." + 10000;
    SalesShptLine2.MODIFY;
  UNTIL SalesShptLine.NEXT = 0;
END;

See Also