Saltar al contenido principal
ABBYY FlexiLayout Studio incluye varias características especiales para desarrollar FlexiLayouts adicionales para proyectos de facturas:
  • Puede especificar la ubicación de los elementos en relación con las regiones de los campos detectados cuando se aplicó el FlexiLayout principal del proyecto de facturas.
  • Los identificadores de proveedores y unidades de negocio pueden usarse en solicitudes al conjunto de datos de la Definición de Document.
  • Las listas de palabras clave y otros parámetros de un FlexiLayout pueden exportarse a un archivo XML, lo que permite editarlas sin modificar el FlexiLayout ni la Definición de Document.
  1. Abra un lote con facturas reconocidas en FC.
  2. Cree un proyecto nuevo en ABBYY FlexiLayout Studio. En el menú principal, seleccione Herramientas → Exportar lote a FlexiLayout Studio → Crear nuevo proyecto de FlexiLayout Studio…
Nota: Este comando solo está disponible para proyectos de FC almacenados en su equipo. Si usa la versión distribuida de FC y el proyecto está almacenado en el servidor, primero tendrá que descargarlo a su equipo haciendo clic en Export Project… en el menú Project.Nota: El sufijo del proyecto de ABBYY FlexiLayout Studio indica la versión de la Definición de Document en el momento en que se creó el proyecto.El proyecto de ABBYY FlexiLayout Studio que acaba de crear contiene todos los documentos del lote de FC y las regiones de los campos detectados durante el reconocimiento en FC en forma de un diseño de referencia.

Árbol

Nodo

Descripción

SearchElements

CommonBlockRegions

Este nodo contiene elementos que corresponden a todos los campos de la Definición de Document. Las coordenadas de todas las regiones de bloques detectadas cuando se aplicaron los FlexiLayouts a cada documento en FC se guardan en el proyecto de ABBYY FlexiLayout Studio. De forma predeterminada, las regiones con estas coordenadas se asignarán a los elementos que tengan el mismo nombre que los campos de la Definición de Document. Esto permite usarlas para especificar la ubicación relativa de los elementos y para crear elementos nuevos.

CustomSearchElements

Este nodo contiene elementos de ejemplo. Están deshabilitados de forma predeterminada para evitar interferencias cuando se aplica el FlexiLayout.

DataSetRequestSample - Un ejemplo de solicitud al conjunto de datos de proveedores y unidades de negocio almacenados en la Definición de Document. Este conjunto de datos incluye identificadores de proveedores y unidades de negocio.

Para agregar un campo a un FlexiLayout adicional, tendrá que crear un bloque para este campo y especificar su elemento de búsqueda.Los campos de la Definición de Document deben tener nombres únicos. Esto significa que:
  • Para definir la lógica de búsqueda de un campo, tiene que crear un bloque con un nombre único.
  • Para cambiar la lógica de búsqueda de un campo que ya existe en la Definición de Document, tiene que crear un bloque con el mismo nombre.
Si desea probar en imágenes nuevas los cambios realizados en un FlexiLayout adicional, puede exportar sus lotes de FC a un proyecto de facturas existente en ABBYY FlexiLayout Studio. Para exportar sus lotes, haga clic en Herramientas → Exportar lote a FlexiLayout Studio → Agregar a un proyecto existente de FlexiLayout Studio…
  • Puede exportar lotes de FC solo a aquellos proyectos de ABBYY FlexiLayout Studio que se crearon seleccionando Herramientas → Exportar lote a FlexiLayout Studio → Crear nuevo proyecto de FlexiLayout Studio…
  • Cuando exporta un lote de FC a ABBYY FlexiLayout Studio, se creará un lote nuevo en ABBYY FlexiLayout Studio para ese lote.
  • Si la nueva Definición de Document tiene más campos que la Definición de Document utilizada para el proyecto de ABBYY FlexiLayout Studio, el registro de exportación contendrá una advertencia por cada campo adicional.
  • Para que el programa exporte los campos adicionales, agregue para cada campo adicional un bloque con el mismo nombre en el nodo CommonBlockRegions del árbol SearchElements.
Puede encontrar una solicitud de ejemplo en el elemento DataSetRequestSample. Este elemento está deshabilitado de forma predeterminada.
TipoDescripción
NamedValueUn valor con nombre
Constructor
NamedValue( String, String )
Métodos
String Name()Devuelve el nombre de un valor con nombre
String Value()Devuelve el valor de un valor con nombre
NamedValueArrayUn array de valores con nombre
Constructores
NamedValueArray()
NamedValueArray( NamedValue namedValue )
Métodos
Int Count()Devuelve el número total de elementos del array.
NamedValue GetAt( Int index )Devuelve el elemento con el índice especificado.
Void Add( NamedValue namedValue )Agrega un valor con nombre al array.
Void Add( NamedValueArray namedValueArray )Agrega un array de valores con nombre a otro array de valores con nombre.
Void InsertAt( Int index, NamedValue namedValue )Inserta namedValue en la posición indicada por el índice.
Void DeleteAll()Elimina todos los elementos del array.
Void DeleteAt( Int index )Elimina un elemento en la posición indicada por el índice.
Int FindByName( String name )Devuelve la posición del valor denominado name.

Funciones

Sintaxis:
  • La ruta de la Definición de Document y el nombre del conjunto de datos se utilizarán para acceder al conjunto de datos al trabajar con un FlexiLayout en ABBYY FlexiLayout studio.
  • Después de agregar un FlexiLayout compilado a una Definición de Document en FC, solo se utilizará su nombre para acceder al conjunto de datos.
  • Formato de connectionString:
“dbtype=FCDataset;fcTemplate=path_to_Document_Definition;datasetName=name_of_Data_Set;”Nota: Las partes del path deben separarse con dobles barras invertidas ""
  • searchFields Array con los nombres de las columnas de las que se deben recuperar los valores.
  • searchCriteria Array de pares Columna-Entrada. Si está vacío, devuelve todos los valores.
    • Si una solicitud contiene varios valores para un campo, use el operador OR
    • Si una solicitud contiene varios valores, cada uno correspondiente a un solo campo, use el operador AND
    • Si una solicitud contiene varios valores para un campo y valores para varios campos, use el operador OR para diferenciar varios valores de un mismo campo y el operador AND para combinar valores de distintos campos.
DefiniciónDescripción
Lógica TestAccessToFCDataSet( String connectionString )Prueba la conexión con el conjunto de datos
Lógica TestFCDataSetSearchCriteria( String connectionString, StringArray searchFields, NamedValueArray searchCriteria )Prueba las condiciones de búsqueda del conjunto de datos
StringArray FieldNamesOfFCDataset( String connectionString )Devuelve una lista de todos los campos del conjunto de datos, ordenados de forma ascendente por sus números de índice.
StringArray FieldNamesOfFCDataset( String connectionString, StringArray searchFields )Devuelve una lista de campos del conjunto de datos especificado, en orden ascendente por sus números de índice. Debe usarse junto con la función RecordOfFCDataset cuando haya columnas complejas.
Int RecordCountOfFCDataset( String connectionString, StringArray searchFields, NamedValueArray searchCriteria )Devuelve la cantidad de registros del conjunto de datos especificado en las condiciones de búsqueda. Se utiliza para determinar cuántos registros puede devolver la función RecordOfFCDataset.
Void PrepareRecordsetOfFCDataset( String connectionString, StringArray searchFields, NamedValueArray searchCriteria, Int maxRecordsCount = DefaultMaxRecordsCount )Prepara los datos para consultar el conjunto de datos. Esto debe hacerse para cada nuevo conjunto de condiciones de búsqueda antes de llamar a la función RecordOfFCDataset.
StringArray RecordOfFCDataset( String connectionString, StringArray searchFields, NamedValueArray searchCriteria, Int rowIndex )Devuelve un array de valores correspondientes a la entrada con el número rowIndex de los resultados devueltos por una consulta al conjunto de datos. El número de valores es igual al número de campos pasados en searchFields (esto incluye el caso de columnas complejas).
Quality ValidateByFCDataSet( String word, String connectionString, Int fieldIndex, NamedValueArray searchCriteria, Int maxErrors, Rational maxErrorsPart, Logic ignoreSpaces = true, Int maxRecordsCount = DefaultMaxRecordsCount );Devuelve la calidad de la cadena word. Acepta índices de campos. Puede obtenerlos indexando la salida de la función FieldNamesOfFCDataset.
Void SearchTextFromFCDataSet( String connectionString, Int fieldIndex, NamedValueArray searchCriteria, Int maxRecordsCount = DefaultMaxRecordsCount )Esta función se utiliza para especificar las condiciones de búsqueda de palabras para la función de texto estático. Al llamarla, las condiciones de búsqueda existentes se sustituyen por otras nuevas. Acepta números de índice de campo. Puede obtenerlos indexando la salida de la función FieldNamesOfFCDataset.
Void RegularExpressionFromFCDataSet( String connectionString, Int fieldIndex, NamedValueArray searchCriteria, Int maxRecordsCount = DefaultMaxRecordsCount )Esta función se utiliza para especificar condiciones de búsqueda mediante expresiones regulares para la función CharString. Cuando se llama a esta función, las condiciones de búsqueda existentes se sustituyen por otras nuevas. Acepta números de índice de campo. Puede obtener los números de índice indexando la salida de la función FieldNamesOfFCDataset.

Cómo buscar filas de una columna de una base de datos externa en una imagen

  1. Use FieldNamesOfFCDataset para obtener una lista de columnas ordenadas de forma ascendente según sus índices.
  2. Determine el número de índice de la columna en la que necesita buscar datos.
  3. Cree un array de condiciones para filtrar los datos del conjunto de datos.
  4. Pase los índices de la columna y las condiciones de filtro a SearchTextFromFCDataSet (o a RegularExpressionFromFCDataSet, si necesita usar expresiones regulares).
Este código se generará automáticamente cuando se exporte un lote reconocido desde FC

Cómo buscar en una imagen entradas de varias columnas de una base de datos externa

Dado que los parámetros de búsqueda se reemplazan cada vez que se llama a la función SearchTextFromFCDataSet, llamarla varias veces resulta inútil. Sin embargo, existe una solución alternativa: puede obtener cadenas de una base de datos externa y pasarlas a la función SearchText. Al llamar a esta función, la cadena se agrega a los parámetros de búsqueda existentes en lugar de reemplazarlos.Para ello, complete los siguientes pasos:
  1. Cree un array con los nombres de las columnas en las que necesita encontrar datos.
  2. Cree un array de condiciones de filtrado para filtrar datos del conjunto de datos.
  3. Determina la cantidad de entradas que devolverá la función RecordCountOfFCDataset.
  4. Prepare los datos de consulta con la función PrepareRecordsetOfFCDataset.
  5. Recorra todos los registros y obtenga el array de cada registro con el método RecordOfFCDataset.
  6. Pasa el valor de cada elemento del array a la función SearchText.

Consideraciones adicionales al trabajar con columnas complejas

  • La función FieldNamesOfFCDataset devuelve un array que contendrá varias repeticiones del nombre de la columna compleja. El número de repeticiones será el mismo que el número de instancias de columna en una base de datos externa codificada. Ejemplo: {VendorId, VATID, Name, Name, Name, City}. En este caso, la base de datos externa contiene 3 columnas para la única columna compleja Name del conjunto de datos.
  • Si SearchCriteria contiene una condición para un campo que se corresponde con una columna compleja (como en el ejemplo anterior), esta condición se utilizará para verificar todas estas instancias de la columna.
  • Si searchFields contiene una condición para un campo que corresponde a una columna compleja (como en el ejemplo anterior), el resultado contendrá el array de valores de cada instancia de la columna. Por ejemplo, si para {VendorId, VATID, Name, Name, Name, City} se solicita
searchFields = { VATID, Name, City}, you will receive
{VATID_value, Name_valueInColumn1, Name_valueInColumn2, Name_valueInColumn3, City_value}
  • Puede obtener la lista de columnas que se devolverán pasando el array searchFields a la función FieldNamesOfFCDataset.
Puede realizar solicitudes a un archivo XML con la configuración de FlexiLayout mediante dos funciones estándar que se describen en la documentación de ABBYY FlexiLayout Studio:
StringArray ReadFromXML(String filename, String xPathQuery)
String ReadSingleStringFromXML(String filename, String xPathQuery)
Este archivo debe estar ubicado en las subcarpetas de la carpeta del proyecto de ABBYY FlexiLayout Studio si quiere usarlo al trabajar en un FlexiLayout en ABBYY FlexiLayout Studio. La ruta de este archivo es relativa al archivo del proyecto de ABBYY FlexiLayout Studio.Si carga un FlexiLayout compilado en una Definición de Document en FC y lo usa como FlexiLayout adicional, el archivo XML se colocará en la carpeta Templates y podrá editarlo. Cuando se aplique el FlexiLayout, el programa administrará automáticamente el acceso a este archivo.