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

# Exemple 4. Étape 9.2 : champ montant total, élément TotalAmount

> Configurez l’élément Character String TotalAmount dans l’exemple 4 de FlexiLayout Studio en limitant sa zone de recherche à l’aide de relations avancées de pré-recherche et de post-search relations.

Recherchez le champ TotalAmount à droite et en dessous de son nom.

Pour créer un élément TotalAmount :

1. Dans l’élément **SumGroup**, créez un élément de type Character String et nommez-le **TotalAmount**.
2. Cliquez sur l’onglet Character String.
3. Spécifiez l’alphabet :
   ',-.0123456789OSZosz
4. Définissez Percentage of non-alphabet characters sur 30 %.
5. Dans le champ Character count, spécifiez l’intervalle flou suivant `{-1, 1, 20, INF}`, qui évalue la longueur de la string. Supposons que toutes les valeurs possibles se situent dans l’intervalle de 1 à 20 caractères. Toute hypothèse en dehors de cet intervalle sera pénalisée.
6. N’imposez aucune contrainte supplémentaire et conservez les paramètres par défaut.
7. Cliquez sur l’onglet Search Constraints et excluez de la zone de recherche la région de l’hypothèse de l’élément **kwTotal**.
8. Cliquez sur l’onglet Advanced.
9. Dans **relations avancées de pré-recherche**, spécifiez des conditions de recherche supplémentaires : si le nom **kwTotal** a été détecté, définissez la zone de recherche comme un array de rectangles : un rectangle à droite du nom du champ et un rectangle en dessous du nom du champ avec un certain décalage. Sinon, ne recherchez pas l’image object. Dans le [langage FlexiLayout](/fr/flexi-capture/fls/code/general-code), cette condition peut s’écrire comme suit :

   ```text theme={null}
   If not kwTotal.IsNull Then
   // Si le nom du champ kwTotal a été détecté
   {
   WholeWordMOde: true;
   MaxGapInLine: 30dt;
   RectArray DataRegion;
   Let r1= Rect (kwTotal.Rect.Right, kwTotal.Rect.Top -20dt, kwTotal.Rect.Right + 1800dt, kwTotal.Rect.Bottom + 50dt);
   // Limite la zone de recherche à un rectangle à droite du nom du champ.
   Let r2 = Rect (kwTotal.Rect.Left - 100dt, kwTotal.Rect.Bottom, kwTotal.Rect.Right + 100dt, kwTotal.Rect.Bottom + 200dt);
   // Limite la zone de recherche à un rectangle en dessous du nom du champ.
   DataRegion = RectArray (r1);
   DataRegion.Add (r2);
   RestrictSearchArea (DataRegion);
   }
   else Dontfind();
   // Sinon, ne recherchez pas l’objet.
   ```
10. La zone de recherche de la valeur du champ est limitée à deux rectangles, l’un à droite du nom du champ et l’autre en dessous. Si la valeur du champ se trouve à droite du nom du champ, du texte apparaît sous le nom du champ sur la plupart des images. Étant donné que, sur la plupart des images, ce texte redondant est inclus dans la zone de recherche du champ **TotalAmount**, le programme créera une hypothèse pour ce texte. Pour influencer la qualité de cette hypothèse (c’est-à-dire la diminuer), dans **Advanced post-search relations**, spécifiez une vérification supplémentaire : plus la valeur du champ est basse par rapport au nom du champ, plus la pénalité est élevée. Dans le [langage FlexiLayout](/fr/flexi-capture/fls/code/general-code), cette vérification peut s’écrire comme suit :

    ```text theme={null}
    If not IsNull then
    {FuzzyQuality: 400dt - width, {-50000,0,0, 50000}*dt;
    // Les hypothèses pour les éléments avec une région de 400 dots de large auront la qualité maximale
    if width < 50dt then Quality: 0;
    // Les éléments de moins de 50 dots ne sont pas pris en compte
    if Top > kwTotal.Rect.Top then
    { FuzzyQuality: Top - kwTotal.Rect.Top, {0,0,0, 20000}*dt;
    }
    }
    // Cette vérification signifie que plus la différence est grande, plus la pénalité est élevée.
    ```

    <Info>
      Un système de coordonnées 2D est utilisé pour décrire l’emplacement des objets sur la page et les distances entre eux. Le point (0, 0) se trouve dans le coin supérieur gauche de l’image. L’axe horizontal est orienté de gauche à droite et l’axe vertical de haut en bas.
    </Info>
11. Exécutez la correspondance du FlexiLayout sur les images pour vous assurer que le programme peut détecter l’élément de manière fiable sur toutes les images où il apparaît.
12. Spécifiez l’emplacement du bloc **TotalAmount** comme la région rectangulaire de l’élément **TotalAmount** dilatée de 5 dots verticalement et horizontalement. Pour ce faire, sélectionnez Expression et spécifiez l’expression suivante :

    ```text theme={null}
    Rect outputRect;
    outputRect = SumGroup.TotalAmount.Rect;
    IsNull = SumGroup.TotalAmount.IsNull;
    OutputRegion = outputRect;
    OutputRegion.Inflate (5dt, 5dt);
    ```
