> ## Documentation Index
> Fetch the complete documentation index at: https://docs.abbyy.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Relaciones avanzadas de prebúsqueda

> Las relaciones avanzadas de prebúsqueda ejecutan código de FlexiLayout language antes de la búsqueda de objetos, restringiendo áreas de búsqueda, cancelando búsquedas o seleccionando hipótesis.

Las relaciones avanzadas de prebúsqueda establecen restricciones de búsqueda y propiedades de los elementos en el [FlexiLayout language](/es/flexi-capture/fls/code/general-code). El panel en el que introduce el código se encuentra en la pestaña **Advanced** del cuadro de diálogo **Properties**.

El código que introduzca en el panel de **relaciones avanzadas de prebúsqueda** se ejecuta inmediatamente antes de buscar el objeto de imagen correspondiente al elemento de FlexiLayout. Primero, el programa usará las propiedades que haya especificado en las pestañas situadas a la izquierda de la pestaña **Advanced** y, a continuación, ejecutará el código.

Si un parámetro concreto se especifica tanto en una pestaña situada a la izquierda de la pestaña **Advanced** como en el código de la pestaña **Advanced**, el código tendrá prioridad. Si un parámetro se especifica en una pestaña situada a la izquierda de la pestaña **Advanced**, pero no se especifica en el código, se usará el valor del parámetro de la pestaña correspondiente.

<Note>
  La función `SearchText` (elemento de **texto estático**) es una excepción. Esta función *agrega* palabras de búsqueda a las ya especificadas en la pestaña **texto estático**.
</Note>

Si ha especificado algunas propiedades en cualquiera de las pestañas situadas a la izquierda de la pestaña **Advanced**, puede convertirlas en código haciendo clic en el botón **Code** de la pestaña **Advanced**. Después, puede copiar o editar el código generado.

<Note>
  Las restricciones adicionales introducidas en el panel de **relaciones avanzadas de prebúsqueda** solo pueden hacer referencia a elementos situados encima del elemento actual en el árbol de FlexiLayout. Las únicas excepciones son los subelementos del mismo elemento de **grupo repetido**, que pueden hacer referencia a instancias anteriores de subelementos situados en el mismo grupo debajo del elemento dado.
</Note>

<div id="examples">
  ## Ejemplos
</div>

<div id="specify-different-values-for-the-same-parameter">
  ### Especificar distintos valores para un mismo parámetro
</div>

A veces es necesario asignar distintos valores a un mismo parámetro. Para ello, utilice el operador `if... then`:

```text theme={null}
if Element1.IsNull then {
MaxErrors: 3, 0.25;
} else {
MaxErrors: 5, 0.5;
}
```

<div id="limit-the-search-area">
  ### Limitar el área de búsqueda
</div>

El área de búsqueda puede especificarse mediante cualquiera de los tipos que definen un área de imagen: `Rect`, `RectArray`, `Region`. También puede especificarse mediante una expresión que devuelva cualquiera de estos tipos. El resultado del cálculo de la expresión se pasa como argumento a la función `RestrictSearchArea()`:

```text theme={null}
RestrictSearchArea( Rect(Rect( Page( 1 ).RectGlobal.Left, Page( 1 ).RectGlobal.Top+20*mm, Element1.Left.Start, Element2.Ycenter.Start ) );
```

También puede pasar una expresión que combine las regiones de varios elementos:

```text theme={null}
let rect1 = Element1.Rect;
let rect2 = Element2.Rect;
RestrictSearchArea( rect1 or rect2 );
```

<div id="cancel-the-search-for-an-object">
  ### Cancelar la búsqueda de un objeto
</div>

En algunos documentos, la presencia de un objeto en la imagen excluye automáticamente otro objeto. En otros casos, puede que desee buscar un objeto determinado solo si se cumplen ciertas condiciones. Puede indicarle al programa que no busque un objeto específico mediante el comando `DontFind()`. Una vez ejecutado el comando, el programa formula una hipótesis nula para el objeto correspondiente:

```text theme={null}
if Element1.IsNull() then DontFind()
```

<div id="select-a-hypothesis">
  ### Seleccionar una hipótesis
</div>

A veces, varios objetos de imagen cumplen las condiciones especificadas en un elemento. Esto significa que el programa formulará varias hipótesis. Si necesita seleccionar de este conjunto únicamente la hipótesis situada más cerca de otro objeto o punto de la imagen, puede usar una de las siguientes funciones:

| Función                        | Descripción                                                   |
| ------------------------------ | ------------------------------------------------------------- |
| `Nearest( [name of element] )` | Establece el nombre del elemento más cercano.                 |
| `Nearest( x1, y1 )`            | Establece las coordenadas del punto más cercano.              |
| `NearestX( x1 )`               | Establece la coordenada X de la línea vertical más cercana.   |
| `NearestY( y1 )`               | Establece la coordenada Y de la línea horizontal más cercana. |

<Note>
  No puede usar varias funciones `Nearest` a la vez.
</Note>

<div id="search-on-multi-page-documents">
  ### Búsqueda en documentos de varias páginas
</div>

El programa trata un documento de varias páginas como una sola entidad y puede buscar un elemento en un documento de varias páginas sin referirse a una página exacta.

Para especificar que un elemento puede encontrarse en la mitad inferior de cualquier página:

```text theme={null}
Below: PageRect.Top + PageRect.Height / 2;
```

Para obtener más información, consulte la [descripción de la función PageRect](/es/flexi-capture/fls/language/global-functions).

Para especificar que un elemento se encuentra en la última página de un documento (puede escribir este código solo en la parte principal del FlexiLayout, después de los elementos **Header** y **Footer**, si los hay):

```text theme={null}
RestrictSearchArea( Page( PagesCount ).RectGlobal );
```

Para especificar que un elemento se encuentra en la página en la que comienza un elemento llamado `SearchElements.OtherElement`:

```text theme={null}
if SearchElements.OtherElement.IsFound then RestrictSearchArea( WholePage, SearchElements.OtherElement.Pages.Start );
```

Para especificar que un elemento puede ubicarse en cada página debajo de las instancias de las hipótesis de un grupo repetido llamado `SearchElements.RepeatableGroup`:

```text theme={null}
Below: SearchElements.RepeatableGroup.AllInstances.PageAreaGlobal( PageNumber ).Region.Bottom;
```

Para especificar que un elemento puede situarse en cada página debajo del cuerpo de cada subtabla de una tabla llamada `SearchElements.Table`:

```text theme={null}
Below: SearchElements.Table.AllSubTables.Body.PageAreaGlobal( PageNumber ).Bottom;
```

<div id="related-topics">
  ## Temas relacionados
</div>

* [FlexiLayout language](/es/flexi-capture/fls/code/general-code)
