Maison / Tutoriels Windows / 1s 8.2 ne peut pas installer le mode sans échec. Le mode sans échec est activé. L'opération est interdite. Démarrage du traitement externe en mode application normal

1s 8.2 ne peut pas installer le mode sans échec. Le mode sans échec est activé. L'opération est interdite. Démarrage du traitement externe en mode application normal

Lorsque vous exécutez le programme de téléchargement de documents en tant qu'utilisateur normal, une erreur se produit "Le mode sans échec est défini. L'opération est interdite."

Cette difficulté vient du fait il n'y a pas assez de droits pour démarrer le traitement externe. Pour définir les droits d'accès, accédez à la base de données en mode 1C Enterprise au nom de administrateur et aller à la rubrique Paramètres d'utilisateur et de droits / Profils de groupe d'accès, Cliquez sur Pour créer un groupe.

Entrez le nom du groupe et cochez les cases à la disposition des utilisateurs ce groupe de rôles -

  • Ouverture interactive des rapports externes et traitement
  • Utilisation de rapports et traitement supplémentaires

Cliquez sur Ecrire et fermer


Retournez au menu Utilisateurs et sélectionnez un employé dans la liste qui travaillera avec le programme de téléchargement de documents. Cliquez sur Autorisations. Dans la liste des profils, marquez le profil créé précédemment. Cliquez sur brûler.


Pour que les utilisateurs puissent commencer le traitement, il est recommandé d'ajouter le téléchargement de documents à la liste des traitements externes. Pour ce faire, le menu Administration / Impression et traitement des formulaires / Rapports supplémentaires et traitement créer un nouveau traitement. Spécifiez le chemin d'accès au fichier "DocumentUpload.epf" et donnez-lui un nom. Spécifiez l'emplacement du traitement dans le menu, à partir duquel l'utilisateur peut le démarrer à l'avenir, par exemple, sélectionnez le menu Livres de référence

Cliquer sur un élément Accès rapide vous spécifiez pour quel utilisateur le traitement est disponible :


Après le réglage, cliquez sur Ecrire et fermer. Pour démarrer le traitement, les utilisateurs n'auront qu'à entrer de nouveau dans la base de données et l'ouvrir à partir du menu d'accès (dans l'exemple - Répertoires) et cliquer sur Courir.


Ouvert Menu - Toutes les fonctions... et recherchez l'option "Utiliser des profils de sécurité" dans la liste.


Il suffit de décocher l'option "Les profils de sécurité sont utilisés".


Après cela, le programme fonctionnera avec succès.

Découverte de logiciels le traitement externe est effectué à l'aide de l'objet de contexte global ExternalProcessing, qui a le type ExternalProcessingManagerExternalProcessingManager. Pour chaque mode de fonctionnement de la plate-forme 1C (mode application régulière et mode d'application gérée) sont utilisés diverses méthodes objet pour travailler avec un traitement externe.

Démarrage du traitement externe en mode application normal

Dans une application typique, vous devez utiliser la méthode Create() de l'objet ExternalProcessing, qui reçoit le nom complet du fichier externalprocessing. La méthode renvoie un objet de type TraitementExterne, cet objet est le traitement externe en cours d'ouverture. Si vous souhaitez ouvrir un formulaire de traitement externe, appelez la méthode GetForm() de l'objet reçu, qui renverra le formulaire principal, puis appelez la méthode Open() pour l'ouvrir.


Traitement = ExternalProcessings.Create(FullFileName);
Traitement.GetForm().Open();

Dans le traitement externe, le formulaire principal doit toujours être un formulaire normal et le formulaire géré doit toujours être un formulaire supplémentaire, sinon la méthode GetForm() ne fonctionnera pas en mode d'application normal.

Démarrer le traitement externe en mode application gérée

En mode formulaires gérés il y a une division de l'algorithme selon le contexte d'exécution. Sur le client, nous obtenons des données binaires par le nom complet du fichier de traitement externe. Nous transférons les données binaires reçues sur le serveur et les plaçons dans un stockage temporaire. Ensuite, vous devez appeler la méthode Connect() de l'objet ExternalProcessing, auquel l'adresse du stockage temporaire est transmise. La méthode renvoie le nom du traitement externe connecté. Nous renvoyons le nom du traitement externe sur le client, formons un chemin de chaîne vers le formulaire de traitement et utilisons la méthode OpenForm() pour ouvrir le formulaire de traitement externe.

&Sur le serveur
Fonction GetExternalProcessName(BinaryData)
AddressInTempStorage = PlaceInTempStorage(BinaryData);
Return ExternalProcessing.Connect(AddressInTempStorage);
EndFunctions

&ChezClient
NomFichierComplet = "" ; // Nom complet du fichier de traitement externe.
FileData = New BinaryData(FullFileName);
ExternalProcessingName = GetExternalProcessingName(FileData);
OuvreFormulaire("TraitementExterne." + NomTraitementExterne + ".Formulaire");

Mode sans échec pour le traitement externe

Les méthodes Create() et Connect() de l'objet ExternalProcessing ont un paramètre d'entrée SafeMode - un signe de connexion d'un traitement externe en mode sans échec. Si le paramètre n'est pas précisé, la connexion se fera en mode sécurisé.
Mode sans échec L'opération est conçue pour protéger le système contre l'exécution de code de programme "non approuvé" sur le serveur. Les dangers potentiels sont le traitement externe ou le code de programme entré par l'utilisateur pour une utilisation dans les méthodes Execute () et Calculate ().
Le mode sans échec a les restrictions suivantes :
  • le mode privilégié est annulé s'il a été activé ;
  • les tentatives d'accès au mode privilégié sont ignorées ;
  • les opérations avec des objets COM sont interdites ;
  • le chargement et la connexion de composants externes sont interdits ;
  • refusé l'accès à système de fichiers(sauf fichiers temporaires) ;
  • l'accès à Internet est interdit.
Les traitements ouverts de manière interactive ne sont pas exécutés en mode sans échec, il est donc recommandé de mettre en place le mécanisme d'ouverture des traitements externes en mode sans échec, ainsi que d'interdire à l'utilisateur d'ouvrir les traitements externes de manière interactive au niveau des droits.
Pour interdire l'ouverture interactive des traitements, dans tous les rôles attribués à l'utilisateur, il faut supprimer le droit "Ouverture interactive des traitements externes" (voir Figure 1).
Figure 1. Droits d'ouverture interactive de traitements/rapports externes
Le droit "Traitement externe ouvert de manière interactive" n'affecte en rien l'objet ExternalProcessing.

L'ouverture de rapports externes par programmation est similaire au traitement externe, mais vous devez utiliser l'objet de contexte global ExternalReports, qui est de type ExternalReportsManagerExternalReportsManager.

Avec la sortie de la plateforme le 8.3.9.2033, un nouveau mécanisme est apparu "Protection contre les actions dangereuses".

Grâce à cette innovation, 1C a maintenant commencé à jurer à l'ouverture du traitement (et pas seulement):

Avertissement de sécurité

Ouvre "Mes Traitements Externes" à partir du fichier "Mes_Traitements_Externes.epf"

Il est recommandé de prêter attention à la source d'où provient fichier donné. S'il n'y a pas d'accord avec la source sur le développement de modules supplémentaires, ou s'il y a des doutes sur le contenu du fichier, il n'est pas recommandé de l'ouvrir, car cela pourrait endommager l'ordinateur et les données.

Autoriser l'ouverture de ce fichier ?

1C a donc décidé de lutter contre les codes malveillants !

D'où viendra celui-ci ? code malicieux» à l'entreprise est encore un mystère)

Les activités potentiellement dangereuses comprennent :

  • Chargement d'un rapport externe, traitement ou extension de configuration.
  • Chargement ou mise à jour d'une configuration/extension.
  • Accès depuis un rapport/traitement ou extension externe aux fonctionnalités suivantes :
  • Exécution d'une commande du système d'exploitation.
  • Gestion des utilisateurs (enregistrement ou suppression des informations utilisateur base d'informations).
  • Appel de la méthode Connect() du gestionnaire de traitements externes (rapports).
  • Appel de la méthode ConfigurationExtension.Write().
  • Travailler avec des objets COM.

Comment ce "miracle" peut-il être désactivé ?

Pour ce faire, vous devez exécuter 1C Enterprise en mode configurateur.
Sélectionnez le menu "Administration" - "Utilisateurs".
Dans la fenêtre ouverte de nos utilisateurs, vous devez ouvrir la fenêtre des paramètres utilisateur et dans l'onglet "Général", supprimer l'oiseau "Protection contre les actions dangereuses"

Il existe d'autres moyens de désactiver cette option :

Implémentation de la possibilité de spécifier une liste d'infobases avec lesquelles la protection contre les actions dangereuses sera désactivée.
Par cette fonction Le paramètre DisableUnsafeActionProtection du fichier conf.cfg répond, ce qui vous permet de désactiver le mécanisme de protection contre les actions dangereuses pour tous les utilisateurs de certaines infobases dont les chaînes de connexion correspondent aux masques spécifiés dans le paramètre DisableUnsafeActionProtection.

À paramètre donné Vous pouvez spécifier plusieurs masques séparés par le symbole ";", par exemple :

DisableUnsafeActionProtection=test_.*;stage_.*;

De plus, la protection contre les actions dangereuses de l'utilisateur peut être désactivée par programmation, pour laquelle les paramètres et propriétés suivants sont disponibles :

  • Le paramètre ProtectionFromDangerousActions des méthodes Connect() des responsables de traitement externes (rapports)
  • La propriété SafeActionProtection de l'objet ConfigurationExtension avant d'appeler la méthode Write() de cet objet.

La vérification du besoin de protection contre les actions dangereuses s'effectue dans l'ordre suivant:

1. Si la case "Protection contre les actions dangereuses" est décochée pour l'utilisateur actuel, la protection est considérée comme désactivée.

2. Si la chaîne de connexion de l'infobase correspond à l'un des modèles spécifiés dans le paramètre DisableUnsafeActionProtection du fichier conf.cfg, la protection est alors considérée comme désactivée.

3. Si la protection est explicitement désactivée à l'aide du paramètre Protection contre les actions dangereuses d'un traitement ou d'un rapport externe.

4. Si la protection est explicitement désactivée à l'aide de la propriété d'extension ProtectionFromDangerousActions.

En utilisant l'exemple de Trade Management 11.3, nous allons considérer un processus simple de connexion d'un formulaire imprimé. Nous examinerons également les caractéristiques du nouveau système de sécurité.

Passage rapide

Actions préliminaires

Pour commencer, vous devriez activer la fonctionnalité ou vérifier la disponibilité

1. Nous allons sous tous les droits à l'infobase.

2. Allez dans le menu « NSI et administration » / Bloc « Administration » / Commande « Imprimer formulaires, rapports et traitement ».

Addenda

Dans la section ouverte :

Ajoutez le traitement par le bouton "Créer" (c'est important) ou "Mettre à jour!" existant:

  • Sélectionnez-le dans la liste (s'il n'est pas sélectionné ou vide, la commande ne fonctionnera pas, mais elle ne dira rien).
  • Cliquez sur le bouton "Charger à partir du fichier".

Après l'apparition de 1C dans le traitement externe, des contrôles de sécurité sont apparus dans de nouvelles configurations.

Vous ne devez installer que les traitements créés indépendamment ou reçus via des canaux de communication connus (pas par courrier, uniquement à partir d'un site avec un certificat valide, ou fourni par les employés du développeur, confirmé par lui par téléphone).

Si tout est écrit dans le traitement par le développeur, alors "Placement" sera défini - les objets dans lesquels le traitement sera impliqué, la ou les commandes apparaîtront.
Pour travailler, il suffira de cliquer sur "Enregistrer et fermer".

Examen

Immédiatement après, selon le type de traitement :

  • Le formulaire d'impression devient disponible à l'ouverture d'un document ou à partir de sa liste (pour un document déjà ouvert à la réouverture) en cliquant sur le bouton "Imprimer".
  • Les soins sont disponibles dans les rubriques " Traitement supplémentaire» dans chaque sous-système
  • Traitement du remplissage par le bouton "Remplir" de la liste ou du panneau de commande principal de la fiche objet.

Pour le traitement ci-dessus, le lancement ressemblera à ceci :

Si le document est nouveau, il doit être enregistré, le mécanisme de traitement externe vous en avertira :

En outre, le comportement dépend de la fonctionnalité inhérente : il est possible d'ouvrir un formulaire ou un simple traitement de données.

Avertissements de sécurité en 1C

Dans les nouvelles versions de la plateforme et des configurations, la protection contre le lancement de programmes malveillants a été renforcée.

Le traitement peut entraîner le démarrage d'Excel, auquel cas le nouveau sous-système de sécurité vous avertira également :

Dans ce cas, le code du gestionnaire est interrompu.

Si vous cliquez sur "Oui", le système vous demandera d'appeler à nouveau la commande :

Il est possible pour un utilisateur de l'infobase de désactiver la protection contre les actions dangereuses via le Configurateur :

Depuis le mode "Entreprise", cela ne peut pas être modifié, peut-être que cela a été fait exprès, cela peut apparaître après la mise à jour.

Il faut également noter que si le traitement utilise Excel, il doit démarrer en mode non sécurisé (c'était le cas avant la mise en place du nouveau système, cela fonctionne en parallèle) :

"Impossible de charger MS EXCEL !!!" "Le mode sans échec est activé. L'exploitation est interdite"

En traitement externe, cela ressemble à ceci :

Le développeur doit le mettre à "False" dans la description du traitement interne, alors tout ira bien :

ExternalProcessingDetails() ExportRegistrationParameters = Nouvelle structure ; RegistrationParameters.Insert("SafeMode", False);

Lors de la mise à jour de la configuration, il y avait également un texte d'avertissement sur la source à partir de laquelle le fichier de configuration a été obtenu :

Imprimer (Ctrl+P)

Objets de configuration

S'il est nécessaire d'utiliser du code de programme "non fiable" sur le serveur : traitement externe ou code de programme saisi par l'utilisateur pour une utilisation dans les méthodes Execute() et Calculate(), vous pouvez utiliser le mode de fonctionnement sans échec.

En mode sans échec :

  • Mode privilégié annulé.
  • Passage en mode privilégié ignoré.
  • Interdit opérations qui conduisent à l'utilisation d'outils externes en relation avec la plateforme 1C:Enterprise (y compris les analogues non bloquants des méthodes ci-dessus) :
  • Mécanismes COM :
    • COMObject();
    • GetCOMObject();
    • WrapperHTMLDocument.GetCOMObject().
  • Chargement des composants externes :
    • ChargerComposantExterne();
    • ConnectExternalComponent().
  • Accès au système de fichiers :
    • valeurVersFichier();
    • Copier un fichier();
    • FusionnerFichiers();
    • DéplaceFichier();
    • Diviser le fichier();
    • Créer un répertoire();
    • Supprimer les fichiers();
    • Nouveau fichier;
    • Nouvelle xBase ;
    • WriteHTML.OpenFile();
    • LectureHTML.OpenFile();
    • LectureXML.OpenFile();
    • WriteXML.OpenFile();
    • ReadFastInfoset.OpenFile();
    • WriteFastInfoset.OpenFile();
    • CanonicalWriterXML.OpenFile();
    • Transformation XSL.LoadFromFile();
    • WriteZipFile.Open();
    • ReadZipFile.Open();
    • NewTextReader() si le premier argument est une chaîne ;
    • ReadText.Open() si le premier paramètre est une chaîne ;
    • New TextWrite() si le premier paramètre est une chaîne ;
    • WriteText.Open() si le premier paramètre est une chaîne ;
    • Nouveau ExtractText();
    • modification de la propriété ExtractText.FileName ;
    • ExtractText.Write();
    • New Image() si le premier paramètre est une chaîne ;
    • Image.Record();
    • NouvelleDonnéeBinaire();
    • BinaryData.Write();
    • New DataWrite() si le premier paramètre est une chaîne ;
    • New DataRead(), le premier paramètre est une chaîne ;
    • toutes les méthodes de l'objet FileStreamManager ;
    • Nouveau FileStream();
    • FormattedDocument.Write();
    • SchémaGéographique.Lire();
    • GeographicScheme.Write();
    • GeographicScheme.Print();
    • TableurDocument.Lire();
    • TableurDocument.Write();
    • TableurDocument.Print(); GraphicScheme.Read();
    • GraphicScheme.Write();
    • GraphicScheme.Print();
    • TextDocument.Read();
    • TextDocument.Write().
  • Accès Internet:
    • Nouvelle connexion Internet,
    • Nouvelle messagerie Internet,
    • Nouveau proxy Internet,
    • Nouvelle connexion HTTP,
    • Nouvelle connexion FTP.

ATTENTION! Lève une exception lors de l'exécution d'opérations interdites lors de l'exécution.

Noter. Les états et traitements externes, ouverts à l'aide du menu Fichier - Ouvrir, sont exécutés en mode sans échec si l'utilisateur ne dispose pas des droits d'accès administrateur.

Le nombre d'activations du mode sans échec doit correspondre au nombre d'arrêts. Cependant, si le mode sans échec a été activé (une ou plusieurs fois) dans une procédure ou une fonction, mais qu'il n'a pas été désactivé, le système s'arrêtera automatiquement autant de fois qu'il y aura d'activations inachevées dans la procédure ou la fonction abandonnée.

Si, dans une procédure ou une fonction, la méthode appelle SetSafeMode(Faux) fait plus que des appels de méthode SetSafeMode (vrai), une exception sera levée.

L'installation par programmation du mode sans échec peut être requise lorsque le développeur de la configuration suppose l'utilisation d'un code de programme tiers (en relation avec la configuration), dont la fiabilité ne peut pas être garantie par le développeur. Un exemple d'un tel code est l'exécution des méthodes Execute() et Calculate() dans les cas où le code exécutable est reçu du monde extérieur. Dans ce cas, il est recommandé de définir le mode sans échec avant d'exécuter ces méthodes :

// Le code du programme est généré pour être exécuté // Il est possible que le code soit chargé depuis sources externes// ou saisi manuellement ExecutableCode = GetExecutableCodeFrom OutsideWorld(); // Activer le mode sans échec SetSafeMode(True); // Exécute un code potentiellement dangereux Execute(ExecutableCode); // Désactiver le mode sans échec SetSafeMode(False);

Dans certains cas, les paramètres du mode sans échec peuvent entrer en conflit avec les paramètres du mode privilégié. Un exemple d'un tel conflit est la publication d'un document dont la propriété Privileged Posting Mode est définie à partir du code 1C qui s'exécute en mode sans échec. Dans ce cas, le mode privilégié est désactivé et les tentatives d'activation sont ignorées. En conséquence, le code 1C:Enterprise qui "s'appuie" sur le mode privilégié activé "entre en collision" avec son absence, ce qui entraîne des erreurs avec des raisons non évidentes d'apparition. Pour éviter une telle situation, 1C:Enterprise désactive automatiquement le mode sans échec pour les gestionnaires d'événements disponibles dans un module objet ou un module gestionnaire, à condition que le code exécutable dans le langage 1C:Enterprise ne se trouve pas dans l'extension de configuration. Ces gestionnaires sont marqués dans l'assistant de syntaxe d'une manière spéciale.

Il offre également la possibilité de désactiver le mode sans échec à partir de la 1ère langue (si le code à partir duquel la désactivation est tentée n'est pas dans une extension de configuration). Méthode pour désactiver le mode sans échec SetDisableSafeMode(). Vérifiez que le mode sans échec est activé ce moment désactivé (automatiquement ou avec un appel de méthode), vous pouvez utiliser la méthode GetDisableSafeMode().

Dans une méthode 1C:1, il ne peut y avoir plus d'un niveau d'imbrication de définition du mode sans échec (en appelant la méthode SetSafeMode()) et de définition de la désactivation du mode sans échec (automatiquement au moment de l'exécution des gestionnaires d'événements d'objet de métadonnées ou en appelant la méthode méthode SetSafeModeDisable()). Lorsque vous essayez d'augmenter l'imbrication, une exception est levée :

// Procédure d'utilisation correcte ProcedureName() SetSafeModeDisable(True); SetSafeMode(True); SetSafeMode(Faux); SetSafeModeDisable(Faux); EndProcedure // Utilisation incorrecte Procedure ProcedureName() SetSafeModeDisable(True); SetSafeMode(True); SetSafeModeDisable(Faux); // Exception EndProcedure ProcedureProcedureName() SetSafeMode(True); SetSafeModeDisable(Faux); // Procédure de fin d'exception