1s UVダイナミックリストパラメータ

09.02.2022

あらゆるプログラミング言語で見られるプリミティブ データ型に加えて、1C には独自の型があります。 それぞれには、システム内で独自のプロパティ、メソッド、機能、目的、使用のニュアンスがあります。 これらのタイプの 1 つは動的リストで、これにより多くの応用タスクが大幅に容易になります。 そのため、開発者はこの汎用ツールを理解し、扱える必要があります。

1C の動的リストの機能

目的 このタイプのタイプに関係なく、データベース テーブルからの情報を表示します。 このメカニズムは SKD に基づいて作成され、同様の機能を備えています。 ただし、この機会は存在するので利用する必要がありますが、必ずしも 1C 言語でリクエストを作成する必要があるという意味ではありません。 興味のある情報が含まれるテーブルを指定するだけで、1C が独自に単純なクエリを生成します。

動的リストがどのように形成され、どのようなデータが表示されるかを確認するには、コンフィギュレーターで詳細リストにある管理フォームを開く必要があります。 コンテキストメニューそのプロパティを開き、「カスタム クエリ」項目に注目してください。 チェックボックスがない場合、「メインテーブル」パラメータはデータの取得元のデータベーステーブルを反映します。 それ以外の場合、動的リストにはカスタム クエリのデータが反映され、リスト設定を開くと確認できます。

カスタム クエリ スキームは、さまざまなデータを組み合わせて表示する優れた機会を提供するため、より一般的に使用されます。 ほとんどの場合、このメカニズムは、倉庫残高、商品価格、領収書、経費、または購入を反映するために使用されます。 複雑なクエリではパフォーマンスが低下する可能性があるため、慎重に使用する必要があります。

もう 1 つの便利なプロパティ 動的リスト「リスト設定」をクリックすると開きます。 このメニューを使用すると、標準のフィールド セットを使用している場合でも、エンド ユーザーが情報をよりアクセスしやすく理解しやすくすることができます。 リクエストが任意であるかどうかに関係なく、「設定」タブが表示され、以下を指定できます。

  • 動的なリスト選択。
  • グループ;
  • 並べ替え;
  • 装飾。

パラメーターを使用すると、動的リストが汎用的で非常に柔軟になります。 管理フォーム上の詳細にリンクすることもでき、ユーザーが選択したパラメータに応じてデータが変化します。 これらのメカニズムの使用は、現実の問題の例を考慮することで理解および評価できます。

例として、管理された形式に命名法の残骸を反映するタスクを考えてみましょう。 実際には、このような注文はさまざまな構成で非常に頻繁に発生するため、動的なリストはツールとして理想的です。 このタスクでは、カスタム クエリ、動的リスト パラメーター、およびその設定を使用する必要があります。

より明確にするために、別のを作成しましょう 外部処理そしてその上に動的リストを配置します。 私たちの計画を実装するには、命名規則を含むテーブルだけでは十分ではないため、任意のクエリを許可する必要があります。 その中で、アイテムのリストと残高のレジスターを備えたディレクトリの左側の接続を記述し、ディレクトリをメインテーブルとして設定します。 このスキームにより、ユーザーは動的リストを操作して項目を追加または変更できるようになります。



SELECT NomenclatureList.Name AS Name, GoodsInWarehousesRemainings.Warehouse AS Warehouse, GoodsInWarehousesRemainings.QuantityRemaining AS QuantityRemaining FROM Directory.Nomenclature AS NomenclatureList LEFT CONNECTION RegisterAccumulations.GoodsInWarehouses.Remainings(&CurrentDate,) AS GoodsOn WarehousesRemaining software NomenclatureList.Link = mainings.命名法 WHERE

リクエストでは「CurrentDate」パラメータが使用されているため、処理を使用する前にその値を設定する必要があります。 これを行うには、「When CreatedOnServer」プロシージャのフォーム モジュールで、標準コマンドを使用して「CurrentSessionDate」関数を割り当てます。 また、コントロール フォームに動的リストを表示し、わかりやすくするためにフィールドの順序を変更する必要があります。 「Nomenclature Remaining」属性をフォーム要素 (左上部分) にドラッグし、青い矢印を使用してフォーム上のテーブル内のフィールドの順序を変更します。

&On the Server Procedure サーバー上作成時(失敗、標準処理) Remaining Nomenclature.Parameters.SetParameterValue("CurrentDate",CurrentSessionDate()) EndProcedure


すでにこの段階で、1C で外部処理を開くことができ、動的リストが機能していることを確認できます。 残高を確認したり、項目やグループを作成したり、検索したりできます。 多くの場合、顧客は残高を確認する日付を選択する機能の追加を求めます。 動的リストを含むフォームの場合、これは追加のフィールドとそれを使用したパラメーターの設定によって実現されます。

「Date」型の「DateRemaining」属性を追加し、フォーム要素に転送します。 フィールド イベントでは、「OnChange」イベントを作成し、動的リクエストで使用される「CurrentDate」パラメーターを設定するコードを記述します。 フォームを開いたときにユーザーが残高を確認した日付をすぐに理解できるように、「When CreatedOnServer」プロシージャに小さな変更を加えます。



&OnServerProcedureWhenCreatingOnServer(失敗、標準処理)RemainingDate = CurrentSessionDate();

項目 Remains.Parameters.SetParameterValue("現在の日付", 残りの日付); プロシージャの終了&クライアント上でのプロシージャ Remaining DateWhenChanged(Element)Nomenclature Remaining.Parameters.SetParameterValue("CurrentDate",RemainingDate); 手順の終了

その結果、動的リスト フォームには任意の日付の残高を反映できます。

  1. このツールキットの機能のほんの一部だけを検討しましたが、このタイプの動的リストの利便性を理解するにはこれで十分です。 同様のメカニズムが多くのタスクに使用されますが、最もよく使用されるのは管理フォームの一般的な構成です。
  2. 選択;

リスト。

動的リストとそのリクエストを標準の管理フォームで受信するには、開発者はコンフィギュレーターで目的のフォームを開く必要があります。 詳細セクションで、「DynamicList」データ型の詳細を見つけます (ほとんどの場合、太字で強調表示されます)。 そのプロパティには、リクエスト テキスト、選択内容、その他の設定が含まれます。

印刷 (Ctrl+P)

動的リスト

1. 一般的な情報
動的リストは、データベース テーブルからの任意の情報をフォーム上に表示できるようにする特別なデータ型です。 これを行うには、データを表示するテーブルを指定するか、クエリ言語で結果の選択を記述する必要があります。

米。 1. 動的リストを作成するためのオプション

タイプのフォーム属性を作成する場合 ダイナミックリスト開発者は、データ クエリを作成する 2 つの方法を選択できます。
● メイン テーブルを指定する - この場合、データを受信するテーブル (メイン テーブル プロパティ) を指定するだけで、システムがデータのクエリを自動的に生成します (図の右側を参照)。 1)。
● リクエストを手動で生成する - このためには、カスタム リクエスト プロパティを設定する必要があります (「」を参照)。 左側図1)。 この後、インフォベースからデータを取得するリクエストを手動で生成できるようになります。
クエリでは複数のテーブルからデータを取得できるため、プライマリ テーブルを指定できます。 これは、動的リストがどのデータがプライマリでどのデータがセカンダリであるかを判断し、情報を正しく選択して表示し、標準コマンドを提供できるようにするためです。 ただし、クエリでメインテーブルを特定できない場合は、指定できませんが、
動的リストでは、メイン テーブルに関連するコマンドは提供されません。 また、この場合(メインテーブルを指定しない場合)、動的リストによるデータ取得の効率が大幅に低下します。
パフォーマンスを向上させるには、追加データを取得するためだけにカスタム クエリで使用される結合を、データ構成システム クエリ言語拡張機能を使用してオプションにすることをお勧めします。
メインのフォーム属性である動的リストの場合、フォームパラメータを使用して選択値を設定できます 選択。 これを行うには、パラメータにある構造プロパティの名前が必要です。 選択,
動的リスト選択フィールドの名前と一致します。 この場合、構造プロパティの値が選択要素の正しい値として設定されます。 配列、固定配列、または値のリストが動的リスト フォームの選択パラメーターの要素の値として渡される場合、リスト内オプションの条件が選択に追加され、正しい値が表示されます。値のリストが配置されます (配列と固定配列が変換されます)。
動的リスト内の任意のクエリは、パラメータを使用してフィールドの値を生成するクエリにすることができます。次に例を示します。

選ぶ
選択
WHEN Delivery.Coefficient = 1 THEN&プレゼンテーション
それ以外の場合は配達。 係数
END AS 比率
から

さらに、パラメーター値の型がオブジェクト属性の型と異なる場合 (たとえば、 小道具1タイプがあります 番号、パラメータ値は type です ライン)、フィールドを正しく表示するには、パラメーター値を目的の型に明示的にキャストする必要があります。

選ぶ
選択
WHEN Delivery.Coefficient = 1 THEN EXPRESS(&Representation AS String(100)) ELSE 配信。 係数
END AS 比率
から
Document.商品のお届け方法 お届け方法

選択を設定するフィールドが機能オプションを使用して無効になっている場合、選択値がフォーム パラメータまたは選択パラメータ リンクとして渡されたとしても、そのようなフィールドによる選択はインストールされません。
動的データ読み取りプロパティを使用して、データを少しずつ読み取る必要があることを動的リストに示します。
(動的リストとデータ キャッシュを使用してデータを取得する方法の詳細については、以下を参照してください)。 この属性に関係なく、次の条件が適用されます。

● 表示モードが階層リストに設定されている場合、現在のグループのデータとすべての親要素 (子は含まない) のデータのみが読み取られます。
● ツリー ビュー モードが設定されている場合、開いているツリー ノードからのデータのみが読み取られます。
● 階層参照が設定され (表示プロパティがツリーに設定され)、初期ツリー表示がすべてのレベルを展開に設定されている場合、動的リスト データの 1 回限りのロードはサポートされません。 データを取得するには、表示されたリスト内のノードの数だけサーバーへのリクエストが行われます。
次の条件が満たされる場合、動的リストは 1 回のデータ取得内で、以前に作成された一時テーブルを再利用します。
● リスト バッチ クエリには、メイン バッチ クエリの後にクエリがありません。
● 一時テーブルとそのフィールドの構成は、前回のバッチ リクエストの実行時から変更されていません。

その動作では、動的リストはメタデータ オブジェクトの詳細の次のプロパティの値を使用します。
●フォーマット、
●編集フォーマット、
●ヒント、
● 負の値を強調するための記号。
●マスク、
● 複数行モードの標識、
●高度な編集の兆し、
●パスワードモード。
データ構成システムの選択およびパラメータを表示および編集する場合、対応するフィールドの編集形式が使用されます。

2. 制限事項と機能

動的リストで選択を設定する場合、動的リストの表示モードが階層リストまたはツリーの場合、選択はグループに影響しないことに注意してください。 「グループ」とは、ThisGroup プロパティが True に設定されている特性タイプのディレクトリまたはプランの要素を意味します。
動的リストによって標準詳細に自動的に適用される資格 所有者、親、日付、期間、およびこのグループが適用されます
標準的な手段データ合成システム。 動的リストによってキーフィールドに自動的に適用される選択は、データ構成システムの標準的な手段と、リクエストテキストに条件を直接追加することの両方によって適用できます。 メインテーブルのフィールドに。 レイアウト ツールを使用して選択を適用すると、ネストされたクエリと仮想テーブルのパラメーターの両方に選択を適用できます。

動的リストを開発するときは、カスタム クエリを使用してすべての動的リストをテストすることをお勧めします。 検証プロセス中に、リスト クエリに入れ子になったクエリまたは仮想テーブルが含まれており、その中に標準詳細の別名と一致する別名を持つフィールド (所有者、親、日付、期間、ThisGroup、またはキー フィールド) が使用可能であることを確認する必要があります。選択した場合、これらのフィールドは、ニックネームが一致する標準詳細に対応して有効になります。 そうでない場合は、一致するようにリクエストを変更するか、
ニックネームが違いました。
リクエストを手動で生成することを選択した場合、リクエストにはいくつかの制限が課されます。
● 動的リストクエリでの FIRST ステートメントの使用はサポートされていません。 動的リスト内のレコード数によって制限された選択を使用する必要がある場合は、リクエストの実際のコンテンツがサブクエリに配置され、レコード数が制限されるように、動的リストを生成するリクエストを作り直す必要があります。このサブクエリで受信されます。 サブクエリの代わりに一時テーブルを使用することもできます。
● 選択、並べ替え、およびグループ化はサポートされていません。

  • 板状パーツの詳細によると。
  • フィールドを表示します。
  • DataVersion フィールド。
  • 事前定義されたデータ名フィールド。
  • 勘定科目表のタイプのフィールド。
  • フィールド 蓄積レジスタテーブルの移動のタイプ。
  • フィールド Type 特性タイプ プラン テーブルの値。
  • タイプフィールド タイプ;
  • 文字列型のフィールド (長さは無制限)。
  • BinaryData 型のフィールド。

● Subconto フィールドによる並べ替えとグループ化はサポートされていません<НомерСубконто>と ViewSubconto<НомерСубконто>テーブルの動き会計記録簿のサブコント。
● 集計関数を含むクエリ言語式であるフィールドによるグループ化はサポートされていません。
● メインテーブルが選択されている場合、動的リストクエリには次の制限があります。

  • 結合はサポートされていません。
  • ORDER BY セクションはサポートされていません。 メインテーブルのないクエリを使用するか、動的リスト設定を通じて必要な順序を設定する必要があります。

● 動的リストが階層リストまたはツリーとして表示される場合、そのエントリの少なくとも 1 つの親が表示されない限り、エントリは動的リストとして表示されません。 つまり、階層リストの要素を表示するには、動的リストでもその要素の親をリストの先頭まですべて表示する必要があります。 この場合、リストの先頭とは、次のいずれかを意味します。
動的リストによって表示される階層オブジェクトのルート要素、または動的リストのフォーム テーブル拡張機能の ParentTopLevel プロパティとして設定された要素。

次のテーブルを動的リストのメインテーブルとして使用することはサポートされていません。

● 各テーブルのレコードを一意に識別するキー (オブジェクト テーブルの場合は参照、レジスタ テーブルの場合はレコード キー) を持たないテーブル。 ただし、次のテーブルは (キーがないにもかかわらず) 動的リストのメイン テーブルとして設定できます。

● 会計レジスターのサブコント テーブル。
● MovementsSubconto テーブルを除く、会計記録簿のすべての仮想テーブル。
● 定数値のテーブル (定数テーブルを含む)。
● キーフィールドのない外部データソースのテーブル。
● 外部データソースのキューブテーブル。
● 蓄積レジスタテーブル:

  • 回転テーブル。
  • バランステーブル。
  • 売上高と残高の表。

● 計算レジスタテーブル:

  • 実際の有効期間の表。
  • スケジュールデータ。
  • 基本データ。

● オブジェクトの表部分の表。
● 変更登録テーブル (データ交換メカニズムで使用)。
● シーケンステーブル。
● 換算テーブル (定期決済メカニズムで使用)。
● クエリで外部結合のみで使用されるテーブル。

つまり、クエリを実行した結果、次の場合、指定されたメイン テーブルを含む動的リストは正しく機能します。
データ ソースとして指定しても、メイン テーブルから取得される行数は増加しません (強制された選択を考慮すると)。 クエリを実行した結果、クエリによってメインテーブルから取得される行数が増加すると、一覧で表示されるテーブルのレコードのキーの一意性が侵害されてしまいます。 この場合、メインの動的リスト テーブルの使用を無効にする必要があります。
動的リストを使用する場合は、リストに表示される詳細へのアクセス権を考慮する必要があります。
● 「常に使用」プロパティでマークされているが、現在のユーザーが表示権限を持たない動的リスト列のデータは、クライアント側に転送されません。 このような列のデータへのアクセス (CurrentData プロパティと RowData() メソッドを使用)
クライアント側では不可能です。
● 現在のユーザーが動的リストのキー フィールドに対する表示権限を持っていない場合、その動的リストからデータを取得するとアクセス違反エラーが発生します。
列挙リストを表示する動的リストの場合、リストを対話的にカスタマイズするオプションはありません。
列の構成と動的リストの設定は、選択フィールドのエイリアスを使用してクエリ フィールドに関連付けられます。 クエリ内の選択フィールドにエイリアスが明示的に指定されておらず、そのフィールドがシステム フィールドである場合、そのフィールド名は 英語版組み込み言語。
指定された関係は、変更時 (または自動エイリアスが使用されたフィールドのエイリアスを明示的に指定したとき) を意味します。
動的リスト データを生成するクエリ フィールドのエイリアス、動的リストの属性設定が失われ、フォーム要素で表示された詳細が「失われ」、動的リストの設定が正しくなくなります。
動的リストのデータ ソースがテーブル (通常または仮想) であり、期間ごとに選択を設定できる場合、ユーザーがそのような動的リストに表示期間を設定すると (コマンド Set date Interval...)、
指定された期間の境界は、選択値または仮想テーブルのパラメーターとして設定されます。 言語拡張を使用する場合
データ構成システムのクエリでは、仮想テーブル パラメータの名前が明示的に指定されました。指定されたパラメータを持つパラメータです。
名前。 データを表示または処理する期間を制御できるテーブル:
● レジスタテーブル(メインまたは仮想)。期間ごとに選択できます(計算レジスタの場合 - 登録期間ごと)。
● 文書、ビジネスプロセス、タスクのメインテーブル。
● 文書ジャーナルのメインテーブル。
● メインシーケンステーブル、シーケンス境界テーブル。
動的リスト クエリ パラメーターには、配列または値のリストを指定できます。 ただし、パラメータが値のリストの場合は、リストの最初の値のみが選択値として使用されます。 動的リストがパラメーターを含むクエリを使用する場合、パラメーター値の初期設定は OnCreateOnServer ハンドラーで実行する必要があります。
動的リスト データを表示するときは、次の点に注意してください。
● 動的リストのプロパティをプログラムで変更する場合、リストに関連付けられたコマンド パネルは自動的に再設定されません。
この動的リストを使用します。
● 複数のフィールドがセル内のグループ化モードでグループにグループ化されており、グループ化されたフィールド内にチェックボックスとして表示されるフィールドがある場合、このチェックボックスは常に結果のセルの最初に表示されます (セルの左側)。文章)。
動的リストでは、式にパラメータ、フィールド、またはリテラルが含まれるフィールドのデータ型を決定するときに、結果の型はフィールドとリテラルの型によって決まります。 パラメータ値の型が結果のデータ型に含まれていない場合、その値は切り捨てられます。
たとえば、次の例では、フィールドのタイプは数値になります。

選択
嘘のとき
その後5
さもないと
パラメータ(&P)
終わり

Parameter パラメーターを別のタイプの値に設定すると、そのフィールドの動的リストは値 0 (数値タイプのデフォルト値) を受け取ります。
このような状況で、異なるタイプのパラメータを選択する必要がある場合は、クエリ言語構造を使用することをお勧めします。 急行。 例えば、
上記の例で 100 文字以下の文字列をパラメーターに渡す必要がある場合は、パラメーターの単純な指示を明示的な型キャストを使用した式に置き換える必要があります。

選択
嘘のとき
その後5
さもないと
EXPRESS(&パラメータ AS 文字列(100))
終わり

動的リストリクエストの任意のテキストが選択フィールドの式でパラメータを使用する場合は、構文を使用してパラメータのタイプを明示的に指定する必要があります。 急行。 たとえば、代わりに AS の命名法(&Nomenclature)使用
EXPRESS(&Nomenclature AS Directory.Nomenclature) AS Nomenclature。 それ以外の場合は、検索バーを使用した検索が機能する可能性があります
間違っているか、エラーが発生します。

3. 動的リストを使用してデータを取得およびキャッシュする方法

表示するデータを取得する場合、動的リストは次の 3 つの方法のいずれかを使用します。
1. データベースからの読み取りは、リストに同時に表示される行数よりわずかに多い (ただし 20 以上の) データ要素の数を含むチャンクで実行されます。 データはサーバーにキャッシュされません。
2. データベースからの読み取りは、1,000 データ項目のページ単位で行われます。 データはサーバーにキャッシュされています。 階層データはキャッシュされます。各親に対して 2 ページ以下の要素がキャッシュされます。 動的リストごとにキャッシュされる項目は 20 ページまでです。 キャッシュは、次のテーブルの動的リストによって有効になります。
● 選択基準。
● メイン テーブルと MovementsSubconto テーブルを除く、会計レジスターのすべてのテーブル。
● メインテーブルを除くすべての累算レジスタテーブル。
● メインテーブルを除く、情報レジスタのすべてのテーブル。
● メインテーブルを除く、計算レジスタのすべてのテーブル。
● 実行者別のタスクの仮想テーブル。
● キーのない外部ソースのテーブル。
● 外部ソースからのキューブ。

3. データベースからの読み取りは、1,000 要素のページ単位で実行されます。 最初の部分は 1 ページに相当します。 後続の各部分は 1 ページずつ増加します (前のサンプルの終わりに達すると)。 「視点」が表示データの最後に近づくほど、データベースから読み取られるサンプルが大きくなり、最終的には表示されているすべてのデータと等しくなります。 データはサーバーにキャッシュされています。 キャッシュおよび動的リスト内のエントリの最大数は 1,000,000 です。
動的リストのメインテーブルで何が選択されているか、および動的読み取りプロパティがどの値を取るかに応じて、データを読み取る方法の 1 つまたは別の方法が使用されます。

● 次のテーブルの 1 つがメイン テーブル プロパティの値として指定されます: 交換計画、ディレクトリ、ドキュメントのリスト、ドキュメントジャーナル、特性タイプの計画、勘定科目表、計算タイプの計画、ビジネス プロセス、タスク、テーブルビジネスプロセスのポイント:



● Main table プロパティの値として、次のテーブルのいずれかを指定します: 情報レジスタ、蓄積レジスタ、会計レジスタ、計算レジスタ、会計レジスタの仮想テーブル MovementsSubconto のメイン テーブル。

● 動的読み取りプロパティ:
● インストール済み: 方法 1 が使用されます (方法の説明は上にあります)。
● リセット: 方法 2 が使用されます (方法の説明は上にあります)。

● Main table プロパティは、実行者別の選択基準テーブルまたはタスク テーブル (実行者別のタスク) を指定します。
● テーブルの行を識別するキー: リンク。

● Main table プロパティは、情報レジスタ SliceFirst または SliceLast の仮想テーブルを指定します。
● テーブル行を識別するキー: RecordKey。
● 動的読み取りプロパティは適用されません。
● 方法 2 が使用されます (方法の説明は上にあります)。

● メイン テーブル プロパティは、上記のテーブルを除く仮想レジスタ テーブルの 1 つに設定されます。

● 動的読み取りプロパティは適用されません。

● Main テーブルのプロパティが指定されていないため、任意のクエリが使用されます。
● テーブルの行を識別するキー: 数値。
● 動的読み取りプロパティは適用されません。
● 方法 3 が使用されます (方法の説明は上にあります)。

表示のために、データは部分的にクライアントに転送されます。そのサイズは、データを読み取る 1 番目の方法 (このセクションの冒頭で説明) の部分サイズと同様です。
動的リストを含むフォームを作成すると、表示される動的リストごとに 45 個のデータ項目が最初にクライアントに渡されます (リストに 45 個を超える項目がある場合)。 動的リストに 45 行を超える行が表示される場合、フォームを開くと追加の行が表示されます。 サーバー呼び出し欠落しているデータ要素を取得します。

4. 動的リストの設定

プロパティ リストの設定 - [開く] ハイパーリンクをクリックすると、動的リストの表示を設定するためのフォームが開きます。 リストの設定は、データ構成システムでの同様の操作と同じ方法で行われます。


米。 2. 動的リストの条件付きスタイル

構成で動的リストを設定する場合、アプリケーション開発者は次のことを行うことができます。
● 並べ替えの基準となるフィールドを設定します。
● リスト内のデータの選択を説明します。
● 条件付きの外観設定を指定します。
● データをグループ化するフィールドを設定します。
システムによってインストールされたデフォルトの並べ替えに満足できない場合は、開発者に並べ替えを設定するのが合理的です。

アドバイス。ソートフィールドの選択が不十分であると (データの選択とグループ化も同様に)、動的サンプリングの効率に悪影響を与えることに注意してください。
アプリケーション開発者の観点から見ると、動的リスト設定は相互接続された複数の部分で構成されます。 動的リストの設定を管理できる主なプロパティは次のとおりです。 リンカー設定。 このオブジェクトには、システムの実行時に動的リストに適用される最終設定を決定する 3 つの設定セットが含まれています。
● 設定 – Configurator モードで作成された設定。 動的リストの Order プロパティを使用すると、動的リストの設定ビルダーの Settings.Order プロパティに簡単にアクセスできるため、次の構成要素は同等です。
List.Order および List.SettingsLinker.Settings.Order;
● UserSettings – これらは、1C:Enterprise モードでユーザーによって変更される設定です。
● 固定設定 – これらの設定は組み込み言語から設定されます。 このプロパティには、パラメータを使用してフォームに転送される選択値も含まれます。 動的リストのプロパティの選択、オプション、条件付き外観を使用すると、動的リスト設定ビルダーの固定設定に簡単にアクセスできます。 つまり、これらの呼び出しは同等です。
List.Settings Composer.FixedSettings.Selection および List.Selection。
動的リストの最終設定を作成する場合、さまざまな設定オプションが次のように組み合わされます。
● いずれかのタイプの設定が完全​​にカスタムとしてマークされている場合、結果の設定には次のものが含まれます。 カスタム設定
(List.ComposerSettings.UserSettings)。 さらに、いずれかの設定要素が使用不可としてマークされている場合、これらの設定は List.Settings Composer プロパティからの結果の設定に配置されます。 設定。
● いずれかのタイプの設定が全体ではなく要素ごとにカスタムとしてマークされている場合は、次のようになります。
● カスタムとしてマークされた項目は、List.SettingsComposer.CustomSettings プロパティから得られる設定に含まれます。
● 使用不可としてマークされた項目は、List.SettingsComposer.Settings プロパティから得られる設定に含まれます。
固定設定(List.SettingsComposer.FixedSettings) は、結果の設定に「そのまま」追加されます。 同時に、固定設定とユーザー設定に同じ名前の設定が含まれることは受け入れられません。たとえば、条件の左の値が同じである選択などです。

動的リスト設定に、機能オプションを使用して無効にされた設定が含まれている場合、これらの設定は、動的リスト データが取得されるときに、使用可能な設定のリストから削除されます。
ユーザーが使用できる設定と使用できない設定の制御は、動的リスト設定ウィンドウで行われます。


米。 3. ユーザー設定への組み込みの制御

ウィンドウの下部にあるチェックボックス (図 3 を参照) は、設定 (通常またはクイック) に設定の種類全体を配置する役割を果たします。 この機能は、選択、順序付け、グループ化、および条件付けに使用できます。 編集モードで設定した場合 クイック選択次に、動的リストを表示するフォーム テーブルのカスタム設定グループ プロパティで、動的リストのクイック カスタム設定に関連付けられた要素が配置される空のフォーム グループを指定する必要があります。 グループを指定しない場合、クイックユーザー設定はフォームに表示されません。 動的リスト拡張機能の CreateCustomSettingsFormItems() メソッドを使用して、組み込み言語を使用してカスタム設定の作成を明示的に呼び出すこともできます。
特定の設定項目をユーザー設定に配置できるかどうかを選択することもできます。 この機能は、選択および条件付き設計要素で使用できます (図 3 を参照)。

動的リストを開くときに特別な設定を読み込む必要がある場合は、次の 2 つの方法で行うことができます。
● 動的リストフォームパラメータ UserSettings を使用します。 このパラメータに含まれるデータは、ユーザーの動的リスト設定に配置されます。
● 動的リスト フォームのパラメータUserSettingsKey を使用します。 フォームを開くときにこのパラメーターを指定すると、指定されたキーを持つ設定ストレージにあるユーザー設定が、フォームの主要な属性である動的リストに読み込まれます。

5. 動的リストでの検索

フォーム上にある動的リストにより、表示されたデータを対話的に検索する機能が提供されます。 検索は、検索バー、検索ダイアログ、現在の値の検索、検索履歴の使用、および期間の設定 (ドキュメントを表示する動的リストの場合) のツールを使用して実行できます。 検索結果は限られたレコードのセットです
動的リスト (利用可能なリストから このユーザーに) 検索条件に一致します。
動的リストの検索機能を制御するテーブル プロパティが 3 つあります。 コントロールされたフォーム、動的リストを表示します。
● 検索文字列の位置 – 検索文字列の位置を決定します。 次の値を取得できます: Auto、Command Bar、None、Top、Bottom。


米。 4. 動的リスト内の文字列を検索する

このプロパティの値がコマンド パネルに設定されている場合、検索文字列はフォーム コマンド パネル (動的リストがメイン フォーム属性の場合)、または動的リストに関連付けられたコマンド パネルに表示されます。 コマンド バーに配置された検索バーは、常にコマンド バーの右端に (検索バーの右側にあるボタンとともに) 押されます。
このプロパティが [いいえ] に設定されている場合、検索文字列はフォーム上に表示されず、入力を開始すると、 検索文字列ダイアログが開きます。
このプロパティが Top に設定されている場合、検索バーはリスト コマンド バーと動的リストを表示するテーブルの間に配置されます。 このプロパティが Bottom に設定されている場合、検索文字列は動的リストを表示するテーブルの直後に配置されます。


● [互換モード] プロパティが [使用しない] に設定されている場合、またはバージョン 8.3.4 より古い場合 – 値はコマンド パネルです。
次のように検索行に移動します。
● Ctrl+F キーの組み合わせを押す。
● マウス。
● 動的リストへの入力を開始するとき (動的リストの SearchOnTyping プロパティの値を考慮します)。
● ビュー ステートの位置 - ビュー ステートが表示される場所、つまり検索されたフィールドと値を説明します。
あらゆる分野で探求されました。 次の値を取得できます: Auto、None、Top、Bottom


米。 5. 動的リストでの検索状態

このプロパティが No に設定されている場合、ビューステートはフォーム上に表示されません。 これにより、「検索キャンセル」ボタンの有無だけで検索が完了したか否かを判断できるようになります。
このプロパティが Top に設定されている場合、ビュー ステートはリスト コマンド バーと動的リストを表示するテーブルの間に配置されます。 このプロパティが Bottom に設定されている場合、ビューステートは動的リストを表示するテーブルの直後に配置されます。
フォームが 1C:Enterprise バージョン 8.3.4 以前で作成された場合、プロパティは No に設定されます。 フォームが 1C:Enterprise バージョン 8.3.5 以前で作成された場合、プロパティは Auto に設定されます。 この場合の不動産の実質価値は次のように決定されます。
● [互換モード] プロパティがバージョン 8.3.4 (およびそれ以前) に設定されている場合、値は [いいえ] です。
● [互換モード] プロパティが [使用しない] に設定されている場合、またはバージョン 8.3.4 より古い場合 – 値 Top;
● 検索コントロールの位置 – 検索コントロール ボタンが表示される場所を決定します。 このボタンを押すと、次の情報を含むメニューが開きます: コマンド 現在値による検索、高度な検索、検索のキャンセル、期間の設定 (文書およびジャーナル リストの場合)、および検索クエリ履歴 (最後の 5 つのクエリ)。 このプロパティには次の値を指定できます: Auto、None、Command パネル。


米。 6. 動的リストでの検索の管理

このプロパティが [いいえ] に設定されている場合、検索コントロール ボタンはフォーム上に表示されません (ただし、コマンドは [その他] メニューを使用して使用できます)。 コマンド バー プロパティ値は、動的リストを表示するテーブルに関連付けられたコマンド バーにボタンを配置します。
フォームが 1C:Enterprise バージョン 8.3.4 以前で作成された場合、プロパティは No に設定されます。 フォームが 1C:Enterprise バージョン 8.3.5 以前で作成された場合、プロパティは Auto に設定されます。 この場合の不動産の実質価値は次のように決定されます。
● [互換モード] プロパティがバージョン 8.3.4 (およびそれ以前) に設定されている場合、値は [いいえ] です。
● [互換モード] プロパティが [使用しない] に設定されている、またはバージョン 8.3.4 より古い場合 – 値はコマンド パネルです。
フォーム上に複数のコマンド パネルがあり、コマンドのソースが管理フォームの 1 つのテーブル (動的リスト データを表示) である場合、検索行と検索コントロール ボタンは 1 つのコマンド パネルにのみ配置されます。
● または動的リスト自体のコマンド バー (オートコンプリートが有効になっている場合)
● または、残りのコマンド パネルのいずれかで。

動的リストで検索を使用する機能を見てみましょう。
● 検索を使いやすくするには (パフォーマンスの観点も含めて)、動的リストのメイン テーブルとして使用できるすべての設定オブジェクトに対して全文検索を有効にする必要があります。 また、全文検索には、動的リストに表示され、検索が必要な構成オブジェクトの詳細がすべて含まれている必要があります。
オブジェクトが全文検索から除外されている場合、問題の検索メカニズムは機能しますが、そのような検索のパフォーマンスは非常に低くなります。 全文検索でインデックスが作成されていないオブジェクトに対して検索を使用することはお勧めできません。
● アプリケーション ソリューションには次のものが必要です。 ルーチンタスク、全文検索インデックスを定期的に更新します。

● 検索は動的リスト (および構成オブジェクト) のすべての列に対して実行されるのではなく、テーブルに表示されている列に対してのみ実行されます。
● 任意の表現を持つ参照型のフィールドによる動的リスト内の検索は、目的に使用されるフィールドによって実行されます。
代表形成(ここを参照)。 ビューに含まれるフィールドは、対応するオブジェクトの ViewFieldGettingProcessing() ハンドラーを考慮して取得されます。
● メインテーブルが指定された動的リストの場合、メインテーブルに対して全文検索が使用されます。 メイン テーブルのインデックスのないリンクはすべて、全文検索結果に追加されます。 メイン テーブルの全文検索の結果は、キー フィールドに基づく選択として使用されます。 全文検索は、他のテーブルからリストに表示されているフィールドに対しても実行されます (フィールドおよび構成オブジェクトに対して全文検索が使用されている場合)。 全文検索が有効になっていない場合、データは
見つかりましたが、検索自体は非常に遅くなります。
全文検索時にエラーが発生した場合は、全文検索を適用せずに検索が行われます。
たとえば、これは 1 つの文字を検索するときに発生する可能性があります。 多数のの行 情報ベース、この手紙から始まります。
● 比較タイプが等しい選択が動的リストのメインテーブルのフィールドに使用されている場合、全文検索を実行すると、 検索クエリ選択値はこのテーブルから追加されます。
● 検索文字列は単語に分割されます。 この分割は次のルールに従って実行されます。
● スペースとタブ文字を区切り文字として改行します。
● 次に、結果として得られる各フラグメントが処理されます。
● フラグメントが現在のセッション ロケールに基づいた日付表現 (時間の有無にかかわらず) である場合、単語はフラグメントです。
● それ以外の場合、フラグメントは文字「,.-/\」を区切り文字として使用してさらに分割されます。 この場合、結果として得られる文字列の各フラグメントが単語として扱われます。

● 各単語に対して、独自の条件セットが形成され、「OR」で結合されます。 この一連の条件は、このフィールドの取得元であるテーブル内の特定の単語の全文検索で少なくとも 1 つのオブジェクトが返された場合、またはこのフィールドに対して全文検索が使用されなかった場合に生成されます。 条件は次のように形成されます。
● 文字列型のフィールドの場合、条件は FieldName LIKE %Word% です。
● Number 型のフィールドの場合、条件は FieldName=Value の形式になります。Value は Number 型に変換された単語です。 キャストが実行できない場合、フィールド検索は実行されません。
● 単語は、現在のセッションに定義されているデフォルトのブール表現の部分文字列として検索されます。 検索語がビューで見つかった場合は、その語が見つかったビューに対応する値を検索します。 この場合、検索では、Format フォーム要素プロパティを使用して指定されたビューは使用されません。
● Date タイプのフィールドの場合、条件は FieldName>=StartofDay(Word) ANDFieldName のようになります。<=КонецДня(Слово). Если Слово подобно дате, в которой год
1 桁または 2 桁で指定すると、年が現在の世紀に短縮され、その値が検索条件に追加されます。
● 参照フィールドの場合、参照ビューの形成に使用されるフィールドに対して検索が実行されます。 これらの各フィールドで検索
上記のルールに従って実行されます。 検索では、カスタム データ表現の形成に使用されるフィールドは使用されません。
各単語の条件を「AND」で結合します。
● 先頭にゼロを含む値の場合、先頭にゼロを含む文字列、または先頭にゼロを含まない指定された文字列のいずれかを検索できます。
● 動的リストに文書のリストまたは文書履歴が表示される場合、指定したリスト表示間隔は、目的の動的リストの表示ステータスを表示するために予約されているフォームの領域にも表示されます。
● 現在値による検索コマンドは、ダイナミックリストのメインテーブルが選択基準の場合には使用できません。
● 見つかった文字列の断片は、表に表示されるときに強調表示されます。
● 1 つの列に対してサポートされる検索文字列は 1 つだけです。 すでに検索されている列に新しい検索クエリを追加すると、2 つの検索クエリが加算されるのではなく、検索式が置き換えられます。
● フォームに、動的リストを表示するテーブルに関連付けられたフォーム検索文字列表示のフォーム要素の追加 (フォーム要素の追加 Source プロパティ) がない場合は、Ctrl+F キーの組み合わせを押すと検索ダイアログが開きます。


米。 7. 検索ダイアログ

フォームに、動的リストを表示するテーブルに関連付けられたフォーム検索文字列表示のフォーム要素の追加 (フォーム要素の追加 Source プロパティ) が含まれる場合、検索ダイアログを開くには、高度な検索コマンドを使用する必要があります。
● 検索ダイアログを使用するときは、次の点に注意してください。
● キーボード ショートカットを使用して検索ダイアログを開くと、現在のセルの値が検索対象行に表示され、検索方法スイッチの値が完全一致に設定されます。

● 動的リストに検索文字列を直接入力して検索ダイアログを開くと、「検索方法」スイッチの値が文字列の「By」部分に設定され、入力されたテキストは「What」に入力されます。検索フィールドへ。

6. 動的リストで表示されるデータの取得

動的リストを使用する場合、適用される選択と検索を考慮して、動的リストによって現在表示されているデータに対してさまざまなアクションを実行する必要がある場合があります。 このようなアクションには、表示された情報の処理 (選択したドキュメントの再送信や選択したオブジェクトの詳細の設定など)、使用可能なオブジェクトのリスト (デザインなどを含む) の生成 (印刷またはスプレッドシート ドキュメントへの保存など) が含まれます。
動的リストによって表示されるデータを取得するには、GetExecutableDataCompositionSchema() と
GetExecutableDataCompositionSettings()。
データ受信例:

スキーマ = Elements.List.GetExecutableDataCompositionSchema();
設定 = Items.List.GetExecutableDataCompositionSettings();
LayoutLinker = newDataCompositionLayoutLinker();
LayoutLayout = LayoutComposer.Execute(スキーム, 設定);
構成プロセッサ = newDataCompositionProcessor;
LayoutProcessor.Initialize(LayoutLayout);
OutputProcessor = 新しい OutputProcessorDataCompositionResultInTabularDocument;
ReturnOutputProcessor.Output(CompositionProcessor);

値コレクション (テーブルまたは値のリスト) へのデータの取得は、同じ方法で行われます。
この方法で動的リスト データを取得するには、アプリケーション ソリューションを開発するときに考慮する必要がある機能が多数あります。
● 次のテーブル デザインはサポートされていません。
● 交互の線の色。
● ヘッダー画像。
● 地下室の写真。
● フッターの背景色。
● フッターのテキストの色。
● フッターのフォント。
● 地下室での水平位置。
● パスワードモード。
● 管理フォームに指定された条件付き外観はサポートされていません。
● リンク型のフィールドによって階層テーブルを昇順に並べる場合、空のリンクを含むレコードが常に最初に配置されます。

構成を最終決定する過程で、すべての 1C プログラマは動的リストに遭遇します。
動的リストは、データベース オブジェクトまたは非オブジェクト データ (レジスタ エントリ) のさまざまなリストを表示するために使用されるインターフェイス オブジェクトです。
たとえば、項目のリストを表示するために動的リストが使用されます。

動的リストの機能を実証するために、外部処理を作成し、メイン フォームを追加しましょう。 「動的リスト」タイプの新しい属性をフォームに追加してみましょう。 そのプロパティにアクセスして、そこに何があるか見てみましょう。
「カスタムリクエスト」プロパティに興味があります。 これを有効にすると、動的リストのすべての機能が表示されます。 1C: エンタープライズ システム クエリ言語のほぼすべての機能を使用してリクエストを作成できるようになります。 チェックボックスをオンにして、「開く」リンクをクリックします。

デフォルトでは、リストにはすべての倉庫の合計残高を含むアイテムのリストが表示されます。 このようなリストを実装するには、次のクエリを追加します。


メインテーブルとして「Directory.Nomenclature」を選択します。これにより、命名規則のリストと同様に、ディレクトリ要素を追加、変更、削除対象としてマークするなど、動的リストを操作できるようになります。 また、メイン テーブルをインストールすると、データを動的に読み取ることが可能になります。これは、必要に応じて部分的に選択が行われることを意味します。
次に、リストのフォーム要素を作成する必要があります。

この形式で処理を実行しようとすると、エラーが発生します。


これを解消するには、「Period」パラメータの値を設定する必要があります。 これを行うには、動的リストの「Parameters」コレクションの「SetParameterValue」メソッドを使用できます。 このメソッドは 2 つのパラメータを取ります。
。 「パラメータ」 - タイプ: 文字列。 DataCompositionパラメータ。 値を設定するパラメータまたはデータ構成パラメータの名前。
。 「値」 - タイプ: 任意。 設定する値。
次のフォームの「OnCreateOnServer」ハンドラーで呼び出すことができます。

ご質問がありますか、またはコンサルタントの助けが必要ですか?


当社はユーザーに残高の受け取り期間を変更する機会を提供します。 これを行うには、属性とそれに関連付けられた「日付」フォーム要素を追加します。


「Date」フォーム要素の「OnChange」ハンドラーで、「SetParameterValue」メソッドを呼び出し、関連付けられた属性の値を値として渡します。 同様にフォームの「サーバー上作成時」の手順を変更してみましょう。 このメソッドはクライアントで使用できるため、サーバーを呼び出す必要はありません。


これで、日付が変わると残高が自動的に更新されます。




ユーザーが現在の残高または予定入金のいずれかを確認したいと仮定します。 実装オプションの 1 つを検討してみましょう。 ブール型フォーム属性と関連するスイッチを追加しましょう。


スイッチの値を変更すると、リクエストのテキストも変更されます。 これを行うには、「受入時の数量の表示」フォーム要素の「変更時」イベント ハンドラーを使用します。 属性の値に応じて、動的リストの「QueryText」プロパティを変更する必要があります。 このプロパティはクライアントでは使用できないため、サーバー プロシージャを呼び出す必要があります。


変更の結果: