Pavel Čistov. Varen način delovanja 1c Varni način je nastavljen, delovanje je prepovedano

Ko zaženete program za nalaganje dokumentov kot običajni uporabnik, se prikaže napaka "Varni način je nastavljen. Operacija je prepovedana."

Ta težava nastane zaradi Ni dovolj pravic za začetek zunanje obdelave. Če želite konfigurirati pravice dostopa, se prijavite v bazo podatkov v načinu 1C Enterprise v imenu Administrator in pojdite na razdelek Nastavitve uporabnikov in pravic / Profili skupin za dostop, kliknite Če želite ustvariti skupino.

Vnesite ime skupine in potrdite polja za vloge, ki so na voljo uporabnikom te skupine -

  • Interaktivno odpiranje in obdelava zunanjih poročil
  • Uporaba dodatnih poročil in obdelav

Kliknite Shrani in zapri


Vrnite se v meni Uporabniki in iz seznama izberite sodelavca, ki bo delal s programom Nalaganje dokumentov. Kliknite Dovoljenja. Na seznamu profilov izberite predhodno ustvarjen profil. Kliknite Zapisati.


Da lahko uporabniki začnejo z obdelavo, je priporočljivo dodati nalaganje dokumenta na seznam zunanjih obdelav. Če želite to narediti v meniju Administracija / Tiskani obrazci in obdelava / Dodatna poročila in obdelava ustvarite novo obdelavo. Določite pot do datoteke "Download Documents.epf" in ji dodelite ime. Določite lokacijo obdelave v meniju, od koder jo lahko uporabnik pozneje zažene, na primer izberite meni Imeniki

S klikom na postavko Hitri dostop označite kateri uporabniki imajo dostop do obdelave:


Po nastavitvi kliknite Shrani in zapri. Za začetek obdelave bodo morali uporabniki le znova vnesti bazo podatkov in jo odpreti iz dostopnega menija (v primeru Imeniki) in klikniti Izvedi.


Odprto Meni - Vse funkcije.... in na seznamu poiščite možnost "Uporabljeni so varnostni profili".


Samo počistite možnost »Varnostni profili so uporabljeni«.


Po tem se bo program uspešno zagnal.

Dejstvo je, da se pri uporabi odjemalsko-strežniške različice 1C zunanja obdelava/poročila odprejo v varnem načinu, v katerem je uporaba privilegiranega načina prepovedana. In privilegirani način se zelo pogosto uporablja v tipičnih konfiguracijah: ustvarjanje tiskanih obrazcev, različna preverjanja storitev (registracija menjalnic) itd. Posledično boste tudi z uporabo običajnega poročila o sistemu za nadzor dostopa brez obrazca (privzeto se uporablja splošni obrazec »ReportForm«) in shranjevanjem nastavitev poročila po meri (v ustreznem imeniku) prejeli napako o nezadostnem dostopu pravice do različnih konstant in parametrov seje, ki se uporabljajo v uradne namene za vrstico SetPrivilegedMode(True) ;

“Pravilna” rešitev bi bila povezava zunanje obdelave in poročil prek mehanizmov BSP “Dodatna poročila in obdelava” z onemogočanjem varnega načina ali dodajanjem dovoljenj (po mojem mnenju od različice BSP 2.2.2.1). Če pa je iz nekega razloga treba uporabiti zunanje datoteke za poročanje/obdelavo, lahko konfigurirate varnostni profil gruče, ki se uporablja kot varnostni profil varnega načina za določeno informacijsko bazo.

Takoj želim opozoriti, da ta možnost ni zaželena, vendar jo je zaradi različnih okoliščin mogoče uporabiti v tako poenostavljeni obliki. Imam na primer več baz podatkov v različnih mestih, eno skupno lokalno s strogo omejenimi pravicami, zaprt USB itd., nekje uporabljam računovodstvo 2.0, nekje 3.0, skoraj vsa poročila delam z orodji ACS brez obrazcev, tako da odprt v obeh različicah. Vzdrževanje vseh teh poročil za različne različice in različne baze podatkov je delovno intenzivno in nesmiselno, ker Obstajajo načrti za prehod na enotno konfiguracijo in bazo ...

Ustvarimo profil.
V konzoli gruče ustvarimo varnostni profil, v katerem nastavimo zastavice "Lahko se uporablja kot varnostni profil varnega načina" in " v razdelku "Dovoljen polni dostop:" "v privilegiran način".

V mnogih primerih uporabe poročil in preproste obdelave bo ta metoda uporabna. Za bolj zapletene situacije nima smisla opisovati postopka, ker opisano je v dokumentaciji (zmožnost konfiguriranja varnostnih profilov za določene zunanje datoteke z navedbo njihove količine razpršitve itd.).

P.S. Mislil sem, da varnostni profili delujejo samo pri uporabi platformnih in strežniških licenc na ravni CORP, vendar ta funkcionalnost deluje tudi na platformi 1C:Enterprise 8.3 (pogojno jo lahko imenujemo PROF, po analogiji s standardnimi konfiguracijami Basic/PROF/CORP)

Natisni (Ctrl+P)

Konfiguracijski objekti

Če je treba na strežniku uporabiti »nezaupljivo« programsko kodo: zunanjo obdelavo ali programsko kodo, ki jo uporabnik vnese za uporabo v metodah Run() in Calculate(), lahko uporabite varen način delovanja.

V varnem načinu:

  • Privilegiran način prekinjeno.
  • Preklop v privilegiran način prezrti.
  • Prepovedano operacije, ki vodijo do uporabe zunanjih sredstev v zvezi s platformo 1C:Enterprise (vključno z neblokirnimi analogi navedenih metod):
  • COM mehanizmi:
    • COMObject();
    • GetCOMObject();
    • WrapperHTMLDocument.GetCOMObject().
  • Nalaganje zunanjih komponent:
    • Naloži zunanjo komponento();
    • ConnectExternalComponent().
  • Dostop do datotečnega sistema:
    • VrednostVDatoteki();
    • KopirajDatoteko();
    • Spoji datoteke();
    • PremakniDatoteko();
    • SplitFile();
    • UstvariImenik();
    • Izbriši datoteke ();
    • Nova datoteka;
    • Nova xBase;
    • EntryHTML.OpenFile();
    • ReadHTML.OpenFile();
    • ReadXML.OpenFile();
    • WriteXML.OpenFile();
    • ReadingFastInfoset.OpenFile();
    • RecordFastInfoset.OpenFile();
    • CanonicalXMLRecord.OpenFile();
    • TransformXSL.LoadFromFile();
    • WriteZipFile.Open();
    • ReadingZipFile.Open();
    • New ReadText(), če je prvi parameter niz;
    • ReadText.Open(), če je prvi parameter niz;
    • NewTextRecord(), če je prvi parameter niz;
    • WriteText.Open(), če je prvi parameter niz;
    • NewTextExtract();
    • spreminjanje lastnosti ExtractText.FileName;
    • ExtractText.Write();
    • New Picture(), če je prvi parameter niz;
    • Picture.Write();
    • novi binarnipodatki();
    • BinaryData.Write();
    • NewDataRecord(), če je prvi parameter niz;
    • New ReadData(), obstaja prvi parameter - niz;
    • vse metode objekta 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().
  • Dostop do interneta:
    • Nova internetna povezava,
    • Nova internetna pošta,
    • Nov InternetProxy,
    • Nova povezava HTTP,
    • Nova FTP povezava.

POZOR! Pri izvajanju prepovedanih operacij se med izvajanjem sproži izjema.

Opomba. Zunanja poročila in obdelave, odprte z menijem Datoteka - Odpri, se izvedejo v varnem načinu, če uporabnik nima skrbniških pravic.

Število vklopov varnega načina se mora ujemati s številom izklopov. Če pa je bil varni način vklopljen znotraj postopka ali funkcije (enkrat ali večkrat), vendar ni bil izklopljen, se bo sistem samodejno zaustavil tolikokrat, kolikor je bilo nepopolnih vklopov v postopku ali funkciji, ki ostane.

Če v proceduri ali funkciji pokliče metodo SetSafeMode(False) opravili več kot samo klice metod SetSafeMode(True), potem bo vržena izjema.

Namestitev programske opreme varnega načina je lahko potrebna v primeru, ko razvijalec konfiguracije namerava uporabiti programsko kodo tretje osebe (v zvezi s konfiguracijo), katere zanesljivosti razvijalec ne more jamčiti. Primer takšne kode je izvajanje metod Execute() in Compute() v primerih, ko je izvršljiva koda pridobljena iz zunanjega sveta. V tem primeru bi bila dobra praksa nastavitev varnega načina pred izvajanjem teh metod:

// Generirana je programska koda, ki jo je treba izvesti // Možno je, da je koda naložena iz zunanjih virov // ali vnesena ročno ExecutableCode = GetExecutedCodeFromExternalWorld(); // Omogoči varni način SetSafeMode(True); // Izvedi potencialno nevarno kodo Execute(ExecutableCode); // Izklop varnega načina SetSafeMode(False);

V nekaterih primerih so lahko nastavitve varnega načina v nasprotju z nastavitvami privilegiranega načina. Primer takšnega konflikta je objavljanje dokumenta, za katerega je nastavljena lastnost Privilegiran način ob objavljanju, iz kode v vgrajenem jeziku, ki se izvaja v varnem načinu. V tem primeru je privilegirani način onemogočen in poskusi njegovega omogočanja so prezrti. Kot rezultat, koda v vgrajenem jeziku, ki "šteje" na omogočen privilegiran način, "naleti" na njegovo odsotnost, kar vodi do napak z neočitnimi razlogi za njihov pojav. Da bi preprečil to situacijo, sistem 1C:Enterprise samodejno onemogoči varni način za obdelovalce dogodkov, ki so na voljo v objektnem modulu ali modulu upravitelja, pod pogojem, da se izvedljiva koda v vgrajenem jeziku ne nahaja v razširitvi konfiguracije. Takšni upravljalniki so v pomočniku za sintakso označeni na poseben način.

Omogoča tudi možnost onemogočanja varnega načina iz vgrajenega jezika (če koda programa, ki ga poskuša onemogočiti, ni v razširitvi konfiguracije). Za onemogočanje varnega načina obstaja metoda SetDisableSafeMode(). Z metodo lahko preverite, ali je varni način trenutno onemogočen (samodejno ali s klicem metode). GetDisableSafeMode().

Znotraj ene metode v vgrajenem jeziku ne more obstajati več kot ena raven gnezdenja nastavitve varnega načina (s klicem metode SetSafeMode()) in nastavitve onemogočanja varnega načina (samodejno med izvajanjem obdelovalcev dogodkov metapodatkovnih objektov ali s klicem metode SetDisableSafeMode(). Pri poskusu povečanja gnezdenja se vrže izjema:

// Pravilna uporaba ProcedureProcedureName() SetDisableSafeMode(True); SetSafeMode(true); SetSafeMode(False); SetDisableSafeMode(False); Konec postopka // Nepravilna uporaba postopka ProcedureName() SetDisableSafeMode(True); SetSafeMode(true); SetDisableSafeMode(False); // Izjema EndProcedure ProcedureProcedureName() SetSafeMode(True); SetDisableSafeMode(False); // Izjema EndProcedure

Programsko odpiranje zunanje obdelave se izvede z globalnim kontekstnim objektom ExternalProcessing, ki ima tip ExternalProcessingManager. Za vsak način delovanja platforme 1C (način običajne aplikacije in način upravljane aplikacije) se za delo z zunanjo obdelavo uporabljajo različne objektne metode.

Izvajanje zunanje obdelave v običajnem aplikacijskem načinu

V tipični aplikaciji morate uporabiti metodo Create() objekta ExternalProcessing, ki ji je posredovano polno ime datoteke za zunanjo obdelavo. Metoda vrne objekt vrste Zunanja obdelava, je ta objekt zunanja obdelava, ki se odpira. Če morate odpreti zunanji obrazec za obdelavo, pokličite metodo GetForm() na prejetem objektu, ki bo vrnil glavni obrazec, in nato pokličite metodo Open(), da jo odprete.


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

Pri zunanji obdelavi mora biti glavni obrazec vedno navaden, nadzorovani obrazec pa vedno dodatni, sicer metoda GetForm() ne bo delovala v običajnem aplikacijskem načinu.

Izvajanje zunanje obdelave v načinu upravljane aplikacije

V načinu upravljanih obrazcev je algoritem razdeljen glede na kontekst izvajanja. Na odjemalcu prejmemo binarne podatke s polnim imenom datoteke za zunanjo obdelavo. Prejete binarne podatke prenesemo na strežnik in jih postavimo v začasno hrambo. Nato morate poklicati metodo Connect() objekta ExternalProcessing, ki mu je posredovan naslov za začasno shranjevanje. Metoda vrne ime povezane zunanje obdelave. Odjemalcu vrnemo ime zunanje obdelave, ustvarimo pot niza do obrazca za obdelavo in z metodo OpenForm() odpremo obrazec za zunanjo obdelavo.

&Na strežniku
Funkcija GetExternalProcessingName(BinaryData)
NaslovVZačasniShrambi = MestoVZačasniShrambi(BinarniPodatki);
Vrni ExternalProcessing.Connect(AddressInTemporaryStorage);
EndFunction

&OnClient
FullFileName = ""; // Polno ime datoteke za zunanjo obdelavo.
FileData = new BinaryData(FullFileName);
ExternalProcessingName = GetExternalProcessingName(FileData);
OpenForm("ExternalProcessing." + ExternalProcessingName + ".Form");

Varen način za zunanjo obdelavo

Metodi Create() in Connect() objekta ExternalProcessing imata vhodni parameter SafeMode - znak povezovanja zunanje obdelave v varnem načinu. Če parameter ni naveden, bo povezava vzpostavljena v varnem načinu.
Varni način je zasnovan za zaščito sistema pred izvajanjem »nezaupljive« programske kode na strežniku. Potencialna nevarnost izvira iz zunanje obdelave ali programske kode, ki jo uporabnik vnese za uporabo v metodah Run() in Calculate().
Varni način nalaga naslednje omejitve:
  • privilegirani način je preklican, če je bil nameščen;
  • poskusi vstopa v privilegirani način so prezrti;
  • operacije z objekti COM so prepovedane;
  • nalaganje in povezovanje zunanjih komponent je prepovedano;
  • dostop do datotečnega sistema je prepovedan (razen za začasne datoteke);
  • Dostop do interneta je prepovedan.
Procesi, ki se odpirajo interaktivno, se ne izvajajo v varnem načinu, zato je priporočljivo implementirati mehanizem za odpiranje zunanjih procesorjev v varnem načinu, kot tudi na ravni dovoljenj, da uporabniku prepove interaktivno odpiranje zunanjih procesorjev.
Za prepoved interaktivnega odpiranja obdelave je v vseh vlogah, ki so dodeljene uporabniku, potrebno odstraniti desno »Interaktivno odpiranje zunanje obdelave« (glej sliko 1).
Slika 1. Pravice za interaktivno odpiranje zunanjih obdelav/poročil
Pravica »Interaktivno odpiranje zunanje obdelave« na noben način ne vpliva na objekt zunanje obdelave.

Programsko odpiranje zunanjih poročil je podobno zunanji obdelavi, vendar morate uporabiti objekt globalnega konteksta ExternalReports, ki ima vrsto ExternalReportsManager.