コンピューター ウィンドウズ インターネット

Chromeでは、このモードでモーダルウィンドウを使用することは禁止されています。 「このモードでのモーダルウィンドウの使用が禁止されている」場合の対処方法。 問題の正しい解決策

これらのコマンドの構文ヘルパーは、構成プロパティが 使用モードにインストールされています 使用禁止、次に、プログラムコードで他のコマンドを使用する必要があります。 ShowQuestion()、 ShowWarning(), ShowEnterNumbers():

これらの状況に対処するために、1C 8.3プログラムは、新しいシステムオブジェクト「アラートの説明」を提供します。これは、フォームのクローズやモードレスダイアログなどの予期されるイベントが発生したときにプログラムモジュールプロシージャの呼び出しを記述するために使用されます。

これは、根本原因に対処したい人のための「内側から」の問題の考察です。 主に1Cプログラマー向け。 この状況で、一般ユーザーが詳細を説明せずにエラーを修正する方法 プログラムコード? 非常に簡単な方法があります。

一般ユーザー向けのエラー訂正手順

手順1.作業を完了します。

ステップ2.スタートメニューに戻り、構成を起動します。 メニュー項目「構成」を選択します。

ステップ3.「Configurator」を開きます。トップパネルに「Configuration」ボタンがあり、提案されたリストで「Openconfiguration」メニューを選択します。

ステップ4.構成にカーソルを置き、右クリックして呼び出します コンテキストメニュー、アイテム「プロパティ」を選択します。

手順5. [プロパティ]フォームを開きます。

ステップ6.「モダリティの使用モード」(リストの下部)の行を見つけます。

デフォルトでは、1C8.3プログラムは「使用しない」に設定されています。 「使用しない」という値を「使用する」という値に変換します。

結果:

1C 8.3の「このモードでのモーダルウィンドウの使用は禁止されています」というエラーがなくなった場合は、さらに作業を進めることができます。 これは通常起こることです。

ただし、これらすべてのアクションを実行した後も1Cのモダリティエラーが残る場合は、1Cプログラムを保守およびサポートしているプログラマーに連絡する必要があります。

「タクシー」インターフェースでの作業方法、「自分で」職場をカスタマイズする方法、お気に入りナビゲーションバーをカスタマイズする方法、全文検索の実行方法、雑誌の操作方法、ドキュメントの「選択」ボタン、転送新しいインターフェースのドキュメント、検証、その他の機能へのリンクの一覧-これらすべてを私たちのビデオから学ぶことができます:

新しいTAXIインターフェイスを使用して1C8.3プログラムを介してナビゲーションを正確かつ迅速に整理する方法、組み込みの計算機、カレンダー、ファイル比較、同僚へのドキュメントへのリンクの転送など、使い慣れたツールを使用する新しい可能性についての詳細、コース「」をご覧ください


この記事を評価してください:

レッスンを完了する過程でそのようなエラーが発生した場合、それを修正するのは非常に簡単です。

構成ツールに戻り、「構成」->「構成を開く」メニュー項目を選択します。

開いたウィンドウで、をクリックします 右クリック[構成]項目で、ドロップダウンメニューから[プロパティ]項目を選択します。

構成プロパティを含むウィンドウが開きます(右側)。

一番下までスクロールして、そこにある「モダリティの使用モード」項目を見つけます。

その値をに設定します "使用する":

注意!最初のレッスン(後のバージョン)でダウンロードしたものとは異なる1Cプラットフォームを使用している場合は、「同期呼び出しの使用モード...」フィールドも表示されることに注意してください。 また、「使用」に設定する必要があります。

最後に、[構成]-> [構成の保存]メニュー項目を選択します。

準備! これで、エラーは発生しなくなります。

以下の説明は、私たちが行ったことに興味のある方を対象としています。

構成でモダリティを使用するモードを有効にしました。 デフォルトでは、このモードは無効になっており、EnterNumber、EnterString、EnterDate、OpenValueなどのコマンドを使用できません。

重要なのは、これらのコマンドはモーダルであるということです。 それらを呼び出すと、ユーザーの前にウィンドウが表示され(たとえば、情報を入力するため)、ウィンドウが閉じられるまでプログラムを操作できなくなります。

また、Webブラウザを介して1Cを操作する場合、このようなウィンドウの存在は非常に望ましくないため、新しい構成を開発する場合、モダリティモードはデフォルトで無効になっています。

インターネットでの作業用に設計されていない教育的な例を書いているので、安全に含めることができます。

この記事では、1C:Enterpriseプラットフォームでモダリティを放棄する主な理由と、コードセクションを新しい非同期モデルに変換する主な方法について説明します。

適用性

この記事では、ビジネスロジックを構築する非同期モデル、追加されたプラットフォーム「1C:Enterprise」バージョン8.3について説明します。 提供される情報は、現在のプラットフォームリリースに関連しています。

1C:Enterprise8.3プラットフォームでのモーダルウィンドウの使用の拒否

1C:Enterprise 8プラットフォームで構成を開発する場合、ユーザーが決定を下すか何らかのアクションを実行するまで、プログラムの操作を時々中断する必要があります。

たとえば、ボタンをクリックして表形式のセクションに入力する場合、以前に入力したデータが失われないように、表形式のセクションをクリアする必要があるかどうかをユーザーに尋ねる必要があります。

この動作は、たとえば、次のコードによって提供できます。

&OnClient
手順 FillProducts(指示 )
回答=質問(「テーブルセクションはクリアされます。続行しますか?」、 対話モードの質問はいいいえ);
回答=の場合 ダイアログリターンコードはいそれで
//充填アルゴリズム
EndIf;
手順の終了

このコードの作業の結果、プログラムコードの実行が一時停止され、質問が画面に表示され、質問のダイアログに加えて、アプリケーションインターフェイスにアクセスできなくなり、システムが待機します。ユーザーによる決定の場合、コードの実行は質問への回答後にのみ続行されます。

また、OpenModal()メソッドを呼び出してモーダルウィンドウを開くと、コードの実行が停止され、インターフェイスがブロックされます。

ブラウザを介してWebクライアントモードで構成を操作すると、この場合は新しいウィンドウが開きます。ポップアップウィンドウは、現在のタブだけでなく、残りを含むブラウザインターフェイス全体もブロックします。 開いているウィンドウとタブ。

インターネット上のポップアップは、不要な広告を悪意を持って配布するためによく使用されます。そのため、ブラウザにはポップアップブロック機能が含まれています。

この場合、ブラウザーを介して1C:Enterprise 8構成を操作するには、ポップアップウィンドウのブロックを無効にする必要があります。

作業中にも問題が発生します モバイルデバイス..。 たとえば、モーダルはiPadではサポートされていません。

これらの問題を解決するには、モーダルウィンドウの代わりにブロッキングウィンドウを使用する必要があります。 ユーザーにとって、視覚的にはすべてが同じように見えます。ウィンドウがWebクライアントインターフェイスをブロックします。

ただし、ブロックウィンドウはメインウィンドウ上に「描画」され、構成が開いている現在のブラウザタブのみがブロックされ、モーダルブラウザウィンドウが使用されないため、他のタブに切り替えることができます。 。

したがって、ブラウザのポップアップウィンドウが開かず、モバイルデバイスのWebクライアントを介して機能することが保証されます。

ルート構成要素には、構成でモーダルウィンドウを開くことができるかどうかを決定するプロパティ「モダリティ使用モード」があります。

「使用」オプションを選択すると、モーダルウィンドウを開くことができます。 「使用しない」オプションを選択すると、モーダルは無効になります。 モーダルウィンドウを開くメソッドを呼び出そうとすると、システムは次のエラーメッセージを表示します。

「モダリティ使用モード」プロパティのこの値では、ブロックウィンドウのみが許可されます。

[警告とともに使用]オプションが選択されている場合、モーダルウィンドウを開くと、メッセージウィンドウに次のテキストが表示されます。

この作業の変形は、モーダルウィンドウの使用を拒否するために構成を再作業するときの中間作業として使用できます。

ブロッキングウィンドウとモーダルウィンドウの主な違いは、ブロッキングウィンドウを開いてもコードの実行が一時停止しないことです。

したがって、開発者はこの機能を念頭に置いてモーダルを使用するコードを書き直す必要があります。

コードは2つの部分に分割する必要があります。

  • ブロッキングウィンドウを開く。
  • ユーザー選択の処理。

記事の冒頭にあるコードスニペットは、次のように書き直す必要があります。

&OnClient
手順 FillProducts(指示 )
アラート=新規 説明アラート(、ThisObject);

対話モードの質問はいいいえ);
手順の終了
&OnClient
手順(結果、 追加オプション) 書き出す
結果=の場合 ダイアログリターンコードはいそれで
//充填アルゴリズム
EndIf;
手順の終了

ShowQuestion()プロシージャを実行した後、システムは停止せず、ユーザーが応答するのを待って、コードは実行を継続します。

ユーザーは、手順全体を完了した後にのみ選択を行うことができます。 これにより、エクスポートプロシージャFillProductsQuestionCompletion()が呼び出されます。 その名前をAlertDescriptionオブジェクトコンストラクターに渡しました。

選択後に呼び出されるプロシージャは、フォームモジュール、コマンドモジュール、一般的な非グローバルモジュールにあります。

上記の例では、呼び出されたプロシージャはマネージドフォームモジュールにあるため、thisObjectをパラメータに渡しました。

共通モジュールにあるプロシージャの呼び出しについて考えてみます。 これを行うには、新しいを追加します 共通モジュール ProcessingNotificationsにフラグ「クライアント(管理対象アプリケーション)」を設定し、フラグ「グローバル」を設定しないでください。 このモジュールにFillProductsQuestionCompletion()プロシージャを配置します。

次に、fillコマンドハンドラーは次のようになります。

&OnClient
手順 FillProducts(指示 )
アラート=新規 説明アラート(「FillProductsQuestionFinishing」,
通知の処理);
QuestionText = "テーブルセクションがクリアされます。 続行?" ;
質問を表示(アラート、質問テキスト、 対話モードの質問はいいいえ);
手順の終了

ブロッキングウィンドウを開くメソッドを呼び出した後、プロシージャを完了する必要があります。さらに実行されるコードは、ウィンドウを閉じた後に呼び出されるプロシージャ内に配置する必要があります。

モーダルウィンドウを開くプロシージャから閉じたときに呼び出されるプロシージャにコンテキスト(補助データ、一部のパラメータ、変数値)を転送するために、オブジェクトコンストラクタの3番目のオプションパラメータDescriptionNotifications-AdditionalParametersが提供されています。

このオブジェクト(任意のタイプ)は、最後のパラメーターとしてAlertDescriptionで説明されているプロシージャに渡されます。

上記のコードセクションの例を使用すると、これは次のように実行できます。

&OnClient
手順 FillProducts(指示 )
パラメータ1 = 0;
パラメータ2 = 0;
パラメータリスト=新しい構造(「Parameter1、Parameter2」、Parameter1、Parameter2);
アラート=新規 説明アラート(「FillProductsQuestionFinishing」、ThisObject、
パラメータリスト);
ShowQuestion(アラート、「テーブルセクションがクリアされます。続行しますか?」、
対話モードの質問はいいいえ);
手順の終了
&OnClient
手順 FillProductsQuestionFinishing(結果 、 追加オプション) 書き出す
結果=の場合 ダイアログリターンコードはいそれで
//AdditionalParameters.Parameter1を解析します
//AdditionalParameters.Parameter2を解析します
EndIf;
手順の終了

1つの値のみを渡す必要がある場合、構造体は使用できませんが、この値をオブジェクトコンストラクターDescriptionAlertsのAdditionalParametersパラメーターに割り当てます。

ブロッキングウィンドウを操作するいくつかの例を見てみましょう。

タスク1.別のフォームを開く

ドキュメントフォームから[パラメータを開く]ボタンをクリックしてフォームを開く必要があります。このフォームには、ユーザーが設定する必要のある2つのチェックボックスParameter1とParameter2があります。 フォームを閉じた後、パラメータ値をメッセージ行に出力します。

一般的なフォーム「ParametersForm」を作成します。このフォームに、パラメーターParameter1とParameter2、およびCloseFormコマンドを配置します。

コマンドハンドラは次のようになります。

コマンドハンドラは次のようになります:&OnClient
プロシージャCloseForm(コマンド)
パラメータリスト=新しい構造( 「パラメータ1、パラメータ2」、Parameter1、Parameter2);
選ぶ ( パラメータリスト); 手順の終了

フォームの場合、WindowOpeningModeプロパティを「インターフェイス全体をロックする」に設定します。

ドキュメントフォームに、OpenParametersコマンドを配置します。そのハンドラーは次のように記述されています。

&OnClient
手順 OpenParameters(指示 )
アラート=新規 説明アラート(「OpenParametersCompletion」、ThisObject);
OpenForm( 「GeneralForm.ParameterForm」、、、、、、 通知);
手順の終了
&OnClient
手順 OpenParametersCompletion(結果 、 追加オプション) 書き出す
TypeZnch(Result)= Type( "Structure")の場合Then
結果サイクルからの各キー値について
メッセージ=新規 ユーザーへのメッセージ;
Message.Text =“ Key:“” "+ KeyValue.Key +" ""、値= "
+ キーバリュー。バリュー;
Message.Inform();
サイクルの終わり;
EndIf;
手順の終了

ユーザーモードで、Webクライアントで構成を実行すると、次の作業結果が得られます。

画像をクリックすると拡大します。

ウィンドウを開くモードは、OpenFormプロシージャの最後のパラメータで指定することもできます。

&OnClient
手順 OpenParameters(指示 )
アラート=新規 説明アラート(「OpenParametersCompletion」、ThisObject);
OpenForm( 「GeneralForm.ParameterForm」、、、、、、、アラート、
ModeOpenWindowForms.LockAllInterface
);
手順の終了

タスク2.フォームを閉じるときの質問

処理ウィンドウを閉じるときは、本当にウィンドウを閉じたいかどうかをユーザーに確認してください。

このタスクは、処理フォームモジュールにある次のコードを使用して解決できます。

&OnClient
変化する NeedCloseForm;
&OnClient
BeforeCloseプロシージャ(免責事項、 標準処理)
そうでない場合 NeedCloseForm= True Then
拒否=真;
アラート=新規 説明アラート(「BeforeCloseCompletion」、ThisObject);
ShowQuestion(アラート、「ウィンドウを閉じてもよろしいですか?」、
対話モードの質問はいいいえ
);
EndIf;
手順の終了
&OnClient
手順 BeforeCloseCompletion(結果 、 追加オプション) 書き出す
結果=の場合 ダイアログリターンコードはいそれで
NeedCloseForm= True;
選ぶ ();
さもないと
NeedCloseForm=未定義;
EndIf;
手順の終了

手順では、フォームを閉じる前に、ユーザーに質問をし、拒否フラグをTrueに設定して、フォームを閉じます。

質問に対する肯定的な回答の後、変数MustCloseFormがTrueに設定され、フォームが再び閉じられます。

タスク3.数値の入力

処理フォームのボタンをクリックすると、番号を入力するための標準ダイアログが開きます。

これを行うには、NumberEnter()の代わりにShowNumberEnter()メソッドを使用します。これにより、モーダルウィンドウの代わりにブロッキングウィンドウが開きます。

&OnClient
番号入力手順(コマンド)
アラート=新規 説明アラート(「EnterNumberCompletion」、ThisObject);
ShowEnterNumbers(アナウンス、0、「金額を入力してください」、15、3);
手順の終了
&OnClient
手順 EnterNumbersCompletion(結果 、 追加オプション) 書き出す

メッセージ=新規 ユーザーへのメッセージ;
Message.Text = "数量を入力しました" +結果;
Message.Inform();
EndIf;
手順の終了

数値を入力するためのウィンドウを閉じた後、プロシージャが呼び出されます。その最初のパラメータには、入力された数値、またはユーザーが入力を拒否した場合は未定義の値が渡されます。

タスク4.色の選択

標準の色選択ダイアログを使用して処理フォームのボタンをクリックすると、ユーザーは必要な色を指定します。 この色を、押したボタンの背景に設定します。

次のハンドラーを使用して、SelectColorコマンドをフォームに追加します。

&OnClient
色選択手順(コマンド)
DialogueSelectColors=新規 DialogueSelectColors;
アラート=新規 説明アラート(「SelectColorCompletion」、ThisObject);
DialogueSelectColors。表示(通知);
手順の終了
&OnClient
手順 ChoiceColorsCompletion(結果 、 追加オプション) 書き出す
NOT結果=未定義の場合Then
Elements.Color.ColorBackground=結果;
EndIf;
手順の終了

ColorSelectDialogueオブジェクト(およびStandardPeriodEdit Dialogue、FormatStringコンストラクター、RegularJobScheduleDialogue、FontSelection Dialogue)の場合、Show()メソッドはブロッキングウィンドウを開きます。

ウィンドウが閉じられた後、プロシージャが呼び出され、その最初のパラメータに選択された値(色、フォントなど)が渡されるか、ユーザーが選択をキャンセルした場合は未定義の値が渡されます。

FileSelectDialogオブジェクトには、色やフォントの選択ダイアログとは異なり、Show()メソッドがないことに注意してください。これらのダイアログの実装は大幅に異なるためです。

Webクライアントでファイル選択ダイアログを使用するには、最初にファイル拡張子を接続する必要があります。

ファイル拡張子を介して実装されたダイアログは、ブラウザのモーダルウィンドウなどの操作で問題を引き起こさないため、FileChoiceDialogオブジェクトのブロックウィンドウを開くことは実装されていません。

結論として、リリース8.3.10以降、モーダルウィンドウのサポートはWebクライアントで廃止されたことに注意してください。 この場合、構成でモーダルメソッドが呼び出されると、例外がスローされます。 また、Webクライアントでは、インターフェイスモードのサポートは終了しました。 別のウィンドウで..。 さらに、シンクライアントとWebクライアントの両方で別のウィンドウでフォームを開くことはできなくなりました(ブックマークインターフェイスモードで作業している場合)。 このような抜本的な手順により、最近のすべてのブラウザでサポートされなくなったインターフェイスモードを廃止することが可能になりました。

この情報からどのような実際的な結論を引き出すことができますか? そして結論は非常に単純です-何らかの理由でモーダル呼び出しがまだ構成に存在する場合、エラーメッセージを含むウィンドウがWebクライアントのこれらの場所に表示されます。 この問題の迅速な解決策を「グーグル」しようとする試みに対して警告したいと思います。 アドバイスの大部分は次のレシピに帰着します。構成レベルのコンフィギュレーターで、「モダリティ使用モード」プロパティを「使用」値に設定します。 当然、 この瞬間、それは理由だけでは機能しません 最新のブラウザモーダルコールはサポートされなくなりました。

そして、上記の問題を解決する方法は2つしかありません。

  1. プラットフォームをリリース8.3.10+(8.3.11)にアップグレードし、構成プロパティ「互換モード」を「使用しない」に設定し、モーダルメソッドを使用するコードフラグメントをビジネスロジックを構築するための非同期モデルに書き換えます。
  2. モーダルコールがまだサポートされている古いブラウザを使用するようにクライアントに推奨します( Mozilla Firefoxバージョン37以下、Chromeバージョン37以下など)。

ちなみに、リリース8.3.11以降、MicrosoftWebブラウザはサポートされなくなりました インターネットエクスプローラバージョン8および9。

モダリティに照らしてWebブラウザーを使用して、私たちは理解しました。今度は、残りのクライアントとの状況を明確にするときです。

バージョン8.3.5以降、シンクライアントとシッククライアントのプロパティ「モダリティ使用モード」は、/ EnableCheckModalコマンドラインパラメーターが指定されている場合にのみ考慮されます。 このパラメータは自動的にに置き換えられます コマンドライン configuratorからアプリケーションを起動する場合のみ。 このパラメーターが指定されていない場合、例外は生成されず、対応する警告は表示されません。 それらの。 実際には、シッククライアントとシンクライアントを使用する場合、モダリティモードを使用しても、作業に根本的な変化は見られません。モーダル呼び出しは、Webクライアントの場合と同様に、警告を表示することなく、以前と同じように機能します。

「i」にドットを付けるために、バージョン8.3.9以降、シッククライアントは構成プロパティ「プラットフォーム拡張機能と外部コンポーネントへの同期呼び出しを使用するモード」を無視しますが、対応する同期メソッドは例外をスローしたり警告を表示したりすることなく機能することに注意してください。 。 指定された無視されたプロパティは、Webブラウザーでファイルを操作するための外部コンポーネント、暗号化、および拡張機能との非同期作業をサポートするためにリビジョン8.3.5で追加されました。 グーグルクローム..。 これがファットクライアントとは何の関係もないことは明らかです。したがって、このプロパティを「サイレント」に無視すると、構成を使用するときに同期メソッドを使用する際の不要なチェックが不要になります。

ところで! プラットフォームが自信を持ってWebに移行しているため、バージョン8.3.8以降、開発者は、シッククライアントとシンクライアントで実行されるフォームまたはアプリケーションを閉じるロジックに関連するプログラムコードに特定の制限を導入しました。 このニュアンスについて詳しく説明している記事を必ずお読みください。 さらに、「1Cでのインターフェースとフォームの専門能力開発:エンタープライズ8.3」のコースには、モダリティの拒否に関する章があり、このトピックに関する多くの有用で関連性のある情報を得ることができます。

同僚の皆さん、際限なく読むことができるものが2つあります。それは、VKontakteフィードと、プラットフォームの次のリリースでの変更点のリストです。要約しましょう;)

同期モデルの要素から非同期モデルに移動できる例を検討する過程で、一般的なケースではより多くのコードがあることにすでに気付いたでしょう。 コードが多いほど、メンテナンスとデバッグの複雑さが増します。

さらに、開発プロセスでより多くのダイアログを使用すると、コードの量がさらに増加し​​ます。 したがって、Webクライアントでの作業に焦点を当てたアプリケーションソリューションを開発するプロセスでは、最新のWebアプリケーションで現在使用されている作業のパラダイムについて覚えておく必要があります。 したがって、構成にユーザーとの対話型ダイアログが多数あり、警告が発行されている場合は、ユーザーの対話を整理する他のアプローチを優先して、この機能を改訂することは理にかなっています。

結論の代わりに

これで、「1C開発の第一歩」というサイクルが終わりました。 全体を読んだ場合は、プラットフォームが最近開発されている飛躍的な進歩にすでに気付いている可能性があります。 このサイクルの資料は比較的最近書かれたものですが、真剣に更新する必要がありました。 こんなに短い時間でも、たくさんの新しい重要な 機能性と変更します。 このような大きな変更は、1Cプログラマーが常にプラットフォームを使用して専門的に成長および開発していない場合、多少当惑する可能性があります。

専門のインターネットリソースでは、初心者プログラマーやその成熟した同僚からのリクエストを読んで、1Cプラットフォームの広大で時には無限の可能性を理解するのに役立つ資料についてアドバイスすることができます。 伝統的に、プログラミングコースに注意を払うことをお勧めします

14
エンタープライズを通常または管理対象アプリケーションで強制的に起動するには、次のキーを使用します。/RunModeOrdinaryApplicationは、構成設定と...に関係なく、シッククライアントを通常モードで起動します。 3
ユーザーが自分用に構成されたインターフェースを変更できないようにする必要があります。 解決策:これを無効にするには、ルート構成要素のアクセス権の「ユーザーデータの保存」権限を削除する必要があります。 ..。 2
現在の作業では、ユーザーは通常、いくつかのオブジェクトを開きます。 ドキュメント、参考書、レポートなどがあります。 以前のインターフェースでは、開いているオブジェクトをすばやく見つけて更新するのに問題はありませんでした... 2
前回の記事:1Cへのアドレス分類子(KLADR)のインストールでは、Kladrとは何か、およびそれを1Cの通常の形式(8.0-8.2)にロードする方法について説明しました。 この記事では、アドレス分類子(KLADR)を...にロードする方法を紹介します。 2
多くの場合、特定の構成を開発するとき、ユーザーは写真をディレクトリアイテムに添付して、データベースに保存したいと考えます。 この記事では、建設オブジェクトを参考書に接続する方法を説明します...

1Cプラットフォームではバージョン8.3が登場しました 新しい体制プログラムの作業-モダリティを使用せずに。 より正確には、2つの新しいモードが登場しました。モダリティを使用せず、モダリティを使用しますが、警告があります。 また、古い動作モードには、モダリティの使用方法が示されています。

これはどういう意味ですか?プラットフォームの初期バージョンでは、さまざまなモーダルウィンドウを使用していましたが、実際には考えていませんでした。 たとえば、ユーザーに警告を表示したり、質問したり、値を入力したり、ファイルを選択したりする必要があります。 これらはすべてモーダルウィンドウです。

モーダルとはどういう意味ですか?つまり、このウィンドウが呼び出されると、他のすべてのウィンドウとオーバーラップします。つまり、このウィンドウが一番上に表示され、このウィンドウでの作業が終了するまで、他のウィンドウでの作業がブロックされます。 ウィンドウをブロックすることに加えて、コードの実行はこのウィンドウが呼び出された場所で正確に停止し、コード実行の継続はそのようなウィンドウを閉じた後にのみ実行されます。 実行が停止した場所から。 期間を選択するためのフォームを呼び出す例によって、モーダルウィンドウの呼び出しを説明します。

&OnClient

StandardProcessing = False;




If Dialog.Edit()Then //モーダルフォームを呼び出します。 コード実行の継続は、フォームが閉じられた後にのみ発生します。
Elements.Services.CurrentData.StartDate = Dialog.Period.StartDate;
Elements.Services.CurrentData.EndDate = Dialogue.Period.EndDate;
EndIf;

手順の終了


ご覧のとおり、期間を選択するためのモーダルウィンドウの呼び出しを処理するには、1つの手順で十分です。

なぜモーダルは悪いのですか?ここで、1Cがモーダルウィンドウの使用をやめることにした理由を理解しましょう。 まず第一に、これは1Cプラットフォームが通常の形式(デスクトップアプリケーションの形式)で使用できるだけでなく、ブラウザーで起動したり、形式で起動したりできるという事実の結果です。モバイルアプリケーションの。

ブラウザの問題点は次のとおりです。 それらのウィンドウのモダリティは、ポップアップの個別のブラウザウィンドウを使用して実装されます。 それらはほとんどすべてのブラウザでサポートされていますが、広告のためにそのようなウィンドウを頻繁に使用するため、ほとんどすべてのブラウザ開発者はそれらに苦労し、デフォルトでそのようなウィンドウの使用を無効にします。 その結果、1cユーザーがブラウザーで作業できるようにするには、これらのウィンドウを許可し、1cとブラウザーのすべての微妙な点に専念し、通常は不要な情報で過負荷になるように強制する必要があります。

のブラウザとの別のニュアンス タブレットコンピューターと電話用のブラウザ。 ほとんどの場合、これらのブラウザはポップアップをサポートしていません。 ポップアップウィンドウを備えたこのようなデバイスのインターフェイス(モニターおよび入力デバイス)には互換性がありません。

そして最後に モバイルアプリ 1Cはまた、モーダルウィンドウとの友好的な関係ではありません。

したがって、結論:モーダルは使用しないでください。 そして、それらの代わりに何を使用するのですか? 代わりに、同じウィンドウを使用する必要がありますが、モダリティモードはありません。 新しいプラットフォームでは、1Cはウィンドウごとにこのようなモードも開発しました。 これは、ダイアログごとに個別のメソッドとして実装されます。 このモードでは、ウィンドウを呼び出すことはできますが、プログラムコードの実行を停止することはできません。 技術的にはブラウザでは、これは親ウィンドウ内に表示されるが、それと重なる疑似ウィンドウとして実装されます。 ウィンドウが開いた後もコードが実行され続けるという事実は、ウィンドウがコードを呼び出した直後に、コードで選択された値を取得できないことを意味します。 それらはまだ選択されていません。 したがって、これらの値の受信と処理は、そのようなウィンドウが閉じられたときに呼び出される別のプロシージャで実行され、このプロシージャはウィンドウを開くためのメソッドが呼び出されたときに指定されます。 期間を選択するための同じウィンドウの例を見てみましょう。

&OnClient
Service ProcedureStartDateSelectionStart(Item、SelectionData、StandardProcessing)

StandardProcessing = False;

Dialog = New EditStandardPeriod Dialogue();
StandardPeriod =新しいStandardPeriod();

StartDate = Items.Services.CurrentData.StartDate;
EndDate = Items.Services.CurrentData.EndDate;

StandardPeriod.StartDate = StartDate;
StandardPeriod.EndDate = EndDate;
Dialogue.Period = StandardPeriod;

AlertDescription =新しいAlertDescription( "PeriodSelectionProcessing"、ThisForm);

Dialogue.Show(アラートの説明)

手順の終了

&OnClient
処理手順期間(期間、パラメータ)の選択エクスポート

期間の場合<>未定義の場合

Items.Services.CurrentData.StartDate = Period.StartDate;
Items.Services.CurrentData.EndDate = Period.EndDate;

EndIf;

手順の終了


ご覧のとおり、Edit()の代わりにShow()が呼び出されます。 そして、選択イベントの処理はすでに別の手順にあります。

そこで、モダリティなしで行う方法を考え出しました。 ここで、警告付きのモダリティを使用するモードが何であるかを理解しましょう。 実際、これはそのような過渡的な体制です。 モダリティを使用せずにモードの構成全体をやり直す時間がまだないが、すでにこれに取り組んでいる場合。 また、モーダルウィンドウが呼び出されるたびに、プログラムは、このモードでモーダルウィンドウを呼び出すことは望ましくないことを警告します。

さて、私たちはモダリティを放棄し、ブラウザやモバイルコンピュータでの1C作業のための新しいテクノロジーを習得します。