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

# Bloques

> Los bloques de FlexiLayout asignan campos de documento para la captura de datos: revise los tipos de bloques Texto, Código de barras, Tabla y grupo, sus propiedades y las expresiones de región.

Los bloques de FlexiLayout corresponden a los campos de los documentos de los que se deben capturar datos. Un bloque especifica el tipo de datos que puede contener el campo y las coordenadas del área de la imagen donde probablemente se encuentre el campo.

La rama de bloques está marcada con <img src="https://mintcdn.com/abbyy/lqYknuOmCa79141v/images/flexi-capture/fls/block_tree.gif?fit=max&auto=format&n=lqYknuOmCa79141v&q=85&s=deeed524eb72bc9b5af0c1fff61eabb1" alt="Icono de bloque en el árbol" style={{display:"inline-block",verticalAlign:"middle",margin:0}} width="15" height="15" data-path="images/flexi-capture/fls/block_tree.gif" /> en el árbol de FlexiLayout.

<div id="flexilayout-block-types">
  ## Tipos de bloque de FlexiLayout
</div>

ABBYY FlexiLayout Studio admite los siguientes tipos de bloque:

| Tipo de bloque      | Icono                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   | Descripción                                                                                                                                                                |
| ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Text**            | <img src="https://mintcdn.com/abbyy/lqYknuOmCa79141v/images/flexi-capture/fls/block_text.gif?fit=max&auto=format&n=lqYknuOmCa79141v&q=85&s=2f5f93810c1a248df472ba326e53399e" alt="Icono de bloque de texto" style={{display:"inline-block",verticalAlign:"middle",margin:0}} width="15" height="15" data-path="images/flexi-capture/fls/block_text.gif" />                                                                                                                   | Extrae datos de texto.                                                                                                                                                     |
| **Barcode**         | <img src="https://mintcdn.com/abbyy/lqYknuOmCa79141v/images/flexi-capture/fls/block_barcode.gif?fit=max&auto=format&n=lqYknuOmCa79141v&q=85&s=ebe7e02bd4b709748972b2296c85373b" alt="Icono de bloque de código de barras" style={{display:"inline-block",verticalAlign:"middle",margin:0}} width="15" height="15" data-path="images/flexi-capture/fls/block_barcode.gif" />                                                                                | Lee códigos de barras.                                                                                                                                                     |
| **Checkmark**       | <img src="https://mintcdn.com/abbyy/lqYknuOmCa79141v/images/flexi-capture/fls/block_checkmark.gif?fit=max&auto=format&n=lqYknuOmCa79141v&q=85&s=31c276522c85377d8fab2bd8bf20a188" alt="Icono de bloque de marca de verificación" style={{display:"inline-block",verticalAlign:"middle",margin:0}} width="15" height="15" data-path="images/flexi-capture/fls/block_checkmark.gif" />                                                           | Reconoce marcas de verificación.                                                                                                                                           |
| **Picture**         | <img src="https://mintcdn.com/abbyy/lqYknuOmCa79141v/images/flexi-capture/fls/block_picture.gif?fit=max&auto=format&n=lqYknuOmCa79141v&q=85&s=5ef20c6bac449b68023e5bc9430320ee" alt="Icono de bloque de imagen" style={{display:"inline-block",verticalAlign:"middle",margin:0}} width="15" height="15" data-path="images/flexi-capture/fls/block_picture.gif" />                                                                                          | Procesa objetos que no se identificaron como texto durante el prerreconocimiento.                                                                                          |
| **Table**           | <img src="https://mintcdn.com/abbyy/lqYknuOmCa79141v/images/flexi-capture/fls/Table_Block.gif?fit=max&auto=format&n=lqYknuOmCa79141v&q=85&s=b587cb447531d0883066fce4033ae88e" alt="Icono de bloque de tabla" style={{display:"inline-block",verticalAlign:"middle",margin:0}} width="15" height="15" data-path="images/flexi-capture/fls/Table_Block.gif" />                                                                                                           | Extrae datos de tablas.                                                                                                                                                    |
| **Group**           | <img src="https://mintcdn.com/abbyy/lqYknuOmCa79141v/images/flexi-capture/fls/block_group.gif?fit=max&auto=format&n=lqYknuOmCa79141v&q=85&s=e765a304f828526d23c03274b2dc059c" alt="Icono de bloque de grupo" style={{display:"inline-block",verticalAlign:"middle",margin:0}} width="15" height="15" data-path="images/flexi-capture/fls/block_group.gif" />                                                                                                           | Agrupa bloques de forma lógica.                                                                                                                                            |
| **Checkmark Group** | <img src="https://mintcdn.com/abbyy/lqYknuOmCa79141v/images/flexi-capture/fls/block_checkmark_group.gif?fit=max&auto=format&n=lqYknuOmCa79141v&q=85&s=a1edbbbc4034740745e9706929c4b9d9" alt="Icono de bloque de grupo de marcas de verificación" style={{display:"inline-block",verticalAlign:"middle",margin:0}} width="15" height="15" data-path="images/flexi-capture/fls/block_checkmark_group.gif" /> | Crea grupos de marcas de verificación. Solo se pueden agregar bloques de marcas de verificación a este tipo de grupo. No puede crear ni mover aquí bloques de otros tipos. |
| **Repeating Group** | <img src="https://mintcdn.com/abbyy/lqYknuOmCa79141v/images/flexi-capture/fls/block_repeatable_group.gif?fit=max&auto=format&n=lqYknuOmCa79141v&q=85&s=3dd356ce8d79245d7f86431f6053598a" alt="Icono de bloque de grupo repetido" style={{display:"inline-block",verticalAlign:"middle",margin:0}} width="15" height="15" data-path="images/flexi-capture/fls/block_repeatable_group.gif" />          | Crea un grupo repetido de bloques.                                                                                                                                         |
| **Non-Recognized**  | <img src="https://mintcdn.com/abbyy/fmgRWFNHKYN2MLSg/images/flexi-capture/fls/Block_Unrecognizable.gif?fit=max&auto=format&n=fmgRWFNHKYN2MLSg&q=85&s=059acd0b3370c31b337a74ca89a51a70" alt="Icono de bloque no reconocible" style={{display:"inline-block",verticalAlign:"middle",margin:0}} width="15" height="15" data-path="images/flexi-capture/fls/Block_Unrecognizable.gif" />                             | Excluye un área del reconocimiento.                                                                                                                                        |

Ampliar las regiones de los bloques de texto puede mejorar la calidad del reconocimiento. Para ampliar una región, haga doble clic en el elemento **Blocks** para abrir su cuadro de diálogo **Properties** y especifique los valores verticales y horizontales de la propiedad **Blocks result region inflate**.

Los bloques para los que no se especifica ningún área de imagen en al menos una alternativa de layout tienen un cuadrado vacío en la esquina superior derecha del icono: <img src="https://mintcdn.com/abbyy/lqYknuOmCa79141v/images/flexi-capture/fls/block_undef.gif?fit=max&auto=format&n=lqYknuOmCa79141v&q=85&s=f7294febb9ed17bdeb883bf35bc71976" alt="Icono de bloque no definido" style={{display:"inline-block",verticalAlign:"middle",margin:0}} width="16" height="15" data-path="images/flexi-capture/fls/block_undef.gif" />.

Si solo se selecciona un FlexiLayout (mediante el elemento **Select Layout** del menú contextual del elemento, mediante el mismo elemento en la sección **FlexiLayout** o mediante el elemento **Select Alternative Layout** del menú contextual del FlexiLayout), el programa comprueba el área de imagen solo en ese FlexiLayout.

<Note>
  Los datos de los bloques se extraen en una aplicación de captura de datos como ABBYY FlexiCapture.
</Note>

<div id="block-properties">
  ## Propiedades del bloque
</div>

Un bloque tiene las siguientes propiedades:

| Propiedad                   | Descripción                                                                                                                                                                                                                                                      |
| --------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Nombre**                  | El nombre del bloque. Puede contener letras (caracteres latinos, caracteres latinos con diacríticos y caracteres cirílicos), dígitos y guiones bajos. Debe comenzar con una letra o un guion bajo, y no debe contener espacios en blanco ni símbolos especiales. |
| **Tipo**                    | El tipo del bloque, que se selecciona al crearlo. Debe corresponder al tipo de objeto u objetos ubicados en el área delimitada por el bloque.                                                                                                                    |
| **Comentario**              | Un comentario opcional proporcionado por el usuario.                                                                                                                                                                                                             |
| **Has repeating instances** | Indica que el bloque consta de varias instancias. Seleccione esta propiedad si, por ejemplo, todas las instancias de un elemento [grupo repetido](/es/flexi-capture/fls/template/repeatable-group) se utilizan como región del bloque.                           |
| **Orden de las instancias** | Establece el orden en que las instancias del grupo se unen en un bloque. Disponible solo cuando está seleccionada la opción **Has repeating instances**.                                                                                                         |

La propiedad **Orden de las instancias** tiene los siguientes valores:

| Orden                      | Comportamiento                                                                                                                         |
| -------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- |
| **De arriba abajo**        | Une las instancias en un bloque según su ubicación en la imagen, de arriba abajo.                                                      |
| **De izquierda a derecha** | Une las instancias en un bloque según su ubicación en la imagen, de izquierda a derecha.                                               |
| **De derecha a izquierda** | Une las instancias en un bloque según su ubicación en la imagen, de derecha a izquierda.                                               |
| **En orden de detección**  | Une las instancias en un bloque en el orden en que se generan las hipótesis. Las hipótesis se generan en orden decreciente de calidad. |

Con **En orden de detección**, si especifica condiciones adicionales para las instancias, las hipótesis se generan en el orden definido por el usuario. Si necesita un orden distinto del orden estándar que utiliza el programa, puede especificarlo mediante condiciones adicionales.

Las siguientes propiedades especifican el área de la imagen de la que deben extraerse los datos.

<div id="for-layout">
  ### For Layout
</div>

Selecciona la alternativa de layout en la que se especifica el área de búsqueda.

<div id="source-element">
  ### Source element
</div>

Especifica un área de la imagen idéntica a la Region del elemento utilizado para encontrar el bloque en la imagen. Cuando el FlexiLayout se aplica a la imagen, el programa busca el objeto (o los objetos) descrito por el elemento. Los datos se extraen de estos objetos.

Para un grupo repetido, puede seleccionar una de las instancias o usar todas las instancias (`AllInstances`). Para obtener más información, consulte [Usar instancias de un grupo repetido como elementos de referencia, excluidos o de origen](/es/flexi-capture/fls/template/select-repeatable-group).

<div id="expression">
  ### Expression
</div>

Establece un área en la imagen que no coincide con ninguna de las regiones de los elementos.

Por ejemplo, puede combinar en un solo bloque las regiones de algunos elementos y el espacio entre ellas, ampliar la región de un elemento en un valor determinado o especificar las coordenadas del bloque sin depender de ningún elemento. En este caso, la región del bloque puede describirse en el [FlexiLayout language](/es/flexi-capture/fls/code/general-code).

<Note>
  La región de un bloque es continua. Esto significa que, si crea una región a partir de rectángulos separados entre sí, los espacios entre ellos se rellenan con rectángulos adicionales estrechos para que la región sea continua.
</Note>

Sin embargo, un bloque puede constar de varias regiones si todas las instancias de un grupo repetido se usan como elemento de referencia. La región de un bloque de grupo se calcula a partir de las regiones de los bloques secundarios, al igual que la región de las hipótesis. La región resultante se amplía ligeramente para facilitar la visualización.

<div id="parameters-of-group-and-repeating-group-blocks">
  ### Parámetros de los bloques de grupo y de grupo repetido
</div>

Un grupo de marcas de verificación y un grupo común de bloques no tienen más parámetros que **Name** y **Comment**.

Los parámetros de un grupo repetido de bloques son los mismos que los de los bloques no agrupados. La opción **Has repeating instances** siempre está habilitada para ellos.

Los bloques secundarios pueden tener o no la opción **Has repeating instances**, pero siempre se crea para ellos una variable `OutputInstances`. Si un bloque dentro de un grupo repetido de bloques tiene la opción **Has repeating instances**, esto significa que puede repetirse dentro de cada instancia del bloque padre.

<div id="specify-a-block-region-using-instances-of-a-repeating-group">
  ### Especifique una región de bloque mediante instancias de un grupo repetido
</div>

Si un bloque se define mediante varias instancias, la región de bloque consta de varias regiones independientes. Si utiliza una instancia concreta de un grupo repetido (por ejemplo, `LastFound`), la región de bloque se define igual que para cualquier otro elemento.

Sin embargo, puede usar todas las instancias detectadas (`AllInstances`). Para usar varias instancias, seleccione la opción **Has repeating instances**.

También puede escribir código para el bloque usando la variable predefinida `OutputInstances`. Por ejemplo:

```text theme={null}
OutputInstances = SearchElements.PageHeader.AllInstances.UnionRect;
```

ABBYY FlexiCapture procesa los bloques con la opción **Has repeating instances** habilitada de la siguiente manera:

* Para los bloques que no son de tabla, las instancias especificadas son las del campo correspondiente.
* Para un bloque de tabla, las instancias especificadas se tratan como una sola instancia del campo. Es decir, ABBYY FlexiCapture procesa ese bloque como un campo de tipo **Table** con una región discontinua.

<div id="rules-for-creating-references-to-elements-for-repeating-groups-of-blocks">
  ### Reglas para crear referencias a elementos para grupos repetidos de bloques
</div>

Un grupo repetido de bloques hace referencia a un [elemento repetido](/es/flexi-capture/fls/template/repeatable-group). Para crear instancias de un grupo repetido de bloques, se necesitan varias instancias de elementos. Por lo tanto, uno de los ID debe ser `AllInstances`.

Dado que los elementos anidados dentro del elemento con `AllInstances` no pueden tener otros ID, esta condición también significa que el elemento repetido situado en el nivel más bajo tiene `AllInstances`.

Los bloques secundarios de un grupo repetido de bloques hacen referencia a los elementos secundarios del grupo de elementos al que hace referencia el bloque padre. La referencia debe tener el mismo ID para las instancias.

Por ejemplo, si un bloque de grupo repetido tiene la referencia `SearchElements..RepGr1.Instance(1).RepGr2.AllInstances`, sus bloques secundarios solo pueden hacer referencia al elemento `RepGr1..RepGr2.Element` de la siguiente manera:

```text theme={null}
SearchElements.RepGr1.Instance(1).RepGr2.AllInstances.Element
```

Si no hay un atributo `HasRepeatingInstances`, solo puede hacer referencia a los subelementos del grupo básico que no contengan repeticiones, y viceversa.

Si hay un atributo `HasRepeatingInstances`, puede hacer referencia a los elementos que contengan repeticiones dentro del grupo básico (y solo puede hacer referencia a todas las instancias a la vez).

```text With a HasRepeatingInstances attribute theme={null}
SearchElements.RepGr1.Instance(1).RepGr2.AllInstances.RepGr3.AllInstances.Element
SearchElements.RepGr1.Instance(1).RepGr2.AllInstances.RepGr3.AllInstances.RepGr4.AllInstances.Element
```

```text Without a HasRepeatingInstances attribute theme={null}
SearchElements.RepGr1.Instance(1).RepGr2.AllInstances.Gr3.SubElement(where Gr3 is a simple group)
SearchElements.RepGr1.Instance(1).RepGr2.AllInstances.SubElement
```

<Note>
  Si las referencias se crean mediante **Source element**, la comprobación se realiza cuando se compila el FlexiLayout. Si las referencias se crean mediante código Advanced, se detecta un error durante el emparejamiento del FlexiLayout.
</Note>

<div id="describe-a-block-region-with-the-flexilayout-language">
  ### Describir la región de un bloque con FlexiLayout language
</div>

Para especificar la región de un bloque, use el campo **Expression**.

La variable predefinida que se utiliza depende del tipo de bloque y de si tiene seleccionada la opción **Has repeating instances**:

| Variable          | Tipo                                               |
| ----------------- | -------------------------------------------------- |
| `OutputRegion`    | `Region`                                           |
| `OutputTable`     | `TableHypothesis`                                  |
| `OutputInstances` | `HypothesisInstances` o `TableHypothesisInstances` |

Para obtener más información sobre las variables predefinidas que se pueden usar en el campo **Expression**, consulte [Variables predefinidas](/es/flexi-capture/fls/language/predefined-variables).

| Tarea                                                                                                                                                         | Código de ejemplo                                                                                                                              |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- |
| Obtener y ampliar la región de un elemento en 3 mm de ancho y 5 mm de longitud                                                                                | `OutputRegion = SomeElement.Rect;   OutputRegion.Inflate( 3*mm, 5*mm );`                                                                       |
| Combinar los rectángulos de las regiones de dos elementos y obtener el rectángulo que circunscribe los rectángulos combinados                                 | `Rect outputRect;   outputRect = Element1.Rect Or Element2.Rect;   OutputRegion = outputRect;`                                                 |
| Combinar en una sola región los rectángulos que circunscriben las regiones de dos elementos                                                                   | `RectArray outputRects;   outputRects = RectArray( Element1.Rect );   outputRects.Add: Element2.Rect;   OutputRegion = Region( outputRects );` |
| Combinar en una sola región las regiones de los objetos correspondientes a dos elementos distintos                                                            | `RectArray outputRects;   outputRects = Element1.Rects;   outputRects.Add( Element2.Rects );   OutputRegion = outputRects.Region;`             |
| Combinar las regiones de los objetos que pertenecen a la región de `Element1` y eliminar las regiones de los objetos que pertenecen a la región de `Element2` | `OutputRegion = FormRegion( Element1.Rects, Element2.Rects );`                                                                                 |
| Usar un elemento **Table** para especificar un bloque **Table**                                                                                               | `OutputTable = SearchElements.TableElement;`                                                                                                   |
| Usar instancias de hipótesis de un elemento determinado para especificar un bloque **Table**                                                                  | `OutputInstances = SearchElements.RepeatingGroup.AllInstances.TemplateElement;`                                                                |

<div id="use-the-isnull-variable">
  ## Usar la variable IsNull
</div>

También puede usar una variable predefinida `IsNull` para describir la región de un bloque. Esta variable indica si la región del bloque se ha encontrado durante el emparejamiento del FlexiLayout. El valor `false` significa que la región se ha encontrado. El valor `true` significa que no se ha encontrado.

La variable `IsNull` se inicializa con el valor `false`, por lo que se considera que la región del bloque se ha encontrado. Sin embargo, a veces puede ser necesario comprobar ciertas condiciones antes de llegar a una conclusión.

Para indicar al programa que considere encontrada la región del bloque si el ancho de la región del Source element supera los 50 dots, escriba el siguiente código en el campo **Region Expression**:

```text theme={null}
if Element1.Width < 50dt then IsNull = true;
```

Para indicar al programa que considere encontrada la región del bloque solo si se ha encontrado `Element1`, escriba el siguiente código en el campo **Region Expression**:

```text theme={null}
IsNull = Element1.IsNull
```

Suponga que necesita usar `Element1` y `Element2` para buscar un bloque. Si al menos uno de los elementos no se ha encontrado, se considera que el bloque no se ha encontrado:

```text theme={null}
Rect outputRect;
Let FieldLeft = Element1.Rect.Left;
Let FieldRight = Element2.Rect.Right;
Let FieldTop = Element1.Rect.Top;
Let FieldBottom = Element2.Rect.Bottom;
outputRect = Rect( FieldLeft, FieldTop, FieldRight, FieldBottom);
if ((Element1.IsNull == True) or (Element2.IsNull == True) ) then {IsNull = true;}
OutputRegion = outputRect;
```

<Note>
  Este código funciona correctamente solo si el área de búsqueda de `Element1` está encima y a la izquierda del área de búsqueda de `Element2`.

  En el ejemplo anterior, esta condición no se comprueba, por simplicidad. En el código real, esta comprobación es necesaria y los valores de las variables `FieldLeft`, `FieldRight`, `FieldTop` y `FieldBottom` deben ajustarse. De lo contrario, la llamada a la función `Rect` devuelve un error.
</Note>
