> ## 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 3. Paso 25: Detectar los campos TotalQuantity y TotalAmount con elementos TotalQuantity y TotalAmount

> Recupere los valores de Total Quantity y Total Amount con elementos de cadena de caracteres TotalQuantity y TotalAmount dentro de un grupo grTotal opcional.

El análisis de las imágenes de prueba muestra que los campos Total Quantity y Total Amount solo aparecen junto con el nombre `Footer.kwTotal` y en el mismo nivel.

Use elementos de tipo [cadena de caracteres](/es/flexi-capture/fls/template/character-chain) para detectar los campos Total Quantity y Total Amount. Para establecer las restricciones de búsqueda comunes a ambos, cree un elemento de [grupo](/es/flexi-capture/fls/template/elements-compound) denominado **grTotal**.

<div id="create-the-grtotal-group-element">
  ## Cree el elemento de grupo grTotal
</div>

<Steps>
  <Step title="Cree el elemento de grupo">
    En el elemento **Footer**, cree un elemento [grupo](/es/flexi-capture/fls/template/elements-compound) y asígnele el nombre **grTotal**.
  </Step>

  <Step title="Haga que el grupo sea opcional">
    Seleccione **Optional element** para que se deje de buscar subelementos si el nombre no está presente. Para obtener más información, consulte [La propiedad Optional de un elemento de grupo](/es/flexi-capture/fls/tips-tricks/date11).
  </Step>

  <Step title="Agregue la restricción de búsqueda">
    Haga clic en la pestaña **Advanced**. Los campos **Total Quantity** y **Total Amount** solo aparecen junto con el nombre `Footer.kwTotal`, por lo que debe establecer esta [restricción de búsqueda adicional](/es/flexi-capture/fls/template/advanced-constraints) en el campo **relación avanzada de prebúsqueda**: si no se detectó el elemento `Footer.kwTotal`, no busque el objeto. En [FlexiLayout language](/es/flexi-capture/fls/code/general-code):

    ```text theme={null}
    If Footer.kwTotal.IsNull Then DontFind;
    ```
  </Step>
</Steps>

<div id="create-the-totalquantity-element">
  ## Crear el elemento TotalQuantity
</div>

El campo Total Quantity se ubica en la intersección de la fila Total y la columna Quantity. Ya ha establecido la primera restricción en el nivel del elemento [grupo](/es/flexi-capture/fls/template/elements-compound). Para establecer la segunda restricción, utilice el nombre de columna detectado anteriormente como elemento de referencia.

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

  <Step title="Establecer el recuento de caracteres">
    Haga clic en la pestaña **Cadena de caracteres**. En el campo **Recuento de caracteres**, especifique este intervalo difuso: `{-1, 1, 10, INF}`. Esto estima la longitud de la cadena de caracteres; suponga que los valores oscilan entre 1 y 10. Se penalizará cualquier hipótesis fuera de este intervalo.

    Deje los valores predeterminados de las demás propiedades del elemento.
  </Step>

  <Step title="Establecer las restricciones de posición">
    Haga clic en la pestaña **Relaciones**. El campo **Total Quantity** siempre se encuentra al mismo nivel que las palabras clave del nombre `Footer.kwTotal` o ligeramente más abajo, por lo que debe establecer las siguientes restricciones de búsqueda:

    * **Encima de** el elemento `Footer.kwTotal`, **Offset** = -200, **Límite de referencia** = **Bottom**
    * **Debajo de** el elemento `Footer.kwTotal`, **Offset** = -20, **Límite de referencia** = **Top**

    <Tip>
      Al seleccionar los valores de desplazamiento, analice las propiedades geométricas (tamaño y límites) de los objetos vecinos detectados durante el prerreconocimiento. De lo contrario, determine estos valores mediante prueba y error.
    </Tip>
  </Step>

  <Step title="Agregar la restricción de columna">
    Haga clic en la pestaña **Advanced**. El campo **Total Quantity** es opcional, pero, cuando aparece, lo hace junto con la columna **Quantity** y debajo de su nombre. Establezca esta [restricción de búsqueda adicional](/es/flexi-capture/fls/template/advanced-constraints) en el campo **relación avanzada de prebúsqueda**: busque el objeto solo si se detectó el elemento `TableHeader.kwQuantity` y no más allá de 50 puntos a la izquierda o a la derecha de los límites correspondientes del nombre de la columna. En [FlexiLayout language](/es/flexi-capture/fls/code/general-code):

    ```text theme={null}
    If Not (TableHeader.kwQuantity.IsNull) Then
    {
    LeftOf: TableHeader.kwQuantity.Right, -50 * dot;
    RightOf: TableHeader.kwQuantity.Left, -50 * dot;
    }
    Else DontFind;
    ```
  </Step>

  <Step title="Verificar la coincidencia">
    Haga coincidir el FlexiLayout con las imágenes de prueba y confirme que FlexiLayout Studio detecta el elemento en cada imagen en la que aparece.
  </Step>

  <Step title="Establecer el elemento de origen del bloque">
    Para describir la ubicación del bloque **TotalQuantity**, seleccione **Source element**, haga clic en <img src="https://mintcdn.com/abbyy/fmgRWFNHKYN2MLSg/images/flexi-capture/fls/Browse_Button.gif?s=3673db30dda4a3293aec716853588b55" alt="Botón Examinar" style={{display:"inline-block",verticalAlign:"middle",margin:0}} width="21" height="20" data-path="images/flexi-capture/fls/Browse_Button.gif" />, y seleccione el elemento **TotalQuantity** como elemento de origen.
  </Step>
</Steps>

<div id="create-the-totalamount-element">
  ## Cree el elemento TotalAmount
</div>

El campo Total Amount se encuentra en la intersección de la fila Total (el pie de la tabla) y la columna Total. Ya estableció la primera restricción en el nivel del elemento [grupo](/es/flexi-capture/fls/template/elements-compound). Para establecer la segunda restricción, use como elementos de referencia los nombres de columna detectados previamente.

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

  <Step title="Establezca el recuento de caracteres">
    Haga clic en la pestaña **cadena de caracteres**. En el campo **recuento de caracteres**, especifique este intervalo difuso: `[-1, 1, 20, 2147483647]`. Esto estima la longitud de la cadena de caracteres; suponga que los valores oscilan entre 1 y 20. Cualquier hipótesis fuera de este intervalo se penaliza.

    Deje los valores predeterminados para las demás propiedades del elemento.
  </Step>

  <Step title="Establezca las restricciones de posición">
    Haga clic en la pestaña **Relaciones**. El campo **Total Amount** siempre se encuentra al mismo nivel que las palabras clave del nombre `Footer.kwTotal`, por lo que debe establecer estas restricciones de búsqueda:

    * **Encima de** el elemento `Footer.kwTotal`, **Offset** = -20, **límite de referencia** = **Bottom**
    * **Debajo del** elemento `Footer.kwTotal`, **Offset** = -20, **límite de referencia** = **Top**
  </Step>

  <Step title="Agregue la restricción de columna">
    Haga clic en la pestaña **Advanced**. El campo **Total Amount** aparece inmediatamente debajo del nombre de la columna **Total** (posiblemente con un pequeño desplazamiento), entre las columnas **Unit Price** y **Sales**. En el campo **relación avanzada de prebúsqueda**, establezca una [restricción de búsqueda adicional](/es/flexi-capture/fls/template/advanced-constraints) que cubra dos casos:

    * Si se detectó `TableHeader.kwTotal`, busque el objeto a no más de 70 puntos a la derecha de su límite derecho y a no más de 50 puntos a la izquierda de su límite izquierdo.
    * De lo contrario, si se detectaron `TableHeader.kwUnitPrice` y `TableHeader.kwSales`, busque el objeto a no más de 40 puntos a la derecha del límite izquierdo de `TableHeader.kwSales` y a la derecha del límite derecho de `TableHeader.kwUnitPrice`. Si no se cumple ninguno de los casos, no busque el objeto.

    En [FlexiLayout language](/es/flexi-capture/fls/code/general-code):

    ```text theme={null}
    If Not (TableHeader.kwTotal.IsNull) Then
    {
    LeftOf: TableHeader.kwTotal.Right, -70 * dot;
    RightOf: TableHeader.kwTotal.Left, -50 * dot;
    }
    Else
    If Not (TableHeader.kwUnitPrice.IsNull) and Not (TableHeader.kwSales.IsNull) Then
    {
    LeftOf: TableHeader.kwSales.Left, -40 * dot;
    RightOf: TableHeader.kwUnitPrice, 0 * dot;
    }
    Else DontFind;
    ```

    <Tip>
      Al seleccionar los valores de desplazamiento, analice las propiedades geométricas (el tamaño y los límites) de los objetos cercanos detectados durante el prerreconocimiento. De lo contrario, determine estos valores mediante prueba y error.
    </Tip>
  </Step>

  <Step title="Verifique la coincidencia">
    Ejecute FlexiLayout con las imágenes de prueba y confirme que FlexiLayout Studio detecta el elemento en todas las imágenes en las que aparece.
  </Step>

  <Step title="Establezca el elemento de origen del bloque">
    Para describir la ubicación del bloque **TotalAmount**, seleccione **Source element**, haga clic en <img src="https://mintcdn.com/abbyy/fmgRWFNHKYN2MLSg/images/flexi-capture/fls/Browse_Button.gif?s=3673db30dda4a3293aec716853588b55" alt="Botón Browse" style={{display:"inline-block",verticalAlign:"middle",margin:0}} width="21" height="20" data-path="images/flexi-capture/fls/Browse_Button.gif" />, y seleccione el elemento **TotalAmount** como elemento de origen.
  </Step>
</Steps>
