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

Wenn Sie die Bilder untersuchen, werden Sie Folgendes feststellen:

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

Um die Eigenschaften festzulegen, die für all diese Elemente gemeinsam sind, erstellen Sie ein Element vom Typ **Group**.

<div id="create-the-grdate-group-element">
  ## Gruppenelement grDate erstellen
</div>

<Steps>
  <Step title="Erstellen des Group-Elements">
    Erstellen Sie im Element **InvoiceHeader** ein [Group](/de/flexi-capture/fls/template/elements-compound)-Element und nennen Sie es **grDate**.
  </Step>

  <Step title="Beschränken des Suchbereichs">
    Klicken Sie auf die Registerkarte **Advanced** und geben Sie zusätzliche Suchbedingungen an: Beschränken Sie den Suchbereich auf ein 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):

    ```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);
    ```
  </Step>
</Steps>

<div id="create-the-invoicedate-element">
  ## Erstellen des Elements InvoiceDate
</div>

<Steps>
  <Step title="Erstellen des Date-Elements">
    Erstellen Sie im Element `InvoiceHeader.grDate` ein [Date](/de/flexi-capture/fls/template/date)-Element und nennen Sie es **InvoiceDate**.
  </Step>

  <Step title="Angeben der Datumsformate">
    Klicken Sie auf die Registerkarte **Date** und 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 in den Eigenschaften des Elements InvoiceDate in ABBYY FlexiLayout Studio, der die Liste der für das Feld Rechnungsdatum angegebenen Datumsformate zeigt." width="431" height="455" data-path="images/flexi-capture/fls/tutorial4_5_5.png" />
    </Frame>
  </Step>

  <Step title="Ausschließen bereits erkannter Elemente">
    Bei einigen Bildern umfasst der Suchbereich für das Feld **Rechnungsdatum** die bereits erkannten Elemente **kwInvoiceNumber** und **InvoiceNumber**. Um zu verhindern, dass FlexiLayout Studio deren Werte als Hypothesen für das Feld **Rechnungsdatum** behandelt, schließen Sie sie aus dem Suchbereich aus:

    * Klicken Sie neben dem Feld **Exclude regions of elements** auf **Add...**.
    * 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`.
  </Step>

  <Step title="Hinzufügen der Suchbedingung">
    Klicken Sie auf die Registerkarte **Advanced**. Das Feld **Rechnungsdatum** ist optional. Wenn ein Dokument jedoch ein Datum im Feld **Rechnungsdatum** enthält, ist auch der entsprechende Feldname (der zuvor durch das Element **kwInvoiceDate** beschrieben wurde) immer vorhanden. Fügen Sie unter **Advanced pre-search relations** folgende Bedingung hinzu: Suchen Sie nur dann nach dem Bildobjekt, wenn **kwInvoiceDate** erkannt wurde. In der [FlexiLayout language](/de/flexi-capture/fls/code/general-code):

    ```text theme={null}
    If InvoiceHeader.kwInvoiceDate.IsNull
    Then DontFind();
    ```
  </Step>

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

Fügen Sie bei Bildern schlechter Qualität, deren Erkennungsergebnisse keinem der Standardparameter des Elements **Date** entsprechen, ein alternatives Element hinzu, das weniger strenge Suchbedingungen für das Feld **Rechnungsdatum** verwendet.

<div id="create-the-invoicedateasstring-element">
  ## Das Element InvoiceDateAsString erstellen
</div>

<Steps>
  <Step title="Das Zeichenkette-Element erstellen">
    Erstellen Sie im Element `InvoiceHeader.grDate` ein [Zeichenkette](/de/flexi-capture/fls/template/character-chain)-Element und nennen Sie es **InvoiceDateAsString**.
  </Step>

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

    `,-./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`
  </Step>

  <Step title="Den Prozentsatz nicht zum Alphabet gehörender Zeichen festlegen">
    Legen Sie den Prozentsatz der Zeichen, die nicht zum Alphabet gehören, auf 30 % fest.
  </Step>

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

  <Step title="Die maximale Leerzeichenlänge festlegen">
    Setzen Sie **Max space length** auf 20. Dadurch wird die maximale Länge eines Leerzeichens in der Textzeichenkette auf 20 Punkte begrenzt. Behalten Sie die Standardeinstellungen für die anderen Elementeigenschaften bei.
  </Step>

  <Step title="Die Fallback-Bedingung hinzufügen">
    Klicken Sie auf die Registerkarte **Advanced**. Da das Element **InvoiceDateAsString** nur gesucht werden darf, wenn das Element **InvoiceDate** nicht erkannt wurde, geben Sie diese Bedingung im Feld **Advanced pre-search relations** an. In der [FlexiLayout language](/de/flexi-capture/fls/code/general-code):

    ```text theme={null}
    If Not InvoiceDate.IsNull Then DontFind;
    ```
  </Step>

  <Step title="Die Positionsbedingung hinzufügen">
    Geben Sie eine zusätzliche Bedingung an, ähnlich der für **InvoiceDate**: Suchen Sie nur dann nach dem Bildobjekt, wenn das Element **kwInvoiceDate** erkannt wurde, und wählen Sie das Objekt aus, das **kwInvoiceDate** am nächsten liegt. In der [FlexiLayout language](/de/flexi-capture/fls/code/general-code):

    ```text theme={null}
    If InvoiceHeader.kwInvoiceDate.IsNull Then DontFind;
    Nearest: InvoiceHeader.kwInvoiceDate;
    ```
  </Step>

  <Step title="Die Blockregion festlegen">
    Geben Sie die Position des Blocks **InvoiceDate** als rechteckige Region des erkannten Elements **InvoiceDate** oder **InvoiceDateAsString** an, die vertikal und horizontal um 5 Punkte vergrößert wird. Wählen Sie die Option **Expression** und geben Sie diesen 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);
    ```
  </Step>
</Steps>
