> ## 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.

# relations avancées de pré-recherche

> Les relations avancées de pré-recherche exécutent du code en langage FlexiLayout avant la recherche d’objet, en limitant les zones de recherche, en annulant les recherches ou en sélectionnant des hypothèses.

Les relations avancées de pré-recherche permettent de définir des contraintes de recherche et des propriétés d’élément dans le [langage FlexiLayout](/fr/flexi-capture/fls/code/general-code). Le volet dans lequel vous saisissez votre code se trouve dans l’onglet **Advanced** de la boîte de dialogue **Properties**.

Le code que vous saisissez dans le volet **relations avancées de pré-recherche** est exécuté immédiatement avant la recherche de l’objet image correspondant à l’élément FlexiLayout. Le programme utilise d’abord les propriétés que vous avez définies dans les onglets situés à gauche de l’onglet **Advanced**, puis exécute le code.

Si un paramètre donné est spécifié à la fois dans un onglet situé à gauche de l’onglet **Advanced** et dans le code de l’onglet **Advanced**, le code a priorité. Si un paramètre est spécifié dans un onglet situé à gauche de l’onglet **Advanced** mais n’est pas spécifié dans le code, la valeur définie dans l’onglet correspondant sera utilisée.

<Note>
  La fonction `SearchText` (élément **Static Text**) constitue une exception. Cette fonction va *ajouter* des mots de recherche à ceux déjà spécifiés dans l’onglet **Static Text**.
</Note>

Si vous avez défini certaines propriétés dans l’un des onglets situés à gauche de l’onglet **Advanced**, vous pouvez les convertir en code en cliquant sur le bouton **Code** de l’onglet **Advanced**. Le code généré peut ensuite être copié ou modifié.

<Note>
  Les contraintes supplémentaires saisies dans le volet **relations avancées de pré-recherche** ne peuvent faire référence qu’à des éléments situés au-dessus de l’élément actif dans l’arborescence FlexiLayout. Les seules exceptions concernent les sous-éléments d’un même élément **Repeating Group**, qui peuvent faire référence à des instances précédentes de sous-éléments situés dans le même groupe, en dessous de l’élément donné.
</Note>

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

<div id="specify-different-values-for-the-same-parameter">
  ### Spécifier différentes valeurs pour un même paramètre
</div>

Il est parfois nécessaire d’attribuer différentes valeurs à un même paramètre. Pour ce faire, utilisez l’opérateur `if... then` :

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

<div id="limit-the-search-area">
  ### Limiter la zone de recherche
</div>

La zone de recherche peut être définie à l’aide de n’importe lequel des types qui décrivent une zone de l’image : `Rect`, `RectArray`, `Region`. Elle peut également être définie à l’aide d’une expression qui renvoie l’un de ces types. Le résultat du calcul de l’expression est transmis comme argument à la fonction `RestrictSearchArea()` :

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

Vous pouvez également transmettre une expression combinant les régions de plusieurs éléments :

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

<div id="cancel-the-search-for-an-object">
  ### Annuler la recherche d’un objet
</div>

Pour certains documents, la présence d’un objet sur l’image exclut automatiquement la présence d’un autre objet. Dans d’autres cas, vous voudrez peut-être rechercher un objet particulier uniquement si certaines conditions sont remplies. Vous pouvez indiquer au programme de ne pas rechercher un objet spécifique à l’aide de la commande `DontFind()`. Une fois cette commande exécutée, le programme formule une hypothèse nulle pour l’objet correspondant :

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

<div id="select-a-hypothesis">
  ### Sélectionner une hypothèse
</div>

Il arrive que plusieurs objets d’image remplissent les conditions spécifiées dans un élément. Cela signifie que le programme formulera plusieurs hypothèses. Si vous devez sélectionner dans cet ensemble uniquement l’hypothèse la plus proche d’un autre objet ou d’un point de l’image, vous pouvez utiliser l’une des fonctions suivantes :

| Fonction                        | Description                                                     |
| ------------------------------- | --------------------------------------------------------------- |
| `Nearest( [nom de l’élément] )` | Définit le nom de l’élément le plus proche.                     |
| `Nearest( x1, y1 )`             | Définit les coordonnées du point le plus proche.                |
| `NearestX( x1 )`                | Définit la coordonnée X de la ligne verticale la plus proche.   |
| `NearestY( y1 )`                | Définit la coordonnée Y de la ligne horizontale la plus proche. |

<Note>
  Vous ne pouvez pas utiliser plusieurs fonctions `Nearest` simultanément.
</Note>

<div id="search-on-multi-page-documents">
  ### Recherche dans des documents multipage
</div>

Le programme traite un document multipage comme une seule entité et peut rechercher un élément d’un document multipage sans le rattacher à une page précise.

Pour indiquer qu’un élément peut être trouvé dans la moitié inférieure de n’importe quelle page :

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

Pour plus d’informations, consultez la [description de la fonction PageRect](/fr/flexi-capture/fls/language/global-functions).

Pour indiquer qu’un élément est situé sur la dernière page d’un document (vous ne pouvez écrire ce code que dans la partie principale du FlexiLayout, après les éléments **Header** et **Footer**, le cas échéant) :

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

Pour indiquer qu’un élément se trouve sur la page où débute l’élément nommé `SearchElements.OtherElement` :

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

Pour indiquer qu’un élément peut se trouver sur chaque page au-dessous des instances des hypothèses d’un groupe répétitif nommé `SearchElements.RepeatableGroup` :

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

Pour indiquer qu’un élément peut se trouver, sur chaque page, sous le corps de chaque sous-tableau d’un tableau nommé `SearchElements.Table` :

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

<div id="related-topics">
  ## Sujets connexes
</div>

* [Langage FlexiLayout](/fr/flexi-capture/fls/code/general-code)
