> ## 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 Dokument 1 und 2 stehen die Felddaten direkt unter dem Namen).

So erstellen Sie ein InvoiceNumber-Element:

1. Erstellen Sie im Element **InvoiceHeader** ein Element vom Typ Zeichenkette und nennen Sie es **InvoiceNumber**.

   <Tip>
     Der Name des Elements muss nicht mit dem Namen des Blocks übereinstimmen, der dem Feld **InvoiceNumber** entspricht. Es ist jedoch praktisch, identische Namen zu verwenden, wenn Sie mit einem FlexiLayout arbeiten.
   </Tip>

2. Klicken Sie auf die Registerkarte Zeichenkette.

3. Geben Sie das Alphabet an:
   -./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz

4. Setzen Sie Percentage nicht alphabetischer Zeichen auf 30 %.

5. 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 im Bereich von 3 bis 20 Zeichen liegen. Jede Hypothese außerhalb dieses Intervalls wird negativ bewertet.

6. 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 das Programm diesen Text nicht in seine Hypothesen für das Feld **Rechnungsnummer** einbezieht:
   * Klicken Sie auf der Registerkarte **Suchbedingungen** auf die Schaltfläche Hinzufügen... neben dem Feld Regionen von Elementen ausschließen.
   * Wählen Sie **kwInvoiceDate** aus der Elementliste aus.
   * Klicken Sie auf **OK**. Die Zeichenkette `SearchElements.InvoiceHeader.kwInvoiceDate` wird im Feld Regionen 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 InvoiceNumber-Character String-Elements in ABBYY FlexiLayout Studio. Darin wurde das Element kwInvoiceDate als SearchElements.InvoiceHeader.kwInvoiceDate zum Feld Regionen von Elementen ausschließen hinzugefügt." width="427" height="454" data-path="images/flexi-capture/fls/tutorial4_5_4.png" />
</Frame>

7. Klicken Sie auf die Registerkarte Advanced.
8. Geben Sie unter **Advanced Vorab-Suchbeziehungen** zusätzliche Bedingungen an: Wenn der Name **kwInvoiceNumber** nicht gefunden wird, suchen Sie nicht nach dem Feld **InvoiceNumber**. Geben Sie andernfalls den Suchbereich als Array von Rechtecken an: ein Rechteck rechts vom Namen und ein weiteres Rechteck unter dem Namen mit einem kleinen Versatz. In der [FlexiLayout-Sprache](/de/flexi-capture/fls/code/general-code) kann diese Bedingung wie folgt geschrieben werden:

   ```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);
   // Begrenzt den Suchbereich durch ein Rechteck rechts vom Namen des Felds InvoiceNumber.
   Let r2 = Rect (kwInvoiceNumber.Rect.Left - 100dt, kwInvoiceNumber.Rect.Bottom, kwInvoiceNumber.Rect.Right + 100dt, kwInvoiceNumber.Rect.Bottom + 100dt);
   // Begrenzt den Suchbereich durch ein Rechteck unter dem Namen des Felds InvoiceNumber.
   DataRegion = RectArray (r1);
   DataRegion.Add (r2);
   RestrictSearchArea (DataRegion);
   }
   ```
9. Der Suchbereich für das Feld ist auf zwei Rechtecke begrenzt, eines rechts vom Feldnamen und eines darunter. Wenn sich die Felddaten rechts vom Feldnamen befinden, steht unter dem Feld oft noch anderer Text (in den Testbildern sind dies meist der Name und die Daten des Datumsfelds). Da dieser zusätzliche Text in den Suchbereich für das Feld **Rechnungsnummer** aufgenommen wird, erzeugt das Programm dafür eine Hypothese. Um die Quality 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 größer ist die Abwertung. In der [FlexiLayout-Sprache](/de/flexi-capture/fls/code/general-code) kann diese Bedingung wie folgt geschrieben werden:

   ```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 Begrenzung des Felds ist, desto größer ist die Abwertung für die entsprechende Hypothese. In diesem speziellen Fall hat die Hypothese für das Element, dessen obere Begrenzung mit der oberen Begrenzung des Namens zusammenfällt, die höchste Quality.
   ```
10. Schließen Sie das Element **InvoiceFooter** vorübergehend aus und gleichen Sie das FlexiLayout ab.
11. Geben Sie die Position des Blocks **InvoiceNumber** als rechteckige Region des Elements **InvoiceNumber** an, die vertikal und horizontal um 5 Punkte vergrößert ist. Wählen Sie dazu 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 Element InvoiceNumber erkannt wurde.
    OutputRegion = outputRect;
    OutputRegion.Inflate (5dt, 5dt);
    ```
