Busqueda de datos
-
Pilar Martinez
- 06 Mar, 2025

Hola!! Vamos a ver distintas formas para buscar y filtrar datos.
Contenido:
1. Métodos: Get, Find y Mark
2. Filtros: SetRange y SetFilter
3. Tips: SetCurrentKey, IsEmpty
Métodos
Get()
Recupera un record segun las claves principales de la tabla, o cualquier otro campo.
// Buscamos el cliente "4001", sabiendo que la clave principal es el campo "No."
if CustomerRec.GET('4711') then
.... // Si existe
else
.... // Si no existe
Ademas, existe el metodo GetBySystemId(Guid),
Find()
Fue la primera opcion de busqueda dentro de Navision, segun el parametro que se le pase filtrara de distinta forma
Hoy en dia, no siempre es la forma mas eficaz de buscar datos.
- FIND(’-’): Busca el primer registro de la tabla. Debe usarse solo.
- FIND(’+’): Busca el ultimo registro de la tabla. Debe usarse solo.
- FIND(’=’): Busca el record que sea igual a los valores de la clave principal. Tiene le mismo funcionamiento que un Get()
- FIND(’>’): Busca un registro mayor que las claves principales
- FIND(’<’): Busca un registro menor que las claves principales
if CustomerRec.Find('-') then
repeat
...
until CustomerRec.Next() = 0;
Funciones mas comúnmente usadas:
- FINDFIRST:Esta funcion recupera unicamente el primer registro de la tabla, teniendo en cuenta los filtros asignados
- FINDLAST: Esta funcion recupera unicamente el ultimo registro de la tabla. Al igual que el ‘FindFirst()’ tiene en cuenta los filtros.
- FINDSET: Esta funcion se usara para recorrer todos los registros del Record, teniendo en cuenta los filtros asignados Es la forma mas habitual de hacer un loop
CustomerRec.SetFilter(Name, 'A*')
if CustomerRec.FindSet() then
repeat
...
until CustomerRec.Next() = 0;
Mark()
Usando este método podemos seleccionar los registros que necesitemos.
Una vez marcados puedes usar el método Rec.MarkedOnly() y recorrerlos
CustomerRec.SetRange(Name, NameVar);
if CustomerRec.FindFirst() then
Customer.Mark(true);
Customer.MarkedOnly(true);
NoAux := Customer.Count();
// NoAux guardara la cantidad de registros marcados en Customer
Filtros
SetRange()
Filtro sencillo, para comparar con un simple valor o rango.
CustomerRec.SetRange(Name, 'Luis');
CustomerRec.SetRange("No.",'10000','90000');
if CustomerRec.FindFirst() then
...
SetFilter()
Permite establecer filtros mas completos y especificos, ya que podemos usar expresiones
En las expresiones podemos pasarle las variables usando el “%1”, “%2”…
CustomerRec.SetFilter("No.", '>10000 & <> 20000');
CustomerRec.SetFilter("No.",'>%1&<>%2',Value1, Value2);
if CustomerRec.FindFirst() then
...
GetRangeMin & GetRangeMax
Recupera el valor minimo/maximo del rango que se este aplicando en ese campo
BottomValue := Customer.GetRangeMin("No.");
UpperValue := Customer.GetRangeMax("No.");
TIPS
Rec.IsEmpty()
Si solo queremos saber si un rec tiene contenido, la mejor forma sera usar un “Rec.IsEmpty()“
CustomerRec.SetFilter(Name, 'Repuestos Pepe')
if not CustomerRec.IsEmpty() then
repeat
...
until CustomerRec.Next() = 0;
SetCurrentKey()
Si tenemos un filtro concreto, usando esta funcion podremos optimizar su rendimiento
CustomerRec.SetFilter(Name, 'Repuestos Pepe')
CustomerRec.SetCurrentKey(Name);
if CustomerRec.FindSet() then
repeat
...
until CustomerRec.Next() = 0;
Todas las funciones de busqueda se pueden complementar con filtros, modificaciones de clave principal y similar.
La diferencia entre unas funciones y otras sera el rendimiento que tengan