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

1c 外部処理セーフ モード。 セーフモードが設定されています。 操作は禁止されています。 通常のアプリケーションモードで外部処理を実行する

プログラムによる外部処理のオープンは、次のタイプを持つグローバル コンテキスト オブジェクト ExternalProcessing を使用して実行されます。 外部処理マネージャー。 1C プラットフォームの各動作モード (通常のアプリケーション モードとマネージド アプリケーション モード) では、外部処理を処理するために異なるオブジェクト メソッドが使用されます。

通常のアプリケーションモードで外部処理を実行する

一般的なアプリケーションでは、外部処理ファイルの完全名が渡される、ExternalProcessing オブジェクトの Create() メソッドを使用する必要があります。 このメソッドは次のタイプのオブジェクトを返します。 外部処理、このオブジェクトは開かれている外部処理です。 外部処理フォームを開く必要がある場合は、受信したオブジェクトに対して GetForm() メソッドを呼び出します。これによりメイン フォームが返され、Open() メソッドを呼び出してフォームを開きます。


処理 = 外部処理.Create(完全ファイル名);
Processing.GetForm().Open();

外部処理では、メイン フォームは常に通常のフォームであり、制御フォームは常に追加のフォームである必要があります。そうしないと、GetForm() メソッドは通常のアプリケーション モードで機能しません。

マネージド アプリケーション モードでの外部処理の実行

マネージド フォーム モードでは、アルゴリズムは実行コンテキストによって分割されます。 クライアントでは、外部処理ファイルの完全名を使用してバイナリ データを受け取ります。 受信したバイナリデータをサーバーに転送し、一時保管します。 次に、一時記憶域のアドレスが渡される、ExternalProcessing オブジェクトの Connect() メソッドを呼び出す必要があります。 このメソッドは、接続されている外部プロセスの名前を返します。 外部処理の名前をクライアントに返し、処理フォームへの文字列パスを作成し、OpenForm() メソッドを使用して外部処理フォームを開きます。

サーバー上(&O)
関数 Get外部処理名(BinaryData)
AddressInTemporaryStorage = PlaceInTemporaryStorage(BinaryData);
外部処理.Connect(一時ストレージ内のアドレス); を返します。
エンドファンクション

&OnClient
フルファイル名 = ""; // 外部処理ファイルのフルネーム。
FileData = 新しい BinaryData(FullFileName);
外部処理名 = Get外部処理名(ファイルデータ);
OpenForm("外部処理." + 外部処理名 + ".フォーム");

外部処理のためのセーフモード

ExternalProcessing オブジェクトの Create() メソッドと Connect() メソッドには、外部処理をセーフ モードで接続することを示す受信パラメータ SafeMode があります。 パラメータが指定されていない場合、接続はセキュア モードで行われます。
セーフ モードは、サーバー上で「信頼できない」プログラム コードが実行されないようにシステムを保護するように設計されています。 潜在的な危険は、Run() および Calculate() メソッドで使用するためにユーザーが入力した外部処理またはプログラム コードから発生します。
セーフ モードには次の制限があります。
  • 特権モードがインストールされている場合は、特権モードがキャンセルされます。
  • 特権モードに入ろうとしても無視されます。
  • COM オブジェクトの操作は禁止されています。
  • 外部コンポーネントのロードおよび接続は禁止されています。
  • ファイル システムへのアクセスは禁止されています (一時ファイルを除く)。
  • インターネットへのアクセスは禁止されています。
対話的に開かれたプロセスはセーフ モードでは実行されないため、外部プロセッサをセーフ モードで開くためのメカニズムと、ユーザーが外部プロセッサを対話的に開くことを禁止するアクセス許可レベルを実装することをお勧めします。
処理の対話的オープンを禁止するには、ユーザに割り当てられたすべてのロールにおいて、「外部処理の対話的オープン」権限を削除する必要があります(図1参照)。
図 1. 外部処理/レポートを対話的に開く権限
「外部処理を対話的に開く」権限は、外部処理オブジェクトにはまったく影響しません。

外部レポートをプログラムで開くことは外部処理と似ていますが、次のタイプを持つグローバル コンテキスト オブジェクト ExternalReports を使用する必要があります。 外部レポートマネージャー.

印刷 (Ctrl+P)

構成オブジェクト

サーバー上で「信頼できない」プログラム コード (外部処理、または Run() および Calculate() メソッドで使用するためにユーザーが入力したプログラム コード) を使用する必要がある場合は、安全なオペレーティング モードを使用できます。

セーフモードでは:

  • 特権モード キャンセル.
  • 特権モードへの切り替え 無視されました.
  • 禁止 1C:Enterprise プラットフォームに関連した外部手段の使用につながる操作 (指定されたメソッドの非ブロッキング類似物を含む):
  • COM メカニズム:
    • COMObject();
    • GetCOMObject();
    • WrapperHTMLDocument.GetCOMObject()。
  • 外部コンポーネントのロード:
    • Load外部コンポーネント();
    • ConnectExternalComponent()。
  • ファイル システム アクセス:
    • ValueInFile();
    • CopyFile();
    • MergeFiles();
    • MoveFile();
    • SplitFile();
    • CreateDirectory();
    • 削除ファイル();
    • 新しいファイル;
    • 新しい xBase;
    • EntryHTML.OpenFile();
    • ReadHTML.OpenFile();
    • ReadXML.OpenFile();
    • WriteXML.OpenFile();
    • ReadingFastInfoset.OpenFile();
    • RecordFastInfoset.OpenFile();
    • CanonicalXMLRecord.OpenFile();
    • TransformXSL.LoadFromFile();
    • WriteZipFile.Open();
    • ReadingZipFile.Open();
    • New ReadText() (最初のパラメータが文字列の場合)。
    • ReadText.Open()、最初のパラメータが文字列の場合。
    • NewTextRecord()、最初のパラメータが文字列の場合。
    • WriteText.Open()、最初のパラメータが文字列の場合。
    • NewTextExtract();
    • ExtractText.FileName プロパティを変更します。
    • ExtractText.Write();
    • New Picture()、最初のパラメータが文字列の場合。
    • Picture.Write();
    • 新しいBinaryData();
    • BinaryData.Write();
    • NewDataRecord()、最初のパラメータが文字列の場合。
    • 新しい ReadData() には、最初のパラメータである文字列があります。
    • FileStreamManager オブジェクトのすべてのメソッド。
    • 新しい FileStream();
    • FormattedDocument.Write();
    • GeographicScheme.Read();
    • GeographicScheme.Write();
    • GeographicScheme.Print();
    • TabularDocument.Read();
    • TabularDocument.Write();
    • TabularDocument.Print(); GraphicScheme.Read();
    • GraphicScheme.Write();
    • GraphicScheme.Print();
    • TextDocument.Read();
    • TextDocument.Write()。
  • インターネット・アクセス:
    • 新しいインターネット接続、
    • 新しいインターネットメール、
    • 新しいインターネットプロキシ、
    • 新しいHTTP接続、
    • 新しい FTP 接続。

注意! 禁止された操作を実行すると、実行時に例外がスローされます。

注記。 ユーザーが管理者アクセス権を持っていない場合、[ファイル] - [開く] メニューを使用して開かれた外部レポートと処理はセーフ モードで実行されます。

セーフ モードをオンにする回数は、オフにする回数と一致する必要があります。 ただし、プロシージャまたは関数内でセーフ モードが (1 回以上) オンになったがオフにされなかった場合、プロシージャまたは関数内でセーフ モードが不完全にオンになった回数だけシステムが自動的にシャットダウンします。

プロシージャまたは関数内でメソッドを呼び出す場合 SetSafeMode(False)メソッド呼び出し以上のことが行われました SetSafeMode(True)の場合、例外がスローされます。

構成開発者が信頼性を保証できないサードパーティ製の (構成に関連する) プログラム コードを使用する場合、セーフ モードのソフトウェア インストールが必要になる場合があります。 このようなコードの例としては、実行可能コードが外部から取得される場合の Execute() メソッドと Compute() メソッドの実行があります。 この場合、次のメソッドを実行する前にセーフ モードを設定することをお勧めします。

// 実行する必要があるプログラム コードが生成されます // コードが外部ソースからロードされる可能性があります // または手動で入力される ExecutableCode = GetExecutedCodeFromExternalWorld(); // セーフ モードを有効にする SetSafeMode(True); // 潜在的に危険なコードを実行します Execute(ExecutableCode); // セーフ モードをオフにする SetSafeMode(False);

場合によっては、セーフ モードの設定が特権モードの設定と競合することがあります。 このような競合の例としては、セーフ モードで実行される組み込み言語のコードから、[投稿時の特権モード] プロパティが設定されているドキュメントが投稿される場合があります。 この場合、特権モードは無効になり、特権モードを有効にしようとしても無視されます。 その結果、有効な特権モードを「考慮」する埋め込み言語のコードが特権モードの不在に「遭遇」し、その出現理由が明らかではないエラーが発生します。 この状況を防ぐために、1C:Enterprise システムは、組み込み言語の実行可能コードが構成拡張機能に配置されていない場合、オブジェクト モジュールまたはマネージャー モジュールで使用可能なイベント ハンドラーのセーフ モードを自動的に無効にします。 このようなハンドラーは、構文アシスタントで特別な方法でマークされます。

また、組み込み言語からセーフ モードを無効にする機能も提供します (無効にしようとしているプログラム コードが構成拡張機能にない場合)。 セーフモードを無効にする方法があります SetDisableSafeMode()。 次のメソッドを使用して、セーフ モードが現在 (自動的に、またはメソッドの呼び出しによって) 無効になっていることを確認できます。 GetDisableSafeMode()。

組み込み言語の 1 つのメソッド内で、セーフ モードの設定 (SetSafeMode() メソッドの呼び出しによる) とセーフ モードの無効化の設定 (メタデータ オブジェクト イベントの実行中に自動的に) を複数レベルのネストにすることはできません。ハンドラーを使用するか、SetSafeModeDisable() メソッドを呼び出します)。 ネストを増やそうとすると、例外がスローされます。

// ProcedureProcedureName() の正しい使用方法 SetDisableSafeMode(True); SetSafeMode(true); SetSafeMode(False); SetDisableSafeMode(False); EndProcedure // ProcedureProcedureName() の誤った使用 SetDisableSafeMode(True); SetSafeMode(true); SetDisableSafeMode(False); // 例外 EndProcedure ProcedureProcedureName() SetSafeMode(True); SetDisableSafeMode(False); // 例外 EndProcedure

プログラムによる外部処理のオープンは、次のタイプを持つグローバル コンテキスト オブジェクト ExternalProcessing を使用して実行されます。 外部処理マネージャー。 1C プラットフォームの各動作モード (通常のアプリケーション モードとマネージド アプリケーション モード) では、外部処理を処理するために異なるオブジェクト メソッドが使用されます。

通常のアプリケーションモードで外部処理を実行する

一般的なアプリケーションでは、外部処理ファイルの完全名が渡される、ExternalProcessing オブジェクトの Create() メソッドを使用する必要があります。 このメソッドは次のタイプのオブジェクトを返します。 外部処理、このオブジェクトは開かれている外部処理です。 外部処理フォームを開く必要がある場合は、受信したオブジェクトに対して GetForm() メソッドを呼び出します。これによりメイン フォームが返され、Open() メソッドを呼び出してフォームを開きます。


処理 = 外部処理.Create(完全ファイル名);
Processing.GetForm().Open();

外部処理では、メイン フォームは常に通常のフォームであり、制御フォームは常に追加のフォームである必要があります。そうしないと、GetForm() メソッドは通常のアプリケーション モードで機能しません。

マネージド アプリケーション モードでの外部処理の実行

マネージド フォーム モードでは、アルゴリズムは実行コンテキストによって分割されます。 クライアントでは、外部処理ファイルの完全名を使用してバイナリ データを受け取ります。 受信したバイナリデータをサーバーに転送し、一時保管します。 次に、一時記憶域のアドレスが渡される、ExternalProcessing オブジェクトの Connect() メソッドを呼び出す必要があります。 このメソッドは、接続されている外部プロセスの名前を返します。 外部処理の名前をクライアントに返し、処理フォームへの文字列パスを作成し、OpenForm() メソッドを使用して外部処理フォームを開きます。

サーバー上(&O)
関数 Get外部処理名(BinaryData)
AddressInTemporaryStorage = PlaceInTemporaryStorage(BinaryData);
外部処理.Connect(一時ストレージ内のアドレス); を返します。
エンドファンクション

&OnClient
フルファイル名 = ""; // 外部処理ファイルのフルネーム。
FileData = 新しい BinaryData(FullFileName);
外部処理名 = Get外部処理名(ファイルデータ);
OpenForm("外部処理." + 外部処理名 + ".フォーム");

外部処理のためのセーフモード

ExternalProcessing オブジェクトの Create() メソッドと Connect() メソッドには、外部処理をセーフ モードで接続することを示す受信パラメータ SafeMode があります。 パラメータが指定されていない場合、接続はセキュア モードで行われます。
セーフ モードは、サーバー上で「信頼できない」プログラム コードが実行されないようにシステムを保護するように設計されています。 潜在的な危険は、Run() および Calculate() メソッドで使用するためにユーザーが入力した外部処理またはプログラム コードから発生します。
セーフ モードには次の制限があります。
  • 特権モードがインストールされている場合は、特権モードがキャンセルされます。
  • 特権モードに入ろうとしても無視されます。
  • COM オブジェクトの操作は禁止されています。
  • 外部コンポーネントのロードおよび接続は禁止されています。
  • ファイル システムへのアクセスは禁止されています (一時ファイルを除く)。
  • インターネットへのアクセスは禁止されています。
対話的に開かれたプロセスはセーフ モードでは実行されないため、外部プロセッサをセーフ モードで開くためのメカニズムと、ユーザーが外部プロセッサを対話的に開くことを禁止するアクセス許可レベルを実装することをお勧めします。
処理の対話的オープンを禁止するには、ユーザに割り当てられたすべてのロールにおいて、「外部処理の対話的オープン」権限を削除する必要があります(図1参照)。
図 1. 外部処理/レポートを対話的に開く権限
「外部処理を対話的に開く」権限は、外部処理オブジェクトにはまったく影響しません。

外部レポートをプログラムで開くことは外部処理と似ていますが、次のタイプを持つグローバル コンテキスト オブジェクト ExternalReports を使用する必要があります。 外部レポートマネージャー.

「Trade Management 11.3」を例として、外部印刷フォームを接続する簡単なプロセスを検討します。 新しいセキュリティシステムの特徴についても検討していきます。

速いパッセージ

事前の措置

まず最初にすべきことは、 機能を有効にするまたはその可用性を確認してください

1. 情報データベースに対する完全な権限でログインします。

2. メニュー「マスターデータと管理」/ブロック「管理」/コマンド「印刷フォーム、レポートおよび処理」に移動します。

追加

開いたセクションでは次のようになります。

「作成」ボタン(ここ重要)や「更新!」ボタンを使って処理を追加していきます。 既存:

  • リストからそれを選択します (選択されていないか空の場合、コマンドは機能しませんが、何も表示されません)。
  • 「ファイルからロード」ボタンをクリックします。

外部処理で 1C が登場した後、新しい構成でセキュリティ チェックが登場しました。

独自に作成された処理、または既知の通信チャネル (メールではなく、有効な証明書のある Web サイトからのみ、または開発者の従業員によって提供され、電話で確認されたもの) を通じて受信した処理のみをインストールする必要があります。

処理のすべてが開発者によって規定されている場合、「配置」が設定されます。つまり、処理に関係するオブジェクト、コマンドが表示されます。
作業するには、「保存して閉じる」をクリックするだけです。

検査

この直後、治療の種類に応じて次のようになります。

  • 印刷されたフォームは、文書を開いたとき、またはそのリストから (すでに開いている文書を再度開くとき)、「印刷」ボタンをクリックして利用できるようになります。
  • 処理は、各サブシステムの「追加処理」セクションで利用できます。
  • リストの「塗りつぶし」ボタンまたはオブジェクトフォームのメインコマンドパネルを使用した塗りつぶしの処理。

上記の処理では、起動は次のようになります。

ドキュメントが新しい場合は書き留める必要があり、外部処理メカニズムがこれについて警告します。

さらなる動作は組み込み機能によって異なります。フォームを開くことも、単にデータを処理することも可能です。

1C のセキュリティ警告

新しいプラットフォームのリリースと構成では、悪意のあるプログラムの起動に対する保護が強化されています。

処理により Excel が起動してロードされる場合があります。その場合、新しいセキュリティ サブシステムは次の警告も表示します。

この場合、ハンドラー コードは中断されます。

「はい」をクリックすると、システムはコマンドを再度実行するように求めます。

情報ベース ユーザーは、「コンフィギュレータ」を通じて危険なアクションからの保護を無効にすることができます。

これは「エンタープライズ」モードからは変更できません。おそらくこれは意図的に行われており、アップデート後に表示される可能性があります。

処理で Excel を使用する場合は、安全でないモードで実行する必要があることにも注意してください (これは新しいシステムの導入前に当てはまり、並列で動作します)。

「MS EXCEL をロードできません!!!」 「セーフモードが設定されました。 操作は禁止されています」

外部処理では次のようになります。

開発者は内部処理の説明でこれを「False」に設定する必要があります。そうすればすべてがうまくいきます。

関数 InformationOnExternalProcessing() ExportRegistrationParameters = 新しい構造体。 登録パラメータ.Insert("SafeMode", False);

構成を更新すると、構成ファイルの取得元に関する警告テキストも表示されます。