Pavel Tjistov. Säkert driftläge 1c Säkert läge är inställt, drift är förbjuden

När du kör programmet Dokumentuppladdning som en vanlig användare visas felet "Säkert läge är inställt. Operationen är förbjuden."

Denna svårighet uppstår pga Det finns inte tillräckliga rättigheter för att starta extern behandling. För att konfigurera åtkomsträttigheter, logga in i databasen i 1C Enterprise-läge på uppdrag av Administratör och gå till avsnittet Användar- och rättighetsinställningar / Åtkomstgruppsprofiler, klick För att skapa en grupp.

Ange namnet på gruppen och markera rutorna för de roller som är tillgängliga för användare av denna grupp -

  • Interaktiv öppning av externa rapporter och bearbetning
  • Använda ytterligare rapporter och bearbetning

Klick Spara och stäng


Gå tillbaka till menyn Användare och välj från listan den medarbetare som ska arbeta med programmet Dokumentuppladdning. Klicka på Behörigheter. Välj den tidigare skapade profilen i listan över profiler. Klick Skriv ner.


För att användarna ska kunna börja bearbeta, rekommenderas det att lägga till Document Loading i listan över extern bearbetning. För att göra detta i menyn Administration / Tryckta blanketter och bearbetning / Ytterligare rapporter och bearbetning skapa en ny bearbetning. Ange sökvägen till filen "Download Documents.epf" och tilldela ett namn. Ange platsen för bearbetningen i menyn, varifrån användaren kan starta den senare, till exempel välj menyn Kataloger

Genom att klicka på objektet Snabbåtkomst anger du vilka användare som har tillgång till bearbetning:


Klicka på efter inställningen Spara och stäng. För att börja bearbeta behöver användare bara gå in i databasen igen och öppna den från åtkomstmenyn (i exemplet - Kataloger) och klicka på Kör.


Öppen Meny - Alla funktioner.... och hitta alternativet "Säkerhetsprofiler används" i listan.


Avmarkera bara alternativet "Säkerhetsprofiler används".


Efter detta kommer programmet att starta framgångsrikt.

Faktum är att när du använder klient-serverversionen av 1C, öppnas extern bearbetning/rapporter i säkert läge, där användning av privilegierat läge är förbjudet. Och det privilegierade läget används mycket ofta i typiska konfigurationer: generering av tryckta formulär, olika servicekontroller (registrering av utbyten), etc. Som ett resultat, även om du använder en vanlig rapport om åtkomstkontrollsystemet utan ett formulär (som standard används det allmänna formuläret "ReportForm") och sparar anpassade rapportinställningar (i motsvarande katalog), kommer du att få ett felmeddelande om otillräcklig åtkomst rättigheter till olika konstanter och sessionsparametrar som används för officiella ändamål efter raden SetPrivilegedMode(True) ;

Den "korrekta" lösningen skulle vara att koppla extern bearbetning och rapporter genom BSP:s mekanismer för "Ytterligare rapporter och bearbetning" med inaktivering av säkert läge eller lägga till behörigheter (enligt min mening, från BSP version 2.2.2.1). Men om det av någon anledning är nödvändigt att använda externa rapporterings-/bearbetningsfiler, kan du konfigurera en klustersäkerhetsprofil som används som en säkerhetsprofil för säkert läge för en specifik infobas.

Jag vill omedelbart notera att det här alternativet inte är att föredra, men på grund av olika omständigheter kan det användas i en sådan förenklad form. Jag har till exempel flera databaser i olika städer, en gemensam lokal med strikt begränsade rättigheter, stängd USB etc, någonstans använder jag Accounting 2.0, och någonstans 3.0 gör jag nästan alla rapporter med hjälp av ACS-verktyg utan formulär, så att de öppnas i båda versionerna. Att underhålla alla dessa rapporter för olika versioner och olika databaser är arbetskrävande och meningslöst, eftersom Det finns planer på att byta till en enda konfiguration och bas...

Låt oss skapa en profil.
I klusterkonsolen skapar vi en säkerhetsprofil där vi sätter flaggorna "Kan användas som en säkerhetsprofil för säkert läge" och " i avsnittet "Full åtkomst tillåten:" "till privilegierat läge".

I många fall med användning av rapporter och enkel bearbetning kommer denna metod att vara tillämplig. För mer komplexa situationer är det ingen idé att beskriva processen, eftersom det beskrivs i dokumentationen (möjligheten att konfigurera säkerhetsprofiler för specifika externa filer genom att ange dess hash-mängd, etc.).

P.S. Jag trodde att säkerhetsprofiler endast fungerar när man använder plattforms- och serverlicenser på CORP-nivå, men denna funktion fungerar även på plattformen 1C:Enterprise 8.3 (den kan villkorligt kallas PROF, analogt med standardkonfigurationerna Basic/PROF/CORP)

Skriv ut (Ctrl+P)

Konfigurationsobjekt

Om det är nödvändigt att använda "otillförlitlig" programkod på servern: extern bearbetning eller programkod som angetts av användaren för användning i metoderna Run() och Calculate(), kan du använda det säkra driftsläget.

I säkert läge:

  • Privilegerat läge inställt.
  • Byter till privilegierat läge ignoreras.
  • Förbjuden operationer som leder till användning av externa medel i förhållande till 1C:Enterprise-plattformen (inklusive icke-blockerande analoger av de angivna metoderna):
  • COM-mekanismer:
    • COMObject();
    • GetCOMObject();
    • WrapperHTMLDocument.GetCOMObject().
  • Ladda externa komponenter:
    • LoadExternalComponent();
    • ConnectExternalComponent().
  • Filsystemåtkomst:
    • ValueInFile();
    • Kopiera fil();
    • MergeFiles();
    • MoveFile();
    • SplitFile();
    • CreateDirectory();
    • Radera filer();
    • Ny fil;
    • Ny xBase;
    • EntryHTML.OpenFile();
    • ReadHTML.OpenFile();
    • ReadXML.OpenFile();
    • WriteXML.OpenFile();
    • ReadingFastInfoset.OpenFile();
    • RecordFastInfoset.OpenFile();
    • CanonicalXMLRecord.OpenFile();
    • TransformXSL.LoadFromFile();
    • WriteZipFile.Open();
    • ReadingZipFile.Open();
    • Ny ReadText(), om den första parametern är en sträng;
    • ReadText.Open(), om den första parametern är en sträng;
    • NewTextRecord(), om den första parametern är en sträng;
    • WriteText.Open(), om den första parametern är en sträng;
    • NewTextExtract();
    • ändra egenskapen ExtractText.FileName;
    • ExtractText.Write();
    • New Picture(), om den första parametern är en sträng;
    • Picture.Write();
    • new BinaryData();
    • BinaryData.Write();
    • NewDataRecord(), om den första parametern är en sträng;
    • Ny ReadData(), det finns en första parameter - en sträng;
    • alla metoder för FileStreamManager-objektet;
    • Ny 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().
  • Internetåtkomst:
    • Ny Internetanslutning,
    • Ny InternetMail,
    • Ny InternetProxy,
    • Ny HTTP-anslutning,
    • Ny FTP Connection.

UPPMÄRKSAMHET! När förbjudna operationer utförs skapas ett undantag under körning.

Notera. Externa rapporter och bearbetning som öppnas med menyn Arkiv - Öppna exekveras i säkert läge om användaren inte har administrativa åtkomsträttigheter.

Antalet gånger som det säkra läget har aktiverats måste matcha antalet gånger det har stängts av. Men om säkert läge aktiverades inom en procedur eller funktion (en gång eller flera), men inte stängdes av, kommer systemet automatiskt att stängas av så många gånger som det fanns ofullständiga påslag i proceduren eller funktionen som lämnades.

Om i en procedur eller funktion anropar en metod SetSafeMode(False) gjort mer än metodanrop SetSafeMode(True), då kommer ett undantag att kastas.

Programvaruinstallation av felsäkert läge kan krävas i fallet när konfigurationsutvecklaren avser att använda tredje parts (i förhållande till konfigurationen) programkod, vars tillförlitlighet utvecklaren inte kan garantera. Ett exempel på sådan kod är exekvering av metoderna Execute() och Compute() i fall där den körbara koden erhålls från omvärlden. I det här fallet skulle en bra praxis vara att ställa in felsäkert läge innan du kör dessa metoder:

// Programkod genereras som bör exekveras // Det är möjligt att koden laddas från externa källor // eller matas in manuellt ExecutableCode = GetExecutedCodeFromExternalWorld(); // Aktivera säkert läge SetSafeMode(True); // Kör potentiellt farlig kod Execute(ExecutableCode); // Stäng av felsäkert läge SetSafeMode(False);

I vissa fall kan Safe Mode-inställningarna komma i konflikt med Privileged Mode-inställningarna. Ett exempel på en sådan konflikt är postningen av ett dokument för vilket egenskapen Privileged läge vid postning är inställd, från kod på det inbyggda språket som körs i säkert läge. I det här fallet är privilegierat läge inaktiverat och försök att aktivera det ignoreras. Som ett resultat "möter" koden i det inbäddade språket, som "räknas" på det aktiverade privilegierade läget, sin frånvaro, vilket leder till fel med icke-uppenbara orsaker till deras utseende. För att förhindra denna situation inaktiverar 1C:Enterprise-systemet automatiskt säkert läge för händelsehanterare som är tillgängliga i objektmodulen eller hanterarmodulen, förutsatt att den körbara koden i det inbyggda språket inte finns i konfigurationstillägget. Sådana hanterare markeras på ett speciellt sätt i syntaxassistenten.

Det ger också möjlighet att inaktivera felsäkert läge från det inbyggda språket (om programkoden som försöker inaktivera den inte finns i en konfigurationstillägg). För att inaktivera säkert läge finns det en metod SetDisableSafeMode(). Du kan kontrollera att säkert läge för närvarande är inaktiverat (automatiskt eller genom att anropa en metod) med metoden GetDisableSafeMode().

Inom en metod i det inbyggda språket kan det inte finnas mer än en nivå av kapsling för att ställa in felsäkert läge (genom att anropa metoden SetSafeMode()) och ställa in inaktivering av säkert läge (automatiskt under exekvering av händelsehanterare av metadataobjekt eller genom att anropa metoden SetDisableSafeMode()). När man försöker öka häckningen görs ett undantag:

// Korrekt användning av ProcedureProcedureName() SetDisableSafeMode(True); SetSafeMode(true); SetSafeMode(False); SetDisableSafeMode(False); EndProcedure // Felaktig användning av ProcedureProcedureName() SetDisableSafeMode(True); SetSafeMode(true); SetDisableSafeMode(False); // Exception EndProcedure ProcedureProcedureName() SetSafeMode(True); SetDisableSafeMode(False); // Exception EndProcedure

Programmatisk öppning av extern bearbetning utförs med hjälp av det globala kontextobjektet ExternalProcessing, som har typen External Processing Manager. För varje driftläge på 1C-plattformen (vanligt applikationsläge och hanterat applikationsläge) används olika objektmetoder för att arbeta med extern bearbetning.

Kör extern bearbetning i normalt applikationsläge

I ett typiskt program måste du använda metoden Create() för ExternalProcessing-objektet, som skickas med det fullständiga namnet på den externa bearbetningsfilen. Metoden returnerar ett objekt av typen Extern bearbetning, detta objekt är den externa bearbetning som öppnas. Om du behöver öppna ett externt bearbetningsformulär, anropa metoden GetForm() på det mottagna objektet, vilket returnerar huvudformuläret, och anropa sedan metoden Open() för att öppna det.


Processing = ExternalProcessing.Create(FullFileName);
Processing.GetForm().Open();

Vid extern bearbetning måste huvudformuläret alltid vara ett vanligt, och det kontrollerade formuläret måste alltid vara ytterligare ett, annars fungerar inte GetForm()-metoden i normalt applikationsläge.

Kör extern bearbetning i hanterat programläge

I hanterade formulär-läge är algoritmen uppdelad efter exekveringskontext. På klienten tar vi emot binär data med det fullständiga namnet på den externa bearbetningsfilen. Vi överför mottagna binära data till servern och placerar dem i tillfällig lagring. Därefter måste du anropa metoden Connect() för ExternalProcessing-objektet, till vilken adressen för temporär lagring skickas. Metoden returnerar namnet på den anslutna externa bearbetningen. Vi returnerar namnet på den externa bearbetningen till klienten, skapar en strängsökväg till bearbetningsformuläret och använder metoden OpenForm() för att öppna det externa bearbetningsformuläret.

&På server
Funktion GetExternalProcessingName(BinaryData)
AddressInTemporaryStorage = PlaceInTemporaryStorage(BinaryData);
Return ExternalProcessing.Connect(AddressInTemporaryStorage);
EndFunction

&OnClient
FullFileName = ""; // Fullständigt namn på den externa bearbetningsfilen.
FileData = new BinaryData(FullFileName);
ExternalProcessingName = GetExternalProcessingName(FileData);
OpenForm("ExternalProcessing." + ExternalProcessingName + ".Form");

Säkert läge för extern bearbetning

Metoderna Create() och Connect() för External Processing-objektet har en inkommande parameter SafeMode - ett tecken på anslutning av extern bearbetning i säkert läge. Om parametern inte anges kommer anslutningen att göras i säkert läge.
Säkert läge är utformat för att skydda systemet från att köra "otillförlitlig" programkod på servern. Potentiell fara kommer från extern bearbetning eller programkod som angetts av användaren för användning i metoderna Run() och Calculate().
Säkert läge inför följande begränsningar:
  • privilegierat läge avbryts om det installerades;
  • försök att gå in i privilegierat läge ignoreras;
  • operationer med COM-objekt är förbjudna;
  • ladda och ansluta externa komponenter är förbjudet;
  • åtkomst till filsystemet är förbjuden (förutom för temporära filer);
  • Tillgång till internet är förbjuden.
Processer som öppnas interaktivt utförs inte i säkert läge, därför rekommenderas att implementera en mekanism för att öppna externa processorer i säkert läge, såväl som på behörighetsnivån för att förbjuda användaren från att interaktivt öppna externa processorer.
För att förbjuda interaktiv öppning av bearbetning, i alla roller som tilldelats användaren, är det nödvändigt att ta bort rätt "Interaktiv öppning av extern bearbetning" (se figur 1).
Figur 1. Rättigheter att interaktivt öppna extern bearbetning/rapporter
Rätten "Interaktiv öppning av extern bearbetning" påverkar inte objektet Extern bearbetning på något sätt.

Programmatisk öppning av externa rapporter liknar extern bearbetning, men du bör använda det globala kontextobjektet ExternalReports, som har typen ExternalReportsManager.