> ## 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.5: Feld „Rechnungsdatum“ sowie die Elemente grDate, InvoiceDate und InvoiceDateAsString

> Schritt 5.5 von FlexiLayout Studio Beispiel 4: Erfassen Sie das Feld Rechnungsdatum mit einer grDate-Gruppe, einem Date-Element und einem Zeichenketten-Fallback für schlechte Scans.

Nachdem Sie die Bilder untersucht haben, werden Sie Folgendes feststellen:

* Auf einigen Dokumenten befindet sich das Feld **Rechnungsdatum** rechts vom Feldnamen, auf anderen unterhalb des Namens. Beschränken Sie daher den Suchbereich auf Rechtecke rechts vom und unterhalb des Namens.
* Verwenden Sie ein Element vom Typ **Date**, um nach dem Datum zu suchen. Legen Sie außerdem die folgende Bedingung fest: Wenn der Feldname nicht erkannt wird, suchen Sie nicht nach den Felddaten.
* Datumsangaben werden oft unzuverlässig erkannt. Das kann an Scanfehlern, ungültigen Datumsformaten usw. liegen. Geben Sie daher zusätzlich ein Element vom Typ Zeichenkette an, falls das Element Date kein Datum findet.

Um die Einstellungen festzulegen, die für alle Elemente gemeinsam sind, erstellen Sie ein Element vom Typ Group.

So erstellen Sie ein Element grDate vom Typ Group:

1. Erstellen Sie im Element **InvoiceHeader** ein Element vom Typ **Group** und nennen Sie es **grDate**.
2. Klicken Sie auf die Registerkarte Advanced und geben Sie zusätzliche Suchbedingungen an: Beschränken Sie den Suchbereich auf das Rechteck-Array, das aus einem Rechteck rechts vom Feldnamen und einem Rechteck unterhalb des Feldnamens mit einem gewissen Versatz besteht. In der [FlexiLayout language](/de/flexi-capture/fls/code/general-code) kann diese Bedingung wie folgt geschrieben werden:

   ```text theme={null}
   RectArray DataRegion;
   Let r1= Rect (kwInvoiceDate.Rect.Right, kwInvoiceDate.Rect.Top -20dt, kwInvoiceDate.Rect.Right + 650dt, kwInvoiceDate.Rect.Bottom + 50dt);
   Let r2 = Rect (kwInvoiceDate.Rect.Left - 150dt, kwInvoiceDate.Rect.Bottom, kwInvoiceDate.Rect.Right + 100dt, kwInvoiceDate.Rect.Bottom + 100dt);

   DataRegion = RectArray (r1);
   DataRegion.Add (r2);
   RestrictSearchArea (DataRegion);
   ```

So erstellen Sie ein Element InvoiceDate:

1. Erstellen Sie im Element `InvoiceHeader.grDate` ein Element vom Typ Date und nennen Sie es **InvoiceDate**.
2. Klicken Sie auf die Registerkarte Date.
3. Geben Sie alle möglichen Datumsformate für das Element **InvoiceDate** an:

<Frame>
  <img src="https://mintcdn.com/abbyy/8aWHPAJyzWmTqglX/images/flexi-capture/fls/tutorial4_5_5.png?fit=max&auto=format&n=8aWHPAJyzWmTqglX&q=85&s=120c6fe9aa8f4c54bc3f09b0a679212a" alt="Screenshot der Registerkarte Date der Elementeigenschaften von InvoiceDate in ABBYY FlexiLayout Studio mit der Liste der für das Feld Rechnungsdatum angegebenen Datumsformate." width="431" height="455" data-path="images/flexi-capture/fls/tutorial4_5_5.png" />
</Frame>

4. Bei einigen Bildern umfasst der Suchbereich des Felds **Rechnungsdatum** auch die bereits erkannten Elemente **kwInvoiceNumber** und **InvoiceNumber**. Damit das Programm die Werte dieser Elemente nicht als Hypothesen für das Feld **Rechnungsdatum** berücksichtigt, schließen Sie diese Elemente aus dem Suchbereich aus:
   * Klicken Sie auf die Schaltfläche Add... neben dem Feld Exclude regions of elements.
   * Wählen Sie **kwInvoiceNumber** aus der Elementliste aus.
   * Klicken Sie auf **OK**. Die Zeichenfolge `SearchElements.InvoiceHeader.kwInvoiceNumber` wird im Feld Exclude regions of elements angezeigt.

Wiederholen Sie diese Schritte für das Element `SearchElements.InvoiceHeader.InvoiceNumber`.

5. Klicken Sie auf die Registerkarte Advanced.
6. Das Feld **Rechnungsdatum** ist kein erforderliches Element. Wenn ein Dokument jedoch ein Datum enthält (im Feld **Rechnungsdatum**), ist auf dem Dokument immer auch der entsprechende Feldname vorhanden (zuvor durch das Element **kwInvoiceDate** beschrieben). Daher können Sie in **Advanced pre-search relations** eine zusätzliche Suchbedingung angeben: Suchen Sie nur dann nach dem Bildobjekt, wenn **kwInvoiceDate** erkannt wurde. In der [FlexiLayout language](/de/flexi-capture/fls/code/general-code) kann diese Bedingung wie folgt geschrieben werden:

   ```text theme={null}
   If InvoiceHeader.kwInvoiceDate.IsNull
   Then DontFind();
   ```
7. Schließen Sie das Element **InvoiceFooter** vorübergehend aus und gleichen Sie das FlexiLayout ab.

Für Bilder von schlechter Qualität, bei denen die Erkennungsergebnisse nicht zu den Standardparametern des Elements Date passen, fügen Sie ein alternatives Element hinzu, das mit weniger strengen Bedingungen nach dem Feld Rechnungsdatum sucht.

So erstellen Sie ein Element InvoiceDateAsString:

1. Erstellen Sie im Element `InvoiceHeader.grDate` ein Element vom Typ Zeichenkette und benennen Sie es **InvoiceDateAsString**.
2. Klicken Sie auf die Registerkarte Zeichenkette.
3. Geben Sie das Alphabet an:
   ,-./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
4. Setzen Sie den Prozentsatz der Nicht-Alphabet-Zeichen auf 30 %.
5. Geben Sie im Feld Zeichenanzahl das Fuzzy-Intervall `{-1, 8, 14, INF}` für die Länge der Zeichenkette an, wobei davon ausgegangen wird, dass mögliche Werte im Bereich von 8 bis 14 Zeichen liegen. Jede Hypothese außerhalb dieses Intervalls wird abgewertet.
6. Setzen Sie Max. Leerraumlänge auf 20. Dadurch wird die maximale Leerzeichenlänge in der Textzeichenkette auf 20 Punkte begrenzt.
7. Behalten Sie für die anderen Elementeigenschaften die Standardeinstellungen bei.
8. Klicken Sie auf die Registerkarte Advanced.
9. Da nach dem Element **InvoiceDateAsString** nur gesucht werden soll, wenn das Element **InvoiceDate** im Bild nicht erkannt wurde, geben Sie im Feld **Advanced pre-search relations** die folgende Bedingung an: Suchen Sie nur dann nach dem Bildobjekt, wenn das Element **InvoiceDate** nicht erkannt wurde. In der [FlexiLayout language](/de/flexi-capture/fls/code/general-code) kann diese Bedingung wie folgt geschrieben werden:

   ```text theme={null}
   If Not InvoiceDate.IsNull Then DontFind;
   ```
10. Geben Sie für **InvoiceDate** eine zusätzliche Bedingung an, ähnlich der vorherigen: Suchen Sie nur dann nach dem Bildobjekt, wenn das Element **kwInvoiceDate** erkannt wurde. Suchen Sie nach dem Bildobjekt, das dem Element **kwInvoiceDate** am nächsten liegt. In der [FlexiLayout language](/de/flexi-capture/fls/code/general-code) kann diese Bedingung wie folgt geschrieben werden:

    ```text theme={null}
    If InvoiceHeader.kwInvoiceDate.IsNull Then DontFind;
    Nearest: InvoiceHeader.kwInvoiceDate;
    ```
11. Geben Sie die Position des Blocks **InvoiceDate** als rechteckige Region des erkannten Elements **InvoiceDate** oder **InvoiceDateAsString** an, die horizontal und vertikal um 5 Punkte vergrößert wurde. Wählen Sie dazu die Option Ausdruck aus und geben Sie den folgenden Ausdruck ein:

    ```text theme={null}
    Rect outputRect;
    if not InvoiceHeader.grDate.InvoiceDate.IsNull then
    outputRect = InvoiceHeader.grDate.InvoiceDate.Rect;
    else
    { outputRect = InvoiceHeader.grDate.InvoiceDateAsString.Rect;
    IsNull = InvoiceHeader.grDate.InvoiceDateAsString.IsNull;
    }
    OutputRegion = outputRect;
    OutputRegion.Inflate (5dt, 5dt);
    ```
