- En algunos documentos, el campo Fecha de la factura se encuentra a la derecha del nombre del campo, mientras que en otros aparece debajo. Por lo tanto, limitaremos el área de búsqueda a rectángulos situados a la derecha y debajo del nombre.
- Usaremos un elemento Date para buscar la fecha. Además, especificaremos la siguiente condición: si no se detecta el nombre del campo, no se buscarán los datos del campo.
- Con bastante frecuencia, las fechas pueden reconocerse de forma poco fiable. Esto puede deberse a defectos de escaneo, formatos de fecha no válidos, etc. Por lo tanto, especificaremos un elemento adicional de cadena de caracteres por si el elemento Date no encuentra ninguna fecha.
- En el elemento InvoiceHeader, cree un elemento de tipo Group y asígnele el nombre grDate.
- 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 esta restricción puede escribirse de la siguiente manera: 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);
- En el elemento InvoiceHeader.grDate, cree un elemento de tipo Date y asígnele el nombre InvoiceDate.
- Haga clic en la pestaña Date.
- Especifique todos los formatos de fecha posibles para el elemento InvoiceDate:

- En algunas imágenes, el área de búsqueda del campo Fecha de la factura incluirá los elementos kwInvoiceNumber e InvoiceNumber ya detectados. Para evitar que el programa considere los valores de estos elementos como hipótesis para el campo Fecha de la factura, excluya estos elementos del área de búsqueda:
- Haga clic en el botón Add… situado junto al campo Exclude regions of elements.
- Seleccione kwInvoiceNumber en la lista de elementos.
- Haga clic en OK. La cadena SearchElements.InvoiceHeader.kwInvoiceNumber aparecerá en el campo Exclude regions of elements.
- Haga clic en la pestaña Advanced.
- El campo Fecha de la factura no es un elemento obligatorio. Sin embargo, si un documento contiene una fecha (en el campo Fecha de la factura), siempre tendrá el nombre de campo correspondiente en el documento (descrito anteriormente por el elemento kwInvoiceDate). Por lo tanto, puede especificar una condición de búsqueda adicional en relación avanzada de prebúsqueda:Buscar el objeto de imagen solo si se ha detectado kwInvoiceDate. En FlexiLayout language, esta condición puede escribirse de la siguiente manera: If InvoiceHeader.kwInvoiceDate.IsNull Then DontFind();
- Excluya temporalmente el elemento InvoiceFooter y ejecute la coincidencia de FlexiLayout.
- En el elemento InvoiceHeader.grDate, cree un elemento de tipo cadena de caracteres y asígnele el nombre InvoiceDateAsString.
- Haga clic en la pestaña cadena de caracteres.
- Especifique el alfabeto: ,-./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
- Establezca en 30% el porcentaje de caracteres no alfabéticos.
- En el campo de recuento de caracteres, especifique el intervalo difuso {-1, 8, 14, INF} para la longitud de la cadena de caracteres, asumiendo que los posibles valores se encuentran en el intervalo de 8 a 14 caracteres. Cualquier hipótesis que quede fuera de este intervalo será penalizada.
- Establezca Max space length en 20. Esto limita a 20 puntos la longitud máxima del espacio en la cadena de caracteres.
- Para las demás propiedades del elemento, mantenga la configuración predeterminada.
- Haga clic en la pestaña Advanced.
- Como vamos a buscar el elemento InvoiceDateAsString solo si InvoiceDate no se detecta en la imagen, especifique la siguiente condición en el campo de relación avanzada de prebúsqueda:Busque el objeto de imagen solo si el elemento InvoiceDate *no se detecta.*En FlexiLayout language, esta condición puede escribirse de la siguiente manera: If Not InvoiceDate.IsNull Then DontFind;
- Especifique una condición adicional para InvoiceDate similar a la anterior:Busque el objeto de imagen solo si el elemento kwInvoiceDate se ha detectado. Busque el objeto de imagen más cercano al elemento kwInvoiceDate *. En FlexiLayout language, esta condición puede escribirse de la siguiente manera: If InvoiceHeader.kwInvoiceDate.IsNull Then DontFind; Nearest: InvoiceHeader.kwInvoiceDate;
- Especifique la ubicación del bloque InvoiceDate como la región rectangular del elemento InvoiceDate o InvoiceDateAsString detectado, ampliada 5 puntos en vertical y horizontal. Para ello, seleccione la opción Expression y escriba la siguiente expresión: 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);
