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

# Ejemplo 4. Paso 5.5: campo Fecha de la factura, elementos grDate, InvoiceDate e InvoiceDateAsString

> Paso 5.5 del Ejemplo 4 de FlexiLayout Studio: capture el campo Fecha de la factura con un grupo grDate, un elemento fecha y una alternativa de cadena de caracteres para escaneos de baja calidad.

Al examinar las imágenes, observará lo siguiente:

* En algunos documentos, el campo **Fecha de la factura** aparece a la derecha del nombre del campo; en otros, debajo del nombre. Limite el área de búsqueda a rectángulos situados a la derecha y debajo del nombre.
* Use un elemento **fecha** para buscar la fecha. Además, si no se detecta el nombre del campo, no busque los datos del campo.
* Las fechas suelen reconocerse de forma poco fiable debido a defectos de escaneo, formatos de fecha no válidos, etc. Especifique un elemento adicional de cadena de caracteres por si el elemento fecha no encuentra una fecha.

Para establecer las propiedades comunes a todos estos elementos, cree un elemento **Group**.

<div id="create-the-grdate-group-element">
  ## Crear el elemento de grupo grDate
</div>

<Steps>
  <Step title="Crear el elemento Group">
    En el elemento **InvoiceHeader**, cree un elemento de tipo [Group](/es/flexi-capture/fls/template/elements-compound) y asígnele el nombre **grDate**.
  </Step>

  <Step title="Restringir el área de búsqueda">
    Haga clic en la pestaña **Advanced** y especifique restricciones de búsqueda adicionales: limite el área de búsqueda al array de rectángulos compuesto por un rectángulo a la derecha del nombre del campo y otro rectángulo debajo del nombre del campo con cierto desplazamiento. En [FlexiLayout language](/es/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">
  ## Cree el elemento InvoiceDate
</div>

<Steps>
  <Step title="Cree el elemento de fecha">
    En el elemento `InvoiceHeader.grDate`, cree un elemento [Date](/es/flexi-capture/fls/template/date) y asígnele el nombre **InvoiceDate**.
  </Step>

  <Step title="Especifique los formatos de fecha">
    Haga clic en la pestaña **Date** y especifique todos los formatos de fecha posibles para el elemento **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="Captura de pantalla de la pestaña Date de las propiedades del elemento InvoiceDate en ABBYY FlexiLayout Studio, que muestra la lista de formatos de fecha especificados para el campo Fecha de la factura." width="431" height="455" data-path="images/flexi-capture/fls/tutorial4_5_5.png" />
    </Frame>
  </Step>

  <Step title="Excluya los elementos ya detectados">
    En algunas imágenes, el área de búsqueda del campo **Fecha de la factura** incluye los elementos **kwInvoiceNumber** e **InvoiceNumber** que ya se han detectado. Para evitar que FlexiLayout Studio interprete sus valores como hipótesis del campo **Fecha de la factura**, exclúyalos del área de búsqueda:

    * Haga clic en **Add...** junto al campo **Exclude regions of elements**.
    * Seleccione **kwInvoiceNumber** en la lista de elementos.
    * Haga clic en **OK**. La cadena `SearchElements.InvoiceHeader.kwInvoiceNumber` aparece en el campo **Exclude regions of elements**.

    Repita estas acciones para el elemento `SearchElements.InvoiceHeader.InvoiceNumber`.
  </Step>

  <Step title="Agregue la restricción de búsqueda">
    Haga clic en la pestaña **Advanced**. El campo **Fecha de la factura** es opcional. Sin embargo, cuando un documento contiene una fecha en el campo **Fecha de la factura**, el nombre de campo correspondiente (descrito anteriormente mediante el elemento **kwInvoiceDate**) siempre está presente. En **relaciones avanzadas de prebúsqueda**, agregue la siguiente condición: busque el objeto de imagen solo si se detectó **kwInvoiceDate**. En [FlexiLayout language](/es/flexi-capture/fls/code/general-code):

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

  <Step title="Ejecute la coincidencia de FlexiLayout">
    Excluya temporalmente el elemento **InvoiceFooter** y ejecute la coincidencia de FlexiLayout.
  </Step>
</Steps>

En el caso de imágenes de mala calidad, si los resultados de reconocimiento no se ajustan a ninguno de los parámetros estándar del elemento **Date**, agregue un elemento alternativo que utilice condiciones menos estrictas para buscar el campo **Fecha de la factura**.

<div id="create-the-invoicedateasstring-element">
  ## Cree el elemento InvoiceDateAsString
</div>

<Steps>
  <Step title="Cree el elemento Cadena de caracteres">
    En el elemento `InvoiceHeader.grDate`, cree un elemento [Cadena de caracteres](/es/flexi-capture/fls/template/character-chain) y asígnele el nombre **InvoiceDateAsString**.
  </Step>

  <Step title="Especifique el alfabeto">
    Haga clic en la pestaña **Cadena de caracteres** y especifique el alfabeto:

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

  <Step title="Establezca el porcentaje de caracteres ajenos al alfabeto">
    Establezca el porcentaje de caracteres ajenos al alfabeto en el 30 %.
  </Step>

  <Step title="Establezca el recuento de caracteres">
    En el campo **Recuento de caracteres**, especifique el intervalo difuso `{-1, 8, 14, INF}` para la longitud de la cadena de caracteres, suponiendo que los valores posibles estén comprendidos entre 8 y 14 caracteres. Se penaliza cualquier hipótesis fuera de este intervalo.
  </Step>

  <Step title="Establezca la longitud máxima de espacio">
    Establezca **Longitud máxima de espacio** en 20, lo que limita a 20 puntos la longitud máxima de un espacio en la cadena de texto. Mantenga la configuración predeterminada de las demás propiedades del elemento.
  </Step>

  <Step title="Agregue la restricción alternativa">
    Haga clic en la pestaña **Advanced**. Como el elemento **InvoiceDateAsString** solo debe buscarse cuando no se detecte el elemento **InvoiceDate**, especifique esta condición en el campo **Relaciones avanzadas de prebúsqueda**. En [FlexiLayout language](/es/flexi-capture/fls/code/general-code):

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

  <Step title="Agregue la restricción de ubicación">
    Especifique una condición adicional, similar a la de **InvoiceDate**: busque el objeto de imagen solo si se detectó el elemento **kwInvoiceDate** y busque el objeto más cercano a **kwInvoiceDate**. En [FlexiLayout language](/es/flexi-capture/fls/code/general-code):

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

  <Step title="Establezca la región del bloque">
    Especifique la ubicación del bloque **InvoiceDate** como la región rectangular del elemento **InvoiceDate** o **InvoiceDateAsString** detectado, ampliada en 5 puntos vertical y horizontalmente. Seleccione la opción **Expresión** y escriba esta expresión:

    ```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>
