> ## 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. Step 25: TotalQuantity 要素と TotalAmount 要素を使用した TotalQuantity field および TotalAmount field の検出

> オプションの grTotal グループ内の TotalQuantity および TotalAmount Character String 要素を使用して、Total Quantity と Total Amount の値を取得します。

テスト画像を解析すると、Total Quantity field と Total Amount field は `Footer.kwTotal` という名前がある場合にのみ現れ、同じ高さに配置されていることが分かります。

Total Quantity field と Total Amount field を検出するには、[Character String](/ja/flexi-capture/fls/template/character-chain) 型の要素を使用します。これらの要素に共通する検索条件を指定するため、[Group](/ja/flexi-capture/fls/template/elements-compound) 要素である grTotal を作成します。

<div id="create-the-grtotal-group-element">
  ## grTotal Group 要素を作成する
</div>

[Group](/ja/flexi-capture/fls/template/elements-compound) 要素 grTotal を作成するには:

1. Footer 要素内に [Group](/ja/flexi-capture/fls/template/elements-compound) 要素を作成し、**grTotal** という名前を付けます。

2. 名前が存在しない場合は subelements の検索を停止するようにするため、**Optional element** を選択します。

   <Note>
     詳細については、[The Optional property of a Group element](/ja/flexi-capture/fls/tips-tricks/date11) を参照してください。
   </Note>

3. Advanced タブをクリックします。

4. **Total Quantity** field と **Total Amount** field は、画像上では名前 `Footer.kwTotal` がある場合にのみ現れるため、Advanced pre-search relations field に次の[追加の検索制約](/ja/flexi-capture/fls/template/advanced-constraints)を設定します: `Footer.kwTotal` 要素が検出されなかった場合は、画像上でそのオブジェクトを検索しません。[FlexiLayout language](/ja/flexi-capture/fls/code/general-code) では次のようになります。
   `If Footer.kwTotal.IsNull Then DontFind;`

<div id="create-the-totalquantity-element">
  ## TotalQuantity 要素を作成する
</div>

Total Quantity field は、Total 行と Quantity 列の交点にあります。最初の制約は、[Group](/ja/flexi-capture/fls/template/elements-compound) 要素レベルですでに指定されています。2 つ目の制約を指定するには、前に検出された列名を参照要素として使用します。

TotalQuantity 要素を作成するには、次の手順に従います。

1. **grTotal** 要素で、型 [Character String](/ja/flexi-capture/fls/template/character-chain) の要素を作成し、**TotalQuantity** という名前を付けます。

2. Character String タブをクリックします。

3. Character count フィールドに、次のファジー区間を指定します: `{-1, 1, 10, INF}`。これは文字列の長さの推定値です。想定される値の範囲は 1 ～ 10 です。この範囲外の仮説にはペナルティが課されます。

4. 要素の他の parameters はデフォルト値のままにします。

5. Relations タブをクリックします。

6. **Total Quantity** field は常に `Footer.kwTotal` という名前の keywords と同じ高さか、やや下に配置されるため、次の検索制約を設定します:

   * 要素 `Footer.kwTotal` の Above、Offset = -200、Reference boundary = Bottom
   * 要素 `Footer.kwTotal` の Below、Offset = -20、Reference boundary = Top

   <Tip>
     offsets の値を設定する前に、pre-recognition 中に検出された隣接オブジェクトの幾何学的プロパティ (サイズや boundary など) を分析するとよいでしょう。Offset 値は試行錯誤で決定します。
   </Tip>

7. Advanced タブをクリックします。

8. **Total Quantity** field は画像上では省略可能ですが、現れる場合は常に **Quantity** 列と一緒に現れ、その名前の下に配置されるため、Advanced pre-search relations field に次の[追加の検索制約](/ja/flexi-capture/fls/template/advanced-constraints)を設定します:

   `TableHeader.kwQuantity` 要素が検出されている場合にのみ、画像上でオブジェクトを検索します。列名の各 boundary から左右に 50 ドットを超える範囲は検索しないでください。[FlexiLayout language](/ja/flexi-capture/fls/code/general-code) では:
   `If Not (TableHeader.kwQuantity.IsNull) Then`
   `{`
   `LeftOf: TableHeader.kwQuantity.Right, -50 * dot;`
   `RightOf: TableHeader.kwQuantity.Left, -50 * dot;`
   `}`
   `Else DontFind;`

9. test images で FlexiLayout のマッチングを試し、該当するすべての画像でプログラムが要素を正常に検出することを確認します。

10. **TotalQuantity** ブロックの位置を記述するには、ソース要素オプションを選択し、次に "**…**" をクリックして、ソース要素として **TotalQuantity** 要素を選択します。

<div id="create-the-totalamount-element">
  ## TotalAmount 要素を作成する
</div>

Total Amount field は、Total 行 (テーブルのフッター) と Total 列が交差する位置にあります。最初の制約は、[Group](/ja/flexi-capture/fls/template/elements-compound) 要素レベルですでに指定されています。2 つ目の制約を指定するには、前に検出された列名を参照要素として使用します。

TotalAmount 要素を作成するには、次の手順を実行します。

1. **grTotal** 要素で、型 [Character String](/ja/flexi-capture/fls/template/character-chain) の要素を作成し、**TotalAmount** という名前を付けます。

2. Character String タブをクリックします。

3. Character count フィールドで、次のファジー区間を指定します: `[-1, 1, 20, 2147483647]`。これは文字列の長さのおおよその見積もりです。想定される値の範囲は 1 ～ 20 です。この範囲外の仮説にはペナルティが課されます。

4. 要素のその他のパラメーターはデフォルト値のままにします。

5. Relations タブをクリックします。

6. **Total Amount** field は常に `Footer.kwTotal` という名前のキーワードと同じ高さにあるため、次の検索制約を設定します:
   * 要素 `Footer.kwTotal` の上、Offset = -20、Reference boundary = Bottom。
   * 要素 `Footer.kwTotal` の下、Offset = -20、Reference boundary = Top。

7. **Advanced** タブをクリックします。

8. **Total Amount** field は、**Total** 列名のすぐ下 (多少ずれる場合があります) にしか配置されず、また **Unit Price** 列と **Sales** 列の間にしか配置できないため、Advanced pre-search relations field に次の[追加の検索制約](/ja/flexi-capture/fls/template/advanced-constraints)を設定します:

   `TableHeader.kwTotal` 要素が検出されている場合は、`TableHeader.kwTotal` 要素の右境界から右へ 70 ドット以内、かつ `TableHeader.kwTotal` 要素の左境界から左へ 50 ドット以内でオブジェクトを探します。

   または、`TableHeader.kwUnitPrice` 要素と `TableHeader.kwSales` 要素が検出されている場合は、`TableHeader.kwSales` 要素の左境界から右へ 40 ドット以内、かつ `TableHeader.kwUnitPrice` 要素の右境界より右側でオブジェクトを探します。それ以外の場合は、オブジェクトを探しません。[FlexiLayout language](/ja/flexi-capture/fls/code/general-code) では、次のようになります:
   `If Not (TableHeader.kwTotal.IsNull) Then`
   `{`
   `LeftOf: TableHeader.kwTotal.Right, -70 * dot;`
   `RightOf: TableHeader.kwTotal.Left, -50 * dot;`
   `}`
   `Else`
   `If Not (TableHeader.kwUnitPrice.IsNull) and Not (TableHeader.kwSales.IsNull) Then`
   `{`
   `LeftOf: TableHeader.kwSales.Left, -40 * dot;`
   `RightOf: TableHeader.kwUnitPrice, 0 * dot;`
   `}`
   `Else DontFind;`

   <Tip>
     オフセット値を設定する前に、事前認識で検出された隣接オブジェクトの幾何学的特性 (つまり、サイズと境界) を分析しておくとよいでしょう。オフセット値は試行錯誤で決定します。
   </Tip>

9. テスト画像で FlexiLayout のマッチングを試し、該当するすべての画像でプログラムが要素を正しく検出できることを確認します。

10. **TotalAmount** ブロックの位置を記述するには、ソース要素オプションを選択し、次に <img src="https://mintcdn.com/abbyy/fmgRWFNHKYN2MLSg/images/flexi-capture/fls/Browse_Button.gif?s=3673db30dda4a3293aec716853588b55" alt="参照ボタン" style={{display:"inline-block",verticalAlign:"middle",margin:0}} width="21" height="20" data-path="images/flexi-capture/fls/Browse_Button.gif" /> をクリックして、ソース要素として **TotalAmount** 要素を選択します。
