» Programmeerija märkmik. Kasutades käskkirja „Lubatud” 1c valige lubatud

Programmeerija märkmik. Kasutades käskkirja „Lubatud” 1c valige lubatud
   

17 reeglit optimaalse QUERY koostamiseks 1C andmebaasi andmete jaoks

1C platvormi andmebaasi tabelite päringute genereerimiseks ja täitmiseks kasutatakse spetsiaalset programmeerimiskeele objekti Taotlus. See objekt luuakse konstruktsiooni kutsumisega Uus taotlus. Päringut on mugav kasutada, kui on vaja hankida keerukas andmenäidis, mis on vastavalt vajadusele rühmitatud ja sorteeritud. Klassikaline näide päringu kasutamisest on akumulatsiooniregistri seisu kokkuvõtte saamine teatud ajahetkel. Samuti muudab päringumehhanism teabe hankimise erinevatel ajaperioodidel lihtsaks.

Päringu keha on juhend, mille järgi päring tuleb täita. Taotluse keha kirjeldab:

  • päringu andmeallikatena kasutatavad teabebaasi tabelid;
  • tabeliväljad, mida tuleb päringus töödelda;
  • rühmitamise reeglid;
  • tulemuste sorteerimine;
  • jne.

Juhend on koostatud spetsiaalses keeles - päringukeeles ja koosneb eraldi osadest - osadest, lausetest, märksõnadest, funktsioonidest, aritmeetilistest ja loogilistest operaatoritest, kommentaaridest, konstantidest ja parameetritest.

1C platvormi päringukeel on väga sarnane teiste SQL-keelte süntaksiga, kuid seal on erinevusi. Sisseehitatud päringukeele peamised eelised on: väljade viitamise tühistamine, virtuaalsete tabelite olemasolu, mugav töö tulemustega, tüpimata väljad päringutes.

Soovitused andmebaasipäringute kirjutamiseks platvormi 1C päringukeeles:

1) Päringu keha võib sisaldada eelmääratletud konfiguratsiooniandmeid, näiteks:

  • enum väärtused;
  • eelmääratletud andmed:
  • teatmeteosed;
  • omaduste tüüpide plaanid;
  • kontoplaanid;
  • arvutuste tüüpide plaanid;
  • tühjad lingid;
  • äriprotsessi marsruudipunkti väärtused.

Samuti võib päringu tekst sisaldada süsteemiloendite väärtusi, mida saab määrata andmebaasi tabelite väljadele: kogumisliikumise tüüp, konto tüüp ja arvestuse liikumise tüüp. Päringutes pääseb eelmääratletud konfiguratsiooniandmetele ja süsteemi loendusväärtustele juurde funktsiooni VALUE tüübi literaali abil. See sõnasõna võimaldab teil parandada päringu loetavust ja vähendada päringu parameetrite arvu.

Näide literaali kasutamisest TÄHENDUS:

  • WHERE Linn = VÄÄRTUS (kataloog.Linnad.Moskva)
  • WHERE Linn = VÄÄRTUS (kataloog.Linnad.Tühilink)
  • WHEREProductType = VÄÄRTUS(loend.Tootetüübid.Teenus)
  • WHEREMovementType = VALUE(MovementTypeAccumulation.Incoming)
  • WHERE RoutePoint = VÄÄRTUS(Äriprotsess.Äriprotsess1.RoutePoint.Action1

2) Juhiste kasutamine AUTOMATELLIMUS Päringu täitmine võib võtta kaua aega, nii et kui sorteerimine pole vajalik, on parem seda üldse mitte kasutada. Enamikul juhtudel on kõige parem kasutada juhiste sorteerimist SORTEERIMA.

Automaatne tellimine toimib järgmiste põhimõtete kohaselt:

  • Kui päringus oli märgitud klausel ORDER BY, siis asendatakse iga selles punktis leitud link tabelile väljadega, mille järgi tabel vaikimisi sorteeritakse (teatmete puhul on selleks kood või nimi, dokumentide puhul dokumendi kuupäev). Kui sorteeritav väli viitab hierarhilisele kataloogile, rakendatakse selle kataloogi järgi hierarhilist sortimist.
  • Kui päring ei sisalda klauslit ORDER BY, kuid on TOTAL-klausel, siis järjestatakse päringutulemus väljade järgi, mis asuvad TOTAL-klauslis pärast märksõna BY, samas järjestuses ja kui kogusummad on arvutatud viiteväljadele, seejärel viidatud tabelite vaikimisi sortimisväljade järgi.
  • Kui päring ei sisalda klausleid ORDER BY ja TOTAL, kuid on olemas klausel GROUP BY, siis järjestatakse päringu tulemus lauses olevate väljade järgi samas järjestuses ja kui rühmitamine viidi läbi viiteväljade järgi. , seejärel sorteerides vaikimisi väljad, millele viidati.
  • Kui päring ei sisalda klausleid ORDER BY, TOTAL või GROUP BY, järjestatakse tulemus nende tabelite vaikimisi sortimisväljade järgi, millest andmed on valitud, nende päringus ilmumise järjekorras.
  • Kui päring sisaldab klauslit TOTAL, tellitakse iga kogutase eraldi.

3) Vältimaks päringu kordamist andmebaasi kasutajale päringutulemuse kuvamisel (näiteks päringu koostamisel või päringutulemuse kuvamisel tabeldokumendi abil), on kasulik kasutada juhendit TUTVUSTUSLINGID, mis võimaldab teil saada võrdlusväärtuse esituse. Näide:

Samuti on võimalik kasutada juhiseid ESITUS- mõeldud suvalise tüüpi väärtuse stringi esituse saamiseks. Nende juhiste erinevus seisneb selles, et esimesel juhul, kui juhised läbivad lingi, on tulemuseks string, muudel juhtudel on tulemuseks edastatud parameetri väärtus. Teisel juhul on juhise tulemuseks alati string!

4) Kui päring sisaldab liittüübiga välja, siis on selliste väljade puhul vaja välja väärtused käsu abil teisendada konkreetsesse tüüpi. EXPRESS, mis võimaldab eemaldada mittevajalikud tabelid vasakpoolsest liitest keeruka andmetüübi väljaga ja kiirendada päringu täitmist. Näide:

Ülejäänud kaupade kogumise jaoks on olemas register, milles väljal Registripidaja on liittüüp. Päringus on valitud Kauba vastuvõtmise kuupäev ja dokumendi number, samas kui läbi Registripidaja dokumendi andmetele ligi pääsedes ei teki paljusid kogumisregistri tabeli vasakpoolseid seoseid registripidaja dokumentide tabelitega.

Kood 1C v 8.x SELECT
EXPRESS(Ülejäänud kaubad. Registripidaja AS-i dokument. Kauba kättesaamine).Number AS-kviitungi number,
EXPRESS(Ülejäänud kaubad. Registri AS-i dokument. Kauba kättesaamine).Kuupäev AS-i vastuvõtu kuupäev
FROM
Kogumiste register Ülejäänud kaubad AS Ülejäänud kaubad

Kui tüübivalamist ei peeta teostatavaks, on väärtuseks tüübivalamise tulemus NULL.

5) Ärge unustage juhiseid LUBATUD, mis tähendab, et päring valib ainult need kirjed, millele praegusel kasutajal on õigused. Kui seda sõna ei täpsustata, siis kui päring valib kirjed, mille jaoks kasutajal pole õigusi, siis päring nurjub.

6) Kui päring kasutab liitumist ja mõned ühenduse osad sisaldavad pesastatud tabeleid (tabeliosaga dokument) ja mõned mitte, on vaja valikuloendit täiendada väljadega - tühjad pesastatud tabelid. Seda tehakse märksõna abil TÜHJENDATAV, mille järel näidatakse sulgudes väljade varjunimed, millest pesastatud tabel koosneb. Näide:

Kood 1C v 8.x // Valige väljad Number ja Composition
// virtuaalsest tabelist Document.Expenditure
SELECT Link.Arv, TÜHJA TABEL.(Nr., Kaup, Kogus) AS Koosseis
FROM Document.Expense Invoice
KOMBINEERI KÕIK
VALI lingi number, sisu (reanumber, toode, kogus)
FROM Dokument.Arve dokument.Arve.Koostis.*

7) Selleks, et päringu tulemuses ei ilmuks topeltridu, peaksite kasutama juhist ERINEVAD, sest see on visuaalsem ja arusaadavam ning juhised GROUP BY kasutatakse rühmitamiseks koondfunktsioonide abil. Ksati, koondfunktsioonide kasutamisel soovitus GROUP BY ei pruugi olla üldse määratud, kuid kõik päringutulemused rühmitatakse ühele reale. Näide:

Kood 1C v 8.x // Tuleb välja selgitada, millised vastaspooled
// kaubad saadeti perioodil.
Valige Erinevad
Dokument.Arve.Vastaspool

8) Juhised GROUP BY võimaldab teil pääseda juurde ülataseme väljadele ilma tulemusi nende väljade järgi rühmitamata, kui pesastatud tabeli väljadele rakendatakse koondfunktsioone. Kuigi 1C spikker ütleb, et päringutulemuste rühmitamisel tuleb valikuväljade loendis määrata koondfunktsioonid ja lisaks valikuväljade loendis koondatavatele funktsioonidele on lubatud märkida ainult need väljad, mille järgi rühmitamine toimub . Näide:

Kood 1C v 8.x SELECT
Kaupade ja teenuste vastuvõtmine. Kaubad. (SUM (kogus), nomenklatuur),
Kaupade ja teenuste vastuvõtt. Link,
Kaupade ja teenuste vastuvõtmine. Vastaspool
FROM
Dokument.Kaubade ja teenuste vastuvõtt KUIDAS Kaupade ja teenuste vastuvõtt
GROUP BY
Kaupade ja teenuste vastuvõtmine. Kaubad. (Nomenklatuur)

9) Juhised ISNULL on mõeldud väärtuse asendamiseks NULL teisele väärtusele, kuid ärge unustage, et teine ​​parameeter teisendatakse esimese tüübiks, kui esimese parameetri tüüp on string või arv.

10) Põhitabelile ligi pääsedes pääseb tinglikult ligi alamtabelis olevatele andmetele. Seda funktsiooni nimetatakse allutabeli väljade viitamise tühistamiseks.

Näide (otsige tabeliosast konkreetset toodet sisaldavaid dokumente):

Selle päringu eelis päringu ees alamtabelis Receipt.Goods seisneb selles, et kui dokumentides on duplikaate, tagastab päringutulemus ainult unikaalsed dokumendid ilma märksõna DIFFERENT kasutamata.

11) Operaatori B huvitav variant on kontrollida, kas järjestatud hulk sisaldub selliste komplektide hulgas (Field1, Field2, ..., FieldN) B (Field1, Field2, ..., FieldN).

Kood 1C v 8.x SELECT
Vastaspooled.Link
KUS
(Vastaspooled.Link, Tooted.Link) B
(VALI Müük.Klient, Müük.Toode
FROM RegisterAccumulation.Sales AS Müük)
FROM
Kataloog. Vastaspooled,
Kataloog. Tooted

12) Kasutage võimalusel virtuaalseid päringutabeleid. Päringu loomisel pakub süsteem andmeallikatena mitmeid virtuaalseid tabeleid – need on samuti tabelid, mis on samuti päringu tulemus, mille süsteem genereerib vastava koodilõigu täitmise ajal.

Arendaja saab iseseisvalt hankida samu andmeid, mida süsteem talle virtuaalsete tabelitena pakub, kuid nende andmete hankimise algoritmi ei optimeerita, kuna:

Kõik virtuaaltabelid on parameetritega, st arendajale antakse võimalus määrata mõned parameetrid, mida süsteem kasutab virtuaalse tabeli loomise päringu genereerimisel. Sõltuvalt sellest, millised virtuaalse tabeli parameetrid arendaja määrab, saab süsteem genereerida ERINEVAD sama virtuaaltabeli saamiseks ja need optimeeritakse läbitud parameetrite osas.

Alati ei ole arendajal võimalik saada ligipääsu andmetele, millele süsteemil on juurdepääs.

13) Kliendi-serveri töörežiimis funktsioon SUBSTRING() on realiseeritud SQL Serveri andmebaasiserverile edastatud vastava SQL-lause funktsiooni SUBSTRING() abil, mis arvutab funktsiooni SUBSTRING() tulemuse tüübi keeruliste reeglite abil sõltuvalt selle parameetrite tüübist ja väärtustest, nagu samuti olenevalt kontekstist, milles seda kasutatakse. Enamasti ei mõjuta need reeglid päringu täitmist, kuid mõnikord on päringu täitmiseks oluline SQL Serveri arvutatud maksimaalne tulemuse rea pikkus. Oluline on meeles pidada, et mõnes kontekstis võib funktsiooni SUBSTRING() kasutamisel selle tulemuse maksimaalne pikkus olla võrdne piiratud pikkusega stringi maksimaalse pikkusega, mis SQL Serveris on 4000 tähemärki. See võib põhjustada päringu ootamatu krahhi:

Microsoft OLE DB Provider for SQL Server: Hoiatus. Päringuprotsessor ei saanud optimeerijast päringuplaani koostada, kuna kõigi klausli GROUP BY või ORDER BY veergude kogupikkus ületab 8000 baiti.

HRESULT=80040E14, SQLSTATE=42000, algne=8618

14) Kasutage ettevaatlikult VÕI disainis KUS, kuna tingimuse VÕI kasutamine võib päringu oluliselt raskendada. Probleemi saab lahendada disainiga KOMBINEERI KÕIK. Näide:

Kood 1C v 8.x SELECT

FROM

KUS
_Demo Contractors.Link =Link1
KOMBINEERI KÕIK
VALI
_Demo Contractors.NameFull
FROM
Kataloog._Demo vastaspooled KUIDAS _Demo vastaspooled
KUS
_Demo Contractors.Link = Link2

15) Seisukord EI OLE SEES disainis KUS suurendab päringu täitmise aega, kuna see on omamoodi EI (VÕI1 VÕI2 ... VÕI), nii et suurte laudade jaoks proovige kasutada LEFT JOIN tingimusega ON NULL. Näide:

Kood 1C v 8.x SELECT
_Demo Contractors.Link
FROM
Kataloog._Demo vastaspooled KUIDAS _Demo vastaspooled
VASAKU ÜHENDUSE dokument._Ostja demotellimus KUIDAS _Ostja demotellimus
Tarkvara _Demo vastaspooled. Link = _Ostja demotellimus. Vastaspool
KUS
_Ostja demotellimus. Vastaspool ON NULL

16) Kasutamisel Ajutised lauad Nendes tabelites tuleb tingimus ja väljad ühendada, AGA indeksite kasutamisel võib päring olla veelgi aeglasem. Seetõttu on vaja analüüsida iga päringut koos indeksiga ja ilma, mõõta päringu täitmise kiirust ja teha lõplik otsus.

Kui paigutate andmed ajutisse tabelisse, mis on algselt mõne väljaga indekseeritud, ei ole ajutisel tabelis enam nendel väljadel indeksit.

17) Kui te ei kasuta Ajutine lauahaldur, siis pole vaja ajutist tabelit selgesõnaliselt kustutada, see kustutatakse pärast partiipäringu lõpetamist, vastasel juhul peaksite ajutise tabeli kustutama, kasutades ühte järgmistest meetoditest: käsk HÄVITADA päringus kutsuge meetod TemporaryTableManager.Close().

Ja lisaks Jevgeni Gilevi videole: tüüpilised vead päringute kirjutamisel 1C-s:

1C 8 päringukeel on 1C programmeerija jaoks asendamatu tööriist, mis võimaldab teil kirjutada sisutihedamat, lihtsat, arusaadavamat koodi ja kasutada andmetega töötamisel vähem süsteemiressursse. See artikkel avab 1C 8 päringukeelele pühendatud õppetundide sarja. Esimeses õppetükis vaatleme selle keele põhioperaatori struktuuri - VALI. Selle operaatori abil saate luua andmebaasi tabelitest valikuid. Valitud tabeliandmeid saab sorteerida, neile tingimusi seada, linkida ja kombineerida teiste tabelite andmetega, grupeerida erinevate väljade kaupa ja palju muud.

Päringu keel 1C ettevõte 8 – operaatori struktuur SELECT

Vaatame operaatori SELECT struktuuri (operaatori valikulised osad on märgitud nurksulgudes). 1C päringukeel pakub andmenäidiste loomiseks laias valikus tööriistu.

VALI [LUBATUD] [ERINEV] [FIRST A] [Field1] [AS Alias1], [Field2] [AS Alias1], [Field2] [AS Alias2], ... [FieldM] [AS AliasB] [PUT TemporaryTableName] [FROM Table1 AS AliasTableTable1 [[SISEMINE LIITUMINE] ][VASAKULINE LIITUMINE][TÄIELIK LIITUMINE] Tabel2 AS Aliase tabel 2 [[SISEMINE][VASAKULINE LIITUMINE][TÄIELIK LIITUMINE] TabelC AS Aliase tabelidC Avaldise1 järgi [Ja avaldis2]...[Ja avaldisD]] .. . ... BY Avaldis1 [Ja avaldis2]...[Ja avaldisE]] ... [TableF AS TableF Alias] ... ] [GROUP BY GroupingField1[,] ... [GroupingFieldG]] [WHERE Avaldis1 [JA Avaldis2] ... [JA avaldisH]] [ÜHENDA KÕIK...] [; ...] [INDEX BY Alias1 ... AliasB] [KOKKU [Koondfunktsioon(Field1)][,] [AggregationFunction(Field2)][,] ... [AggregationFunction(FieldI)] BY [GENERAL][,] [ GroupingField1][,] ... [GroupingFieldj]]

Märksõnad ja plokid väljadega töötamiseks

  • VALI— märksõna, mis näitab operaatori algust;
  • LUBATUD näitab, et valik peaks sisaldama tabelikirjeid, millel on antud kasutaja jaoks lugemisõigus;
  • ERINEVAD näitab, et valim peaks hõlmama ainult erinevaid (kõigi väljade lõikes) vooge. Teisisõnu jäetakse proovist välja korduvad read;
  • ESIMENE A selle märksõna määramisel kaasatakse valikusse ainult esimene A päringuga valitud ridadest, kus A on naturaalarv;
  • Põlluplokk— see plokk näitab väljad, mis tuleb valikusse kaasata. Need väljad on valitud veerud. Lihtsamal juhul näeb väli välja selline: Tabeli alias.TableFieldName AS Field Alias

    Nii näitame, millisest tabelist me selle välja võtame. 1C päringukeel võimaldab teil määrata kõik varjunimed, kuid neid ei tohiks korrata samas SELECT-lauses. Väli võib olla keerulisem, koosnedes tabeliväljade, päringukeele funktsioonide ja koondfunktsioonide erinevatest kombinatsioonidest, kuid me ei käsitle neid juhtumeid selles õpetuses.

Märksõnad ja plokid tabelitega töötamiseks

  • PUT ajutine tabelinimi- märksõna KOHT on mõeldud konkreetse nimega ajutise tabeli loomiseks, mis salvestatakse RAM-i antud 1C 8 seansi jooksul kuni selle lõpuni või kuni ajutise tabeli hävitamiseni. Tuleb märkida, et ühe 1C 8 seansi ajutiste tabelite nimesid ei tohiks korrata;
  • Tabelite ja seoste plokk— plokk näitab kõiki selles päringus kasutatud tabeleid ja ka nendevahelisi seoseid. Plokk algab märksõnaga FROM, millele järgneb esimese tabeli nimi ja varjunimi. Kui see tabel on seotud teiste tabelitega, näidatakse seoseid. 1C päringukeel sisaldab järgmisi ühendusetüüpe:
    • SISEMINE LIITUMINE— kirje vasakpoolsest tabelist läheb valikusse ainult siis, kui ühendustingimus on täidetud, parempoolsest tabelist kirje ainult siis, kui ühendustingimus on täidetud;
    • VASAKULINE ÜHEND— kirje vasakpoolsest tabelist läheb valikusse igal juhul, parempoolsest tabelist kirje läheb valikusse ainult siis, kui ühendustingimus on täidetud;
    • TÄIELIK ÜHENDUS— kirje vasakpoolsest tabelist läheb valikusse igal juhul esmalt, siis alles siis, kui ühendustingimus on täidetud, läheb valikusse igal juhul esmalt kirje parempoolsest tabelist, seejärel alles siis, kui ühendustingimus on täidetud. Sel juhul jäetakse tulemuseks olevad topeltread valimist välja.

    Ühenduse tüübi järel näidatakse teise tabeli nimi ja varjunimi. Edasi tuleb märksõna KÕRVAL, millele järgnevad loogiliste operaatoritega omavahel ühendatud sidetingimused JA, VÕI. Tingimuse iga avaldis peab tagastama Boole'i ​​väärtuse (True, False). Kui esimene tabel on ühendatud mõne muu tabeliga kui teine, siis näidatakse uuesti ühenduse tüüp jne. Iga ühenduses osalevat tabelit saab omakorda ühendada teiste tabelitega, seda näitab päringu struktuuriskeem. Kui tabel ei ole seotud esimesega, siis näidatakse seda ilma ühenduse tüübita, siis võivad järgneda selle ühendused jne;

Märksõnad ja andmete teisendusplokid

  • Grupiplokk— seda plokki kasutatakse tabeli ridade rühmitamiseks. Kui märksõna järel on määratud väljade väärtused, liidetakse read üheks GROUP BY osutuvad samaks. Sel juhul summeeritakse, keskmistatakse, maksimeeritakse või minimeeritakse kõik muud väljad koondfunktsioonide abil. Väljaplokis kasutatakse koondfunktsioone. Näide: Maksimum(TabeliAlias.Tabeliväljanimi) AS FieldAlias
  • Seisundi plokk- selles plokis pärast märksõna KUS on näidatud loogiliste operaatoritega eraldatud tingimusavaldised JA, VÕI, et mis tahes valitud rida oleks valimisse kaasatud, peab kõigil koondtingimustel olema väärtus Tõsi.
  • KOMBINEERI KÕIK— seda märksõna kasutatakse päringute (operaatorid VALI). 1C päringukeel võimaldab ühendada mitu päringut üheks. Päringute ühendamiseks peab neil olema sama väljade komplekt;
  • «;» - semikooloneid kasutatakse üksteisest sõltumatute väidete eraldamiseks VALI;
  • INDEX BY— märksõna kasutatakse selle järel määratud väljade indekseerimiseks;
  • Kokkuvõtte plokk— kasutatakse puutaoliste proovide ehitamiseks. Iga märksõna järel määratud rühmitamisvälja jaoks KÕRVAL, valikusse luuakse eraldi rida. Sellel real arvutatakse koondfunktsioonide abil märksõna järel määratud väljade koguväärtused TULEMUSED.

Kas soovite jätkata 1C 8 päringukeele õppimist? Seejärel lugege järgmist artiklit.

Konfiguratsiooniobjekt "roll" annab konfiguratsiooniobjektide üle tehtavatele operatsioonidele (toimingutele) õigused.

Roll "Täielikud õigused".

See on lihtsalt roll (pole eelmääratletud), milles kontrollitakse kõikide konfiguratsiooniobjektide igat tüüpi õigusi.

Seda eristab teistest rollidest haldusõiguse olemasolu.

Kui luuakse vähemalt üks kasutaja, hakkab süsteem kontrollima haldusõiguse olemasolu – see peab olema vähemalt ühel kasutajal.

Rekordtaseme juurdepääsupiirangud

Reataseme turvalisus (RLS) – rekordtaseme piirang.

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

  • rollid,
  • seansi parameetrid,
  • funktsionaalsed võimalused,
  • privilegeeritud jagatud moodulid,
  • päringukeeles märksõna LUBATUD.

Mehhanismi eesmärk on piirata juurdepääsu metaandmete objektide tabeli kirjetele nende tabelite reaväljade väärtustele kehtestatud suvaliste tingimuste alusel. 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 kaudu 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
  • kohandatud päringutes.

Mehhanismi selline rakendamine mõjutab jõudlust suuresti.

Juurdepääsupiirangutest möödahiilimise viisid.

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

A) Privilegeeritud moodul on tavaline moodul, mille atribuutides on lipp "Privilegeeritud".

Selle eripära on see, et selles sisalduvat koodi käivitatakse ilma juurdepääsuõiguste kontrollita, sealhulgas RLS-i.


B) Samuti privilegeeritud režiimi saab sisse lülitada dokumendiobjekti moodulite jaoks. Seda tehakse dokumendi atribuutides, lipp

  • Privilegeeritud kohtlemine läbiviimisel
  • Privilegeeritud režiim tehingu tühistamisel


B) Meetod SetPrivilegedMode()

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

Järgmisest koodireast hakkab tööle privilegeeritud täitmisrežiim.

See töötab kuni selle režiimi keelamise liinini 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 lubamiste arv peab ühtima selle keelamiste arvuga. Kui aga protseduuri või funktsiooni raames lülitati privilegeeritud režiim sisse (üks või mitu korda), kuid seda ei lülitatud välja, lülitub süsteem automaatselt välja nii mitu korda, kui toimingu või funktsiooni käigus oli pooleliolevaid sisselülitusi.

Kui protseduuris või funktsioonis kutsub välja meetodi SetPrivilegedMode(False) tegi rohkem kui meetodikutsed SetPrivilegedMode(Tõsi ), siis tehakse erand

Funktsioon Privilegeeritud režiim() tagastab väärtuse True, kui privilegeeritud režiim on endiselt lubatud, ja False, kui see 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 luuakse süsteemi algusest peale. Veelgi enam, 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 kasutaja, kellel on administraatoriõigused (administraatoriõigus). Seansi saab alustada klientrakenduse käivitamise käsurea lülitiga UsePrivilegedMode või infobaasi ühendusstringi parameetriga prmod .


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

Turvarežiim.

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

Määra SafeMode().

Turvarežiim ignoreerib muu hulgas privilegeeritud režiimi.

See tuleb installida enne välise protsessori programmilist kutsumist või protseduuride ja funktsioonide eksportimist nende moodulitest.

Keelatud toimingute tegemisel tehakse käitusajal erand.

Lisaks saate rolliseadete tasemel keelata kasutajatel võimaluse interaktiivselt käivitada väliseid aruandeid ja töötlemist.

Juurdepääsupiirangute seadistamine

RLS-i saab konfigureerida ainult õiguste jaoks:

  • loe (vali)
  • lisamine (sisesta)
  • muuda (värskenda)
  • kustutada

Lugemistoimingute jaoks ja kustutamine, peab andmebaasis asuv objekt vastama andmetele juurdepääsu piirangutele.

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

Vahetusoperatsiooniks andmetele juurdepääsu piirang peab vastama objektile nii enne muudatust (et objekt loetakse) kui ka pärast muutmist (et objekt kirjutatakse).

Kõigi muude õiguste puhul seda võimalust ei ole.

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

See tähendab, et kui proovite pääseda juurde kontrollitud väljadele, rakendub piirang, kuid kui proovite pääseda juurde kontrollimata väljadele, siis piirang ei tööta.

Kui valite lipu " Muud väljad", konfigureeritakse piirang kõigi tabeliväljade jaoks, välja arvatud väljad, millele on selgesõnaliselt seatud piirangud.


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

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

Õigus "Lugemine" saate konfigureerida mitu tingimust; need kombineeritakse loogilise operaatoriga "AND".

Peamise piirangu andmeobjekti kõiki välju ei saa kasutada järgmist tüüpi andmebaasiobjektide piirangutes:

  • akumulatsiooniregistrites võivad juurdepääsupiirangud sisaldada ainult piirangu põhiobjekti mõõtmisi;
  • raamatupidamisregistrites saavad piirangud kasutada ainult piirangu põhiobjekti bilansilisi mõõtmisi

Kui ringleva akumulatsiooniregistri andmetele piiratud juurdepääsu tingimustes kasutatakse mõõtmisi, mis summade hulka ei kuulu, siis virtuaalsele pöörete tabelile juurdepääsul salvestatud summasid ei kasutata ja päring täidetakse täielikult vastavalt liikumislaud.

Juurdepääsupiirangute kehtestamise mehhanism.

Mis tahes toiming rakenduses 1C:Enterprise andmebaasis salvestatud andmetega viib lõpuks andmebaasi helistamiseni koos taotlusega andmeid lugeda või muuta. Andmebaasi päringute täitmise käigus kehtestavad 1C:Enterprise sisemised mehhanismid juurdepääsupiirangud. Kus:

  • Luuakse õiguste loend(lugemine, lisamine, muutmine, kustutamine), andmebaasi tabelite loend ja selle päringu kasutatavate väljade loend.
  • Kõigist praeguse kasutaja rollidest juurdepääsupiirangud on valitud kõigi päringuga seotud õiguste, tabelite ja väljade andmetele. Veelgi enam, kui roll ei sisalda tabeli või välja andmetele juurdepääsupiiranguid, tähendab see, et selles tabelis on kõigi kirjete nõutavate väljade väärtused saadaval. Teisisõnu tähendab andmetele juurdepääsupiirangu puudumine piirangu olemasolu KUS ON TÕELINE.
  • Otsib kõigi seansi parameetrite ja funktsionaalsete valikute praegused väärtused valitud piirangutes osalemine.

Seansi parameetri või funktsiooni suvandi väärtuse saamiseks ei pea praegusel kasutajal selle väärtuse hankimiseks luba olema. Kui aga mõne seansi parameetri väärtus on määramata, tekib tõrge ja andmebaasi päringut ei täideta.

Ühest rollist tuletatud piirangud kombineeritakse AND-operatsiooni abil.

Erinevatest rollidest tulenevad piirangud kombineeritakse operatsiooni VÕI abil.

Konstrueeritud tingimused lisatakse SQL-päringutele, millega 1C: Enterprise DBMS-ile juurde pääseb. Juurdepääsupiirangu tingimustest andmetele juurdepääsul õiguste kontrolli ei teostata (ei metaandmeobjektide ega andmebaasiobjektide puhul). Lisaks sõltub tingimuste lisamise mehhanism piirangute "kõik" või "lubatud" valitud toimimismeetodist.


*Funktsioon: Kui kasutajal on ühe objekti jaoks ligipääs mitmele konfigureeritud piirangutega rollile kirjetasandil, siis sel juhul lisatakse piirangute tingimused loogilise operatsiooni “OR” abil. Teisisõnu, kasutaja volitused on kumulatiivsed.

See viib järgmise järelduseni: ärge lubage ühele erinevas rollis olevale objektile juurdepääsu piiramise tingimusi ristuda, kuna sel juhul on päringu tekst väga keeruline ja see mõjutab jõudlust.

"Kõik" meetod.

"Kõik" meetodil piirangute kehtestamisel lisatakse SQL-päringutele tingimused ja väljad, et 1C:Enterprise saaks teavet selle kohta, kas andmebaasipäringu täitmisel kasutati antud kasutaja jaoks keelatud andmeid või mitte. Kui kasutati keelatud andmeid, jookseb päring juurdepääsu rikkumise tõttu kokku.

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


"Lubatud" meetod.

"Lubatud" meetodil piirangute rakendamisel lisatakse SQL-päringutele tingimused, et praeguse kasutaja jaoks keelatud kirjed päringu tulemust ei mõjutaks. Teisisõnu, kui piirangud kehtestatakse režiimis "lubatud", loetakse konkreetse kasutaja jaoks keelatud kirjed puuduvaks ja need ei mõjuta toimingu tulemust, mis on skemaatiliselt esitatud joonisel:


Andmejuurdepääsupiirangud kehtestatakse andmebaasiobjektidele ajal, mil 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 viidame päringus tabelile, mille jaoks pole juurdepääsupiiranguid konfigureeritud, kuid mis sisaldab viiteid konfigureeritud piirangutega tabeliridadele. Sel juhul kuvatakse päringu tulemusel "<Объект не найден>......" võrdlusvälja väärtuse asemel.


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

Andmebaasist andmete objektilugemise korral 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.

On oluline, et kui päring ei määra märksõna ALLOWED, ei tohi kõik selles päringus määratud valikud olla vastuolus päringus kasutatavate andmebaasiobjektide lugemispiirangutega. Veelgi enam, kui päring kasutab virtuaalseid tabeleid, siis tuleb vastavad valikud rakendada ka virtuaaltabelitele endile.

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

Koostame päringu jaotise “KUS” teksti kataloogi. Võite kasutada päringu koostajat.
Disainer on kooritud välimusega.


Vahekaart "Tabelid".

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

Vahekaardil „Suhted“ saate valida ka teisi tabeleid ja seadistada nende vahel erinevaid ühendusi.

Vahekaart "Tingimused"

Siin saate konfigureerida tegelikke juurdepääsupiirangu tingimusi

Lisame nomenklatuuri kataloogi atribuudile "Price" tingimused, mis võimaldavad "lugeda" kõiki tabeli välju.

"Nomenklatuur WHERE Nomenklatuur. Hind > 500"

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


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


Kadusid ka rühmad. Muudame piirangu teksti

“Nomenklatuur KUS Nomenklatuur.Hind > 500

VÕI nomenklatuur. See on rühm"

Noh, nüüd on see see, mida sa vajad.


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


Hoolimata asjaolust, et kataloogielement on loendiväljal nähtav, ei saa sel juhul selle vormi avada, kuna atribuudile on seatud piirang. Sama juhtub suvalise päringu korral: kui proovite saada "piiratud" atribuuti, ilmneb juurdepääsutõrge.


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


Pealegi ei pääse lingi kaudu ligi ühelegi objekti väljale, sest lingi saamisel loeb süsteem kogu objekti ja kui see sisaldab “piiratud” detaile, siis objekti ei loeta.

Seetõttu tuleb andmebaasiobjektidega programmiliselt töötades silmas pidada võimalikke piiranguid kirje tasemel ja hankida kõik vajalikud objektiandmed päringu alusel ning seejärel paigutada need 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 (RLS) seadistamisel kehtivad piirangud.

  • Kokkuvõte jaotis puudub;
  • Virtuaalregistri tabelitele ei pääse juurde;
  • Te ei saa parameetreid selgesõnaliselt kasutada;
  • Saab kasutada pesastatud päringutes any>/span> päringukeele tööriistad, välja arvatud:
    • operaator HIERARHIAS;
    • TULEMUSED ettepanekud;
    • pesastatud päringu tulemused ei tohi sisaldada tabeli osi>/span>;
    • virtuaalsed lauad, eelkõige saldod ja käibed

Praktika 2. Nomenklatuur jooksva hinnaga.

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

Lahendus:

Lisame lugemisõigusega kataloogile "Nomenklatuur" uue juurdepääsupiirangu reegli.
Valige "muud väljad".
Konstruktoris lisame pesastatud päringu. Selles valige inforegistri tabel “Kaubahinnad”.
Vahekaarti „Tellimus” pole – see on päringukujundaja funktsioon juurdepääsupiirangu taotluse koostamiseks.
Vahekaardil "Täpsemalt" määrake "first 999999999", kuvatakse vahekaart "tellimus".
Seadistame järjestuse väljale "Periood" kahanevas järjekorras.
Seejärel loome viitega ühenduse põhitabeli ja alampäringu vahel.


Juurdepääsupiirangu mallid.

Praktika 3. Piirang “vastaspooltele” väärtuse järgi konstandis.

Seadistage vastaspoolte kataloogile juurdepääsupiirang, mis põhineb konstanti salvestatud väärtusel.

Lisaks peate seadma piirangu kõikidele objektidele, mis kasutavad üksikasjades kataloogi "Vastaspooled".

Lahendus

Kataloogi “Vastaspooled” jaoks kehtestame lugemisõigusele piirangu, lisades jaotises “Tingimused” konstandile pesastatud päringu. Ärge unustage, et see on grupp.

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

Nüüd peate konfigureerima juurdepääsupiirangud kõikidele objektidele, mis kasutavad linki "Kontod". Otsime need üles, kasutades teenust „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ääsupiirangute mustrit.

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

Mallile saate lisada mis tahes juurdepääsupiirangu teksti. Malli kutsutakse sümboliga "#". Näiteks #TemplateCounterparty.

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

Lisame mallile "Töövõtja mall" sõna WHERE järel teksti, välja arvatud EtoGroupi puudutav tekst.

Juurdepääsupiirangu mallide parameetrid.

Jätkame ülesande 2 lahendamist.

Nüüd on probleem selles, et kataloogi põhitabelit nimetatakse "vastaspooleks", dokumendis "Kviitungiarve". Kataloogis kontrollitavat välja nimetatakse "linkiks", dokumendis nimetatakse seda "vastaspooleks".

Muudame malli tekstis põhitabeli nimeks "#CurrentTable"

"#CurrentTable" on eelmääratletud parameeter.

Ja punkti kaudu näitame sisendparameetri numbrit - “.#Parameter(1)

"#Parameeter" on samuti eelmääratletud väärtus. Võib sisaldada suvalist arvu sisendparameetreid. Need on adresseeritud seerianumbriga.

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

Dokumendi jaoks järgmine:

„Kauba müük, KUS #TemplateCounterparty (“vastaspool”)”

Juurdepääsupiirangu malli kutsumisel tuleb 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 #.

Sümbolile "#" võib järgneda:

  • Üks märksõnadest:
    • Parameeter, millele järgneb sulgudes parameetri number mallis;
    • CurrentTable – näitab selle tabeli täisnime sisestamist teksti, mille jaoks piirang koostatakse;
    • Praegune tabelinimi– tähistab sisseehitatud keele praeguses versioonis selle tabeli täisnime sisestamist (stringi väärtusena jutumärkides), millele käsk on rakendatud;
    • NameCurrentAccessRight– sisaldab õiguse nimetust, millele kehtiv piirang täidetakse: LOE, LISA, LISA, MUUDA, UUENDA, KUSTUTA;
  • malli parameetri nimi – tähendab vastava malli parameetri piirangu sisestamist teksti;
  • sümbol “#” – tähistab ühe märgi “#” lisamist teksti.

Juurdepääsupiirangu väljend võib sisaldada:

  • Juurdepääsupiirangu mall, mis on vormingus määratud #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, peate kasutama kahte topeltjutumärki.
  • Funktsioon StrContains (WhereWeLook, WhatWeLook). Funktsioon on loodud WhatWeLook stringi esinemise otsimiseks stringis WhereWeLook. Tagastab tõesuse, kui esinemine leitakse, ja False muul juhul.
  • Operaator + on stringide ühendamiseks.

Malli teksti redigeerimise hõlbustamiseks 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 taotluses toimub privilegeeritud režiimis, st ilma nendega töötamise õigusi kontrollimata.

Praktika 4. Juurdepääs “oma” vastaspooltele

On vaja konfigureerida praeguse kasutaja juurdepääsu piiramine "oma" vastaspooltele.

Seal on kataloog “Kasutajad”, kataloog “Vastaspooled”, dokumendid andmetega “Vastaspool”.

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

Samuti tuleb konfigureerida side.

Võimalikud valikud:

Seoste loomine kasutaja ja vastaspoole vahel

  • Üksikasjad osapoolte kataloogis
  • Teabe register

Võimalikud lahendused probleemile:

  • Kasutaja salvestamine konstandisse on halb valik; konstant on saadaval kõigile kasutajatele.
  • Praeguse kasutaja vastaspoolte fikseeritud massiivi salvestamine seansi parameetritesse ei ole eriti hea valik, vastaspooli võib olla palju
  • Aktsepteeritav on praeguse kasutaja seansi parameetrite salvestamine ja seejärel “tema” vastaspoolte loendi taotlemine.
  • Muud võimalused.

Lahendus.

Loome uue seansi parameetri “CurrentUser” ja täidame selle seansimoodulis.

Loome teaberegistri “Juhatajate ja töövõtjate vastavus”

Loome dokumendile “Arve” uue rolli ja selles uue juurdepääsupiirangu.

Taotluse tekstis ühendame põhitabeli inforegistriga konto = konto ja haldur = &praegune kasutaja. Ühenduse tüüp Sisemine.

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

Kontrollimine – piirangud töötavad

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

Praktika 5. Muudatuste keelu kuupäev.

Vajalik on kehtestada andmete muutmise piirang enne muudatuste keelamise tähtpäeva.
Peate seda kasutajate jaoks piirama.

Koostame inforegistri “Muudatuste keelu kuupäevad” dimensiooniga Kasutaja, ressurss Keelukuupäev.

Ehitame lahenduse loogika järgmiselt:

  • kui kasutajat pole määratud, kehtib keeld kõigile kasutajatele
  • kui piirang kehtib kõikidele kasutajatele ja piirang konkreetsele kasutajale, siis piirang kehtib konkreetsele kasutajale, teistele aga üldpõhimõtte kohaselt.

Ilmselgelt saab sellist piirangut konfigureerida andmebaasiobjektide jaoks, millel on mingi positsioon ajateljel. See võib olla

  • Dokumentatsioon
  • Perioodilised teaberegistrid

Loome uue rolli “Piirangud muudatuste keelamise kuupäeva järgi”.

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

Määrame sätte kõikidele väljadele.

Piirangu tekst on järgmine:

ReceiptInvoice FROM Document.ReceiptInvoice AS ReceiptInvoice

Muuda keelukuupäevi Keelamise kuupäev AS keelukuupäev
FROM

SISEMINE LIITUMINE (VALI
MAX(Keelatud kuupäevade muutmine.Kasutaja) AS-i kasutaja
FROM
Teaberegister Muudatuste keelu kuupäevad AS Muudatuste keelu kuupäevad
KUS
(Muuda keelatud kuupäevi. Kasutaja = &praegune kasutaja
VÕI Kuupäevad keelatud Muudatused.Kasutaja = VALUE(Directory.users.EmptyLink))) AS VZ_User
Muudatuste keelamise kuupäeva järgi.Kasutaja = VZ_Kasutaja.Kasutaja) AS NestedQuery
Tarkvarakviitung Invoice.Date > Pesastatud päringu keelu kuupäev

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 konstrueerimise kontekstis on mugav selle poolest, et olenevalt tingimustest koostatakse lühem päringutekst. Lihtsam päring koormab süsteemi vähem.

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

* Omapära:

Erinevalt sisseehitatud keele eeltöötleja juhistest juurdepääsupiirangu tekstides tuleb enne operaatorit Siis tuleb panna räsi - #Siis

Harjutus 6. Lülitage valik „Kasuta RLS-i”

Täiendame oma piirangute süsteemi lülitiga, mis lülitab piirangute kasutamise rekordtasemel sisse/välja.

Selleks lisame konstanti ja seansi parameetri nimega “UseRLS”.

Kirjutame Session Module'i, et seansi parameetri väärtus konstandi väärtusest määrata.

Lisame kõikidele juurdepääsupiirangute tekstidele järgmise koodi:

„#If &UseRLS #Siis….. #EndIf”

Kontrollime - kõik töötab.

Kuid nüüd pärast lipu "kasuta radarit" sisselülitamist muudatused kohe ei jõustu. Miks?

Kuna seansi parameeter määratakse seansi käivitamisel.

Seansi parameetri väärtust on võimalik määrata uue konstantse väärtuse kirjutamisel lähtestamiseks, kuid see toimib ainult praeguse kasutajaseansi puhul. Teistel kasutajatel palutakse süsteem taaskäivitada.


Esimese osa lõpp.

). Selle märksõna kasutamine võimaldab vältida vigu 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 vaadeldakse võimalikke olukordi ja antakse soovitusi, kuidas seda vältida.

Andmejuurdepääsupiirangute tulemuse võimaliku sõltuvuse probleem DBMS-i päringuplaanist võib tekkida andmebaasipäringu sooritamisel ilma märksõnata LUBATUD, kui praegusel kasutajal on andmetele juurdepääsupiirangud ja päring sisaldab ühte või mitut vormi võrdlust:

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

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

Hankige 267 videotundi 1C-s tasuta:

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 ei ole juurdepääsu keelatud andmetele. Selleks lisatakse 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 näidiskirje sisaldab väärtust Valetage signaaliväljas lõpeb päringu täitmine ebanormaalselt.

Võrdluses pesastatud päringute tulemustele lisatakse sama signaaliväli IN/EI SISSE. Veelgi enam, signaali veeru väärtuse kontrollimine toimub sel juhul DBMS-i tööriistade abil. Seega, kui pesastatud päringu täitmise ajal pääseti juurde keelatud andmetele, peaks päring nurjuma veaga Kasutajal ei ole andmebaasis toimingu tegemiseks piisavaid õigusi.

Päringuplaani koostamisel ei pruugi DBMS siiski täielikku näidist kätte saada <Вложенным запросом> ja saada ainult need kirjed, mis on olukorra kontrollimiseks tegelikult vajalikud IN/EI SISSE. Sel juhul võib taotlus õnnestuda isegi siis, kui <Вложенного запроса> sõltumatu taotlusena võib tekkida juurdepääs keelatud andmetele.

Vaatame lihtsat näidet. Lase lauale Kataloog. Üksikisikud andmetele juurdepääsu piirangud. Sel juhul taotlus:

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 valitud DBMS-i päringuplaanist saab päringu sooritada kas edukalt või veaga. See päringu käitumine ei ole viga, sest päringu täitmise ajal võidakse keelatud andmetele juurde pääseda, kuid ei pruugita. Ennustatavama tulemuse saamiseks on vaja päring konstrueerida nii, et pesastatud päring ei pääseks kindlasti ligi ilmselgelt mittevajalikele andmetele. Eelkõige siis, kui eelmine päring on ümber kirjutatud järgmiselt:

Töö tegemise leping üksikisikuga.Töötaja.Eraisik

Dokument Füüsilise isikuga töö tegemise leping AS füüsilise isikuga töö tegemise leping

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

Tabel.Isikisik AS Eraisik

Kataloog.Üksikisikud AS tabel

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

Looge taotlus

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

//Loo taotlus
Taotlus = uus taotlus;

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

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

//Täitke taotlus
Tulemus = päring. Run() ;

//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 = päring. Käivita () . Vali() ;
//või
Tabel = Päring. Käivita () . Unload() ;

1C päringukeele põhitõed

Andmete hankimiseks mõnest allikast kasutatakse lihtsamaid ja sagedamini kasutatavaid päringuid. 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 detailide, tabeliosade, tabeliosade üksikasjade, muudatuste, ressursside jne väärtused.

Taotluse teksti hankimiseks 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 kõigi kataloogi üksikasjade väärtused Vastaspooled, siis näeb taotlus välja selline:

Taotlus. Tekst = "VALI
| *
|ALT
| Kataloog. Vastaspooled"
;

Kui soovite hankida ainult üksikuid üksikasju, tehke järgmist.

Taotlus. Tekst = "VALI
| Kood,
| nimi,
| Lapsevanem
|ALT
| Kataloog. Vastaspooled"
;

Sellise taotluse saamiseks kirjutage sisse Päringu konstruktor peate vahekaardil valima sobivad väljad Tabelid 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
| Clients.Code AS number,

| 1000 AS FieldWith Value
|ALT
;

Tõmba = päring. Käivita () . Vali() ;

Hüvasti valik. Järgmine() Loop
ClientNumber = Näidis. Number;
ClientName = Valik. nimi;
Väärtus = näidis. FieldWith Value;
EndCycle ;

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

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

Kõiki valitud elemente saab järjestada kas edasi- või vastupidises järjekorras. Tellimiseks saate valida ühe või mitu välja. Koos korraldamisega võib mõnikord olla kasulik valida vaid üks või paar esimestest esemetest.

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

|TELLI
| nimi"
;

//Valige uusim tähestikuline klient
Taotlus. Tekst = "VALI TOP 1
| Clients.Code AS number,
| Clients.Name AS nimi,
| 1000 AS FieldWith Value
|ALT
| Kataloog Vastaspooled AS Kliendid
|TELLI
| Nimi DECREASE"
;

Saate piirata üksuste valikut, millele kasutajal on juurdepääsuõigused. Või eemaldage päringu tulemusest korduvad read.

//Kasutajale lubatud andmete proovivõtt
Taotlus. Tekst = "VALI LUBATUD
| Clients.Code AS number,
| Clients.Name AS nimi,
| 1000 AS FieldWith Value
|ALT
| Kataloog. Vastaspooled AS kliendid"
;

//Mittekorduvate elementide valik
Taotlus. Tekst = "VALI ERINEVAD
| Clients.Code AS number,
| Clients.Name AS nimi,
| 1000 AS FieldWith Value
|ALT
| Kataloog. Vastaspooled AS kliendid"
;

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

Jätkub…