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

1秒でセーフモードを無効にする方法8.3。 パベルはきれいです。 外部治療のためのセーフモード

実際、クライアントサーバーバージョンの1C操作を使用する場合、外部処理/レポートはセーフモードで開かれ、特権モードの使用は禁止されています。 また、特権モードは、印刷されたフォームの作成、さまざまなサービスチェック(交換の登録)などの一般的な構成で非常に頻繁に使用されます。 その結果、フォームなしでACSの通常のレポートを使用し(デフォルトでは、一般的な「レポートフォーム」フォームが使用されます)、カスタムレポート設定を(対応する参照に)保存しても、不十分なアクセスに関するエラーが表示されます。行の後のサービス目的で使用されるさまざまな定数およびセッションパラメータに対する権利 SetPrivilegedMode(True);

「正しい」解決策は、セーフモードを無効にするか、アクセス許可を追加して、BSPの「追加のレポートと処理」のメカニズムを介して外部プロセッサとレポートを接続することです(私の意見では、BSPバージョン2.2.2.1から)。 しかし、何らかの理由で正確に使用する必要がある場合 外部ファイルレポート/処理では、特定のセーフモードセキュリティプロファイルとして使用されるクラスターセキュリティプロファイルを構成できます 情報ベース.

このオプションは好ましくないことをすぐに指摘したいと思いますが、さまざまな状況により、このような単純化された形式で使用できます。 たとえば、私はさまざまな都市にいくつかの拠点を持っています。一般的なローカルは、厳密に制限された権利で座り、USBを閉じています。どこかで、Accounting 2.0を使用し、どこかで3.0では、フォームなしでACSを使用してほとんどすべてのレポートを作成します。両方のバージョンで開かれました。 これらすべてのレポートを 異なるバージョンさまざまな拠点は、骨の折れる絶望的なビジネスです、tk。 計画には、単一の構成とベースへの移行が含まれます...

プロファイルを作成します。
クラスタコンソールで、フラグを設定するセキュリティプロファイルを作成します 「セーフモードのセキュリティプロファイルとして使用できます」および「下」が許可されます 全権アクセス:" 「特権モードへ」。

レポートや簡単な処理を使用する多くの場合、この方法が適用できます。 より複雑な状況では、プロセスを説明することは意味がありません。 ドキュメントに記載されています(ハッシュを指定することで特定の外部ファイルのセキュリティプロファイルをカスタマイズする機能など)。

追伸 セキュリティプロファイルは、CORPレベルのプラットフォームとサーバーのライセンスを使用する場合にのみ機能すると思いましたが、この機能は1C:Enterprise 8.3プラットフォームでも実行されます(条件付きで、一般的な構成と同様にPROFを呼び出すことができますBasic / PROF / CORP )

印刷(Ctrl + P)

構成オブジェクト

サーバーで「信頼性の低い」プログラムコードを使用する必要がある場合:外部処理または プログラムコード Run()メソッドとEvaluate()メソッドで使用するためにユーザーが入力すると、セーフモードの操作を使用できます。

セーフモードの場合:

  • 特権モード キャンセル.
  • 特権モードに入る 無視されます.
  • 禁止されています 1Cに関連する外部資金の使用につながる操作:エンタープライズプラットフォーム(上記の方法の非ブロッキング類似物を含む):
  • COMメカニズム:
    • COMオブジェクト();
    • GetCOMObject();
    • ラッパーHTMLDocument.GetCOMObject()。
  • 外部コンポーネントのロード:
    • ExternalComponentをロードします();
    • 外部コンポーネントを接続します()。
  • へのアクセス ファイルシステム:
    • ValueInFile();
    • CopyFile();
    • CombineFiles();
    • MoveFile();
    • SplitFile();
    • CreateDirectory();
    • DeleteFiles();
    • 新しいファイル;
    • 新しいxBase;
    • HTMLWrite.OpenFile();
    • HTML.OpenFileの読み取り();
    • XML.OpenFile();を読み取ります。
    • XMLWrite.OpenFile();
    • ReadingFastInfoset.OpenFile();
    • WriteFastInfoset.OpenFile();
    • CanonicalXMLWriter.OpenFile();
    • ConversionXSL.LoadFromFile();
    • WriteZipFile.Open();
    • ZipFile.Openの読み取り();
    • NewTextReader()、最初のパラメーターが文字列の場合。
    • 最初のパラメータが文字列の場合はReadText.Open()。
    • NewWriteText()、最初のパラメーターが文字列の場合。
    • WriteText.Open()、最初のパラメーターが文字列の場合。
    • NewExtractText();
    • RetrieveText.FileNameプロパティを変更します。
    • ExtractText.Write();
    • 新しい画像()、最初のパラメータが文字列の場合。
    • Picture.Write();
    • 新しいBinaryData();
    • BinaryData.Write();
    • NewDataWrite()、最初のパラメーターが文字列の場合。
    • NewReaderData()、最初のパラメーター(文字列)があります。
    • FileStreamManagerオブジェクトのすべてのメソッド。
    • 新しいFileStream();
    • FormattedDocument.Write();
    • GeographicSchema.Read();
    • GeographicSchema.Record();
    • GeographicSchema.Print();
    • TabularDocument.Read();
    • TabularDocument.Write();
    • TabularDocument.Print(); GraphicSchema.Read();
    • GraphicalScheme.Write();
    • GraphicalScheme.Print();
    • TextDocument.Read();
    • TextDocument.Write()。
  • インターネット・アクセス:
    • 新しいInternetConnection、
    • 新しいインターネットメール、
    • 新しいInternetProxy、
    • 新しいHTTPConnection、
    • 新しいFTPConnection。

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

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

失敗の数は、シャットダウンの数と同じである必要があります。 ただし、手順または関数内でセーフモードが(1回以上)オンにされたが、オフにされなかった場合、システムは、手順または機能で不完全なターンオンがあった回数だけ自動的にシャットダウンします。放棄された。

プロシージャまたは関数がメソッドを呼び出す場合 セーフモードの設定(False)メソッド呼び出し以上のことを行う セーフモードの設定(True)その後、例外がスローされます。

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

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

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

また、埋め込み言語からセーフモードを無効にするオプションも提供します(切断が試行されるプログラムコードが構成拡張機能にない場合)。 セーフモードを無効にするには、次の方法を使用します セーフモードを無効に設定()..。 セーフモードが設定されていることを確認します この瞬間無効にすると(自動的に、またはメソッドを呼び出すことにより)、メソッドを使用できます GetDisableSafeMode()。

単一の埋め込み言語メソッド内で、セーフモードの設定(SetSafeMode()メソッドの呼び出しによる)とセーフモードの無効化の設定(メタデータオブジェクトイベントハンドラーの期間中、またはSetDisableSafeModeの呼び出しによる)に複数のネストレベルを設定することはできません。 () 方法)。 ネストを増やしようとすると、例外がスローされます。

//正しい使用手順ProcedureName()SetSafeModeDisable(True); セーフモードを設定(True); セーフモード(False)を設定します。 セーフモードを無効(False)に設定します。 EndProcedure //誤った使用ProcedureProcedureName()SetSafeModeDisable(True); セーフモードを設定(True); セーフモードを無効(False)に設定します。 //例外EndProcedureプロシージャProcedureName()SetSafeMode(True); セーフモードを無効(False)に設定します。 //例外EndProcedure

外部処理は、タイプがタイプのExternalProcessingグローバルコンテキストオブジェクトを使用してプログラムで開かれます。 ExternalProcessingManager..。 1Cプラットフォームの各動作モード(通常のアプリケーションモードとマネージドアプリケーションモード)では、さまざまなオブジェクトメソッドを使用して外部処理を処理します。

通常のアプリケーションモードで外部処理を開始します

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


処理= ExternalProcessing.Create(FullFileName);
Processing.GetForm()。Open();

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

管理対象アプリケーションモードで外部処理を開始する

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

&サーバー上
GetExternalProcessingName関数(BinaryData)
AddressToTemporaryStorage = PutToTemporalStore(BinaryData);
ExternalProcessing.Connect(AddressInTemporaryStorage);を返します。
EndFunction

&OnClient
FullFileName = ""; //外部処理ファイルのフルネーム。
FileData = New BinaryData(FullFileName);
ExternalProcessingName = GetExternalProcessingName(FileData);
OpenForm( "ExternalProcessing。" + ExternalProcessingName + ".Form");

外部治療のためのセーフモード

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

外部プロセッサと同様に、プログラムで外部レポートを開く場合は、タイプがタイプの外部レポートグローバルコンテキストオブジェクトのみを使用する必要があります。 ExternalReportManager.