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

# Beispiel 4. Schritt 5.4: Feld Rechnungsnummer, Element InvoiceNumber

> Erfassen Sie den Wert der Rechnungsnummer mit einem InvoiceNumber-Character String-Element und schränken Sie den Suchbereich mit Vorab-Suchbeziehungen der FlexiLayout-Sprache ein.

Bei einigen Dokumenten befindet sich das Feld **Rechnungsnummer** rechts neben dem Feldnamen, bei anderen dagegen unter dem Namen. In den Dokumenten 1 und 2 stehen die Felddaten direkt unter dem Namen.

<div id="create-the-invoicenumber-element">
  ## Erstellen Sie das Element InvoiceNumber
</div>

<Steps>
  <Step title="Erstellen Sie das Character String-Element">
    Erstellen Sie im Element **InvoiceHeader** ein [Zeichenkette](/de/flexi-capture/fls/template/character-chain)-Element und nennen Sie es **InvoiceNumber**.

    <Tip>
      Der Elementname muss nicht mit dem Namen des Blocks übereinstimmen, der dem Feld **InvoiceNumber** entspricht. Bei der Arbeit mit einem FlexiLayout sind identische Namen jedoch praktisch.
    </Tip>
  </Step>

  <Step title="Geben Sie das Alphabet an">
    Klicken Sie auf die Registerkarte **Zeichenkette** und geben Sie das Alphabet an:

    `-./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz`
  </Step>

  <Step title="Legen Sie den Prozentsatz nicht alphabetischer Zeichen fest">
    Setzen Sie **Prozentsatz der nicht zum Alphabet gehörenden Zeichen** auf 30 %.
  </Step>

  <Step title="Legen Sie die Zeichenanzahl fest">
    Geben Sie im Feld **Zeichenanzahl** das Fuzzy-Intervall `{-1, 3, 20, INF}` für die Länge der Zeichenkette an. Dabei wird angenommen, dass mögliche Werte zwischen 3 und 20 Zeichen liegen. Jede Hypothese außerhalb dieses Intervalls wird abgewertet.
  </Step>

  <Step title="Die Region kwInvoiceDate ausschließen">
    Bei einigen Bildern enthält der Suchbereich für das Feld **Rechnungsnummer** das bereits erkannte Element **kwInvoiceDate**. Schließen Sie dieses Element aus dem Suchbereich aus, damit FlexiLayout Studio diesen Text bei der Hypothesenbildung für das Feld **Rechnungsnummer** nicht berücksichtigt:

    * Klicken Sie auf der Registerkarte **Suchbedingungen** neben dem Feld **Bereiche von Elementen ausschließen** auf **Hinzufügen...**.
    * Wählen Sie **kwInvoiceDate** aus der Elementliste aus.
    * Klicken Sie auf **OK**. Die Zeichenkette `SearchElements.InvoiceHeader.kwInvoiceDate` wird im Feld **Bereiche von Elementen ausschließen** angezeigt.

    <Frame>
      <img src="https://mintcdn.com/abbyy/8aWHPAJyzWmTqglX/images/flexi-capture/fls/tutorial4_5_4.png?fit=max&auto=format&n=8aWHPAJyzWmTqglX&q=85&s=f75396d33e7d2b3b095a09fc446d3d3b" alt="Screenshot der Registerkarte „Suchbedingungen“ in den Eigenschaften des Character String-Elements InvoiceNumber in ABBYY FlexiLayout Studio. Das Element kwInvoiceDate wurde dem Feld „Bereiche von Elementen ausschließen“ als SearchElements.InvoiceHeader.kwInvoiceDate hinzugefügt." width="427" height="454" data-path="images/flexi-capture/fls/tutorial4_5_4.png" />
    </Frame>
  </Step>

  <Step title="Beziehungen vor der Suche hinzufügen">
    Klicken Sie auf die Registerkarte **Advanced**. Legen Sie unter **Advanced pre-search relations** zusätzliche Bedingungen fest: Wird der Name **kwInvoiceNumber** nicht gefunden, suchen Sie nicht nach dem Feld **InvoiceNumber**. Andernfalls geben Sie den Suchbereich als Array von Rechtecken an: eines rechts neben dem Namen und eines mit einem kleinen Versatz unter dem Namen. In der [FlexiLayout language](/de/flexi-capture/fls/code/general-code):

    ```text theme={null}
    if kwInvoiceNumber.IsNull then Dontfind();
    else
    { WholeWordMode: true;
    MaxGapInLine: 30dt;
    RectArray DataRegion;
    Let r1= Rect (kwInvoiceNumber.Rect.Right, kwInvoiceNumber.Rect.Top -20dt, kwInvoiceNumber.Rect.Right + 650dt, kwInvoiceNumber.Rect.Bottom + 50dt);
    // Beschränkt den Suchbereich auf ein Rechteck rechts von der Bezeichnung des Felds InvoiceNumber.
    Let r2 = Rect (kwInvoiceNumber.Rect.Left - 100dt, kwInvoiceNumber.Rect.Bottom, kwInvoiceNumber.Rect.Right + 100dt, kwInvoiceNumber.Rect.Bottom + 100dt);
    // Beschränkt den Suchbereich auf ein Rechteck unterhalb der Bezeichnung des Felds InvoiceNumber.
    DataRegion = RectArray (r1);
    DataRegion.Add (r2);
    RestrictSearchArea (DataRegion);
    }
    ```
  </Step>

  <Step title="Nachgelagerte Suchbeziehungen hinzufügen">
    Der Suchbereich für das Feld ist auf zwei Rechtecke beschränkt: eines rechts neben dem Feldnamen und eines darunter. Befinden sich die Felddaten rechts neben dem Namen, steht unter dem Feld häufig weiterer Text (in den Testbildern meist der Name und die Daten des Felds **Date**). Da dieser zusätzliche Text im Suchbereich für das Feld **Rechnungsnummer** liegt, erzeugt FlexiLayout Studio dafür eine Hypothese. Um die Qualität dieser Hypothese zu beeinflussen, geben Sie im Feld **Erweiterte Nach-Suchbeziehungen** zusätzliche Prüfungen an: Je weiter unten der Text unter dem Feldnamen steht, desto höher ist der Abzug. In der [FlexiLayout language](/de/flexi-capture/fls/code/general-code):

    ```text theme={null}
    if not IsNull then
    { FuzzyQuality: Top - kwInvoiceNumber.Rect.Top, {-30000,0,0,10000}*dt;
    }
    // Je größer die Distanz zwischen dem Namen und der oberen boundary des Feldes, desto größer der Abzug für die entsprechende Hypothese. In diesem konkreten Fall erhält die Hypothese für das element, dessen obere boundary mit der oberen boundary des Namens zusammenfällt, die höchste Quality.
    ```
  </Step>

  <Step title="Das FlexiLayout abgleichen">
    Schließen Sie das Element **InvoiceFooter** vorübergehend aus und gleichen Sie das FlexiLayout ab.
  </Step>

  <Step title="Blockregion festlegen">
    Geben Sie für den Block **InvoiceNumber** als Ort die rechteckige Region des Elements **InvoiceNumber** an, die vertikal und horizontal um 5 dots vergrößert wurde. Wählen Sie **Ausdruck** aus und geben Sie den folgenden Ausdruck ein:

    ```text theme={null}
    Rect outputRect;
    outputRect = InvoiceHeader.InvoiceNumber.Rect;
    IsNull = InvoiceHeader.InvoiceNumber.IsNull;
    // Behandelt die Blockregion als Detected, wenn das InvoiceNumber-Element erkannt wurde.
    OutputRegion = outputRect;
    OutputRegion.Inflate (5dt, 5dt);
    ```
  </Step>
</Steps>
