Valige lubatud erinev, mida see tähendab. Programmeerija märkmik

Päringukeel on üks 1C 8.3 põhimehhanisme arendajatele. Päringute abil saate kiiresti kätte kõik andmebaasi salvestatud andmed. Selle süntaks on väga sarnane SQL-iga, kuid sellel on mõned erinevused.

1C 8.3 (8.2) päringukeele peamised eelised SQL-i ees:

  • viiteväljade viitamise tühistamine (ühe või mitme punkti muutmine objekti atribuutideks);
  • tulemustega töötamine on väga mugav;
  • oskus luua virtuaalseid tabeleid;
  • päringu saab kirjutada nii inglise kui ka vene keeles;
  • võimalus blokeerida andmeid, et vältida ummikseisu.

1C päringukeele puudused:

  • erinevalt SQL-ist ei võimalda 1C päringud teil andmeid muuta;
  • salvestatud protseduuride puudumine;
  • stringi arvuks teisendamise võimatus.

Vaadake meie miniõpetust 1C päringukeele põhikonstruktsioonide kohta.

Kuna 1C-s olevad päringud võimaldavad teil ainult andmeid vastu võtta, peavad kõik päringud algama sõnaga "SELECT". Pärast seda käsku näidatakse väljad, kust soovite andmeid hankida. Kui määrate "*", valitakse kõik saadaolevad väljad. Koht, kust andmeid (dokumendid, registrid, kataloogid jne) valitakse, märgitakse pärast sõna "KÄTTE".

Allolevas näites on kogu nomenklatuuri nimetused valitud "Nomenklatuuri" teatmeteosest. Pärast sõna “KUIDAS” näidatakse tabelite ja väljade varjunimed (nimed).

VALI
Nomenklatuur.Nimi AS NimiNomenklatuur
FROM
Kataloog Nomenklatuur AS Nomenklatuur

Käsu "SELECT" kõrval saate määrata märksõnu:

  • ERINEVAD. Päring valib ainult read, mis erinevad vähemalt ühe välja poolest (ilma duplikaatideta).
  • ESIMESE n, Kus n– ridade arv valitava tulemuse algusest. Kõige sagedamini kasutatakse seda konstruktsiooni koos sorteerimisega (ORDER BY). Näiteks kui peate kuupäeva järgi valima teatud arvu uusimaid dokumente.
  • LUBATUD. See disain võimaldab valida andmebaasist ainult need kirjed, mis on praegusele kasutajale kättesaadavad. Kui seda märksõna kasutatakse, kuvatakse kasutajale veateade, kui ta proovib teha päringuid kirjetest, millele tal pole juurdepääsu.

Neid märksõnu saab kasutada kõiki koos või eraldi.

VAHETUSEKS

See klausel lukustab andmed konfliktide vältimiseks. Lukustatud andmeid ei loeta teisest ühendusest enne tehingu lõppu. Selles klauslis saate määrata konkreetsed tabelid, mida soovite lukustada. Vastasel juhul blokeeritakse kõik. Disain on asjakohane ainult automaatse blokeerimisrežiimi jaoks.

Kõige sagedamini kasutatakse saldode laekumisel klauslit "MUUDATUSEKS". Tõepoolest, kui programmis töötab korraga mitu kasutajat, samal ajal kui üks saab saldod, saab teine ​​neid muuta. Sel juhul ei ole saadud saldo enam õige. Kui blokeerite andmed selle ettepanekuga, siis seni, kuni esimene töötaja saab õige saldo ja teeb sellega kõik vajalikud manipulatsioonid, peab teine ​​töötaja ootama.

VALI
Vastastikused arveldused. Töötaja,
Vastastikused arveldused Summa Vastastikused arveldused Saldo
FROM
Kogumisregister. Vastastikused arveldused töötajatega Saldod AS Vastastikused arveldused
VAHETUSEKS

KUS

Konstruktsioon on vajalik mahalaaditavate andmete valiku tegemiseks. Teatud juhtudel on registritest andmete hankimisel mõistlikum virtuaalsete tabelite parameetrites ette näha valikutingimused. "KUS" kasutamisel hangitakse esmalt kõik kirjed ja alles seejärel rakendatakse valikut, mis pärsimist oluliselt aeglustab.

Järgnevalt on toodud näide konkreetse ametikohaga kontaktisikute hankimise taotlusest. Valikuparameetril on järgmine vorming: &ParameterName (parameetri nimi on suvaline).

VALIK (CASE)

Konstruktsioon võimaldab määrata tingimusi otse päringu kehas.

Allolevas näites sisaldab "Lisaväli" teksti olenevalt sellest, kas dokument on postitatud või mitte.

VALI
Sissepääs T&U.Link,
VALIK
MILLAL
SIIS "Dokument postitatud!"
MUU "Dokumenti pole postitatud..."
LÕPETA AS Täiendav väli
FROM
Dokument.Kauba kättesaamineTeenused AS KviitungT&C

LIITU

Ühendab kaks tabelit teatud lingitingimuse alusel.

VASAKU/PAREMA LIITUMINE

LEFT liitumise olemus seisneb selles, et esimene määratud tabel võetakse täielikult ja teine ​​kinnitatakse selle külge ühenduse seisukorra järgi. Kui teises ei ole esimesele tabelile vastavaid kirjeid, siis asendatakse nende väärtustena NULL. Lihtsamalt öeldes on põhitabel esimene määratud tabel ja teise tabeli andmed (kui need on olemas) on selle andmetega juba asendatud.

Näiteks tuleb kaubaartiklid hankida dokumentidelt "Kauba ja teenuste vastuvõtmine" ning hinnad inforegistrist "Kaubahinnad". Sel juhul, kui mõne positsiooni hinda ei leita, asendage selle asemel NULL. Kõik dokumendis olevad kaubad valitakse välja olenemata sellest, kas neil on hind või mitte.

VALI
T&U nomenklatuuri kviitung,
Hinnad. Hind
FROM
Dokument.Kauba kättesaamineTeenused.Kauba AS KviitungT&C
SISEMINE LIITUMINE
ON K&A kviitung.Nomenklatuur = Hinnad.Nomenklatuur

PAREMAL on kõik täpselt vastupidine.

TÄIELIK ÜHENDUS

Seda tüüpi liitumine erineb eelmistest selle poolest, et selle tulemusena tagastatakse nii esimese kui ka teise tabeli kõik kirjed. Kui määratud lingitingimuse jaoks ei leitud esimesest või teisest tabelist kirjeid, tagastatakse selle asemel NULL.

Kui kasutate eelmises näites täielikku liitumist, siis valitakse välja kõik kaubaartiklid Kauba ja Teenuse Kviitungi dokumendist ja kõik viimased hinnad Artiklihindade registrist. Ei leitud kirjete väärtused nii esimeses kui ka teises tabelis on NULL.

SISEMINE LIITUMINE

SISEMINE ja TÄISühenduse erinevus seisneb selles, et kui kirjet vähemalt ühest tabelist ei leita, siis päring seda üldse ei kuva. Sellest tulenevalt valitakse Kauba ja Teenuse Kviitungi dokumendist ainult need kaubaartiklid, mille kohta on kirjed Artiklihindade inforegistris, kui eelmises näites asendame TÄIS SISEMISEga.

GROUP BY

1C päringutes rühmitamine võimaldab ahendada tabeli ridu (väljade rühmitamine) vastavalt teatud ühisele tunnusele (väljade rühmitamine). Rühmitamisvälju saab kuvada ainult koondfunktsioonide abil.

Järgmise päringu tulemuseks on kaubatüüpide loend koos nende maksimaalsete hindadega.

VALI
,
MAX(Hind.Hind) AS Hind
FROM

GROUP BY
Hinnad.Nomenklatuur.TüüpNomenklatuur

TULEMUSED

Erinevalt rühmitamisest kuvatakse kogusummade kasutamisel kõik kirjed ja neile on juba lisatud summade read. Rühmitamine kuvab ainult üldistatud kirjed.

Tulemusi saab kokku võtta kogu tabeli kohta (kasutades märksõna "GENERAL"), mitme välja kohta, hierarhilise struktuuriga väljade kohta (märksõnad "HIERARHIA", "AINULT HIERARHIA"). Summeerimisel ei ole vaja kasutada koondfunktsioone.

Vaatleme ülaltoodud näitega sarnast näidet, kasutades rühmitamist. Sel juhul tagastab päringutulemus mitte ainult rühmitatud väljad, vaid ka üksikasjalikud kirjed.

VALI
Hinnad.Nomenklatuur.Nomenklatuuri tüüp AS Nomenklatuuri tüüp,
Hinnad.Hind AS Hind
FROM
RegistreeriTeave.HinnadNomenklatuur.SliceLast AS Hinnad
TULEMUSED
MAXIMUM (hind)
KÕRVAL
Tüüpnomenklatuur

OMAMINE

See operaator on sarnane WHERE-operaatoriga, kuid seda kasutatakse ainult koondfunktsioonide jaoks. Muud väljad peale selle operaatori kasutatavate väljade tuleb rühmitada. Tehtaja "WHERE" ei ole koondfunktsioonide jaoks rakendatav.

Allolevas näites valitakse kauba maksimumhinnad, kui need ületavad 1000, grupeerituna kaubatüübi järgi.

VALI

MAX(Hind.Hind) AS Hind
FROM
RegistreeriTeave.HinnadNomenklatuur.SliceLast AS Hinnad
GROUP BY
Hinnad.Nomenklatuur.TüüpNomenklatuur
OMAMINE
MAX(hinnad.hind) > 1000

SORTEERIMA

Operaator "ORDER BY" sorteerib päringu tulemuse. Tagamaks, et kirjed väljastatakse ühtses järjekorras, kasutatakse AUTO-ORDERIT. Primitiivsed tüübid sorteeritakse tavapäraste reeglite järgi. Viitetüübid on sorteeritud GUID-i järgi.

Näide töötajate nimede järgi sorteeritud loendi hankimisest:

VALI
Töötajad.Nimi AS Nimi
FROM
Kataloog Töötajad AS Töötajad
SORTEERIMA
Nimi
AUTOMATELLIMUS

1C päringukeele muud konstruktsioonid

  • ÜHENDADA- kahe päringu tulemused ühes.
  • ÜHENDAGE KÕIK– sarnane JOIN-ga, kuid ilma identseid ridu rühmitamata.
  • TÜHJA LAUD- kasutatakse mõnikord päringute ühendamisel tühja pesastatud tabeli määramiseks.
  • PANGE- loob ajutise tabeli keerukate 1C päringute optimeerimiseks. Selliseid päringuid nimetatakse paketttaotlusteks.

Päringu keele funktsioonid

  • SUBSTRING kärbib stringi määratud positsioonist määratud märkide arvu võrra.
  • AASTA…TEINE võimaldab teil saada numbritüübi valitud väärtuse. Sisendparameeter on kuupäev.
  • PERIOODI ALGUS JA PERIOODI LÕPP kasutatakse kuupäevadega töötamisel. Täiendava parameetrina on määratud perioodi tüüp (PÄEV, KUU, AASTA jne).
  • LISADA võimaldab lisada või lahutada kuupäevast teatud tüüpi määratud kellaaja (TEINE, MINUT, PÄEV jne).
  • KUUPÄEVADE ERINEVUS määrab kahe kuupäeva erinevuse, täpsustades väljundväärtuse tüübi (PÄEV, AASTA, KUU jne).
  • ON NULL asendab puuduva väärtuse määratud avaldisega.
  • ESITLUS ja ESITLUSLINGID saada määratud välja stringi esitus. Neid kasutatakse vastavalt mis tahes väärtuste ja ainult võrdlusväärtuste jaoks.
  • TYPE, VALUE TYPE kasutatakse sisendparameetri tüübi määramiseks.
  • LINK on atribuudi väärtuse tüübi loogiline võrdlusoperaator.
  • EXPRESS kasutatakse väärtuse teisendamiseks soovitud tüüpi.
  • KUUPÄEV KELLAAEG saab arvväärtustest (aasta, kuu, päev, tund, minut, sekund) väärtuse tüüp "Kuupäev".
  • TÄHENDUS 1C päringus kasutatakse seda eelnevalt määratletud väärtuste määramiseks - kataloogid, loendid, omaduste tüüpide plaanid. Kasutusnäide: " Kus LegalIndividual = väärtus (loend.Juriidiline isik.Individuaal)«.

Päringu koostaja

1C-ga päringute loomiseks on väga mugav sisseehitatud mehhanism - päringu kujundaja. See sisaldab järgmisi peamisi vahekaarte:

  • "Tabelid ja väljad" – sisaldab valitavaid välju ja nende allikaid.
  • "Lingid" – kirjeldab konstruktsiooni CONNECTION tingimusi.
  • "Rühmitamine" - sisaldab rühmituste konstruktsioonide kirjeldust ja nende järgi kokku võetud välju.
  • "Tingimused" – vastutab päringus olevate andmete valiku eest.
  • "Advanced" - täiendavad päringu parameetrid, näiteks käsu "SELECT" märksõnad jne.
  • “Joins / Aliases” - näidatakse tabelite ühendamise võimalused ja määratakse varjunimed (konstruktsioon “KUIDAS”).
  • "Telli" - vastutab päringute tulemuste sortimise eest.
  • "Kokkusummad" – sarnane vahekaardile "Rühmitamine", kuid seda kasutatakse konstruktsiooni "TOTALS" jaoks.

Päringu enda teksti saab vaadata, klõpsates vasakus alanurgas nuppu "Taotlus". Sellel kujul saab seda käsitsi parandada või kopeerida.


Päringukonsool

Päringu tulemuste kiireks vaatamiseks režiimis "Ettevõte" või keerukate päringute silumiseks kasutage . Sellesse kirjutatakse päringu tekst, määratakse parameetrid ja näidatakse selle tulemust.

Saate päringukonsooli alla laadida ITS-kettale või .

Päring on võimas tööriist, mis võimaldab kiiresti (võrreldes kõigi teiste meetoditega) saada ja töödelda 1C teabebaasi erinevates objektides sisalduvaid andmeid.

Looge taotlus

Päring luuakse eraldi objektina, millel on nõutav atribuut Tekst, kuhu taotlus esitatakse. Lisaks saab päringule edastada erinevaid selle täitmiseks vajalikke parameetreid. Pärast teksti ja päringu parameetrite täitmist tuleb päring täita ja täitmistulemus asetada väärtuste valikusse või tabelisse. See kõik näeb välja selline:

//Loo taotlus
Taotlus = uus taotlus;

//Täida päringu tekst
Taotlus. Tekst= "Siia kirjutame taotluse teksti";

// Parameetrite edastamine päringule
Taotlus. SetParameter("Parameetri nimi" , ParameetriVäärtus) ;

//Täitke taotlus
Tulemus = Taotlus. Execute() ;

//Laadi päringu tulemus valikusse üles
Näidis = Tulemus. Vali() ;

//Laadige päringu tulemus väärtuste tabelisse üles
tabel= tulemus. Unload() ;

//Viimased toimingud saab kombineerida
Tõmba = Taotle. Käivita () . Vali() ;
//või
tabel= päring. Käivita () . Unload() ;

1C päringukeele põhitõed

Kõige lihtsamad ja sagedamini kasutatavad päringud on andmete hankimiseks mõnest allikast. Allikaks võivad olla peaaegu kõik mis tahes andmeid sisaldavad objektid: kataloogid, dokumendid, registrid, konstandid, loendid, tunnuste tüüpide plaanid jne.

Nendelt objektidelt saate päringu abil saada atribuutide, tabeliosade, tabeliosade atribuutide, muudatuste, ressursside jne väärtused.

Taotluse teksti saamiseks on seda sageli mugav kasutada Küsi konstruktorit. Seda kutsutakse välja, kui paremklõpsate programmi mooduli suvalises kohas.

Näiteks kui teil on vaja hankida kataloogi kõigi üksikasjade väärtused Vastaspooled, siis näeb päring välja selline:

Taotlus. Tekst = "VALI
| *
| ALT
| Kataloog. Töövõtjad"
;

Kui teil on vaja saada ainult üksikuid üksikasju, siis - nii:

Taotlus. Tekst = "VALI
| Kood,
| nimi,
| Lapsevanem
| ALT
| Kataloog. Töövõtjad"
;

Sellise taotluse saamiseks kirjutage sisse Küsi konstruktorit peate vahekaardil valima sobivad väljad Lauad ja väljad.

Päringus valitud elementidele ja allikatele saab määrata aliased ning kasutada neid hiljem nii päringus endas kui ka tulemusega töötamisel. Lisaks võib päring sisaldada eelmääratletud konkreetse väärtusega või arvutatud väärtusega välju:

Taotlus. Tekst = "VALI
| Customers.Code AS number,

| 1000 AS VäliVäärtusega
| ALT
;

Näidis = Taotlus. Käivita () . Vali() ;

Kuigi valik. Järgmine() Loop
ClientNumber = Valik. Number;
ClientName = Valik. nimi;
Väärtus = valik. FieldWith Value;
EndCycle ;

Kasutage varjunimede määramiseks vahekaarti. Ametiühingud/aliased V Päringu koostaja.

Ja fikseeritud või arvutatud väärtusega väli luuakse vahekaardil käsitsi Tabelid ja väljad, veerus Väljad.

Kõiki valitud elemente saab sortida nii otseses kui ka vastupidises järjekorras. Tellimiseks saate valida ühe või mitu välja. Koos tellimisega on mõnikord kasulik valida ainult üks või paar esimestest elementidest.

//Tellige kliendid nime järgi vahemikus A kuni Z ja valige 10 esimest
Taotlus. Tekst = "VALI ESIMESED 10
| Customers.Code AS number,
| Customers.Name AS nimi,
| 1000 AS VäliVäärtusega
| ALT

|TELLI
| nimi"
;

//Valige tähestikulises järjekorras uusim klient
Taotlus. Tekst = "VALI ESIMESE 1
| Customers.Code AS number,
| Customers.Name AS nimi,
| 1000 AS VäliVäärtusega
| ALT
| Kataloog Vastaspooled AS Kliendid
|TELLI
| Nimi DESC"
;

Saate piirata elementide valikut, mille jaoks kasutajal on juurdepääsuõigused. Või eemaldage päringu tulemusest korduvad read.

//Kasutajale lubatud andmete valik
Taotlus. Tekst = "VALI LUBATUD
| Customers.Code AS number,
| Customers.Name AS nimi,
| 1000 AS VäliVäärtusega
| ALT
| Kataloog. Vastaspooled AS kliendid"
;

//Valige mittekorduvad elemendid
Taotlus. Tekst = "VALI TEINE
| Customers.Code AS number,
| Customers.Name AS nimi,
| 1000 AS VäliVäärtusega
| ALT
| Kataloog. Vastaspooled AS kliendid"
;

Järjekord määratakse vahekaardil Telli V päringu koostaja, valitud elementide arv, eraldusvõime ja korratavuse parameetrid - vahekaardil Lisaks.

Jätkub…

"Rooli" konfiguratsiooniobjekt annab konfiguratsiooniobjektide operatsioonide (toimingute) õigused.

Roll "Täielikud õigused".

See on lihtsalt roll (pole eelmääratletud), millel on kõigi konfiguratsiooniobjektide kõikvõimalike õiguste märkeruudud.

Selle erinevus teistest rollidest on haldusõiguse olemasolu.

Kui luuakse vähemalt üks kasutaja, hakkab süsteem kontrollima "Administratsiooni" õigust – see peab olema vähemalt ühel kasutajal.

Piirake juurdepääsu rekordtasemel

Reataseme turvalisus (RLS) – piirang rekordtasemel.

Andmetele juurdepääsupiirangute mehhanism võimaldab teil hallata juurdepääsuõigusi mitte ainult metaandmeobjektide, vaid ka andmebaasiobjektide tasemel. Andmetele juurdepääsu piiramiseks saab kasutada järgmisi objekte:

  • rollid,
  • seansi valikud,
  • funktsionaalsed võimalused,
  • privilegeeritud ühised moodulid,
  • päringukeeles märksõna LUBATUD.

Mehhanismi eesmärk on piirata juurdepääsu metaandmeobjektide tabeli kirjetele vastavalt suvalistele tingimustele, mis on seatud nende tabelite reaväljade väärtustele. Näiteks selleks, et näha ainult "oma" vastaspoolte, organisatsioonide jne kirjeid.

Juurdepääsupiirangute tehniline rakendamine 1C-s

1C genereerib päringu DBMS-ile. Serveriklaster lisab päringule jaotise WHERE, mis sisaldab RLS-i juurdepääsu piiramise tingimuse teksti, seejärel saadetakse see päring DBMS-i, eraldatud andmed tagastatakse 1C-kliendile.


See mehhanism töötab iga kliendi päringu puhul:

  • aruannetes
  • dünaamilistes loendites ja tavalistes loendivormides
  • juhuslikes taotlustes.

Mehhanismi selline rakendamine mõjutab jõudlust suuresti.

Juurdepääsupiirangutest möödahiilimise viisid.

Suurte ressursimahukate toimingute puhul (näiteks dokumentide ümberpostitamise töötlemine) saab osa koodist teisaldada privilegeeritud moodulitesse.

A) privilegeeritud moodul on jagatud moodul, mille atribuutides on lipp "Privilegeeritud".

Selle eripära seisneb selles, et selles sisalduv kood käivitatakse ilma juurdepääsukontrollita, sealhulgas RLS-i.


B) samuti privilegeeritud režiimi saab lubada dokumendiobjekti moodulite jaoks. Seda tehakse dokumendi atribuutides, lipp

  • Privilegeeritud režiim hoidmisel
  • Privilegeeritud režiim ajakava tühistamisel


C) Meetod SetPrivilegedMode()

Süsteemikäsk, mis võimaldab teil muuta osa mis tahes mooduli koodist privilegeeritud.

Järgmisest koodireast hakkab kehtima privilegeeritud täitmisviis.

See toimib kuni selle režiimi keelamise rea ilmumiseni või kuni protseduuri/funktsiooni lõpuni

(Tõsi);

// mis tahes kood siin käivitatakse ilma õiguste kontrolli ja RLS-ita

SetPrivilegedMode(Valetada); // või protseduuri lõpp / funktsioon

Privilegeeritud režiimi aktiveerimiste arv peab ühtima deaktiveerimiste arvuga. Kui aga privilegeeritud režiim oli protseduuri või funktsiooni sees lubatud (üks kord või mitu), kuid seda ei keelatud, lülitab süsteem automaatselt välja nii palju kordi, kui oli katkestatava protseduuri või funktsiooni ootel aktiveerimisi.

Kui protseduuris või funktsioonis meetod kutsub SetPrivilegedMode(Vale) rohkem kui meetodikutsed SetPrivilegedMode(tõene) siis tehakse erand

Funktsioon Privilegeeritud režiim() tagastab väärtuse Tõene, kui privilegeeritud režiim on endiselt lubatud, ja Väär, kui privilegeeritud režiim on täielikult keelatud. See ei analüüsi konkreetse funktsiooni privilegeeritud režiimi sätete arvu.

Kõik kutsutud protseduurid ja funktsioonid täidetakse ka privilegeeritud režiimis.


Samuti on võimalik alustada privilegeeritud seanssi. See on seanss, kus privilegeeritud režiim määratakse süsteemi algusest peale. Samal ajal töötamise ajal meetod Privilegeeritud režiim() tagastab alati väärtuse Tõene ja privilegeeritud režiimi keelamise võimalust ei toetata. Privilegeeritud seanssi saab alustada ainult administraatoriõigustega kasutaja (haldusõigus). Seansi saab käivitada kliendirakenduse UsePrivilegedMode käivitamise käsurea lüliti või infobaasi ühendusstringi parameetri prmod abil.


Loomulikult tekib küsimus: milleks siis üldse kehtestada juurdepääsupiiranguid, kui sellest saab nii lihtsalt mööda minna?

Turvarežiim.

Jah, on võimalik kirjutada välist töötlust privilegeeritud täitmisrežiimiga ja maha laadida/rikutud andmeid. Selle vältimiseks on süsteemil globaalse konteksti meetod

Seadke SafeMode().

Turvarežiim ignoreerib muu hulgas privilegeeritud režiimi.

See tuleb seadistada enne väliste töötlejate programmilist kutsumist või protseduuride ja funktsioonide eksportimist nende moodulitest.

Loob käitusajal keelatud toimingute tegemisel erandi.

Lisaks saate kasutajate jaoks välja lülitada võimaluse interaktiivselt käivitada väliseid aruandeid ja töötlemist rolliseadete tasemel.

Juurdepääsupiirangu seadistus

RLS-i saab konfigureerida ainult õiguste jaoks:

  • lugemine (vali)
  • lisamine (sisesta)
  • muuda (värskenda)
  • kustutamine (kustuta)

Lugemistoimingute jaoks ja kustutamine, peab andmebaasis olev objekt vastama andmetele juurdepääsupiirangule.

Lisamistoimingu jaoks andmetele juurdepääsupiirang peab vastama objektile, mida plaanitakse andmebaasi kirjutada.

Muutmisoperatsiooni jaoks Andmetele juurdepääsu piirang peab objektiga ühtima nii enne muudatust (loetava objekti jaoks) kui ka pärast muutmist (kirjutatava objekti jaoks).

Kõigi muude õiguste puhul pole see valik saadaval.

Lisame uue piirangu "Nomenklatuuri" teatmeraamatu "lugemisõigusele". Avaneb väljade loend, mille jaoks saate lisatud piirangut seadistada.

See tähendab, et kui proovite pääseda juurde märkeruutudega väljadele, siis piirang töötab ja kui proovite pääseda juurde märkimata väljadele, siis piirang ei tööta.

Kui valite lipu Muud väljad”, seatakse piirang kõigile tabeli väljadele, välja arvatud väljadele, millele on piirangud selgesõnaliselt seatud.


*Funktsioon: lisamise, muutmise, kustutamise õiguste jaoks:

  • Piirangut saab konfigureerida ainult kõikidele väljadele.
  • Piirang saab olla ainult üks.

Õiguse "Lugemine" jaoks saate seada mitu tingimust, need kombineeritakse loogilise operaatoriga "JA".

Järgmist tüüpi andmebaasiobjektide piirangutes ei saa kasutada kõiki piirangu põhiandmeobjekti välju:

  • akumulatsiooniregistrites võivad juurdepääsupiirangud sisaldada ainult piirangu põhiobjekti mõõtmisi;
  • piirangutes raamatupidamisregistrites saab kasutada ainult piirangu põhiobjekti bilansimõõtmisi

Kui kogumiskäiberegistri andmetele piiratud juurdepääsu tingimustes kasutatakse mõõtmisi, mis ei sisaldu kogusummades, siis virtuaalsele käibetabelisse sisenemisel salvestatud kogusummasid ei kasutata ja päring täidetakse täielikult vastavalt liikumislauale.

Juurdepääsupiirangute kehtestamise mehhanism.

Mis tahes toiming andmebaasi salvestatud andmetega 1C: Enterprise'is toob lõpuks kaasa juurdepääsu andmebaasile, esitades taotluse andmete lugemiseks või muutmiseks. Andmebaasi päringute täitmise ajal kehtestavad 1C:Enterprise'i sisemised mehhanismid juurdepääsupiirangud. Kus:

  • Moodustatakse õiguste loetelu(lugege, lisage, värskendage, kustutage), andmebaasi tabelite loend ja selle päringu kasutatavate väljade loend.
  • Kõigist praeguse kasutaja rollidest valige juurdepääsupiirangud kõigi päringuga seotud õiguste, tabelite ja väljade andmetele. Veelgi enam, kui mõni roll ei sisalda juurdepääsupiiranguid ühegi tabeli või välja andmetele, tähendab see, et selles tabelis on saadaval kõigi kirjete nõutavate väljade väärtused. Teisisõnu tähendab andmetele juurdepääsupiirangu puudumine, et on olemas WHERE True piirang.
  • Hankige kõigi seansi parameetrite ja funktsionaalsete valikute praegused väärtused valitud piirangutes osalemine.

Seansi parameetri või funktsionaalse valiku väärtuse hankimine ei nõua praegusel kasutajal selle väärtuse hankimise õigust. Kui aga mõne seansi parameetri väärtus on määramata, siis tekib tõrge ja andmebaasi päringut ei täideta.

Samast rollist tulenevad piirangud kombineeritakse AND-operatsiooniga.

Erinevatelt rollidelt saadud piirangud kombineeritakse OR-toiminguga.

Konstrueeritud tingimused lisatakse SQL-päringutele, millega 1C:Enterprise DBMS-ile juurde pääseb. Juurdepääsupiirangu tingimuste poolelt andmetele juurdepääsul õiguste kontrolli ei teostata (ei metaandmeobjektidele ega andmebaasiobjektidele). Lisaks sõltub tingimuste lisamise mehhanism piirangute "kõik" või "lubatud" valitud töörežiimist.


*Funktsioon: Kui kasutajal on ligipääs mitmele konfigureeritud piirangutega rollile ühe objekti kirjete tasemel, siis sel juhul lisatakse piirangute tingimused loogilise operatsiooniga "OR". Teisisõnu, kasutaja õigused on kumulatiivsed.

Sellest tuleneb järgmine järeldus: ärge lubage ületada tingimust piirata juurdepääsu ühele objektile erinevates rollides, sest sel juhul muutub päringu tekst palju keerulisemaks ja see mõjutab jõudlust.

Terve tee.

Kui piirangud kehtestatakse meetodil "kõik", lisatakse SQL-päringutele tingimused ja väljad, et 1C:Enterprise saaks teavet selle kohta, kas antud kasutaja jaoks keelatud andmeid kasutati andmebaasipäringu täitmisel või mitte. . Kui on kasutatud keelatud andmeid, siis päring katkestatakse juurdepääsu rikkumise tõttu.

Juurdepääsupiirangute kehtestamine meetodil "kõik" on skemaatiliselt näidatud joonisel:


"Lubatud" meetod.

Kui piirangud kehtestatakse meetodil "lubatud", lisatakse sellised tingimused SQL-päringutele, et praeguse kasutaja jaoks keelatud kirjed ei mõjutaks päringu tulemust. Teisisõnu, kui režiimis "lubatud" on kehtestatud piirangud, loetakse selle kasutaja jaoks keelatud kirjed puuduvaks ja need ei mõjuta toimingu tulemust, mis on skemaatiliselt näidatud joonisel:


Andmebaasiobjektidele kehtestatakse andmetele juurdepääsupiirangud, kui 1C:Enterprise andmebaasile juurde pääseb.

1C:Enterprise'i klient-serveri versioonis rakendatakse piiranguid serverile 1C:Enterprise.

See valik (LUBATUD) aga ei tööta, kui viitame päringus tabelile, mille jaoks pole juurdepääsupiiranguid seadistatud, kuid milles on lingid konfigureeritud piirangutega tabeliridadele. Sel juhul on päringu tulemuseks "<Объект не найден>…...” võrdlusvälja väärtuse asemel.


Kui töötate välja aruannet või töötlete üldist või kohandatud konfiguratsioonipäringuid, kontrollige alati lippu "Lubatud". et aruanne töötaks mis tahes kasutaja all mis tahes õiguste kogumiga.

Andmebaasist andmete lugemise objekti puhul ei ole võimalik määrata lippu "Lubatud". Seetõttu on vajalik konfigureerida valikuid objekti lugemiseks, võttes arvesse võimalikke juurdepääsuõiguste piiranguid kasutaja jaoks. Objekttehnoloogias pole vahendeid ainult lubatud andmete saamiseks.

Oluline on, et kui päringus ei ole määratud märksõna ALLOWED, siis ei tohi kõik selles päringus määratud filtrid olla vastuolus päringus kasutatud andmebaasiobjektide lugemise piirangutega. Veelgi enam, kui päringus kasutatakse virtuaalseid tabeleid, siis tuleb vastavad filtrid kehtestada ka virtuaaltabelitele endile.

Praktika 1. Päringu koostaja RLS-i seadetes.

Koostame päringu jaotise "KUS" teksti kataloogi. Võite kasutada päringu koostajat.
Konstruktor on kärbitud.


Vahekaart "Tabelid"

Põhitabel on selle objekti tabel, mille jaoks piirangut konfigureeritakse.

Vahekaardil "Seosed" saate valida ka teisi tabeleid ja seadistada nende vahel erinevaid seoseid.

Tingimuste vahekaart

Siin saate konfigureerida juurdepääsu piiramise tegelikud tingimused.

Lisame laonimekirja kataloogi atribuudile "Price" tingimused "lugemisõiguse" kõikidele tabeli väljadele.

"Nomenklatuur KUS Nomenklatuur. Hind > 500"

Vaatame, kuidas see lihtne reegel töötab. Viitetabel sisaldab järgmisi elemente:


Pärast juurdepääsupiirangu määramist kuvatakse tabelis ainult need elemendid, mis vastavad tingimusele:


Ka rühmad on kadunud. Muutke piirangu teksti

"Nomenklatuur KUS Nomenklatuur. Hind > 500

VÕI nomenklatuur. See on rühm"

Noh, siin on see, mida vajate.


Kui eemaldate loendisätetest välja “koodi” kuvamise, kuvatakse kõik kataloogi elemendid, s.t. piirang ei toiminud. Kui määrate välja "Kood" kuvamise, siis piirang töötab.


Samal ajal, vaatamata sellele, et otsinguelement on loendiväljal nähtav, ei saa selle vormi avada, kuna atribuudile on seatud piirang. Sama suvalises päringus: kui proovite saada atribuuti "piiratud", ilmneb juurdepääsutõrge.


Kui proovite saada "piiratud" rekvisiite programmiliselt, kuvatakse ka juurdepääsutõrge.


Pealegi on lingi kaudu võimatu ligi pääseda objekti ühelegi väljale, sest lingi vastuvõtmisel loeb süsteem kogu objekti ja kui sellel on "piiratud" üksikasjad, siis objekti ei loeta.

Seetõttu tuleb andmebaasiobjektidega programmiliselt töötades silmas pidada võimalikke piiranguid kirje tasemel ja hankida päringuga kõik vajalikud objektiandmed ning need seejärel paigutada struktuuri või täita osa koodist privilegeeritud moodulis.

Pärast juurdepääsupiirangu seadistamist muutus õiguste loendis rea kuvamine - see muutus halliks ja ilmus ikoon.

Juurdepääsu konfiguratsioonipiirangud (RLS).

  • Kokkuvõte jaotis puudub;
  • Virtuaalsete registritabelitele ei pääse juurde;
  • Te ei saa otseselt parameetreid kasutada;
  • Allpäringud võivad kasutada any>/span> päringukeele võimalused, välja arvatud:
    • operaator HIERARHIAS;
    • pakub TULEMUSED;
    • pesastatud päringu tulemused ei tohi sisaldada tabelilisi osi>/span>;
    • virtuaalsed lauad, eelkõige saldod ja käibed

Praktika 2. Nomenklatuur jooksva hinnaga.

Seadistage juurdepääsupiirang, kui peate kuvama kauba, mille praegune hind on suurem kui teatud väärtus, näiteks 100.

Lahendus:

Lisame uue juurdepääsupiirangu reegli "Nomenklatuuri" teatmeteosele "lugemisõiguse" jaoks.
Valige "muud väljad".
Lisage konstruktoris pesastatud päring. Selles valige inforegistri tabel "Kaubahinnad".
Vahekaarti „Tellimus” pole – see on päringukoostaja funktsioon juurdepääsupiirangu päringu koostamiseks.
Määrake vahekaardil "Täpsemalt" "first 999999999", ilmus vahekaart "tellimus".
Seadistage järjestus väljal "Perioodi" kahanevas järjekorras.
Seejärel seadistame põhitabeli ühenduse alampäringuga viide abil.


Juurdepääsupiirangu mallid.

Praktika 3. "Töövõtjate" piirang väärtuse järgi konstandis.

Seadistage vastaspoolte kataloogi juurdepääsupiirang konstanti salvestatud väärtuse järgi.

Lisaks peate seadma piirangu kõikidele objektidele, mis kasutavad üksikasjades kataloogi "Töövõtjad".

Lahendus

Teatmeteose "Kontod" jaoks seadistame "lugemisõiguse" jaoks piirangu, lisades jaotise "Tingimused" konstandile pesastatud päringu. Ärge unustage seda gruppi.

Näeme probleemi, vastaspoolte kataloog on õigesti filtreeritud ja kuvatakse kõik dokumendid, millel on atribuut "Counterparty", mõnedel on atribuudis "Counterparty" lingid "katki".

Nüüd peate konfigureerima juurdepääsupiirangu kõigile objektidele, kasutades linki "Kontod". Leiame need teenusega "Otsi linke objektile".

Kopeerime ja muudame veidi RLS-i tingimuse teksti kataloogist "Vastaspooled". Seda tuleb teha nii mitu korda, kui palju objekte on leitud.

Või kasutage koodi dubleerimise probleemide vältimiseks juurdepääsupiirangu mustrit.

Juurdepääsupiirangu mallid on konfigureeritud rolli tasemel ja neid saab kasutada mis tahes muudetud rolli objektide jaoks.

Malli saate lisada mis tahes juurdepääsupiirangu teksti. Malli kutsutakse sümboli "#" kaudu. Näiteks #TemplateContractor.

Läbi # in 1C kirjutatakse juhised eeltöötlejale. Juurdepääsupiirangu sätete täitmise kontekstis asendab platvorm malli kõne teksti malli tekstiga.

Viime sõna WHERE järel oleva teksti mallile "TemplateContractor", välja arvatud ThisGroupi puudutav tekst.

Juurdepääsupiirangu mallide parameetrid.

Jätkame ülesande 2 lahendamist.

Nüüd on probleem selles, et kataloogi põhitabelit nimetatakse "vastaspooleks", dokumendis "Arve". Kataloogis märgitud välja nimetatakse "linkiks", dokumendis - "vastaspool".

Muutke malli tekstis põhitabeli nimeks "#CurrentTable"

"#CurrentTable" on eelmääratletud parameeter.

Ja punkti kaudu märgime sisendparameetri numbri - “.#Parameter(1)

"#Parameeter" on samuti eelmääratletud väärtus. Võib sisaldada suvalise arvu sisendparameetreid. Neile viidatakse seerianumbri järgi.

Kataloogi juurdepääsupiirangu tekstis märgime järgmist:

Dokumendi jaoks järgmine:

„Kauba müük, KUS #TemplateContractor(“töövõtja”)”

Juurdepääsupiirangu malli kutsumisel tuleks parameetrid sellele edastada ainult stringina, st jutumärkides.

Põhitabel – nomenklatuur

Malli tekst on:

#Praegune tabel, KUS #praegune tabel.#parameeter(1) = #parameeter(2)

Malli tekst sisaldab osa tekstist andmetele juurdepääsu piirangu keeles ja võib sisaldada parameetreid, mis on esile tõstetud sümboliga "#".

Märgile "#" võib järgneda:

  • Üks märksõnadest:
    • Parameeter, millele järgneb sulgudes parameetri number mallis;
    • CurrentTable - tähendab selle tabeli täisnime lisamist teksti, millele piirang on koostatud;
    • Praegune tabelinimi– tähistab sisseehitatud keele praeguses versioonis selle tabeli täisnime sisestamist (stringi väärtusena, jutumärkides), millele käsk on rakendatud;
    • Name CurrentPermission– sisaldab õiguse nimetust, millele kehtiv piirang teostatakse: LOE/LOE, LISA/LISA, MUUDA/UUENDA, KUSTUTA/KUSTUTA;
  • malli parameetri nimi – tähendab vastava malli parameetri piirangu sisestamist teksti;
  • sümbol "#" - tähistab ühe sümboli "#" sisestamist teksti.

Juurdepääsupiirangu avaldis võib sisaldada:

  • Juurdepääsupiirangu muster, mis on määratud vormingus #TemplateName("Malli parameetri väärtus 1", "Malli parameetri väärtus 2",...). Iga malli parameeter on ümbritsetud jutumärkidega. Kui peate parameetri tekstis määrama topeltjutumärgi, kasutage kahte topeltjutumärki.
  • Funktsioon StrContains (kust me otsime, mida me otsime). Funktsioon on loodud otsima WhatLooking for esinemist stringis WhereLooking. Tagastab õige, kui vaste leitakse, False muul juhul.
  • + operaator stringide ühendamiseks.

Malli teksti redigeerimise mugavuse huvides klõpsake rollivormi vahekaardil Piirangumallid nuppu Määra malli tekst. Sisestage avanevas dialoogiaknas malli tekst ja klõpsake nuppu OK.

Neid ei saa installida kasutades setParameter() või midagi sarnast.

Sel juhul on parameetrid järgmised:

  • Seansi valikud
  • Funktsionaalsed valikud

Seansi parameetrite lugemine juurdepääsupiirangu päringus toimub privilegeeritud režiimis, st ilma nendega töötamise õiguste kontrollita.

Praktika 4. Juurdepääs “oma” vastaspooltele

Vajalik on seada praeguse kasutaja juurdepääsupiirang "oma" vastaspooltele.

Seal on kataloog "Kasutajad", kataloog "Vastaspooled", dokumendid nõutava "Vastaspool".

Praegune kasutaja peaks nägema andmeid ainult nende vastaspoolte kohta, kelle jaoks on temaga ühendus loodud.

Samuti tuleb konfigureerida side.

Võimalikud valikud:

Kasutaja + vastaspoole linkide loomine

  • Üksikasjad vastaspoolte kataloogis
  • Inforegister

Probleemi võimalikud lahendused:

  • Kasutaja salvestamine konstandisse on halb valik, konstant on kättesaadav kõigile kasutajatele.
  • Praeguse kasutaja vastaspoolte fikseeritud massiivi hoidmine seansi parameetrites ei ole hea valik, vastaspooli võib olla palju
  • Salvestage praeguse kasutaja seansi parameetrid, seejärel taotlege "tema" vastaspoolte loendi hankimist - vastuvõetav valik.
  • Muud võimalused.

Lahendus.

Loome uue seansi parameetri "CurrentUser" ja kirjutame selle täidise seansimoodulisse.

Loome teaberegistri "Juhtide ja vastaspoolte kirjavahetus"

Loome dokumendile "Kviitungiarve" uue rolli ja selles uue juurdepääsupiirangu.

Päringutekstis ühendame põhitabeli inforegistriga töövõtja = Töövõtja ja haldaja = &praegune kasutaja. Ühenduse tüüp Sisemine.

Võimalusel on parem vältida pesastatud päringuid juurdepääsupiirangu tekstides, sest see käivitatakse iga kord, kui selle objekti andmeid andmebaasist loetakse.

Kontrollime – piirangud töötavad

* Funktsioon : Kui muudate registris kasutaja vastaspoolte nimekirja, jõustuvad juurdepääsupiirangud koheselt ilma kasutaja seanssi uuesti käivitamata.

Praktika 5. Kuupäeva ei muudeta.

Andmete toimetamise piirang on vajalik rakendada varem kui muudatuste keelamiseks määratud tähtpäev.
Kasutajaid tuleb piirata.

Loome "ChangeBarDateDate" teaberegistri dimensiooniga Kasutaja, RestrictedDate ressurss.

Ehitame lahenduse loogika üles järgmiselt:

  • kui kasutajat pole määratud, siis kehtib keeld kõikidele kasutajatele
  • kui on piirang kõigile kasutajatele ja piirang konkreetsele kasutajale, siis on piirang konkreetsele kasutajale ja ülejäänutele üldpõhimõtte järgi.

Ilmselgelt saab sellise piirangu seadistada andmebaasiobjektidele, millel on ajateljel teatud positsioon. See võib olla

  • Dokumentatsioon
  • Perioodilised teaberegistrid

Loome uue rolli "RestrictionsBy ChangeProhibitionDate".

Sellesse lisame õige "muudatuse" dokumendile "Kviitungiarve" uue juurdepääsupiirangu.

Seade on määratud kõikidele väljadele.

Piirangu tekst on järgmine:

Kviitung Invoice FROM Dokumendist Kviitung Invoice AS Arve Arve

ChangeProhibitionDates.ProhibitionDate AS ProhibitionDate
FROM

SISEMINE LIITUMINE (VALI
MAXIMUM(ChangeProhibitionDate.User) AS-i kasutaja
FROM
Teaberegister Muudatuste keelu kuupäevad AS muudatuste keelu kuupäev
KUS
(ChangeProhibitionDates.User = &praegune kasutaja
ORChangeProhibitionDate.User = VALUE(Reference.users.NullReference))) AS OT_User
BYChangeProhibitedDate.User = OT_User.User) AS-i alampäring
Arve Invoice.Date > NestedRequest.BanDate

Kontrollime – piirang töötab.

Eelprotsessori juhiste kasutamine

#Kui Tingimus1 #Siis

Taotluse fragment 1

#ElseIf Tingimus2 #Siis

Taotluse fragment 2

#Muidu

Taotluse fragment 3

#EndIf

Tingimustes saate kasutada loogilisi operatsioone (ja. või, mitte jne) ja juurdepääsu seansi parameetritele.

Selline lähenemine juurdepääsupiirangute ehitamise kontekstis on mugav, sest olenevalt tingimustest koostatakse lühem päringutekst. Lihtsam taotlus koormab süsteemi vähem.

Negatiivne külg on see, et päringukonstruktor sellise tekstiga ei tööta.

* Omapära:

Erinevalt 1C:Enterprise eeltöötleja juhistest juurdepääsupiirangu tekstides, jätke tehtelehele Siis ette räsimärk — #Then

Harjutus 6. Lülitage "Kasuta RLS-i"

Täiendame oma piirangute süsteemi lülitiga, mis lubab/keelab piirangu kasutamist rekordtasemel.

Selleks lisage konstant ja seansi parameeter nimega "UseRLS".

Kirjutame Session Module seadistusse seansi parameetri väärtuse konstandi väärtusest.

Lisage kõigile juurdepääsupiirangu tekstidele järgmine kood:

"#If &UseRLS #Siis….. #EndIf"

Kontrollime - kõik töötab.

Nüüd aga peale “kasuta radarit” lipu sisselülitamist muudatused koheselt ei jõustu. Miks?

Kuna seansi parameeter määratakse seansi alguses.

Seansi parameetrit on võimalik uue konstantse väärtuse kirjutamisel lähtestada, kuid see toimib ainult praeguse kasutajaseansi puhul. Teistel kasutajatel tuleb paluda süsteem taaskäivitada.


Esimese osa lõpp.

20.09.2014

Päringukeeles on käsk "Lubatud". See on mõeldud kasutamiseks raamistikus, et filtreerida välja kirjed, millele kasutajal pole õigusi andmebaasi kirjetaseme piirangu seadmisel.

Näib, et päringutes on parem seda direktiivi alati kasutada. Ma vaidlen vastu, et see pole nii. Samuti väidan, et võimalusel peaksite selle kasutamist vältima, sellepärast.

Oletame, et teeme aruande isikute omavaheliste arvelduste kohta. Kasutajal on õigused ühele organisatsioonile ja andmebaasis on rohkem kui üks organisatsioon ning registritaseme piirang on andmebaasis lubatud. Samuti on andmebaasis register "Vastastikused arveldused" mõõtmetega "Organisatsioon" ja "Eraisik". Kui süsteemis on taotlus

"Vali

Organisatsioon,

Individuaalne

ja see täidetakse ühe organisatsiooni loaga kasutaja nimel, siis päring nurjub, kui selles registris on kirjeid teiste organisatsioonide kohta. Ilmub tõrge ja vea kirjeldus on "Kasutajal ei ole päringu täitmiseks piisavalt õigusi!" ja see on tõsi, platvorm ei peta, kuna tal ei ole õigusi selles registris teiste organisatsioonide dokumentidele.

Mida sel juhul teha, kasutada käskkirja "Lubatud"? Minu arust pole seda väärt. Peate lihtsalt määrama valiku organisatsioonide kaupa ja kasutaja saab aruande koostada. Andmete koostisega aruande päring näeb välja selline

"Vali

Organisatsioon,

Individuaalne

(Valige

Organisatsioon

individuaalne)

Kogumisregistrist. Vastastikused arveldused

(Kus

Organisatsioon

individuaalne)

Kui kasutaja sooritab tabelis päringu ilma valikuta, siis aruannet ei genereerita ja kasutaja ei tunne teiste organisatsioonide andmeid ära ning kui ta teeb valiku oma organisatsiooni jaoks, genereerib ta õiged andmed.

Võid uuesti küsida - "Miks ei võiks kasutada Allowed direktiivi", see paneb kohe valiku peale, säästab kasutajat sõnumitest, mida ta ei vaja!

Vastus sellele küsimusele on järgmine – kuidas sel juhul kasutaja teab, et kõik vajalikud andmed on aruandesse lisatud. Oletame, et varem töötas see kasutaja täielike õigustega ja tegi vea ning valis dokumendis isiku teisest organisatsioonist. Võib esineda ka olukord, kus andmeid laaditi - ja organisatsiooni dokumentides registreeriti teise organisatsiooni allüksus (ZUP-is on ka neile kehtestatud omanikule piirangud). Sel juhul lõikab käsk "Lubatud" keelatud andmed ära ilma kasutajale sõnumiteta ja ta ei saa teada, et kõike, mis aruandesse peaks kuuluma, pole lisatud.

Seetõttu ei ole vaja seda käskkirja massiliselt tüüpiliste konfiguratsioonide päringutesse sisestada, pidades seda veaks. Reguleeritud aruandlusnõuete puhul on seda väga ebasoovitav teha. Samuti ärge tehke seda teistes aruannetes ja dokumentides, kus on vaja teabe täpsust.

Kuidas aga ikkagi vältida õiguste puudumisega programmi "kukkumise" viga?

Jah, see on väga lihtne, peate kasutama käsku "Proovi", siin on näide:

Katse

Request.Execute();

Erand

Report(ErrorDescription());

Katse lõpp;

ACS-i kasutavates aruannetes tuleb aruande täitmise programmikood kirjutada käsitsi, ka katsega.

Selle tulemusena ei saa kasutaja ebaõigeid andmeid ja saab mõistliku veateate.

RLS-i eraldi jaotistes seadistamise nüanssidega saate tutvuda meie artiklis.

). Selle märksõna kasutamine väldib tõrkeid kirjete hankimisel, mille jaoks kasutajal õigusi pole.

Probleem: Mõnel juhul võib 1C 8.3 andmetele juurdepääsupiirangute tulemus sõltuda DBMS-i päringuplaanist. Selles artiklis käsitletakse võimalikke olukordi ja antakse soovitusi nende vältimiseks.

Andmejuurdepääsupiirangute tulemuse võimaliku sõltuvuse probleem DBMS-i päringuplaanist võib tekkida siis, kui andmebaasi päring sooritatakse ilma märksõnata LUBATUD, kui praeguse kasutaja jaoks on andmetele juurdepääsupiirangud ja päring sisaldab ühte või mitut vormi võrdlust:

  • <Выражение над полями>(IN|NOT IN) (<Вложенный запрос>)
  • (<Выражение над полями 1>, …, <Выражение над полями N>) (IN|MITTE IN) (<Вложенный запрос>)

Kui antud juhul < > (päring päringus) kasutab andmebaasi tabeleid, millele kehtivad juurdepääsupiirangud, siis on võimalik, et mõnel DBMS-il õnnestub päring edukalt sooritada, teistel väljastatakse teade eeldusel, et infobaasides olevad andmed on täiesti identsed .

Hankige tasuta 267 1C videotundi:

Erinevuste põhjus

Võimalik erinevus käitumises on tingitud andmetele juurdepääsupiirangute rakendamisest ilma märksõnata LUBATUD 1C Enterprise'is 8.3.

Päring ilma märksõnata LUBATUD täidetakse edukalt ainult siis, kui selle täitmise ajal pole juurdepääsu keelatud andmetele. Selleks lisatakse sellele spetsiaalne signaaliväli, mis võtab väärtuse Tõsi nende kirjete puhul, mille moodustamisel osalesid ainult lubatud andmed, ja väärtus Valetage kõigi teiste sissekannete jaoks. Kui vähemalt üks valiku kirje sisaldab väärtust Valetage signaaliväljal, siis päring lõpeb ebanormaalselt.

Võrdluses pesastatud päringute tulemustele lisatakse sama signaaliväli. IN/EI SISSE. Lisaks kontrollitakse sel juhul signaali veeru väärtust DBMS-i abil. Seega, kui pesastatud päringu täitmise käigus pääseti juurde keelatud andmetele, peaks päringu täitmine lõppema veaga Kasutajal pole andmebaasis toimingu tegemiseks piisavalt õigusi.

Päringuplaani koostamisel ei pruugi DBMS aga kogu valikut kätte saada <Вложенным запросом> ja hankige ainult need kirjed, mis on olukorra kontrollimiseks tegelikult vajalikud IN/EI SISSE. Sel juhul võib päring õnnestuda isegi siis, kui <Вложенного запроса> juurdepääs keelatud andmetele võib toimuda iseseisva taotlusena.

Vaatleme lihtsat näidet. Lase lauale Kataloog. Üksikisikud andmetele juurdepääsu piirangud. Sel juhul on taotlus järgmine:

Tabel.Isikisik AS Eraisik

käivitatakse keelatud andmetele juurdepääsu katse tõttu veaga. Kui see päring on seotud võrdlusega, näiteks:

Tabel.Isikisik AS Eraisik

Kataloog. Üksikisikud AS tabel)

siis olenevalt DBMS-i poolt valitud päringuplaanist saab päringu sooritada kas edukalt või veaga. Päringu selline käitumine ei ole ekslik, kuna selle päringu täitmise ajal juurdepääs keelatud andmetele võib toimuda, kuid ei pruugi toimuda. Ennustatavama tulemuse saamiseks on vaja päring koostada nii, et pesastatud päring ei teeks ilmselgelt ebavajalikele andmetele ligipääsu. Eelkõige siis, kui eelmine päring on ümber kirjutatud järgmiselt:

Tööleping eraisikuga.Töötaja.Eraisik

Dokument Isikisikuga tööde tegemiseks AS Leping üksikisikuga tööde tegemiseks

Tööleping üksikisikuga. Töötaja. Eraisik B (

Tabel.Isikisik AS Eraisik

Kataloog.Üksikisikud AS tabel