Saugusis režimas įdiegtas 1s 8.3. Išorinio apdorojimo programinės įrangos atidarymas

Programinis išorinio apdorojimo atidarymas atliekamas naudojant globalaus konteksto objektą ExternalProcessing, kurio tipas yra ExternalProcessingManager. Kiekvienam 1C platformos veikimo režimui (įprastas taikymo režimas ir valdomos programos režimas) naudojami skirtingi objekto metodai, skirti dirbti su išoriniu apdorojimu.

Išorinis apdorojimas veikia įprastu programos režimu

Įprastoje programoje turite naudoti objekto „ExternalProcessing“ metodą Create(), kuriam perduodamas visas išorinio apdorojimo failo pavadinimas. Metodas grąžina tipo objektą Išorinis apdorojimas, šis objektas yra atidaromas išorinis apdorojimas. Jei reikia atidaryti išorinę apdorojimo formą, gautame objekte iškvieskite GetForm() metodą, kuris grąžins pagrindinę formą, tada iškvieskite Open() metodą, kad ją atidarytumėte.


Apdorojimas = IšorinisApdorojimas.Create(FullFileName);
Apdorojama.GetForm().Open();

Išoriniame apdorojime pagrindinė forma visada turi būti įprasta, o valdoma forma – papildoma, kitaip GetForm() metodas neveiks įprastu taikymo režimu.

Išorinis apdorojimas vykdomas valdomų programų režimu

Valdomų formų režimu algoritmas yra padalintas pagal vykdymo kontekstą. Kliente gauname dvejetainius duomenis naudodami pilną išorinio apdorojimo failo pavadinimą. Gautus dvejetainius duomenis perkeliame į serverį ir talpiname į laikiną saugyklą. Tada turite iškviesti objekto „ExternalProcessing“, kuriam perduodamas laikino saugojimo adresas, metodą „Connect()“. Metodas grąžina prijungto išorinio apdorojimo pavadinimą. Mes grąžiname klientui išorinio apdorojimo pavadinimą, sukuriame apdorojimo formos eilutės kelią ir naudojame OpenForm() metodą, kad atidarytume išorinę apdorojimo formą.

&Serveryje
Funkcija GetExternalProcessingName (dvejetainiai duomenys)
AddressIntemporaryStorage = PlaceInTemporaryStorage(BinaryData);
Return ExternalProcessing.Connect(AddressInTemporaryStorage);
EndFunction

&OnClient
FullFileName = ""; // Visas išorinio apdorojimo failo pavadinimas.
„FileData“ = nauji dvejetainiai duomenys (Visas failo pavadinimas);
ExternalProcessingName = GetExternalProcessingName(FileData);
OpenForm ("Išorinis apdorojimas." + Išorinis apdorojimo pavadinimas + ".Forma");

Saugus išorinio apdorojimo režimas

Objekto ExternalProcessing metodai Create() ir Connect() turi įeinantį parametrą SafeMode – išorinio apdorojimo prijungimo saugiuoju režimu ženklą. Jei parametras nenurodytas, ryšys bus užmegztas saugiuoju režimu.
Saugus režimas skirtas apsaugoti sistemą nuo „nepatikimo“ programos kodo vykdymo serveryje. Galimas pavojus kyla dėl išorinio apdorojimo arba vartotojo įvesto programos kodo, skirto naudoti Vykdyti() ir Calculate() metoduose.
Saugusis režimas nustato šiuos apribojimus:
  • privilegijuotas režimas atšaukiamas, jei jis buvo įdiegtas;
  • bandymai įjungti privilegijuotą režimą ignoruojami;
  • draudžiamos operacijos su COM objektais;
  • draudžiama krauti ir prijungti išorinius komponentus;
  • prieiga prie failų sistemos draudžiama (išskyrus laikinuosius failus);
  • Prieiga prie interneto draudžiama.
Interaktyviai atidaryti procesai saugiuoju režimu nevykdomi, todėl rekomenduojama įdiegti išorinių procesorių atidarymo saugiuoju režimu mechanizmą, taip pat leidimo lygiu uždrausti vartotojui interaktyviai atidaryti išorinius procesorius.
Norint uždrausti interaktyvų apdorojimo atidarymą, atliekant visus vartotojui priskirtus vaidmenis, būtina pašalinti teisę „Interaktyvus išorinio apdorojimo atidarymas“ (žr. 1 pav.).
1 pav. Teisės interaktyviai atidaryti išorinį apdorojimą/ataskaitas
Teisė „Interaktyvus išorinio apdorojimo atidarymas“ neturi jokios įtakos išorinio apdorojimo objektui.

Programinis išorinių ataskaitų atidarymas yra panašus į išorinį apdorojimą, tačiau turėtumėte naudoti pasaulinio konteksto objektą ExternalReports, kurio tipas ExternalReportsManager.

Spausdinti (Ctrl+P)

Konfigūracijos objektai

Jei serveryje reikia naudoti „nepatikimą“ programos kodą: išorinį apdorojimą arba vartotojo įvestą programos kodą, skirtą naudoti Run() ir Calculate() metoduose, galite naudoti saugų darbo režimą.

Saugiuoju režimu:

  • Privilegijuotas režimas atšauktas.
  • Perjungimas į privilegijuotąjį režimą ignoruojamas.
  • Draudžiama operacijos, kurių metu naudojamos išorinės priemonės, susijusios su 1C:Enterprise platforma (įskaitant nurodytų metodų neblokuojančius analogus):
  • COM mechanizmai:
    • COMObject();
    • GetCOMObject();
    • WrapperHTMLDocument.GetCOMObject().
  • Išorinių komponentų įkėlimas:
    • LoadExternalComponent();
    • ConnectExternalComponent ().
  • Prieiga prie failų sistemos:
    • ValueInFile();
    • CopyFile ();
    • MergeFiles();
    • MoveFile();
    • SplitFile();
    • CreateDirectory();
    • Ištrinti failus ();
    • Naujas failas;
    • Naujas xBase;
    • EntryHTML.OpenFile();
    • SkaitytiHTML.OpenFile();
    • ReadXML.OpenFile();
    • WriteXML.OpenFile();
    • ReadingFastInfoset.OpenFile();
    • RecordFastInfoset.OpenFile();
    • CanonicalXMLRecord.OpenFile();
    • TransformXSL.LoadFromFile();
    • WriteZipFile.Open();
    • SkaitymasZipFile.Open();
    • New ReadText(), jei pirmasis parametras yra eilutė;
    • ReadText.Open(), jei pirmasis parametras yra eilutė;
    • NewTextRecord(), jei pirmasis parametras yra eilutė;
    • WriteText.Open(), jei pirmasis parametras yra eilutė;
    • NewTextExtract();
    • keičiant ypatybę ExtractText.FileName;
    • ExtractText.Write();
    • New Picture(), jei pirmasis parametras yra eilutė;
    • Paveikslėlis.Rašyti();
    • naujas BinaryData();
    • BinaryData.Write();
    • NewDataRecord(), jei pirmasis parametras yra eilutė;
    • New ReadData(), yra pirmasis parametras - eilutė;
    • visi FileStreamManager objekto metodai;
    • Naujas FileStream();
    • FormattedDocument.Write();
    • GeografinėSchema.Skaityti();
    • GeografinėSchema.Rašyti();
    • GeografinėSchema.Spausdinti();
    • LentelinisDocument.Read();
    • TabularDocument.Write();
    • LentelinisDokumentas.Spausdinti(); Grafinė schema.Skaityti();
    • GrafinėSchema.Rašyti();
    • GrafikaSchema.Print();
    • TextDocument.Read();
    • TextDocument.Write().
  • Interneto ryšys:
    • Naujas interneto ryšys,
    • Naujas InternetMail,
    • Naujas „InternetProxy“,
    • Naujas HTTP ryšys,
    • Naujas FTP ryšys.

DĖMESIO! Atliekant draudžiamas operacijas, vykdymo metu daroma išimtis.

Pastaba. Išorinės ataskaitos ir apdorojimas, atidarytas naudojant meniu Failas – Atidaryti, vykdomi saugiuoju režimu, jei vartotojas neturi administracinės prieigos teisių.

Saugiojo režimo įjungimo kartų skaičius turi sutapti su jo išjungimo skaičiumi. Tačiau, jei saugus režimas buvo įjungtas atliekant procedūrą arba funkciją (vieną ar daugiau kartų), bet nebuvo išjungtas, sistema automatiškai išsijungs tiek kartų, kiek liko neužbaigtų įjungimų atliekant procedūrą ar funkciją.

Jei procedūroje ar funkcijoje iškviečiamas metodas Nustatyti saugų režimą (klaidinga) padarė daugiau nei metodų iškvietimų SetSafeMode (True), tada bus padaryta išimtis.

Programinės įrangos saugaus režimo diegimas gali būti reikalingas tuo atveju, kai konfigūracijos kūrėjas ketina naudoti trečiosios šalies (konfigūracijos atžvilgiu) programos kodą, kurio patikimumo kūrėjas negali garantuoti. Tokio kodo pavyzdys yra Execute() ir Compute() metodų vykdymas tais atvejais, kai vykdomasis kodas gaunamas iš išorinio pasaulio. Tokiu atveju gera praktika būtų nustatyti saugųjį režimą prieš atliekant šiuos metodus:

// Sugeneruojamas programos kodas, kuris turi būti vykdomas // Gali būti, kad kodas įkeltas iš išorinių šaltinių // arba įvestas rankiniu būdu ExecutableCode = GetExecutedCodeFromExternalWorld(); // Įjungti saugųjį režimą SetSafeMode(True); // Vykdyti potencialiai pavojingą kodą Execute(ExecutableCode); // Išjungti saugųjį režimą SetSafeMode(False);

Kai kuriais atvejais saugaus režimo nustatymai gali nesuderinti su privilegijuoto režimo nustatymais. Tokio konflikto pavyzdys yra dokumento, kuriam nustatyta ypatybė Privilegijuotas režimas, paskelbimas iš įtaisytosios kalbos kodo, kuris vykdomas saugiuoju režimu. Tokiu atveju privilegijuotas režimas yra išjungtas, o bandymai jį įjungti ignoruojami. Dėl to įterptosios kalbos kodas, kuris „skaičiuoja“ įjungtą privilegijuotą režimą, „susitinka“ su jo nebuvimu, o tai sukelia klaidų su neaiškiomis jų atsiradimo priežastimis. Siekdama išvengti tokios situacijos, sistema 1C:Enterprise automatiškai išjungia saugųjį režimą įvykių tvarkytojams, kurie yra objekto modulyje arba tvarkyklės modulyje, su sąlyga, kad vykdomasis kodas integruota kalba nėra konfigūracijos plėtinyje. Tokios tvarkyklės sintaksės asistente pažymimos specialiu būdu.

Ji taip pat suteikia galimybę išjungti saugųjį režimą iš integruotos kalbos (jei programos kodas, kuris bando jį išjungti, nėra konfigūracijos plėtinyje). Yra būdas išjungti saugųjį režimą SetDisableSafeMode(). Galite patikrinti, ar saugus režimas šiuo metu išjungtas (automatiškai arba iškviečiant metodą), naudodami šį metodą GetDisableSafeMode ().

Vienu metodu integruotoje kalboje negali būti daugiau nei vienas saugaus režimo nustatymo (iškviečiant SetSafeMode() metodą) ir saugaus režimo išjungimo (automatiškai vykdant įvykių tvarkykles). metaduomenų objektus arba iškviečiant SetDisableSafeMode() metodą). Bandant padidinti lizdą, daroma išimtis:

// Teisingas ProcedureProcedureName() SetDisableSafeMode(True) naudojimas; SetSafeMode(true); SetSafeMode(False); SetDisableSafeMode(False); EndProcedure // Neteisingai naudojamas ProcedureProcedureName() SetDisableSafeMode(True); SetSafeMode(true); SetDisableSafeMode(False); // Išimtis EndProcedure ProcedureProcedureName() SetSafeMode(True); SetDisableSafeMode(False); // Išimtis EndProcedure

8.3.9.2170 versijoje saugumas buvo sustiprintas – dabar sistema prašo patvirtinimo, kad būtų paleistas išorinis apdorojimas, plėtiniai ir kt. Matyt po Trojos arklys:

Įdiegtas apsaugos nuo pavojingų veiksmų mechanizmas. Kai atliekamas potencialiai pavojingas veiksmas, sistema pateikia įspėjimą, kuriame pateikiama informacija apie atliekamą veiksmą ir galimą šio veiksmo pavojų. Potencialiai pavojinga veikla apima:

  • Išorinės ataskaitos įkėlimas, apdorojimas arba konfigūracijos plėtinys.
  • Įkeliama arba atnaujinama konfigūracija / plėtinys.
  • Prieiga iš išorinės ataskaitos / procesoriaus arba plėtinio prie šių galimybių:
  • Vykdoma operacinės sistemos komanda.
  • Vartotojo valdymas.

Vartotojas turi galimybę leisti arba atmesti potencialiai pavojingą veiksmą. Jei veiksmas leidžiamas, kai kuriais atvejais gali tekti iš naujo atlikti leidžiamą veiksmą.

Pranešimas atrodo taip:

Apsaugos Įspėjimas

Atidaroma "" iš failo "C:\.......epf". Rekomenduojama atkreipti dėmesį į šaltinį, iš kurio buvo gautas šis failas. Jei nesutariama su šaltiniu dėl papildomų modulių kūrimo arba kyla abejonių dėl failo turinio, tada jo atidaryti nerekomenduojama, nes tai gali pakenkti kompiuteriui ir duomenims. Leiskite atidaryti šį failą. NE VISAI

Sprendimas:

Konfigūravimo priemonėje informacijos saugos naudotojo ypatybėse panaikinkite žymės langelio „Apsauga nuo pavojingų veiksmų“ žymėjimą.

Iš dokumentacijos:Apsaugos nuo pavojingos veiklos mechanizmo išjungimas

Kai kuriais atvejais būtina išjungti apsaugos nuo pavojingų veiksmų mechanizmą. Norėdami tai padaryti, galite naudoti šias parinktis:

1. Konkretaus vartotojo ypatybėse išjunkite žymės langelį Apsauga nuo pavojingų veiksmų (Apsauga nuo pavojingų veiksmų). Tai išjungs to vartotojo apsaugą.

2. Naudokite išorinio apdorojimo (ataskaitų) tvarkytojų Connect() metodo parametrą Apsauga nuo pavojingų veiksmų. Tokiu atveju galima įkelti išorinį apdorojimą (ataskaitą) be vartotojo užklausų.

3. Prieš iškviesdami šio objekto Write() metodą, naudokite objekto Configuration Extension savybę Apsauga nuo pavojingų veiksmų.

4. Failo conf.cfg naudokite parametrą DisableUnsafeActionProtection. Tokiu atveju apsaugos nuo pavojingų veiksmų mechanizmas bus išjungtas visiems informacijos bazės vartotojams, kurių ryšio eilutės atitinka nurodytas kaukes.

Apsaugos nuo pavojingų veiksmų išjungimas vykdomas pagal šias taisykles (nurodyta tvarka):

1. Apsauga laikoma išjungta, jei dabartinio vartotojo Apsauga nuo pavojingos veiklos žymimasis laukelis išvalytas.

2. Apsauga laikoma išjungta, jei ryšio su informacijos baze eilutė atitinka vieną iš šablonų, nurodytų conf.cfg failo parametre DisableUnsafeActionProtection.

3. Jei išorinis apdorojimas (ataskaita) yra susijęs su apsauga, aiškiai išjungta naudojant parametrą Apsauga nuo nesaugių veiksmų.

4. Jei apsauga yra aiškiai išjungta naudojant plėtinio ypatybę Apsauga nuo pavojingų veiksmų.

Faktas yra tas, kad naudojant 1C kliento-serverio versiją, išorinis apdorojimas / ataskaitos atidaromos saugiuoju režimu, kuriame draudžiama naudoti privilegijuotąjį režimą. O privilegijuotas režimas labai dažnai naudojamas tipinėse konfigūracijas: spausdintų formų generavimas, įvairūs paslaugų patikrinimai (biržų registracija) ir kt. Dėl to net naudojant įprastą prieigos kontrolės sistemos ataskaitą be formos (pagal numatytuosius nustatymus naudojama bendra forma „Ataskaitos forma“) ir išsaugodami pasirinktinius ataskaitos nustatymus (atitinkamame kataloge), gausite klaidą apie nepakankamą prieigą. teisės į įvairias konstantas ir seanso parametrus, naudojamus oficialiais tikslais po eilutės SetPrivilegedMode(True) ;

„Teisingas“ sprendimas būtų prijungti išorinį apdorojimą ir ataskaitas per BSP „Papildomos ataskaitos ir apdorojimas“ mechanizmus, išjungiant saugųjį režimą arba pridedant leidimus (mano nuomone, iš BSP 2.2.2.1 versijos). Bet jei dėl kokių nors priežasčių reikia naudoti išorinius ataskaitų teikimo / apdorojimo failus, galite sukonfigūruoti klasterio saugos profilį, naudojamą kaip saugaus režimo saugos profilį konkrečioje informacijos bazėje.

Iš karto norėčiau pažymėti, kad ši parinktis nėra pageidautina, tačiau dėl įvairių aplinkybių ji gali būti naudojama tokia supaprastinta forma. Pavyzdžiui, aš turiu kelias duomenų bazes skirtinguose miestuose, bendrą vietinę su griežtai apribotomis teisėmis, uždaru USB ir pan., kai kur naudoju Accounting 2.0, o kažkur 3.0, beveik visas ataskaitas darau naudodamas ACS įrankius be formų, kad jos atidarytos abiejose versijose. Visų šių ataskaitų tvarkymas skirtingoms versijoms ir skirtingoms duomenų bazėms yra daug darbo jėgos ir beprasmiškas, nes Planuojama pereiti prie vienos konfigūracijos ir bazinės...

Sukurkime profilį.
Klasterio konsolėje sukuriame saugos profilį, kuriame nustatome vėliavėles "Gali būti naudojamas kaip saugaus režimo saugos profilis" ir " skiltyje "Visa prieiga leidžiama:" „Privilegijuotuoju režimu“.

Daugeliu atvejų naudojant ataskaitas ir paprastą apdorojimą, šis metodas bus taikomas. Sudėtingesnėse situacijose nėra prasmės apibūdinti proceso, nes tai aprašyta dokumentacijoje (galimybė konfigūruoti konkrečių išorinių failų saugos profilius, nurodant maišos kiekį ir pan.).

P.S. Maniau, kad saugos profiliai veikia tik naudojant platformos ir serverio licencijas CORP lygiu, bet ši funkcija veikia ir 1C:Enterprise 8.3 platformoje (sąlygiškai ją galima pavadinti PROF, pagal analogiją su standartinėmis konfigūracijomis Basic/PROF/CORP)

Dalintis