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

# サンプル 3. ステップ 4: 要素をどの順序で検出するかを判断するための画像解析

> サンプル 3 の請求書 FlexiLayout の要素検索順序を計画します。field の配置を解析し、InvoiceHeader グループとその要素の概要を示します。

このステップでは、次の点を判断します。

* 画像上の field の配置に何らかのパターンがありますか。
* field の検出で参照要素として使用できる要素はどれですか。
* 要素の検索順序として最適なのはどれですか。 (各ステップでは、それまでに説明した要素しか参照できません。)

利用可能な画像を解析します。

1. ドキュメントの中央部分には、すべての画像に共通して現れるテーブルがあることに気付くはずです。

   <Info>
     FlexiLayout Studio では、テーブルは、区切り線または白い余白によって視覚的に区切られた行と列から成るフラグメントで構成された画像オブジェクトです。詳細については、[Work with tables](/ja/flexi-capture/fls/tables/general-tables) を参照してください。
   </Info>

2. テーブルの上には、field のグループ (**InvoiceHeader** と名付けることができます) があります: **Invoice Number**、**請求日**、**納品先住所**。field **Invoice Number** はすべての画像に現れるため識別用 field として使用できますが、field **請求日** と **納品先住所** は任意です。

3. テーブルの下には、field のグループ (**Footer** と名付けることができます) があります: **TotalQuantity**、**TotalAmount**、**Country**。これらの field も、すべての画像に現れるわけではありません。

まず、ドキュメント上部の要素検索について記述します。上部の field を検出するには、Invoice Number、請求日、納品先住所 の各 field を探すために使用するすべての要素をまとめる論理グループを作成します。

1. [Group](/ja/flexi-capture/fls/template/elements-compound) 型の要素を作成し、**InvoiceHeader** という名前を付けます。
   field **Invoice Number**、**請求日**、**納品先住所** は常に左上隅に配置されます。さらに、それらの順序は常に同じです: **納品先住所**、**Invoice Number**、**請求日** の順です (画像上に存在する場合)。この順序で検索します。
2. field 名 **Invoice Number**、**請求日**、**納品先住所** のキーワードの検索を記述するには、[Static Text](/ja/flexi-capture/fls/template/static-text) 型の要素を使用します。**InvoiceHeader** 要素には、次の要素を含める必要があります。
   * [Static Text](/ja/flexi-capture/fls/template/static-text) 型の **kwDeliveryAddress** 要素。これは field **納品先住所** の名前に対応します。詳細な手順については、[Step 5](/ja/flexi-capture/fls/tutorial3/3step5) を参照してください。
   * [Static Text](/ja/flexi-capture/fls/template/static-text) 型の **kwInvoiceNumber** 要素。これは field **Invoice Number** の名前に対応します。詳細な手順については、[Step 6](/ja/flexi-capture/fls/tutorial3/3step6) を参照してください。
   * [Static Text](/ja/flexi-capture/fls/template/static-text) 型の **kwDate** 要素。これは field **請求日** の名前に対応します。詳細な手順については、[Step 7](/ja/flexi-capture/fls/tutorial3/3step7) を参照してください。
3. fields **Invoice Number** と **請求日** は、それぞれの名前と同じ行で、名前の右側を検索します。
   **InvoiceHeader** 要素内に、次の要素を作成します。
   * [Character String](/ja/flexi-capture/fls/template/character-chain) 型の **InvoiceNumber** 要素。これは field **Invoice Number** に対応します。詳細な手順については、[Step 8](/ja/flexi-capture/fls/tutorial3/3step8) を参照してください。
   * field **請求日** を探すための [Group](/ja/flexi-capture/fls/template/elements-compound) 要素 **grDate**。詳細な手順については、[Step 9](/ja/flexi-capture/fls/tutorial3/3step9) を参照してください。

`InvoiceHeader.grDate` 要素内に、次を作成します。

* [Date](/ja/flexi-capture/fls/template/date) 型の **InvoiceDate** 要素。画質の良い画像では、**請求日** field に対応します。詳しい手順については、[Step 9](/ja/flexi-capture/fls/tutorial3/3step9) を参照してください。
* [Character String](/ja/flexi-capture/fls/template/character-chain) 型の **InvoiceDateAsString** 要素。プログラムが **InvoiceDate** 要素を見つけられなかった場合は、**請求日** field に対応します。詳しい手順については、[Step 9](/ja/flexi-capture/fls/tutorial3/3step9) を参照してください。

  <Note>
    画質の低い画像で日付を見つける方法について詳しくは、[Tips and Tricks](/ja/flexi-capture/fls/tips-tricks/date2) セクションを参照してください。
  </Note>

1. **納品先住所** field は複数行にわたるため、これを検出するには [Paragraph](/ja/flexi-capture/fls/template/text-chain) 型の要素が必要です。ただし、この要素を作成する前に、検索範囲をできるだけ限定してください。検索範囲の右境界には、[White Gap](/ja/flexi-capture/fls/template/white-gap) 型の要素を使用します。次に、**納品先住所** field の位置を示すすべての要素を [Group](/ja/flexi-capture/fls/template/elements-compound) 要素にまとめます。
   * **InvoiceHeader** 要素内に Group 要素を作成し、**grAddress** という名前を付けます。詳しい手順については、[Step 10](/ja/flexi-capture/fls/tutorial3/3step10) を参照してください。

**grAddress** 要素内に、次の要素を作成します。

* [White Gap](/ja/flexi-capture/fls/template/white-gap) 型の補助要素 **wgAddressRight**。これは **納品先住所** field の右側に接しています。詳しい手順については、[Step 11](/ja/flexi-capture/fls/tutorial3/3step11) を参照してください。
* [Paragraph](/ja/flexi-capture/fls/template/text-chain) 型の **DeliveryAddress** 要素。これは **納品先住所** field に対応します。詳しい手順については、[Step 12](/ja/flexi-capture/fls/tutorial3/3step12) を参照してください。
