Pavel Čistov. Siguran način rada Postavljen je siguran način rada 1c, rad je zabranjen

Kada pokrenete program za učitavanje dokumenata kao obični korisnik, pojavljuje se pogreška "Siguran način rada je postavljen. Operacija je zabranjena."

Ova poteškoća nastaje jer Nema dovoljno prava za pokretanje vanjske obrade. Da biste konfigurirali prava pristupa, prijavite se u bazu podataka u načinu rada 1C Enterprise u ime Administrator i idite na odjeljak Postavke korisnika i prava / Pristup profilima grupa, klik Za stvaranje grupe.

Unesite naziv grupe i potvrdite okvire za uloge dostupne korisnicima ove grupe -

  • Interaktivno otvaranje vanjskih izvješća i obrada
  • Korištenje dodatnih izvješća i obrada

Klik Spremi i zatvori


Vratite se na izbornik Korisnici i s popisa odaberite djelatnika koji će raditi s programom Document Upload. Pritisnite Dozvole. Na popisu profila odaberite prethodno kreirani profil. Klik Zapiši.


Kako bi korisnici mogli započeti s obradom, preporučuje se dodati Document Loading na popis vanjskih obrada. Da biste to učinili u izborniku Administracija / Tiskani obrasci i obrada / Dodatna izvješća i obrada stvoriti novu obradu. Navedite stazu do datoteke "Download Documents.epf" i dodijelite naziv. Navedite mjesto obrade u izborniku, odakle je korisnik može pokrenuti kasnije, na primjer, odaberite izbornik Imenici

Klikom na stavku Brzi pristup označavate koji korisnici imaju pristup obradi:


Nakon postavljanja kliknite Spremi i zatvori. Za početak obrade korisnici će samo trebati ponovno ući u bazu i otvoriti je iz pristupnog izbornika (u primjeru - Imenici) i kliknuti Izvršiti.


Otvoren Izbornik - Sve funkcije.... i na popisu pronađite opciju "Sigurnosni profili se koriste".


Samo poništite opciju "Sigurnosni profili se koriste".


Nakon toga, program će se uspješno pokrenuti.

Činjenica je da se pri korištenju klijent-poslužiteljske verzije 1C vanjska obrada/izvješća otvaraju u sigurnom načinu rada, u kojem je zabranjeno korištenje privilegiranog načina rada. A povlašteni način se vrlo često koristi u tipičnim konfiguracijama: generiranje ispisa, razne provjere usluga (registracija razmjena) itd. Kao rezultat toga, čak i korištenjem redovnog izvješća o sustavu kontrole pristupa bez obrasca (prema zadanim postavkama koristi se opći obrazac "ReportForm") i spremanjem prilagođenih postavki izvješća (u odgovarajućem direktoriju), dobit ćete pogrešku o nedovoljnom pristupu prava na razne konstante i parametre sesije koji se koriste u službene svrhe nakon retka PostaviPrivilegedMode(True) ;

“Ispravno” rješenje bilo bi povezivanje vanjske obrade i izvješća kroz BSP mehanizme “Dodatna izvješća i obrada” uz onemogućavanje sigurnog načina rada ili dodavanje dopuštenja (po mom mišljenju, od BSP verzije 2.2.2.1). Ali ako je iz nekog razloga potrebno koristiti vanjske datoteke za izvješćivanje/obradu, tada možete konfigurirati sigurnosni profil klastera koji se koristi kao sigurnosni profil sigurnog načina rada za određenu informacijsku bazu.

Želio bih odmah napomenuti da ova opcija nije poželjna, ali zbog različitih okolnosti može se koristiti u tako pojednostavljenom obliku. Na primjer, imam nekoliko baza podataka u različitim gradovima, jednu zajedničku lokalnu sa strogo ograničenim pravima, zatvoreni USB itd., negdje koristim Računovodstvo 2.0, a negdje 3.0, gotovo sva izvješća radim pomoću ACS alata bez obrazaca, tako da otvoren u obje verzije. Održavanje svih tih izvješća za različite verzije i različite baze podataka je naporno i uzaludno, jer U planu je prelazak na jedinstvenu konfiguraciju i bazu...

Kreirajmo profil.
U konzoli klastera kreiramo sigurnosni profil u kojem postavljamo zastavice "Može se koristiti kao sigurnosni profil sigurnog načina rada" i " u odjeljku "Dopušten potpuni pristup:" "u povlašteni način rada".

U mnogim slučajevima korištenja izvješća i jednostavne obrade, ova metoda će biti primjenjiva. Za složenije situacije nema smisla opisivati ​​proces jer navedeno je u dokumentaciji (mogućnost konfiguriranja sigurnosnih profila za određene vanjske datoteke određivanjem njihove količine hash itd.).

p.s. Mislio sam da sigurnosni profili funkcioniraju samo kada se koriste platformske i poslužiteljske licence na razini CORP-a, ali ova funkcionalnost također radi na platformi 1C:Enterprise 8.3 (može se uvjetno nazvati PROF, po analogiji sa standardnim konfiguracijama Basic/PROF/CORP)

Ispis (Ctrl+P)

Konfiguracijski objekti

Ako je potrebno koristiti “nepouzdani” programski kod na poslužitelju: vanjsku obradu ili programski kod koji je korisnik unio za korištenje u metodama Run() i Calculate(), možete koristiti sigurni način rada.

U sigurnom načinu rada:

  • Privilegirani način rada otkazan.
  • Prelazak na povlašteni način rada ignorirani.
  • Zabranjeno operacije koje dovode do korištenja vanjskih sredstava u odnosu na platformu 1C:Enterprise (uključujući neblokirajuće analoge navedenih metoda):
  • COM mehanizmi:
    • COMObject();
    • GetCOMObject();
    • WrapperHTMLDocument.GetCOMObject().
  • Učitavanje vanjskih komponenti:
    • Učitaj vanjsku komponentu();
    • ConnectExternalComponent().
  • Pristup datotečnom sustavu:
    • VrijednostUDatoteci();
    • KopirajDatoteku();
    • Spoji datoteke();
    • PremjestiDatoteku();
    • SplitFile();
    • Stvori imenik();
    • Obriši datoteke();
    • Nova datoteka;
    • Novi xBase;
    • EntryHTML.OpenFile();
    • ReadHTML.OpenFile();
    • ReadXML.OpenFile();
    • WriteXML.OpenFile();
    • ReadingFastInfoset.OpenFile();
    • RecordFastInfoset.OpenFile();
    • CanonicalXMLRecord.OpenFile();
    • TransformXSL.LoadFromFile();
    • WriteZipFile.Open();
    • ČitanjeZipDatoteke.Otvori();
    • New ReadText(), ako je prvi parametar niz;
    • ReadText.Open(), ako je prvi parametar niz;
    • NewTextRecord(), ako je prvi parametar niz;
    • WriteText.Open(), ako je prvi parametar niz;
    • NewTextExtract();
    • promjena svojstva ExtractText.FileName;
    • EkstraktTeksta.Napiši();
    • New Picture(), ako je prvi parametar niz;
    • Slika.Piši();
    • novi BinarniPodaci();
    • BinarniPodaci.Zapiši();
    • NewDataRecord(), ako je prvi parametar niz;
    • New ReadData(), postoji prvi parametar - string;
    • sve metode objekta FileStreamManager;
    • New FileStream();
    • FormattedDocument.Write();
    • GeographicScheme.Read();
    • GeographicScheme.Write();
    • GeographicScheme.Print();
    • TabličniDokument.Čitanje();
    • TabličniDokument.Napiši();
    • TabličniDokument.Ispis(); Grafička shema.Read();
    • Grafička shema.Write();
    • GrafičkaShema.Ispis();
    • TextDocument.Read();
    • TextDocument.Write().
  • Pristup internetu:
    • Nova internetska veza,
    • Nova Internet pošta,
    • Novi InternetProxy,
    • Nova HTTP veza,
    • Nova FTP veza.

PAŽNJA! Prilikom izvođenja zabranjenih operacija, iznimka se izbacuje tijekom izvođenja.

Bilješka. Vanjski izvještaji i obrada otvoreni pomoću izbornika Datoteka - Otvori izvršavaju se u sigurnom načinu rada ako korisnik nema administrativna prava pristupa.

Broj uključenja sigurnog načina mora odgovarati broju isključenja. Međutim, ako je siguran način rada uključen unutar postupka ili funkcije (jednom ili više puta), ali nije isključen, sustav će se automatski isključiti onoliko puta koliko je bilo nepotpunih uključenja u postupku ili funkciji koja je ostala.

Ako u proceduri ili funkciji poziva metodu SetSafeMode(False) napravio više od poziva metode SetSafeMode(True), tada će biti bačena iznimka.

Instalacija softvera sigurnog načina rada može biti potrebna u slučaju kada programer konfiguracije namjerava koristiti programski kod treće strane (u odnosu na konfiguraciju), čiju pouzdanost programer ne može jamčiti. Primjer takvog koda je izvršavanje metoda Execute() i Compute() u slučajevima kada se izvršni kod dobiva iz vanjskog svijeta. U ovom bi slučaju dobra praksa bila postaviti Siguran način rada prije izvršavanja ovih metoda:

// Generiran je programski kod koji bi se trebao izvršiti // Moguće je da je kod učitan iz vanjskih izvora // ili unesen ručno ExecutableCode = GetExecutedCodeFromExternalWorld(); // Omogući siguran način SetSafeMode(True); // Izvrši potencijalno opasan kod Execute(ExecutableCode); // Isključi siguran način SetSafeMode(False);

U nekim slučajevima postavke sigurnog načina rada mogu biti u sukobu s postavkama privilegiranog načina rada. Primjer takvog sukoba je knjiženje dokumenta za koji je postavljeno svojstvo Privilegirani način rada prilikom knjiženja, iz koda na ugrađenom jeziku koji se izvršava u sigurnom načinu rada. U tom je slučaju povlašteni način rada onemogućen i pokušaji njegovog uključivanja se ignoriraju. Kao rezultat toga, kod u ugrađenom jeziku, koji "računa" na uključeni privilegirani način rada, "nailazi" na njegovu odsutnost, što dovodi do pogrešaka s neočitim razlozima njihovog pojavljivanja. Kako bi spriječio ovu situaciju, sustav 1C:Enterprise automatski onemogućuje siguran način rada za rukovatelje događajima koji su dostupni u objektnom modulu ili modulu upravitelja, pod uvjetom da se izvršni kod na ugrađenom jeziku ne nalazi u konfiguracijskom proširenju. Takvi rukovatelji označeni su na poseban način u pomoćniku za sintaksu.

Također pruža mogućnost onemogućavanja sigurnog načina rada iz ugrađenog jezika (ako programski kod koji ga pokušava onemogućiti nije u proširenju konfiguracije). Za onemogućavanje sigurnog načina rada postoji metoda PostaviDisableSafeMode(). Možete provjeriti je li sigurni način rada trenutno onemogućen (automatski ili pozivanjem metode) pomoću metode GetDisableSafeMode().

Unutar jedne metode u ugrađenom jeziku ne može postojati više od jedne razine ugniježđenja postavljanja sigurnog načina rada (pozivom metode SetSafeMode()) i postavljanja onemogućavanja sigurnog načina rada (automatski tijekom izvođenja rukovatelja događajima objekte metapodataka ili pozivom metode SetDisableSafeMode(). Prilikom pokušaja povećanja ugniježđenosti, izbacuje se iznimka:

// Ispravna upotreba ProcedureProcedureName() SetDisableSafeMode(True); PostaviSafeMode(true); PostaviSafeMode(False); PostaviDisableSafeMode(False); EndProcedure // Neispravna upotreba ProcedureProcedureName() SetDisableSafeMode(True); PostaviSafeMode(true); PostaviDisableSafeMode(False); // Iznimka EndProcedure ProcedureProcedureName() SetSafeMode(True); PostaviDisableSafeMode(False); // Iznimka EndProcedure

Programsko otvaranje vanjske obrade provodi se pomoću globalnog kontekstnog objekta ExternalProcessing, koji ima tip ExternalProcessingManager. Za svaki način rada 1C platforme (uobičajeni aplikacijski način i upravljani aplikacijski način) koriste se različite objektne metode za rad s vanjskom obradom.

Pokretanje vanjske obrade u normalnom načinu rada aplikacije

U tipičnoj aplikaciji morate koristiti metodu Create() objekta ExternalProcessing, kojoj se prosljeđuje puni naziv datoteke za vanjsku obradu. Metoda vraća objekt tipa Vanjska obrada, ovaj objekt je vanjska obrada koja se otvara. Ako trebate otvoriti vanjsku formu za obradu, tada pozovite metodu GetForm() na primljenom objektu, koja će vratiti glavnu formu, a zatim pozovite metodu Open() da je otvorite.


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

U vanjskoj obradi, glavna forma uvijek mora biti obična, a kontrolirana forma uvijek mora biti dodatna, inače metoda GetForm() neće raditi u normalnom modu aplikacije.

Pokretanje vanjske obrade u upravljanom načinu rada aplikacije

U načinu rada upravljanih obrazaca, algoritam je podijeljen prema kontekstu izvršavanja. Na klijentu primamo binarne podatke koristeći puni naziv datoteke za vanjsku obradu. Primljene binarne podatke prenosimo na poslužitelj i stavljamo u privremenu pohranu. Zatim trebate pozvati metodu Connect() objekta ExternalProcessing, kojoj se prosljeđuje adresa za privremenu pohranu. Metoda vraća naziv povezane vanjske obrade. Vraćamo ime vanjske obrade klijentu, stvaramo stazu niza do obrasca za obradu i koristimo metodu OpenForm() za otvaranje obrasca za vanjsku obradu.

&Na poslužitelju
Funkcija GetExternalProcessingName(BinaryData)
AdresaUPrivremenomSkladištu = MjestoUPrivremenomSkladištu(BinarniPodaci);
Vrati ExternalProcessing.Connect(AddressInTemporaryStorage);
EndFunction

&NaKlijentu
FullFileName = ""; // Puni naziv datoteke za vanjsku obradu.
FileData = novi BinarniPodaci(FullFileName);
ImeVanjskeObrade = GetExternalProcessingName(PodaciDatoteke);
OpenForm("ExternalProcessing." + ExternalProcessingName + ".Form");

Siguran način rada za vanjsku obradu

Metode Create() i Connect() objekta ExternalProcessing imaju dolazni parametar SafeMode - znak povezivanja vanjske obrade u sigurnom načinu rada. Ako parametar nije naveden, veza će se uspostaviti u sigurnom načinu rada.
Siguran način rada dizajniran je za zaštitu sustava od izvršavanja "nepouzdanog" programskog koda na poslužitelju. Potencijalna opasnost dolazi od vanjske obrade ili programskog koda koji je korisnik unio za korištenje u metodama Run() i Calculate().
Siguran način rada nameće sljedeća ograničenja:
  • privilegirani način rada se poništava ako je instaliran;
  • pokušaji ulaska u povlašteni način se ignoriraju;
  • operacije s COM objektima su zabranjene;
  • zabranjeno je učitavanje i spajanje vanjskih komponenti;
  • pristup datotečnom sustavu je zabranjen (osim za privremene datoteke);
  • Pristup Internetu je zabranjen.
Interaktivno otvoreni procesi se ne izvršavaju u sigurnom načinu rada, stoga je preporučljivo implementirati mehanizam za otvaranje vanjskih procesora u sigurnom načinu rada, kao i na razini dopuštenja zabraniti korisniku interaktivno otvaranje vanjskih procesora.
Za zabranu interaktivnog otvaranja obrade, u svim ulogama dodijeljenim korisniku, potrebno je ukloniti pravo “Interaktivno otvaranje vanjske obrade” (vidi sliku 1).
Slika 1. Prava na interaktivno otvaranje vanjske obrade/izvješća
Pravo "Interaktivno otvaranje vanjske obrade" ni na koji način ne utječe na objekt vanjske obrade.

Programsko otvaranje vanjskih izvješća slično je vanjskoj obradi, ali trebali biste koristiti objekt globalnog konteksta ExternalReports koji ima tip ExternalReportsManager.