> ## 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 5.5 : champ Date de la facture, éléments grDate, InvoiceDate et InvoiceDateAsString

> Étape 5.5 de l’exemple 4 de FlexiLayout Studio : capturer le champ Date de la facture avec un groupe grDate, un élément Date et un élément Character String de secours pour les numérisations de mauvaise qualité.

En examinant les images, vous remarquerez ce qui suit :

* Sur certains documents, le champ **Date de la facture** apparaît à droite du libellé du champ ; sur d’autres, en dessous. Limitez la zone de recherche aux rectangles situés à droite du libellé du champ et en dessous de celui-ci.
* Utilisez un élément **Date** pour rechercher la date. De plus, si le nom du champ n’est pas détecté, ne recherchez pas les données du champ.
* Les dates sont souvent reconnues de manière peu fiable, en raison de défauts de numérisation, de formats de date invalides, etc. Spécifiez un élément Character String supplémentaire au cas où l’élément Date ne trouverait aucune date.

Pour définir les propriétés communes à tous ces éléments, créez un élément **Group**.

<div id="create-the-grdate-group-element">
  ## Créer l’élément de groupe grDate
</div>

<Steps>
  <Step title="Créer l’élément Group">
    Dans l’élément **InvoiceHeader**, créez un élément [Group](/fr/flexi-capture/fls/template/elements-compound) et nommez-le **grDate**.
  </Step>

  <Step title="Limiter la zone de recherche">
    Cliquez sur l’onglet **Advanced** et définissez des contraintes de recherche supplémentaires : limitez la zone de recherche à un tableau de rectangles composé d’un rectangle à droite du libellé du champ et d’un rectangle sous le libellé du champ, avec un certain décalage. En [langage FlexiLayout](/fr/flexi-capture/fls/code/general-code) :

    ```text theme={null}
    RectArray DataRegion;
    Let r1= Rect (kwInvoiceDate.Rect.Right, kwInvoiceDate.Rect.Top -20dt, kwInvoiceDate.Rect.Right + 650dt, kwInvoiceDate.Rect.Bottom + 50dt);
    Let r2 = Rect (kwInvoiceDate.Rect.Left - 150dt, kwInvoiceDate.Rect.Bottom, kwInvoiceDate.Rect.Right + 100dt, kwInvoiceDate.Rect.Bottom + 100dt);

    DataRegion = RectArray (r1);
    DataRegion.Add (r2);
    RestrictSearchArea (DataRegion);
    ```
  </Step>
</Steps>

<div id="create-the-invoicedate-element">
  ## Créer l’élément InvoiceDate
</div>

<Steps>
  <Step title="Créer l’élément Date">
    Dans l’élément `InvoiceHeader.grDate`, créez un élément [Date](/fr/flexi-capture/fls/template/date) et nommez-le **InvoiceDate**.
  </Step>

  <Step title="Spécifier les formats de date">
    Cliquez sur l’onglet **Date** et spécifiez tous les formats de date possibles pour l’élément **InvoiceDate** :

    <Frame>
      <img src="https://mintcdn.com/abbyy/8aWHPAJyzWmTqglX/images/flexi-capture/fls/tutorial4_5_5.png?fit=max&auto=format&n=8aWHPAJyzWmTqglX&q=85&s=120c6fe9aa8f4c54bc3f09b0a679212a" alt="Capture d’écran de l’onglet Date des propriétés de l’élément InvoiceDate dans ABBYY FlexiLayout Studio, montrant la liste des formats de date spécifiés pour le champ Date de la facture." width="431" height="455" data-path="images/flexi-capture/fls/tutorial4_5_5.png" />
    </Frame>
  </Step>

  <Step title="Exclure les éléments déjà détectés">
    Sur certaines images, la zone de recherche du champ **Date de la facture** inclut les éléments déjà détectés **kwInvoiceNumber** et **InvoiceNumber**. Pour empêcher FlexiLayout Studio de considérer leurs valeurs comme des hypothèses pour le champ **Date de la facture**, excluez-les de la zone de recherche :

    * Cliquez sur **Add...** à côté du champ **Exclude regions of elements**.
    * Sélectionnez **kwInvoiceNumber** dans la liste des éléments.
    * Cliquez sur **OK**. La chaîne `SearchElements.InvoiceHeader.kwInvoiceNumber` s’affiche dans le champ **Exclude regions of elements**.

    Répétez ces actions pour l’élément `SearchElements.InvoiceHeader.InvoiceNumber`.
  </Step>

  <Step title="Ajouter la contrainte de recherche">
    Cliquez sur l’onglet **Advanced**. Le champ **Date de la facture** est facultatif. Toutefois, lorsqu’un document contient une date dans le champ **Date de la facture**, le libellé du champ correspondant (décrit précédemment par l’élément **kwInvoiceDate**) est toujours présent. Dans **relations avancées de pré-recherche**, ajoutez la condition suivante : recherchez l’objet image uniquement si **kwInvoiceDate** a été détecté. Dans le [langage FlexiLayout](/fr/flexi-capture/fls/code/general-code) :

    ```text theme={null}
    If InvoiceHeader.kwInvoiceDate.IsNull
    Then DontFind();
    ```
  </Step>

  <Step title="Associer le FlexiLayout">
    Excluez temporairement l’élément **InvoiceFooter**, puis associez le FlexiLayout.
  </Step>
</Steps>

Pour les images de mauvaise qualité, lorsque les résultats de reconnaissance ne correspondent à aucun des paramètres standard de l’élément **Date**, ajoutez un élément alternatif utilisant des conditions de recherche moins strictes pour le champ **Date de la facture**.

<div id="create-the-invoicedateasstring-element">
  ## Créer l’élément InvoiceDateAsString
</div>

<Steps>
  <Step title="Créer l’élément Character String">
    Dans l’élément `InvoiceHeader.grDate`, créez un élément [Character String](/fr/flexi-capture/fls/template/character-chain) et nommez-le **InvoiceDateAsString**.
  </Step>

  <Step title="Spécifier l’alphabet">
    Cliquez sur l’onglet **Character String** et spécifiez l’alphabet :

    `,-./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`
  </Step>

  <Step title="Définir le pourcentage de caractères hors alphabet">
    Définissez le pourcentage de caractères hors alphabet sur 30 %.
  </Step>

  <Step title="Définir le nombre de caractères">
    Dans le champ **Character count**, spécifiez l’intervalle flou `{-1, 8, 14, INF}` pour la longueur de la chaîne de caractères, sachant que les valeurs possibles sont comprises entre 8 et 14 caractères. Toute hypothèse en dehors de cet intervalle est pénalisée.
  </Step>

  <Step title="Définir la longueur maximale de l’espace">
    Définissez **Max space length** sur 20 afin de limiter la longueur maximale d’un espace dans la chaîne de texte à 20 points. Conservez les paramètres par défaut pour les autres propriétés de l’élément.
  </Step>

  <Step title="Ajouter la contrainte de repli">
    Cliquez sur l’onglet **Advanced**. Étant donné que l’élément **InvoiceDateAsString** ne doit être recherché que si l’élément **InvoiceDate** n’est pas détecté, spécifiez cette condition dans le champ **relations avancées de pré-recherche**. Dans le [langage FlexiLayout](/fr/flexi-capture/fls/code/general-code) :

    ```text theme={null}
    If Not InvoiceDate.IsNull Then DontFind;
    ```
  </Step>

  <Step title="Ajouter la contrainte d’emplacement">
    Spécifiez une condition supplémentaire, semblable à celle de **InvoiceDate** : recherchez l’objet image uniquement si l’élément **kwInvoiceDate** a été détecté, puis recherchez l’objet le plus proche de **kwInvoiceDate**. Dans le [langage FlexiLayout](/fr/flexi-capture/fls/code/general-code) :

    ```text theme={null}
    If InvoiceHeader.kwInvoiceDate.IsNull Then DontFind;
    Nearest: InvoiceHeader.kwInvoiceDate;
    ```
  </Step>

  <Step title="Définir la région du bloc">
    Spécifiez l’emplacement du bloc **InvoiceDate** comme la région rectangulaire de l’élément **InvoiceDate** ou **InvoiceDateAsString** détecté, étendue de 5 points verticalement et horizontalement. Sélectionnez l’option **Expression** et saisissez l’expression suivante :

    ```text theme={null}
    Rect outputRect;
    if not InvoiceHeader.grDate.InvoiceDate.IsNull then
    outputRect = InvoiceHeader.grDate.InvoiceDate.Rect;
    else
    { outputRect = InvoiceHeader.grDate.InvoiceDateAsString.Rect;
    IsNull = InvoiceHeader.grDate.InvoiceDateAsString.IsNull;
    }
    OutputRegion = outputRect;
    OutputRegion.Inflate (5dt, 5dt);
    ```
  </Step>
</Steps>
