Pavel Chistov. Bezpečný prevádzkový režim Je nastavený bezpečný režim 1c, prevádzka je zakázaná

Keď spustíte program Nahrávanie dokumentov ako bežný používateľ, zobrazí sa chyba „Nastavený núdzový režim. Operácia je zakázaná.“

Táto ťažkosť vzniká preto, že Na začatie externého spracovania nie je dostatok práv. Ak chcete nakonfigurovať prístupové práva, prihláste sa do databázy v režime 1C Enterprise v mene používateľa správca a prejdite do sekcie Nastavenia používateľov a práv / Prístupové skupinové profily, kliknite Ak chcete vytvoriť skupinu.

Zadajte názov skupiny a začiarknite políčka pre roly dostupné používateľom tejto skupiny -

  • Interaktívne otváranie externých reportov a ich spracovanie
  • Použitie dodatočných správ a spracovania

Kliknite Uložiť a zavrieť


Vráťte sa do ponuky Používatelia a vyberte zo zoznamu zamestnanca, ktorý bude pracovať s programom Nahrávanie dokumentov. Kliknite na položku Povolenia. V zozname profilov vyberte predtým vytvorený profil. Kliknite Zapíšte si.


Aby používatelia mohli začať spracovávať, odporúča sa pridať Načítanie dokumentu do zoznamu externých spracovaní. Ak to chcete urobiť v ponuke Administrácia / Tlačové formuláre a spracovanie / Doplnkové zostavy a spracovanie vytvoriť nové spracovanie. Zadajte cestu k súboru "Download Documents.epf" a priraďte mu názov. V menu zadajte umiestnenie spracovania, odkiaľ ho môže používateľ neskôr spustiť, napríklad vybrať menu Adresáre

Kliknutím na položku Rýchly prístup určíte, ktorí používatelia majú prístup k spracovaniu:


Po nastavení kliknite Uložiť a zavrieť. Na spustenie spracovania budú používatelia musieť znova vstúpiť do databázy a otvoriť ju z prístupovej ponuky (v príklade - Adresáre) a kliknúť Vykonať.


OTVORENÉ Menu - Všetky funkcie.... a v zozname nájdite možnosť „Používajú sa bezpečnostné profily“.


Stačí zrušiť začiarknutie možnosti „Používajú sa bezpečnostné profily“.


Potom sa program úspešne spustí.

Faktom je, že pri použití klient-server verzie 1C sa externé spracovanie/správy otvárajú v núdzovom režime, v ktorom je zakázané používať privilegovaný režim. A privilegovaný režim sa používa veľmi často v typických konfiguráciách: generovanie tlačených formulárov, rôzne servisné kontroly (registrácia výmen) atď. Výsledkom je, že aj pri použití bežnej správy o systéme kontroly prístupu bez formulára (štandardne sa používa všeobecný formulár "ReportForm") a uložení vlastných nastavení správy (v príslušnom adresári) sa zobrazí chyba o nedostatočnom prístupe práva na rôzne konštanty a parametre relácie používané na oficiálne účely po riadku SetPrivilegedMode(True) ;

„Správnym“ riešením by bolo prepojenie externého spracovania a hlásení prostredníctvom mechanizmov BSP „Ďalšie hlásenia a spracovanie“ s zakázaním bezpečného režimu alebo pridaním povolení (podľa mňa od verzie BSP 2.2.2.1). Ak je však z nejakého dôvodu potrebné použiť externé súbory na podávanie správ/spracovanie, môžete nakonfigurovať bezpečnostný profil klastra, ktorý sa používa ako bezpečnostný profil v núdzovom režime pre konkrétnu informačnú základňu.

Chcel by som okamžite poznamenať, že táto možnosť nie je uprednostňovaná, ale vzhľadom na rôzne okolnosti ju možno použiť v takejto zjednodušenej forme. Napríklad mám viacero databáz v rôznych mestách, spoločnú lokálnu s prísne obmedzenými právami, uzavreté USB atď., niekde používam účtovníctvo 2.0 a niekde 3.0, takmer všetky výkazy robím pomocou nástrojov ACS bez formulárov, aby otvorené v oboch verziách. Udržiavanie všetkých týchto správ pre rôzne verzie a rôzne databázy je náročné na prácu a márne, pretože Plánuje sa prechod na jednu konfiguráciu a základňu...

Poďme si vytvoriť profil.
V konzole klastra si vytvoríme bezpečnostný profil, v ktorom nastavíme príznaky "Môže byť použitý ako bezpečnostný profil v núdzovom režime" a " v sekcii "Povolený úplný prístup:" „do privilegovaného režimu“.

V mnohých prípadoch použitia reportov a jednoduchého spracovania bude táto metóda použiteľná. Pri zložitejších situáciách nemá zmysel popisovať proces, pretože je to načrtnuté v dokumentácii (možnosť konfigurovať bezpečnostné profily pre konkrétne externé súbory zadaním ich hodnoty hash atď.).

P.S. Myslel som si, že bezpečnostné profily fungujú iba pri použití licencií platformy a servera na úrovni CORP, ale táto funkcia funguje aj na platforme 1C: Enterprise 8.3 (podmienečne sa dá nazvať PROF, analogicky so štandardnými konfiguráciami Basic/PROF/CORP)

Tlačiť (Ctrl+P)

Konfiguračné objekty

Ak je potrebné na serveri použiť „nedôveryhodný“ programový kód: externé spracovanie alebo programový kód zadaný používateľom na použitie v metódach Run() a Calculate(), môžete použiť bezpečný prevádzkový režim.

V núdzovom režime:

  • Privilegovaný režim zrušené.
  • Prepnutie do privilegovaného režimu ignoroval.
  • Zakázané operácie vedúce k použitiu externých prostriedkov vo vzťahu k platforme 1C:Enterprise (vrátane neblokujúcich analógov špecifikovaných metód):
  • COM mechanizmy:
    • COMObject();
    • GetCOMObject();
    • WrapperHTMLDocument.GetCOMObject().
  • Načítanie externých komponentov:
    • LoadExternalComponent();
    • ConnectExternalComponent().
  • Prístup k súborovému systému:
    • ValueInFile();
    • CopyFile();
    • MergeFiles();
    • MoveFile();
    • SplitFile();
    • CreateDirectory();
    • Vymazať súbory();
    • Nový súbor;
    • Nový xBase;
    • EntryHTML.OpenFile();
    • ReadHTML.OpenFile();
    • ReadXML.OpenFile();
    • WriteXML.OpenFile();
    • ReadingFastInfoset.OpenFile();
    • RecordFastInfoset.OpenFile();
    • CanonicalXMLRecord.OpenFile();
    • TransformXSL.LoadFromFile();
    • WriteZipFile.Open();
    • ReadingZipFile.Open();
    • New ReadText(), ak je prvým parametrom reťazec;
    • ReadText.Open(), ak je prvým parametrom reťazec;
    • NewTextRecord(), ak je prvým parametrom reťazec;
    • WriteText.Open(), ak je prvým parametrom reťazec;
    • NewTextExtract();
    • zmena vlastnosti ExtractText.FileName;
    • ExtrahovaťText.Write();
    • New Picture(), ak je prvým parametrom reťazec;
    • Picture.Write();
    • new BinaryData();
    • BinaryData.Write();
    • NewDataRecord(), ak je prvým parametrom reťazec;
    • Nové ReadData(), je tu prvý parameter - reťazec;
    • všetky metódy objektu FileStreamManager;
    • New 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().
  • Prístup na internet:
    • Nové internetové pripojenie,
    • Nový InternetMail,
    • Nový InternetProxy,
    • Nové HTTP pripojenie,
    • Nové FTP pripojenie.

POZOR! Pri vykonávaní zakázaných operácií sa za behu vyvolá výnimka.

Poznámka. Externé hlásenia a spracovanie otvorené pomocou ponuky Súbor - Otvoriť sa vykonávajú v núdzovom režime, ak používateľ nemá práva správcu.

Počet zapnutí núdzového režimu sa musí zhodovať s počtom jeho vypnutí. Ak bol však núdzový režim zapnutý v rámci postupu alebo funkcie (raz alebo viackrát), ale nebol vypnutý, systém sa automaticky vypne toľkokrát, koľkokrát bolo v postupe alebo funkcii neúplných zapnutí.

Ak v procedúre alebo funkcii volá metódu SetSafeMode(False) vykonali viac ako len volania metód SetSafeMode (True), potom bude vyvolaná výnimka.

Inštalácia softvéru v núdzovom režime môže byť potrebná v prípade, keď vývojár konfigurácie zamýšľa použiť programový kód tretej strany (vo vzťahu ku konfigurácii), ktorého spoľahlivosť vývojár nemôže zaručiť. Príkladom takéhoto kódu je vykonávanie metód Execute() a Compute() v prípadoch, keď je spustiteľný kód získaný z vonkajšieho sveta. V tomto prípade by bolo dobrým postupom nastaviť núdzový režim pred vykonaním týchto metód:

// Vygeneruje sa kód programu, ktorý by sa mal spustiť // Je možné, že kód je načítaný z externých zdrojov // alebo je zadaný manuálne ExecutableCode = GetExecutedCodeFromExternalWorld(); // Povolenie bezpečného režimu SetSafeMode(True); // Spustenie potenciálne nebezpečného kódu Execute(ExecutableCode); // Vypnutie bezpečného režimu SetSafeMode(False);

V niektorých prípadoch môžu nastavenia núdzového režimu kolidovať s nastaveniami privilegovaného režimu. Príkladom takéhoto konfliktu je zaúčtovanie dokumentu, pre ktorý je nastavený režim Privilegovaný pri vlastnosti účtovania, z kódu vo vstavanom jazyku, ktorý sa vykonáva v núdzovom režime. V tomto prípade je privilegovaný režim zakázaný a pokusy o jeho aktiváciu sú ignorované. Výsledkom je, že kód vo vloženom jazyku, ktorý „počíta“ so zapnutým privilegovaným režimom, „naráža“ na jeho absenciu, čo vedie k chybám s nezjavnými dôvodmi ich výskytu. Aby sa predišlo tejto situácii, systém 1C:Enterprise automaticky deaktivuje bezpečný režim pre obsluhu udalostí, ktoré sú k dispozícii v objektovom module alebo module manažéra, za predpokladu, že spustiteľný kód vo vstavanom jazyku sa nenachádza v rozšírení konfigurácie. Takéto manipulátory sú v asistentovi syntaxe označené špeciálnym spôsobom.

Poskytuje tiež možnosť zakázať núdzový režim zo vstavaného jazyka (ak programový kód, ktorý sa ho pokúša zakázať, nie je v rozšírení konfigurácie). Ak chcete vypnúť núdzový režim, existuje spôsob SetDisableSafeMode(). Pomocou tejto metódy môžete skontrolovať, či je bezpečný režim momentálne zakázaný (automaticky alebo volaním metódy). GetDisableSafeMode().

V rámci jednej metódy v zabudovanom jazyku nemôže existovať viac ako jedna úroveň vnorenia nastavenia bezpečného režimu (volaním metódy SetSafeMode()) a nastavenia zakázania bezpečného režimu (automaticky počas vykonávania obsluhy udalostí napr. objekty metaúdajov alebo volaním metódy SetDisableSafeMode(). Pri pokuse o zvýšenie vnorenia sa vyvolá výnimka:

// Správne použitie ProcedureProcedureName() SetDisableSafeMode(True); SetSafeMode(true); SetSafeMode(False); SetDisableSafeMode(False); EndProcedure // Nesprávne použitie ProcedureProcedureName() SetDisableSafeMode(True); SetSafeMode(true); SetDisableSafeMode(False); // Výnimka EndProcedure ProcedureProcedureName() SetSafeMode(True); SetDisableSafeMode(False); // Výnimka EndProcedure

Programové otvorenie externého spracovania sa vykonáva pomocou objektu globálneho kontextu ExternalProcessing, ktorý má typ ExternalProcessingManager. Pre každý prevádzkový režim platformy 1C (režim bežnej aplikácie a režim riadenej aplikácie) sa na prácu s externým spracovaním používajú rôzne objektové metódy.

Spustenie externého spracovania v normálnom aplikačnom režime

V typickej aplikácii musíte použiť metódu Create() objektu ExternalProcessing, ktorej sa odovzdá úplný názov súboru externého spracovania. Metóda vracia objekt typu Externé spracovanie, tento objekt je otvorené externé spracovanie. Ak potrebujete otvoriť formulár externého spracovania, zavolajte metódu GetForm() na prijatom objekte, ktorá vráti hlavný formulár, a potom zavolajte metódu Open() na jeho otvorenie.


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

Pri externom spracovaní musí byť hlavný formulár vždy bežný a riadený formulár musí byť vždy doplnkový, inak metóda GetForm() nebude fungovať v normálnom režime aplikácie.

Spustenie externého spracovania v režime riadenej aplikácie

V režime spravovaných formulárov je algoritmus rozdelený podľa kontextu vykonávania. Na klientovi dostávame binárne dáta s použitím celého názvu externého spracovateľského súboru. Prijaté binárne dáta prenesieme na server a uložíme ich do dočasného úložiska. Ďalej je potrebné zavolať metódu Connect() objektu ExternalProcessing, ktorému sa odovzdá adresa dočasného úložiska. Metóda vráti názov pripojeného externého spracovania. Klientovi vrátime názov externého spracovania, vytvoríme reťazec cestu k formuláru spracovania a pomocou metódy OpenForm() otvoríme formulár externého spracovania.

&Na serveri
Funkcia GetExternalProcessingName(BinaryData)
AddressInTemporaryStorage = PlaceInTemporaryStorage(BinaryData);
Return ExternalProcessing.Connect(AddressInTemporaryStorage);
EndFunction

&OnClient
FullFileName = ""; // Úplný názov súboru externého spracovania.
FileData = new BinaryData(FullFileName);
ExternalProcessingName = GetExternalProcessingName(FileData);
OpenForm("ExternalProcessing." + ExternalProcessingName + ".Form");

Núdzový režim pre externé spracovanie

Metódy Create() a Connect() objektu ExternalProcessing majú vstupný parameter SafeMode – znak pripojenia externého spracovania v núdzovom režime. Ak parameter nie je zadaný, pripojenie sa uskutoční v zabezpečenom režime.
Núdzový režim je navrhnutý tak, aby chránil systém pred spustením „nedôveryhodného“ programového kódu na serveri. Potenciálne nebezpečenstvo pochádza z externého spracovania alebo programového kódu zadaného používateľom na použitie v metódach Run() a Calculate().
Núdzový režim ukladá nasledujúce obmedzenia:
  • privilegovaný režim sa zruší, ak bol nainštalovaný;
  • pokusy o vstup do privilegovaného režimu sa ignorujú;
  • operácie s objektmi COM sú zakázané;
  • nakladanie a pripájanie externých komponentov je zakázané;
  • prístup do súborového systému je zakázaný (okrem dočasných súborov);
  • Prístup na internet je zakázaný.
Interaktívne otvárané procesy sa nevykonávajú v núdzovom režime, preto sa odporúča implementovať mechanizmus na otváranie externých procesorov v núdzovom režime, ako aj na úrovni povolení, aby sa používateľovi zakázalo interaktívne otvárať externé procesory.
Na zákaz interaktívneho otvárania spracovania je vo všetkých rolách priradených používateľovi potrebné odstrániť právo „Interaktívne otváranie externého spracovania“ (pozri obrázok 1).
Obrázok 1. Práva na interaktívne otváranie externého spracovania/správ
Právo „Interaktívne otvorenie externého spracovania“ nijako neovplyvňuje objekt Externé spracovanie.

Programové otváranie externých zostáv je podobné externému spracovaniu, ale mali by ste použiť objekt globálneho kontextu ExternalReports, ktorý má typ ExternalReportsManager.