» Proqramçı notebooku. "İcazə verilir" direktivindən istifadə edərək 1c seçin icazə verilir

Proqramçı notebooku. "İcazə verilir" direktivindən istifadə edərək 1c seçin icazə verilir
   

1C verilənlər bazası məlumatları üçün optimal QUERY tərtib etmək üçün 17 qayda

1C platformasında verilənlər bazası cədvəllərinə sorğu yaratmaq və icra etmək üçün xüsusi proqramlaşdırma dili obyektindən istifadə olunur. Sorğu. Bu obyekt konstruksiyanı çağırmaqla yaradılır Yeni sorğu. Zəruri hallarda qruplaşdırılmış və çeşidlənmiş mürəkkəb məlumat nümunəsi əldə etmək lazım olduqda sorğudan istifadə etmək rahatdır. Sorğudan istifadənin klassik nümunəsi, müəyyən vaxtda yığılma registrinin vəziyyətinin xülasəsini əldə etməkdir. Həmçinin, sorğu mexanizmi müxtəlif zaman dövrlərində məlumat əldə etməyi asanlaşdırır.

Sorğu orqanı sorğunun icra edilməli olduğu göstərişdir. Müraciət orqanı aşağıdakıları təsvir edir:

  • sorğu məlumat mənbələri kimi istifadə edilən məlumat bazası cədvəlləri;
  • sorğuda emal edilməli olan cədvəl sahələri;
  • qruplaşdırma qaydaları;
  • nəticələrin çeşidlənməsi;
  • və s.

Təlimat xüsusi dildə - sorğu dilində tərtib edilir və ayrıca hissələrdən - bölmələrdən, cümlələrdən, açar sözlərdən, funksiyalardan, arifmetik və məntiqi operatorlardan, şərhlərdən, sabitlərdən və parametrlərdən ibarətdir.

1C platformasının sorğu dili digər SQL dillərinin sintaksisinə çox bənzəyir, lakin fərqlər var. Quraşdırılmış sorğu dilinin əsas üstünlükləri bunlardır: sahələrə istinadın ləğvi, virtual cədvəllərin olması, nəticələrlə rahat işləmə, sorğularda tipsiz sahələr.

1C platforması sorğu dilində verilənlər bazası sorğularının yazılması üçün tövsiyələr:

1) Sorğu orqanı əvvəlcədən təyin edilmiş konfiqurasiya məlumatlarını ehtiva edə bilər, məsələn:

  • enum dəyərləri;
  • əvvəlcədən təyin edilmiş məlumatlar:
  • istinad kitabları;
  • xüsusiyyətlərin növləri üzrə planlar;
  • hesab planları;
  • hesablamaların növləri üzrə planlar;
  • boş bağlantılar;
  • biznes prosesi marşrutu nöqtəsi dəyərləri.

Həmçinin, sorğu mətni verilənlər bazası cədvəllərindəki sahələrə təyin edilə bilən sistem nömrələmələrinin dəyərlərini ehtiva edə bilər: Yığım Hərəkətinin Növü, Hesab Növü və Mühasibat Hərəkətinin Növü. Sorğularda əvvəlcədən təyin edilmiş konfiqurasiya məlumatlarına və sistem nömrələmə dəyərlərinə VALUE funksiya növünün hərfi ilə daxil olur. Bu literal sorğunun oxunuşunu yaxşılaşdırmağa və sorğu parametrlərinin sayını azaltmağa imkan verir.

Hərfi istifadə nümunəsi MƏNA:

  • WHERE Şəhər = DƏYƏR(Directory.Cities.Moscow)
  • WHERE Şəhər = DƏYƏR(Directory.Cities.EmptyLink)
  • WHEREProductType = DƏYƏR(Saya.MəhsulTypes.Xidmət)
  • HARƏDƏHərəkətNövü = DƏYƏR(Hərəkət TipiYığım.Gələn)
  • HARADAN RoutePoint = DƏYƏR(BusinessProcess.BusinessProcess1.RoutePoint.Action1

2) Təlimatlardan istifadə etməklə AVTO SİFARİŞ Sorğunun tamamlanması uzun müddət çəkə bilər, ona görə də çeşidləmə tələb olunmursa, ondan ümumiyyətlə istifadə etməmək daha yaxşıdır. Əksər hallarda təlimatların çeşidlənməsindən istifadə etmək daha yaxşıdır SORTLAMA.

Avtomatik sifariş aşağıdakı prinsiplərə əsasən işləyir:

  • Əgər sorğuda ORDER BY bəndi göstərilibsə, bu bənddə tapılan cədvələ olan hər bir keçid cədvəlin standart olaraq çeşidləndiyi sahələrlə əvəz olunacaq (istinad kitabları üçün bu kod və ya ad, sənədlər üçün - sənəd tarixi). Əgər çeşidlənəcək sahə iyerarxik kataloqa aiddirsə, bu kataloq üzrə iyerarxik çeşidləmə tətbiq olunacaq.
  • Əgər sorğuda ORDER BY bəndi yoxdursa, lakin TOTAL bəndi varsa, sorğunun nəticəsi BY açar sözündən sonra TOTAL bəndində mövcud olan sahələr üzrə eyni ardıcıllıqla və əgər cəmlər tərəfindən hesablanıbsa, sıralanacaq. istinad sahələri, sonra istinad edilən cədvəllərin standart olaraq çeşidlənməsi sahələri ilə.
  • Əgər sorğuda ORDER BY və TOTAL bəndləri yoxdursa, lakin GROUP BY bəndi varsa, sorğunun nəticəsi eyni ardıcıllıqla bənddə mövcud olan sahələrə görə sıralanacaq və əgər qruplaşdırma istinad sahələri ilə həyata keçirilibsə , sonra defolt olaraq istinad edilmiş cədvəllər sahələrin çeşidlənməsi.
  • Sorğuda ORDER BY, TOTAL və ya GROUP BY bəndləri yoxdursa, nəticə sorğuda görünən ardıcıllıqla verilənlərin seçildiyi cədvəllər üçün standart çeşidləmə sahələrinə görə sıralanacaq.
  • Əgər sorğuda TOTAL bəndi varsa, hər bir ümumi səviyyə ayrıca sıralanır.

3) Sorğunun nəticəsini istifadəçiyə göstərərkən (məsələn, sorğu qurmaq və ya elektron cədvəl sənədindən istifadə edərək sorğunun nəticəsini göstərmək) verilənlər bazasına sorğunun təkrarlanmasının qarşısını almaq üçün təlimatdan istifadə etmək faydalıdır. GİRİŞ BAĞLANTILARI, bu, istinad dəyərinin təsvirini əldə etməyə imkan verir. Misal:

Təlimatlardan istifadə etmək də mümkündür PERFORMANS- ixtiyari tipli dəyərin simli təsvirini əldə etmək üçün nəzərdə tutulmuşdur. Bu instruksiyalar arasındakı fərq ondan ibarətdir ki, birinci halda göstərişlər keçid keçərsə, nəticə sətir olacaq.Başqa hallarda isə nəticə ötürülən parametrin qiyməti olacaqdır. İkinci halda, təlimatın nəticəsi həmişə simli olacaqdır!

4) Əgər sorğuda kompozit tipli bir sahə varsa, bu cür sahələr üçün bir təlimatdan istifadə edərək sahə dəyərlərini xüsusi bir növə çevirmək lazımdır. EXPRESS, bu, lazımsız cədvəlləri soldan silməyə imkan verəcək, mürəkkəb bir məlumat növü sahəsi ilə birləşməyə və sorğunun icrasını sürətləndirməyə imkan verəcəkdir. Misal:

Qalan Malların yığılması üçün reyestr mövcuddur ki, burada Registrar sahəsi kompozit tipə malikdir. Sorğuda Malların Qəbul Tarixi və Sənəd Nömrəsi seçildiyi halda, “Registr” sahəsi vasitəsilə sənəd təfərrüatlarına daxil olduqda, yığım reyestr cədvəlinin qeydiyyatçı sənədlərinin cədvəlləri ilə bir çox sol əlaqəsi baş vermir.

Kod 1C v 8.x SEÇ
EXPRESS(Qalan Mallar.Registrator Sənəd KİMİ.Malların Qəbulu).Nömrə AS Qəbz Nömrəsi,
EXPRESS(Qalan Mallar.Registrator Sənəd KİMİ.Malların Qəbulu).Tarix Qəbul tarixi KİMİ
FROM
Yığımların Reyestri.Qalan Mallar Qalan Mallar KİMİ

Tipli tökmə mümkün hesab edilmirsə, o zaman tipli tökmənin nəticəsi dəyər olacaqdır SIFIR.

5) Təlimatları unutma İCAZƏ VERİLİR, bu o deməkdir ki, sorğu yalnız cari istifadəçinin hüquqlarına malik olan qeydləri seçəcək. Əgər bu söz göstərilməyibsə, sorğu istifadəçinin hüququ olmayan qeydləri seçərsə, sorğu uğursuz olacaq.

6) Sorğu birləşmədən istifadə edirsə və birləşmənin bəzi hissələrində iç-içə cədvəllər (cədvəl hissəsi olan sənəd), bəzilərində isə yoxdursa, seçim siyahısına sahələr - boş iç-içə cədvəllər əlavə etmək zərurəti yaranır. Bu, açar sözdən istifadə etməklə edilir BOŞ CƏDVƏL, bundan sonra yuvalanmış cədvəli təşkil edəcək sahələrin ləqəbləri mötərizədə göstərilir. Misal:

Kod 1C v 8.x // Nömrə və Kompozisiya sahələrini seçin
// virtual cədvəldən Sənəd.Xərc
Linki SEÇİN.Nömrə, BOŞ CƏDVƏL.(No., Maddə, Kəmiyyət) Tərkibi KİMİ
Sənəddən.Xərc Fakturasından
HƏR ŞEYİ QARŞI VERİN
Linki SEÇİN.Nömrə, Məzmun.(LineNumber, Məhsul, Miqdar)
Sənəddən.Fatura Sənədindən.Qaimə.Tərkibi.*

7) Sorğu nəticəsində dublikat sətirlərin görünməsinin qarşısını almaq üçün təlimatdan istifadə etməlisiniz MÜXTƏLİF, çünki o, daha vizual və başa düşüləndir və təlimatlar GROUP BY məcmu funksiyalardan istifadə edərək qruplaşdırmaq üçün istifadə olunur. Ksati, məcmu funksiyalardan istifadə edərkən, bir təklif GROUP BYümumiyyətlə təyin olunmaya bilər, lakin bütün sorğu nəticələri bir sətirdə qruplaşdırılacaq. Misal:

Kod 1C v 8.x // Hansı qarşı tərəfləri tapmaq lazımdır
// mallar dövr üçün göndərilib.
Müxtəlif seçin
Sənəd.Qaimə.Qarşı tərəf

8) Təlimatlar GROUP BYƏgər məcmu funksiyalar iç içə qoyulmuş cədvəlin sahələrinə tətbiq edilərsə, nəticələri bu sahələrə görə qruplaşdırmadan yuxarı səviyyəli sahələrə daxil olmağa imkan verir. Baxmayaraq ki, 1C yardımı sorğu nəticələrini qruplaşdırarkən seçim sahələrinin siyahısında ümumi funksiyaların göstərilməli olduğunu və seçim sahələrinin siyahısında ümumi funksiyalara əlavə olaraq yalnız qruplaşdırmanın aparıldığı sahələri göstərməyə icazə verilir. . Misal:

Kod 1C v 8.x SEÇ
Malların və xidmətlərin qəbulu.Mallar.(SUM (Kəmiyyət), Nomenklatura),
Malların və xidmətlərin qəbulu. Link,
Malların və xidmətlərin qəbulu.Qarşı tərəf
FROM
Sənəd.Malların və xidmətlərin qəbulu NECƏ Malların və xidmətlərin qəbulu
GROUP BY
Malların və xidmətlərin qəbulu.Mallar.(Nomenklatura)

9) Təlimatlar ISNULL dəyəri əvəz etmək üçün nəzərdə tutulub SIFIR başqa bir dəyərə, lakin unutmayın ki, birinci parametrin növü sətir və ya rəqəmdirsə, ikinci parametr birincinin növünə çevriləcək.

10) Əsas cədvələ daxil olarkən şərti olaraq tabeli cədvəldəki verilənlərə daxil ola bilərsiniz. Bu xüsusiyyət, tabeliyində olan cədvəlin sahələrinə istinad etmə adlanır.

Nümunə (cədvəl bölməsində konkret məhsulu ehtiva edən sənədləri axtarın):

Bu sorğunun Qəbul.Mallar cədvəlindəki sorğudan üstünlüyü ondan ibarətdir ki, sənədlərdə dublikatlar olarsa, sorğunun nəticəsi DIFFERENT açar sözündən istifadə etmədən yalnız unikal sənədləri qaytaracaq.

11) B operatorunun maraqlı variantı sifarişli çoxluğun belə çoxluqların çoxluğuna daxil olub-olmadığını yoxlamaqdır (Field1, Field2, ..., FieldN) B (Field1, Field2, ..., FieldN).

Kod 1C v 8.x SEÇ
Qarşı tərəflər.Link
HARADA
(Qarşı tərəflər.Link, Məhsullar.Link) B
(Satış.Müştəri, Satış.Məhsul seçin
RegisterAccumulation.Sales AS Satışdan)
FROM
Müqavilə Qarşı tərəflər,
Directory.Məhsullar

12) Mümkün olduqda virtual sorğu cədvəllərindən istifadə edin. Sorğu yaratarkən sistem məlumat mənbəyi kimi bir sıra virtual cədvəllər təqdim edir - bunlar həm də kodun müvafiq bölməsinin icrası zamanı sistemin yaratdığı sorğunun nəticəsi olan cədvəllərdir.

Tərtibatçı sistemin ona virtual cədvəllər kimi təqdim etdiyi eyni məlumatları müstəqil şəkildə əldə edə bilər, lakin bu məlumatların alınması alqoritmi optimallaşdırılmayacaq, çünki:

Bütün virtual cədvəllər parametrləşdirilir, yəni tərtibatçıya virtual cədvəl yaratmaq üçün sorğu yaradan zaman sistemin istifadə edəcəyi bəzi parametrləri təyin etmək imkanı verilir. Tərtibatçı tərəfindən virtual cədvəlin hansı parametrlərinin təyin olunduğundan asılı olaraq, sistem yarada bilər MÜXTƏLİF eyni virtual cədvəli əldə etmək üçün sorğular və onlar ötürülən parametrlər baxımından optimallaşdırılacaq.

Bir tərtibatçının sistemin daxil olduğu məlumatlara giriş əldə etməsi həmişə mümkün olmur.

13) Klient-server iş rejimində funksiya SUBSTRING() SQL Server verilənlər bazası serverinə ötürülən müvafiq SQL ifadəsinin SUBSTRING() funksiyasından istifadə etməklə həyata keçirilir ki, bu da SUBSTRING() funksiyasının nəticəsinin növünü onun parametrlərinin növü və dəyərlərindən asılı olaraq mürəkkəb qaydalardan istifadə edərək hesablayır. eləcə də istifadə olunduğu kontekstdən asılı olaraq. Əksər hallarda bu qaydaların sorğunun icrasına heç bir təsiri yoxdur, lakin SQL Server tərəfindən hesablanmış maksimum nəticə sətir uzunluğunun sorğunun icrası üçün vacib olduğu vaxtlar olur. Nəzərə almaq lazımdır ki, bəzi kontekstlərdə SUBSTRING() funksiyasından istifadə edərkən onun nəticəsinin maksimum uzunluğu SQL Server-də 4000 simvol olan məhdud uzunluqlu sətirin maksimum uzunluğuna bərabər ola bilər. Bu, sorğunun gözlənilmədən sıradan çıxmasına səbəb ola bilər:

SQL Server üçün Microsoft OLE DB Provayderi: Xəbərdarlıq: GROUP BY və ya ORDER BY bəndindəki bütün sütunların ümumi uzunluğu 8000 baytı ötdüyünə görə sorğu prosessoru optimallaşdırıcıdan sorğu planı yarada bilmədi.

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

14) Ehtiyatla istifadə edin YA dizaynda HARADA, çünki OR şərtindən istifadə sorğunu əhəmiyyətli dərəcədə ağırlaşdıra bilər. Problem dizaynla həll edilə bilər HƏR ŞEYİ QARŞI VERİN. Misal:

Kod 1C v 8.x SEÇ

FROM

HARADA
_Demo Contractors.Link =Link1
HƏR ŞEYİ QARŞI VERİN
SEÇİN
_Demo Podratçıları.NameFull
FROM
Directory._Demo Qarşı tərəflər NECƏ _Demo Qarşı tərəflər
HARADA
_Demo Contractors.Link = Link2

15) Vəziyyəti YOXDUR dizaynda HARADA sorğunun icra müddətini artırır, çünki bu bir növdür DEYİL (OR1 OR2 ... ORn), buna görə də böyük masalar üçün istifadə etməyə çalışın NULL şərti ilə SOL QOŞULUN. Misal:

Kod 1C v 8.x SEÇ
_Demo Contractors.Link
FROM
Directory._Demo Qarşı tərəflər NECƏ _Demo Qarşı tərəflər
SOL BAĞLANTI SƏNƏDİ._Alıcının Demo Sifarişi NECƏ _Alıcının Demo Sifarişi
Proqram təminatı _Demo Qarşı tərəflər. Link = _ Alıcının Demo Sifarişi. Qarşı tərəf
HARADA
_Alıcının Demo Sifarişi.Qarşı tərəf BOŞDUR

16) İstifadə edərkən Müvəqqəti masalarŞərti indeksləşdirməli və bu cədvəllərdə sahələri birləşdirməlisiniz, AMMA indekslərdən istifadə edərkən sorğu daha da yavaş ola bilər. Buna görə də indeksli və indekssiz hər bir sorğunu təhlil etmək, sorğunun icra sürətini ölçmək və yekun qərar vermək lazımdır.

Əgər verilənləri əvvəlcə bəzi sahələr tərəfindən indeksləşdirilən müvəqqəti cədvələ yerləşdirirsinizsə, onda müvəqqəti cədvəlin artıq bu sahələr üzrə indeksi olmayacaq.

17) Əgər istifadə etmirsinizsə Müvəqqəti masa meneceri, onda müvəqqəti cədvəli açıq şəkildə silməyə ehtiyac yoxdur, toplu sorğu tamamlandıqdan sonra silinəcək, əks halda aşağıdakı üsullardan birini istifadə edərək müvəqqəti cədvəli silməlisiniz: komanda MƏHV EDİN sorğuda metodu çağırın TemporaryTableManager.Close().

Yevgeni Gilevdən videoya əlavə olaraq: 1C-də sorğu yazarkən tipik səhvlər:

1C 8 sorğu dili 1C proqramçısı üçün əvəzolunmaz vasitədir, o, daha yığcam, sadə, başa düşülən kod yazmağa və verilənlərlə işləyərkən daha az sistem resurslarından istifadə etməyə imkan verir. Bu məqalə 1C 8 sorğu dilinə həsr olunmuş bir sıra dərsləri açır.Birinci dərsdə biz bu dilin əsas operatorunun strukturuna baxacağıq - SEÇİN. Bu operatordan istifadə edərək verilənlər bazası cədvəllərindən seçimlər yarada bilərsiniz. Seçilmiş cədvəl məlumatları çeşidlənə, şərtləri ona yerləşdirə, digər cədvəllərin verilənləri ilə əlaqələndirə və birləşdirə, müxtəlif sahələrə görə qruplaşdıra və s.

Sorğu dili 1C müəssisəsi 8 - Operator strukturu SELECT

SELECT operatorunun strukturuna baxaq (operatorun isteğe bağlı hissələri kvadrat mötərizədə göstərilmişdir). 1C sorğu dili məlumat nümunələrini yaratmaq üçün geniş alətlər təqdim edir.

SEÇİN [İCAZƏ VERİLİR] [FƏRQLİ] [İLK A] [Sahə1] [Ləqəb1 AS], [Sahə2] [Əlaad2], ... [FieldM] [Əl AdB] [Müvəqqəti CədvəlAdı QOYUN] [Cədvəl1-DƏN AliasTableTable1 AS [[DAXİLİ QOŞULUN ][SOL QOŞULUN][TAM QOŞULUN] Cədvəl2 Ləqəb Cədvəl 2 [[DAXİLİ QOŞULUN][SOL QOŞULUN][TAM QOŞULUN] CədvəlC Ləqəb Cədvəlləri C İfadə 1 [Və İfadə2]...[Və İfadəD]] .. ... İfadə1 İLƏ [Və İfadə2]...[Və İfadəE]] ... [CədvəlF CədvəlF ləqəbi AS] ... ] [Qruplaşdırma Sahəsi1 BY QRUPLA[,] ... [Qruplaşma SahəsiG]] [HARƏDƏ İfadə1 [VƏ İfadə2] ... [VƏ İfadəH]] [HAMINI BİRLEŞTİRİN...] [; ...] [Ləqəb1 İLƏ İNDEKSİ ... AliasB] [CƏMİ [AggregationFunction(Field1)][,] [AggregationFunction(Field2)][,] ... [AggregationFunction(FieldI)] BY BY [GENERAL][,] [ GroupingField1][,] ... [GroupingFieldj]]

Sahələrlə işləmək üçün açar sözlər və bloklar

  • SEÇİN— operatorun başlanğıcını göstərən açar söz;
  • İCAZƏ VERİLİR seçimə verilən istifadəçi üçün oxumaq imkanı olan cədvəl qeydlərinin daxil edilməli olduğunu göstərir;
  • MÜXTƏLİF göstərir ki, nümunə yalnız müxtəlif (bütün sahələr üzrə) axınları əhatə etməlidir. Başqa sözlə, dublikat sətirlər nümunədən çıxarılacaq;
  • İLK Ə bu açar sözü qeyd etsəniz, o zaman sorğu ilə seçilmiş sətirlərin yalnız birinci A-sı seçimə daxil ediləcək, burada A natural ədəddir;
  • Sahə bloku— bu blok seçimə daxil edilməli olan sahələri göstərir. Bu sahələr seçilmiş sütunlar olacaq. Ən sadə halda sahə belə görünür: Cədvəl Alias.TableFieldName AS Field Alias

    Beləliklə, bu sahəni hansı cədvəldən götürməyimizi göstəririk. 1C sorğu dili sizə hər hansı ləqəbləri təyin etməyə imkan verir, lakin onlar eyni SELECT ifadəsində təkrarlanmamalıdır. Sahə cədvəl sahələrinin, sorğu dili funksiyalarının və ümumi funksiyaların müxtəlif kombinasiyalarından ibarət daha mürəkkəb ola bilər, lakin biz bu dərslikdə həmin halları əhatə etməyəcəyik;

Cədvəllərlə işləmək üçün açar sözlər və bloklar

  • Müvəqqəti CədvəlAdı QOYUN- açar söz YER müəyyən bir adla müvəqqəti cədvəl yaratmaq üçün nəzərdə tutulmuşdur ki, o, bitənə qədər və ya müvəqqəti cədvəl məhv edilənə qədər verilmiş 1C 8 seansında RAM-da saxlanılacaqdır. Qeyd etmək lazımdır ki, bir 1C 8 seansında müvəqqəti cədvəllərin adları təkrarlanmamalıdır;
  • Cədvəllər və əlaqələr bloku— blok bu sorğuda istifadə olunan bütün cədvəlləri, eləcə də onlar arasındakı əlaqələri göstərir. Blok açar sözlə başlayır FROM, ardınca birinci cədvəlin adı və ləqəbi. Əgər bu cədvəl digər cədvəllərə aiddirsə, onda əlaqələr göstərilir. 1C sorğu dili aşağıdakı əlaqə növləri dəstini ehtiva edir:
    • DAXİLİ QOŞULUN— sol cədvəldən qeyd yalnız əlaqə şərti yerinə yetirildikdə seçimə daxil ediləcək, sağdakı cədvəldən qeyd yalnız əlaqə şərti təmin edildikdə seçimə daxil ediləcək;
    • SOL ƏLAQƏ— istənilən halda sol cədvəldən olan qeyd seçimə daxil ediləcək, sağdakı cədvəldən olan qeyd yalnız əlaqə şərti yerinə yetirildikdə seçimə daxil ediləcək;
    • TAM ƏLAQƏ— istənilən halda seçimə əvvəlcə soldakı cədvəldən qeyd daxil ediləcək, sonra yalnız əlaqə şərti yerinə yetirildikdə, hər halda ilk olaraq sağdakı cədvəldən qeyd seçimə daxil ediləcək, sonra yalnız əlaqə şərti olduqda qarşılanır. Bu halda, yaranan dublikat sətirlər nümunədən çıxarılır.

    Bağlantı növündən sonra ikinci cədvəlin adı və ləqəbi göstərilir. Sonra açar söz gəlir BY, sonra məntiqi operatorlar tərəfindən bir-biri ilə əlaqəli rabitə şərtləri VƏ, YA.Şərtdəki hər bir ifadə Boolean dəyərini qaytarmalıdır (True, False). Əgər birinci cədvəl ikincidən başqa bəzi cədvəllərə qoşulubsa, onda əlaqə növü yenidən göstərilir və s. Bağlantıda iştirak edən cədvəllərin hər biri öz növbəsində digər cədvəllərə qoşula bilər, bu sorğu strukturu diaqramında göstərilir. Cədvəl birinciyə aid deyilsə, o zaman əlaqə növü olmadan göstərilir, onda onun əlaqələri izləyə bilər və s.;

Açar sözlər və məlumatların çevrilməsi blokları

  • Qrup bloku— bu blok cədvəl sətirlərini qruplaşdırmaq üçün istifadə olunur. Açar sözdən sonra göstərilən sahələrin dəyərləri varsa, satırlar birinə birləşdirilir GROUP BY eyni olduğu ortaya çıxır. Bu halda, bütün digər sahələr cəmlənir, ortalanır, maksimumlaşdırılır və ya aqreqat funksiyalardan istifadə edərək minimuma endirilir. Məcmu funksiyalar sahə blokunda istifadə olunur. Nümunə: Maksimum(TableAlias.TableFieldName) AS FieldAlias
  • Vəziyyət bloku- açar sözdən sonra bu blokda HARADA məntiqi operatorlarla ayrılmış şərti ifadələr göstərilir VƏ, YA, seçilmiş cərgələrdən hər hansı birinin nümunəyə daxil edilməsi üçün məcmudakı bütün şərtlərin dəyəri olmalıdır Doğru.
  • HƏR ŞEYİ QARŞI VERİN— bu açar söz sorğuları birləşdirmək üçün istifadə olunur (operatorlar SEÇİN). 1C sorğu dili bir neçə sorğunu birinə birləşdirməyə imkan verir. Sorğuların birləşdirilməsi üçün onların eyni sahələr dəsti olmalıdır;
  • «;» - bir-birindən asılı olmayan ifadələri ayırmaq üçün nöqtəli vergüllərdən istifadə olunur SEÇİN;
  • İNDEKSİ BY— açar söz özündən sonra göstərilən sahələri indeksləşdirmək üçün istifadə olunur;
  • Xülasə bloku— ağaca bənzər nümunələr yaratmaq üçün istifadə olunur. Açar sözdən sonra göstərilən qruplaşdırma sahələrinin hər biri üçün BY, seçimdə ayrıca sıra yaradılacaq. Bu sətirdə ümumi funksiyalardan istifadə edərək açar sözdən sonra göstərilən sahələrin ümumi dəyərləri hesablanacaq. NƏTİCƏLƏR.

1C 8 sorğu dilini öyrənməyə davam etmək istəyirsiniz? Sonra növbəti məqaləni oxuyun.

“Rol” konfiqurasiya obyekti konfiqurasiya obyektləri üzərində əməliyyatlara (fəaliyyətlərə) hüquqlar toplusunu verir.

"Tam hüquqlar" rolu.

Bu, sadəcə olaraq, bütün konfiqurasiya obyektlərinə hüquqların bütün növlərinin yoxlanıldığı bir roldur (əvvəlcədən təyin olunmayıb).

Onu digər rollardan fərqləndirən “İdarəetmə” hüququnun olmasıdır.

Ən azı bir istifadəçi yaradılarsa, sistem "İdarəetmə" hüququnun olub-olmadığını yoxlamağa başlayır - ən azı bir istifadəçi buna sahib olmalıdır.

Rekord səviyyəli giriş məhdudiyyətləri

Row Level Security (RLS) – rekord səviyyədə məhdudiyyət.

Məlumata girişin məhdudlaşdırılması mexanizmi yalnız metadata obyektləri səviyyəsində deyil, həm də verilənlər bazası obyektləri səviyyəsində giriş hüquqlarını idarə etməyə imkan verir. Məlumata girişi məhdudlaşdırmaq üçün aşağıdakı obyektlərdən istifadə edilə bilər:

  • rollar,
  • sessiya parametrləri,
  • funksional seçimlər,
  • imtiyazlı paylaşılan modullar,
  • sorğu dilində açar sözə İZİN VERİLİR.

Mexanizm, bu cədvəllərin sətir sahələrinin dəyərlərinə qoyulmuş ixtiyari şərtlər əsasında metadata obyekti cədvəli qeydlərinə girişi məhdudlaşdırmaq üçün nəzərdə tutulmuşdur. Məsələn, yalnız "sizin" qarşı tərəflər, təşkilatlar və s. üçün qeydləri görmək.

1C-də giriş məhdudiyyətlərinin texniki tətbiqi

1C DBMS-ə sorğu yaradır. Server klasteri sorğuya RLS vasitəsilə girişin məhdudlaşdırılması şərtinin mətnini ehtiva edən HARADA bölməsini əlavə edir, sonra bu sorğu DBMS-ə göndərilir, çıxarılan məlumatlar 1C müştərisinə qaytarılır.


Bu mexanizm müştərinin istənilən sorğusu üçün işləyəcək:

  • hesabatlarda,
  • dinamik siyahılarda və müntəzəm siyahı formalarında
  • fərdi sorğularda.

Mexanizmin belə bir tətbiqi performansa böyük təsir göstərir.

Giriş məhdudiyyətlərindən yan keçməyin yolları.

Böyük resurs tələb edən əməliyyatlarda (məsələn, sənədlərin yenidən yerləşdirilməsi prosesi) kodun bir hissəsi imtiyazlı modullara köçürülə bilər.

A) İmtiyazlı modul xassələrində “İmtiyazlı” bayrağı olan ümumi moduldur.

Onun özəlliyi ondadır ki, içindəki kod RLS daxil olmaqla heç bir giriş hüquqlarına nəzarət olmadan icra olunur.


B) Həmçinin imtiyazlı rejimi yandırmaq olar sənəd obyekti modulları üçün. Bu, sənədin xüsusiyyətlərində, bayraqda edilir

  • apararkən imtiyazlı müalicə
  • Əməliyyatı ləğv edərkən imtiyazlı rejim


B) Metod SetPrivilegedMode()

Sistem əmri istənilən modulun kodunun bir hissəsini imtiyazlı etməyə imkan verir.

Növbəti kod sətirindən imtiyazlı icra rejimi işləyəcək.

Bu rejimi söndürmək üçün xəttə qədər və ya prosedur / funksiyanın sonuna qədər işləyəcək

(Doğru);

// burada istənilən kod hüquqlara nəzarət və RLS olmadan icra olunacaq

PrivilegedMode seçin(Yalan); // və ya prosedurun / funksiyanın sonu

İmtiyazlı rejimin aktivləşdirilməsinin sayı onun söndürülmə sayına uyğun olmalıdır. Bununla belə, əgər prosedur və ya funksiya daxilində imtiyazlı rejim işə salınıbsa (bir və ya daha çox), lakin söndürülməyibsə, sistem prosedur və ya funksiyada yarımçıq növbələr olduğu qədər avtomatik olaraq sönür.

Əgər prosedurda və ya funksiyada metodu çağırırsa PrivilegedMode seçin(Yanlış) metod çağırışlarından daha çox etdi PrivilegedMode seçin(Doğrudur ), onda bir istisna atılacaq

Funksiya Privileged Mode() imtiyazlı rejim hələ də aktivdirsə True qaytarır və tamamilə qeyri-aktivdirsə False. Bu, müəyyən bir funksiyada imtiyazlı rejim parametrlərinin sayını təhlil etmir.

Bütün çağırılan prosedurlar və funksiyalar da imtiyazlı rejimdə icra olunacaq.


İmtiyazlı sessiyaya başlamaq da mümkündür. Bu, sistemin başlanğıcından imtiyazlı rejimin qurulduğu bir sessiyadır. Üstəlik, əməliyyat zamanı üsul Privileged Mode() həmişə True qaytaracaq və imtiyazlı rejimi söndürmək imkanı dəstəklənmir. Yalnız inzibati hüquqlara (İdarəetmə hüququ) malik olan istifadəçi imtiyazlı sessiyaya başlaya bilər. Sessiya klient proqramının işə salınması komanda xətti keçidi UsePrivilegedMode və ya prmod infobase bağlantısı sətir parametrindən istifadə etməklə başlana bilər.


Sual təbii olaraq ortaya çıxır: Əgər bu qədər asanlıqla yan keçmək olarsa, niyə ümumiyyətlə giriş məhdudiyyətləri qoyursunuz?

Təhlükəsizlik rejimi.

Bəli, siz imtiyazlı icra rejimi ilə xarici emal yaza və məlumatları boşalta / poza bilərsiniz. Bunun qarşısını almaq üçün sistemdə qlobal kontekst metodu var

SetSafeMode().

Təhlükəsiz rejim, digər şeylər arasında, imtiyazlı rejimi məhəl qoymur.

Xarici prosessorları proqramla çağırmadan və ya onların modullarından prosedur və funksiyaları ixrac etməzdən əvvəl quraşdırılmalıdır.

Qadağan edilmiş əməliyyatları yerinə yetirərkən, iş vaxtında bir istisna atılır.

Bundan əlavə, rol parametrləri səviyyəsində istifadəçilər üçün xarici hesabatları və emalları interaktiv şəkildə işə salmaq imkanını söndürə bilərsiniz.

Giriş məhdudiyyətlərinin qurulması

RLS yalnız hüquqlar üçün konfiqurasiya edilə bilər:

  • oxumaq (seçmək)
  • əlavə etmək (daxil etmək)
  • dəyişmək (yenilənmək)
  • silin

Oxu əməliyyatları üçün və silindikdə, verilənlər bazasında yerləşən obyekt verilənlərə giriş məhdudiyyətlərinə uyğun olmalıdır.

Əlavə əməliyyatı üçün Məlumata giriş məhdudiyyəti verilənlər bazasına yazılması planlaşdırılan obyektə uyğun olmalıdır.

Dəyişdirmə əməliyyatı üçün verilənlərə giriş məhdudiyyəti həm dəyişiklikdən əvvəl (obyektin oxunması üçün), həm də dəyişiklikdən sonra (obyektin yazılması üçün) obyektə uyğun olmalıdır.

Bütün digər hüquqlar üçün belə bir seçim yoxdur.

“Nomenklatura” kataloqunun “oxumaq” hüququna yeni məhdudiyyət əlavə edək. Əlavə edilmiş məhdudiyyəti konfiqurasiya edə biləcəyiniz sahələrin siyahısı açılacaq.

Bu o deməkdir ki, siz yoxlanılmış sahələrə daxil olmağa cəhd etsəniz, məhdudiyyət işə düşəcək, lakin yoxlanılmamış sahələrə daxil olmağa cəhd etsəniz, məhdudiyyət işləməyəcək.

bayrağı seçsəniz " Digər sahələr", məhdudiyyətlərin açıq şəkildə təyin olunduğu sahələr istisna olmaqla, məhdudiyyət bütün cədvəl sahələri üçün konfiqurasiya ediləcək.


*Xüsusiyyət: əlavə etmək, dəyişdirmək, silmək hüquqları üçün:

  • Məhdudiyyət yalnız bütün sahələr üçün konfiqurasiya edilə bilər.
  • Yalnız bir məhdudiyyət ola bilər.

“Oxumaq” hüququ üçün bir neçə şərti konfiqurasiya edə bilərsiniz, onlar “AND” məntiqi operatoru ilə birləşdiriləcək.

Əsas məhdudiyyət məlumat obyektinin bütün sahələri aşağıdakı verilənlər bazası obyektləri üzrə məhdudiyyətlərdə istifadə edilə bilməz:

  • yığım registrlərində giriş məhdudiyyətləri yalnız məhdudiyyətin əsas obyektinin ölçülərini ehtiva edə bilər;
  • mühasibat uçotu registrlərində məhdudiyyətlər yalnız məhdudiyyətin əsas obyektinin balans ölçülərindən istifadə edə bilər

Əgər dövriyyədə olan yığım registrinin məlumatlarına məhdud çıxış şəraitində, cəmlərə daxil edilməyən ölçmələrdən istifadə edilirsə, inqilabların virtual cədvəlinə daxil olduqda, saxlanılan cəmlərdən istifadə edilmir və sorğu tamamilə yerinə yetirilir. hərəkət masası.

Giriş məhdudiyyətlərinin qoyulması mexanizmi.

1C: Enterprise-də verilənlər bazasında saxlanılan hər hansı bir əməliyyat, nəticədə məlumatların oxunması və ya dəyişdirilməsi tələbi ilə verilənlər bazasına zəngə səbəb olur. Verilənlər bazasına sorğuların icrası prosesində 1C: Enterprise-in daxili mexanizmləri giriş məhdudiyyətləri qoyur. Burada:

  • Hüquqların siyahısı yaradılır(oxumaq, əlavə etmək, dəyişdirmək, silmək), verilənlər bazası cədvəllərinin siyahısı və bu sorğu tərəfindən istifadə olunan sahələrin siyahısı.
  • Cari istifadəçinin bütün rollarından giriş məhdudiyyətləri seçilir sorğuda iştirak edən bütün hüquqlar, cədvəllər və sahələr üçün məlumatlara. Üstəlik, əgər bir rolda cədvəl və ya sahənin məlumatlarına giriş məhdudiyyətləri yoxdursa, bu o deməkdir ki, istənilən qeyddən tələb olunan sahələrin dəyərləri bu cədvəldə mövcuddur. Başqa sözlə desək, verilənlərə girişə məhdudiyyətin olmaması, HƏQİQƏTLİ HARƏDƏ məhdudiyyətin olması deməkdir.
  • Bütün sessiya parametrlərinin və funksional seçimlərin cari dəyərlərini alır seçilmiş məhdudiyyətlərdə iştirak etmək.

Sessiya parametrinin və ya funksiya seçiminin dəyərini əldə etmək üçün cari istifadəçinin həmin dəyəri əldə etmək icazəsi tələb olunmur. Bununla belə, bəzi sessiya parametrlərinin dəyəri təyin olunmayıbsa, xəta baş verəcək və verilənlər bazası sorğusu yerinə yetirilməyəcək.

Bir roldan əldə edilən məhdudiyyətlər AND əməliyyatından istifadə etməklə birləşdirilir.

Müxtəlif rollardan əldə edilən məhdudiyyətlər OR əməliyyatından istifadə etməklə birləşdirilir.

Qurulmuş şərtlər 1C: Müəssisənin DBMS-ə daxil olduğu SQL sorğularına əlavə olunur. Giriş məhdudiyyəti şərtlərindən verilənlərə daxil olduqda, hüquqlar yoxlanılmır (nə metadata obyektləri, nə də verilənlər bazası obyektləri üçün). Üstəlik, şərtlərin əlavə edilməsi mexanizmi "hamısı" və ya "icazə verilir" məhdudiyyətlərinin seçilmiş işləmə üsulundan asılıdır.


*Xüsusiyyət: Əgər istifadəçinin bir obyekt üçün rekord səviyyədə konfiqurasiya edilmiş məhdudiyyətləri olan bir neçə rola çıxışı varsa, bu halda məhdudiyyətlərin şərtləri “OR” məntiqi əməliyyatından istifadə etməklə əlavə edilir. Başqa sözlə, istifadəçinin səlahiyyətləri kümülatifdir.

Bu, aşağıdakı nəticəyə gətirib çıxarır: müxtəlif rollarda bir obyektə girişin məhdudlaşdırılması şərtlərinin kəsişməsinə icazə verməyin, çünki bu halda sorğunun mətni çox mürəkkəb olacaq və bu, performansa təsir edəcəkdir.

"Hər şey" üsulu.

“Bütün” metodundan istifadə etməklə məhdudiyyətlər tətbiq edilərkən SQL sorğularına şərtlər və sahələr əlavə edilir ki, 1C: Müəssisə verilənlər bazası sorğusunun icrası zamanı verilmiş istifadəçi üçün qadağan edilmiş məlumatların istifadə edilib-edilməməsi barədə məlumat əldə edə bilsin. Qadağan edilmiş data istifadə edilibsə, sorğu girişin pozulması səbəbindən çökəcək.

“Hamısı” metodundan istifadə edərək giriş məhdudiyyətlərinin qoyulması şəkildə sxematik şəkildə təqdim olunur:


"İcazə verilir" üsulu.

“İcazə verilən” metoddan istifadə etməklə məhdudiyyətlər tətbiq edilərkən, SQL sorğularına şərtlər əlavə edilir ki, cari istifadəçi üçün qadağan olunmuş qeydlər sorğunun nəticəsinə təsir göstərməsin. Başqa sözlə, "icazə verilən" rejimdə məhdudiyyətlər qoyulduqda, müəyyən bir istifadəçi üçün qadağan edilmiş qeydlər itkin sayılır və şəkildə sxematik şəkildə göstərilən əməliyyatın nəticəsinə təsir göstərmir:


1C: Müəssisə verilənlər bazasına daxil olduqda verilənlər bazası obyektlərinə verilənlərə giriş məhdudiyyətləri qoyulur.

1C: Enterprise-in müştəri-server versiyasında məhdudiyyətlər 1C: Enterprise serverində tətbiq olunur.

Bununla belə, sorğuda giriş məhdudiyyətlərinin konfiqurasiya olunmadığı, lakin konfiqurasiya edilmiş məhdudiyyətləri olan cədvəl sətirlərinə istinadlar ehtiva edən cədvələ istinad etsək, bu seçim (İZİN VERİLİR) işləməyəcək. Bu halda, sorğunun nəticəsi "<Объект не найден>......" istinad sahəsinin dəyəri əvəzinə.


Standart və ya xüsusi konfiqurasiya sorğularından istifadə edərək hesabat hazırlayır və ya emal edirsinizsə, həmişə "İcazə verilir" bayrağını yoxlayın hesabatın işləməsi üçün istənilən istifadəçinin altında istənilən hüquqlar toplusu ilə.

Verilənlər bazasından verilənlərin obyekt oxunması vəziyyətində “İcazə verilir” bayrağını təyin etmək mümkün deyil. Buna görə də lazımdır mümkün giriş hüquqları məhdudiyyətlərini nəzərə alaraq obyektin oxunması üçün seçimləri konfiqurasiya edin istifadəçi üçün. Obyekt texnologiyasında yalnız icazə verilən məlumatları əldə etmək üçün heç bir vasitə yoxdur.

Əhəmiyyətli odur ki, əgər sorğuda İZİN VERİLƏN açar söz göstərilmirsə, bu sorğuda göstərilən bütün seçimlər sorğuda istifadə olunan verilənlər bazası obyektlərindəki oxunma məhdudiyyətlərinin heç biri ilə ziddiyyət təşkil etməməlidir. Bundan əlavə, əgər sorğu virtual cədvəllərdən istifadə edirsə, onda müvafiq seçimlər virtual cədvəllərin özlərinə tətbiq edilməlidir.

Təcrübə 1. RLS parametrlərində sorğu qurucusu.

Kataloqa sorğuda “HARADA” bölməsinin mətnini tərtib edək. Sorğu qurucusundan istifadə edə bilərsiniz.
Dizayner soyulmuş bir görünüşə malikdir.


"Cədvəllər" nişanı

Əsas cədvəl məhdudiyyətin konfiqurasiya olunduğu obyektin cədvəli olacaq.

Siz həmçinin “Əlaqələr” sekmesinde digər cədvəlləri seçə və onlar arasında müxtəlif əlaqələr qura bilərsiniz.

"Şərtlər" nişanı

Burada faktiki giriş məhdudiyyəti şərtlərini konfiqurasiya edə bilərsiniz

Nomenklatura kataloqunun “Qiymət” atributuna cədvəlin bütün sahələrinə “oxumaq” hüququ üçün şərtlər əlavə edək.

“Nomenklatura HARADA Nomenklatura.Qiymət > 500”

Bu sadə qaydanın necə işlədiyini görək. Kataloq cədvəli aşağıdakı elementləri ehtiva edir:


Giriş məhdudiyyəti qurduqdan sonra cədvəl yalnız şərti təmin edən elementləri göstərəcək:


Qruplar da yoxa çıxdı. Məhdudiyyətin mətnini dəyişdirək

“Nomenklatura HARADA Nomenklatura.Qiymət > 500

OR Nomenklatura. Bu Qrupdur"

Yaxşı, indi sizə lazım olan budur.


Siyahı parametrlərində "kod" sahəsinin ekranını silsəniz, kataloqun bütün elementləri görünəcək, yəni. məhdudiyyət işləmədi. "Kod" sahəsini göstərmək üçün təyin etsəniz, məhdudiyyət işləyəcək.


Bu halda, kataloq elementinin siyahı sahəsində görünməsinə baxmayaraq, atributda məhdudiyyət konfiqurasiya edildiyi üçün onun forması açıla bilməz. Eyni şey ixtiyari sorğuda baş verir: “məhdudlaşdırılmış” mülkiyyət əldə etməyə çalışdığınız zaman giriş xətası olacaq.


Əgər “məhdudlaşdırılmış” etimadnamələri proqramlı şəkildə əldə etməyə çalışsanız, giriş xətası da atılacaq.


Üstəlik, keçid vasitəsilə obyektin hər hansı sahəsinə daxil olmaq mümkün olmayacaq, çünki keçid alarkən sistem bütün obyekti oxuyur və əgər onun tərkibində “məhdudlaşdırılmış” detallar varsa, obyekt oxunmayacaq.

Buna görə də, verilənlər bazası obyektləri ilə proqramlı işləyərkən, qeyd səviyyəsində mümkün məhdudiyyətləri yadda saxlamaq və bütün zəruri obyekt məlumatlarını sorğu ilə əldə etmək və sonra onları strukturda yerləşdirmək və ya kodun bir hissəsini imtiyazlı modulda icra etmək lazımdır.

Giriş məhdudiyyətini qurduqdan sonra, hüquqlar siyahısında xəttin ekranı dəyişdi - boz oldu və bir işarə çıxdı.

Giriş (RLS) qurarkən məhdudiyyətlər.

  • Xülasə bölməsi yoxdur;
  • Virtual registr cədvəllərinə daxil olmaq mümkün deyil;
  • Parametrləri açıq şəkildə istifadə edə bilməzsiniz;
  • İç içə sorğularda istifadə edilə bilər istənilən>>/span> sorğu dili alətləri istisna olmaqla:
    • İERARXİYADA operator;
    • NƏTİCƏLƏR təklifləri;
    • iç içə sorğu nəticələri cədvəl hissələri olmamalıdır>/span>;
    • virtual masalar, xüsusilə Qalıqlar və Dövrlər

Təcrübə 2. Cari qiymətlə nomenklatura.

Cari qiyməti müəyyən bir dəyərdən, məsələn, 100-dən yuxarı olan elementləri göstərmək lazımdırsa, giriş məhdudiyyəti qoyun.

Həll:

Biz “oxumaq” hüququ ilə “Nomenklatura” kataloquna yeni giriş məhdudiyyəti qaydası əlavə edirik.
"Digər sahələr" seçin.
Konstruktorda biz daxili sorğu əlavə edirik. Orada "Məhsul qiymətləri" məlumat reyestr cədvəlini seçin.
"Sifariş" nişanı yoxdur - bu, giriş məhdudiyyəti sorğusu yaratmaq üçün sorğu dizaynerinin xüsusiyyətidir.
"Qabaqcıl" sekmesinde "ilk 999999999" təyin edin, "sifariş" nişanı görünür.
“Dövr” sahəsinə görə sifarişi azalan qaydada qurduq.
Sonra istinadla əsas cədvəl və alt sorğu arasında əlaqə qurduq.


Giriş Məhdudiyyət Şablonları.

Təcrübə 3. “Qarşı tərəflərə” sabitdə dəyərinə görə məhdudiyyət.

Constant-da saxlanan dəyər əsasında Qarşı tərəflər kataloqu üçün giriş məhdudiyyəti təyin edək.

Bundan əlavə, detallarda "Qarşı tərəflər" kataloqundan istifadə edən bütün obyektlər üçün məhdudiyyət qurmalısınız.

Həll

“Qarşı tərəflər” kataloqu üçün “Şərtlər” bölməsində sabitə iç-içə sorğu əlavə etməklə “oxumaq” hüququ üçün məhdudiyyət təyin edəcəyik. Bu Qrup olduğunu unutmayın.

Problem görürük, Qarşı tərəflər kataloqu düzgün süzülür və “Qarşı tərəf” atributuna malik bütün sənədlər, bəzilərinin “Qarşı tərəf” atributunda “sınıq” keçidləri göstərilir.

İndi "Hesablar" linkindən istifadə edən bütün obyektlər üçün giriş məhdudiyyətlərini konfiqurasiya etməlisiniz. Gəlin onları “obyektə keçid axtarmaq” xidmətindən istifadə edərək tapaq.

Gəlin “Qarşı tərəflər” kataloqundan RLS şərtinin mətnini köçürüb bir qədər dəyişdirək. Bu, tapılan obyektlərin sayı qədər edilməlidir.

Və ya kodun təkrarlanması ilə bağlı problemlərin qarşısını almaq üçün giriş məhdudiyyətləri modelindən istifadə edin.

Giriş məhdudiyyəti şablonları rol səviyyəsində konfiqurasiya edilir və redaktə edilmiş rol daxilində istənilən obyekt üçün istifadə edilə bilər.

Siz şablona istənilən giriş məhdudiyyəti mətnini əlavə edə bilərsiniz. Şablon “#” simvolu ilə çağırılır. Məsələn, #TemplateCounterparty.

1C-də # vasitəsilə təlimatlar preprosessora yazılır. Giriş məhdudiyyəti parametrlərinin icrası kontekstində platforma şablon zəng mətnini şablon mətni ilə əvəz edir.

EtoGroup haqqında mətn istisna olmaqla, “Podratçı Şablonu” şablonuna HARA sözündən sonra mətni əlavə edək.

Giriş məhdudiyyəti şablonlarında parametrlər.

2-ci problemi həll etməyə davam edək.

İndi problem ondadır ki, kataloqdakı əsas cədvəl "Qarşı tərəf", "Qəbz fakturası" sənədində adlanır. Kataloqda yoxlanılan sahə “link”, sənəddə “Qarşı tərəf” adlanır.

Şablon mətnindəki əsas cədvəlin adını “#CurrentTable” olaraq dəyişdirək

"#CurrentTable" əvvəlcədən təyin edilmiş parametrdir.

Və bir nöqtə vasitəsilə biz giriş parametrinin nömrəsini göstəririk - “.#Parameter(1)

“#Parameter” də əvvəlcədən təyin edilmiş dəyərdir. İxtiyari sayda daxiletmə parametrlərini ehtiva edə bilər. Onlar seriya nömrəsi ilə ünvanlanır.

Kataloq üçün giriş məhdudiyyətlərinin mətnində aşağıdakıları göstəririk:

Sənəd üçün aşağıdakılar:

“#Şablon Qarşı tərəf (“Qarşı tərəf”) HARADA malların satışı”

Giriş məhdudiyyəti şablonunu çağırarkən, parametrlər ona yalnız String kimi, yəni dırnaq içərisində ötürülməlidir.

Əsas cədvəl - Nomenklatura

Şablon mətni belədir:

#Cari Cədvəl HARADA #Cari Cədvəl.#Parametr(1) = #Parametr(2)

Şablon mətni verilənlərə girişin məhdudlaşdırılması dilində mətnin bir hissəsini ehtiva edir və “#” simvolu ilə vurğulanan parametrləri ehtiva edə bilər.

"#" simvolundan sonra aşağıdakılar ola bilər:

  • Açar sözlərdən biri:
    • Mötərizədə şablonda olan parametrin nömrəsindən sonra parametr;
    • CurrentTable – məhdudiyyətin qurulduğu cədvəlin tam adının mətnə ​​daxil edilməsini göstərir;
    • Cari Cədvəl Adı– daxili dilin cari versiyasında təlimatın tətbiq olunduğu cədvəlin tam adının mətnə ​​daxil edilməsini (sətir dəyəri kimi, dırnaq içərisində) ifadə edir;
    • NameCurrentAccessRight– cari məhdudiyyətin icra olunduğu hüququn adını ehtiva edir: OXUMA, ƏLAVƏ EDİN, DAXİL ET, DƏYİŞTİR, YENİLƏN, SİL;
  • şablon parametrinin adı – mətnə ​​müvafiq şablon parametr məhdudiyyətinin daxil edilməsi deməkdir;
  • “#” simvolu – mətnə ​​bir “#” simvolunun daxil edilməsini bildirir.

Giriş məhdudiyyəti ifadəsi aşağıdakıları ehtiva edə bilər:

  • Formatda göstərilən giriş məhdudiyyəti şablonu #ŞablonAdı("Şablon parametrinin dəyəri 1", "Şablon parametrinin dəyəri 2",...). Hər bir şablon parametri ikiqat dırnaq içərisindədir. Parametr mətnində ikiqat dırnaq işarəsi təyin etmək lazımdırsa, iki cüt dırnaq işarəsindən istifadə etməlisiniz.
  • Funksiya Str ehtiva edir(WhereWeLook, WhatWeLook). Funksiya WhereWeLook sətirində WhatWeLook sətirinin baş verməsini axtarmaq üçün nəzərdə tutulmuşdur. Əgər hadisə tapılarsa True, əks halda isə False qaytarır.
  • + operatoru sətir birləşməsidir.

Şablon mətnini redaktə etməyi asanlaşdırmaq üçün rol formasındakı Məhdudiyyət şablonları sekmesinde Şablon mətnini təyin et düyməsini klikləyin. Açılan dialoq pəncərəsində şablon mətnini daxil edin və OK düyməsini basın.

Onlar istifadə edərək quraşdırıla bilməz SetParameter() və ya buna bənzər bir şey.

Bu vəziyyətdə parametrlər aşağıdakılardır:

  • Sessiya Seçimləri
  • Funksional variantlar

Giriş məhdudiyyəti sorğusunda sessiya parametrlərinin oxunması imtiyazlı rejimdə, yəni onlarla işləmək hüququna nəzarət edilmədən baş verir.

Təcrübə 4. “Sizin” qarşı tərəflərə çıxış

Cari istifadəçinin "onların" qarşı tərəflərinə girişinin məhdudlaşdırılmasını konfiqurasiya etmək lazımdır.

“İstifadəçilər” kataloqu, “Qarşı tərəflər” kataloqu, “Qarşı tərəf” rekvizitləri olan sənədlər var.

Cari istifadəçi məlumatı yalnız onunla əlaqə qurduğu qarşı tərəflər üçün görməlidir.

Rabitə də konfiqurasiya edilməlidir.

Mümkün variantlar:

İstifadəçi və qarşı tərəf arasında əlaqələrin qurulması

  • Qarşı tərəflər kataloqunda təfərrüatlar
  • Məlumat reyestri

Problemin mümkün həlli yolları:

  • İstifadəçini sabitdə saxlamaq pis seçimdir; sabit bütün istifadəçilər üçün əlçatandır.
  • Cari istifadəçinin qarşı tərəflərinin sabit massivinin sessiya parametrlərində saxlanması o qədər də yaxşı seçim deyil, bir çox qarşı tərəf ola bilər.
  • Cari istifadəçinin sessiya parametrlərini saxlamaq, sonra "onun" qarşı tərəflərinin siyahısını tələb etmək məqbul seçimdir.
  • Digər seçimlər.

Həll.

Gəlin “CurrentUser” adlı yeni sessiya parametri yaradaq və onu sessiya modulunda dolduraq.

"Menecerlərin və podratçıların uyğunluğu" məlumat reyestrini yaradaq.

Gəlin yeni bir rol yaradaq və orada "Qaimə-faktura" sənədi üçün yeni bir giriş məhdudiyyəti yaradaq.

Sorğunun mətnində biz əsas cədvəli Account = Account and Manager = &CurrentUser üçün məlumat reyestri ilə birləşdirəcəyik. Bağlantı növü Daxili.

Mümkünsə, giriş məhdudiyyəti mətnlərində iç-içə sorğulardan qaçmaq daha yaxşıdır, çünki verilənlər bazasından bu obyektdən verilənlər hər dəfə oxunduqda icra olunacaq.

Yoxlama - məhdudiyyətlər işləyir

*Xüsusiyyət: Əgər siz reyestrdəki istifadəçi qarşı tərəflərin siyahısını dəyişdirsəniz, giriş məhdudiyyətləri istifadəçi sessiyasını yenidən başlatmadan dərhal qüvvəyə minəcək.

Təcrübə 5. Dəyişikliklərin qadağan olunma tarixi.

Dəyişiklikləri qadağan etmək üçün müəyyən edilmiş tarixdən əvvəl məlumatların redaktə edilməsinə məhdudiyyət tətbiq etmək lazımdır.
Bunu istifadəçilər üçün məhdudlaşdırmalısınız.

İstifadəçi ölçüsü, resurs Qadağa Tarixi ilə “Dəyişikliklərin Qadağa Tarixləri” məlumat reyestrini yaradaq.

Həllin məntiqini bu şəkildə quraq:

  • əgər istifadəçi göstərilməyibsə, qadağa bütün istifadəçilərə şamil edilir
  • əgər bütün istifadəçilər üçün məhdudiyyət və konkret istifadəçi üçün məhdudiyyət varsa, o zaman məhdudiyyət konkret istifadəçiyə, başqalarına isə ümumi prinsipə uyğun olaraq tətbiq edilir.

Aydındır ki, belə bir məhdudiyyət zaman oxunda müəyyən mövqeyə malik olan verilənlər bazası obyektləri üçün konfiqurasiya edilə bilər. Ola bilər

  • Sənədlər
  • Dövri məlumat reyestrləri

Gəlin "Dəyişikliklərin Qadağan olunma tarixinə görə məhdudiyyətlər" adlı yeni rol yaradaq.

Orada, düzgün "dəyişiklik" üçün "Qaimə-faktura" sənədi üçün yeni bir giriş məhdudiyyəti əlavə edəcəyik.

Bütün sahələr üçün parametrləri təyin edirik.

Məhdudiyyətin mətni belədir:

Document.ReceiptInvoice FROM FROM ReceiptInvoice.

Qadağa Tarixlərini Dəyişin.Qadağa Tarixi Qadağa Tarixi
FROM

Daxili Qoşulma (SEÇ
MAX (Qadağan edilmiş tarixləri dəyişdirin. İstifadəçi) İstifadəçi AS
FROM
Məlumat Reyestri Dəyişikliklərin Qadağan Edilmə Tarixləri
HARADA
(Qadağan edilmiş tarixləri dəyişdirin. İstifadəçi = &Mövcud İstifadəçi
Və ya Tarixlər Qadağan Dəyişikliklər. İstifadəçi = VALUE(Directory.users.EmptyLink))) AS VZ_User
Dəyişikliklərin Qadağası Tarixinə görə.User = VZ_User.User) NestedQuery AS
Proqram Qəbzi Invoice.Date > Nested Query.Ban Date

Gəlin yoxlayaq - məhdudiyyət işləyir.

Preprocessor Təlimatlarından istifadə

#Şərt 1 #Əgər

Sorğu fraqmenti 1

#ElseƏgər Şərt2 #Onda

Sorğu fraqmenti 2

#Əks halda

Sorğu fraqmenti 3

#EndIf

Şərtlərdə məntiqi əməliyyatlardan (və, və ya, yox və s.) və sessiya parametrlərinə girişdən istifadə edə bilərsiniz.

Giriş məhdudiyyətlərinin qurulması kontekstində bu yanaşma əlverişlidir ki, şərtlərdən asılı olaraq daha qısa sorğu mətni tərtib ediləcək. Daha sadə sorğu sistemi daha az yükləyir.

İşin mənfi tərəfi odur ki, sorğu konstruktoru belə mətnlə işləməyəcək.

*Xüsusiyyət:

Girişin məhdudlaşdırılması mətnlərində quraşdırılmış dilin preprosessoruna verilən təlimatlardan fərqli olaraq, operatordan əvvəl Sonra hash qoymaq lazımdır - #Sonra

Təcrübə 6. “RLS-dən istifadə et”ə keçin

Məhdudiyyətlər sistemimizi rekord səviyyədə məhdudiyyətlərin istifadəsini yandıran/söndürən açarla tamamlayaq.

Bunun üçün biz Sabit və “UseRLS” adlı sessiya parametrini əlavə edəcəyik.

Sabitin qiymətindən sessiya parametrinin qiymətini təyin etmək üçün Session Modulunda yazaq.

Bütün giriş məhdudiyyəti mətnlərinə aşağıdakı kodu əlavə edək:

“#Əgər &İstifadəçiRLS #Onda….. #EndIf”

Yoxlayırıq - hər şey işləyir.

Ancaq indi "radardan istifadə et" bayrağı yandırıldıqdan sonra dəyişikliklər dərhal qüvvəyə minməyəcək. Niyə?

Çünki sessiya başlayanda sessiya parametri təyin edilir.

Yeni sabit dəyər yazıldıqda sıfırlanacaq sessiya parametrinin dəyərini təyin etmək mümkündür, lakin bu, yalnız cari istifadəçi sessiyası üçün işləyəcək. Digər istifadəçilərdən sistemi yenidən başlatmaq istənilməlidir.


Birinci hissənin sonu.

). Bu açar sözdən istifadə istifadəçinin hüququ olmayan qeydləri əldə edərkən xətaların qarşısını almağa imkan verir.

Problem: Bəzi hallarda 1C 8.3-də verilənlərə giriş məhdudiyyətlərinin nəticəsi DBMS sorğu planından asılı ola bilər. Bu məqalə mümkün vəziyyətləri araşdırır və bunun qarşısını almaq üçün tövsiyələr verir.

Verilənlərə giriş məhdudiyyətlərinin nəticəsinin DBMS sorğu planından mümkün asılılığı problemi verilənlər bazası sorğusunu açar söz olmadan yerinə yetirərkən yarana bilər. İCAZƏ VERİLİR, əgər cari istifadəçinin məlumatlara giriş məhdudiyyətləri varsa və sorğuda formada bir və ya bir neçə müqayisə varsa:

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

Əgər bu halda < > (sorğu daxilində sorğu) giriş məhdudiyyətlərinin qoyulduğu verilənlər bazası cədvəllərindən istifadə edir, ola bilsin ki, bəzi DBMS-lərdə sorğu uğurla yerinə yetirilsin, digərlərində isə məlumat bazasındakı məlumatların tamamilə eyni olması şərti ilə mesaj verilsin. .

1C-də 267 video dərsi pulsuz əldə edin:

Fərqlərin səbəbi

Davranışdakı mümkün fərq, açar söz olmadan məlumatlara giriş məhdudiyyətlərinin həyata keçirilməsi ilə əlaqədardır İCAZƏ VERİLİR 1C Enterprise 8.3-də.

Açar söz olmadan sorğu İCAZƏ VERİLİR yalnız onun icrası zamanı qadağan olunmuş məlumatlara giriş olmadıqda uğurla icra ediləcək. Bunun üçün dəyəri alan xüsusi siqnal sahəsi əlavə olunur Doğru formalaşmasında yalnız icazə verilən məlumatların iştirak etdiyi qeydlər və dəyəri Yalan bütün digər girişlər üçün. Ən azı bir nümunə qeyd dəyərini ehtiva edirsə Yalan siqnal sahəsində sorğunun icrası anormal şəkildə başa çatır.

Eyni siqnal sahəsi müqayisəyə daxil edilmiş sorğuların nəticələrinə əlavə olunur IN/DEYİL. Üstəlik, bu vəziyyətdə siqnal sütununun dəyərinin yoxlanılması DBMS alətlərindən istifadə etməklə həyata keçirilir. Beləliklə, əgər iç-içə sorğunun icrası zamanı qadağan edilmiş verilənlərə daxil olubsa, onda sorğu xəta ilə uğursuz olmalıdır. İstifadəçinin verilənlər bazasında əməliyyat aparmaq üçün kifayət qədər hüquqları yoxdur.

Bununla belə, sorğu planı qurarkən DBMS tam nümunəni qəbul etməyə bilər <Вложенным запросом> , və yalnız vəziyyəti yoxlamaq üçün zəruri olan qeydləri qəbul edin IN/DEYİL. Bu halda, sorğu olsa belə müvəffəqiyyət qazana bilər <Вложенного запроса> müstəqil sorğu kimi, qadağan edilmiş məlumatlara giriş baş verə bilər.

Sadə bir misala baxaq. Masanın üstünə qoyun Directory.Fərdi şəxslər məlumatların əldə edilməsinə məhdudiyyətlər qoyulur. Bu halda sorğu:

Cədvəl.Fərdi AS Fərdi

qadağan edilmiş məlumatlara daxil olmaq cəhdinə görə xəta ilə icra olunacaq. Əgər bu sorğu müqayisə üçün nəzərdə tutulubsa, məsələn:

Cədvəl.Fərdi AS Fərdi

Kataloq.Şəxslər AS Cədvəl)

sonra seçilmiş DBMS sorğu planından asılı olaraq sorğu ya uğurla, ya da xəta ilə icra oluna bilər. Bu sorğu davranışı xəta deyil, çünki sorğunun icrası zamanı qadağan edilmiş məlumatlara giriş mümkün və ya olmaya bilər. Daha proqnozlaşdırıla bilən bir nəticə əldə etmək üçün sorğunu elə qurmaq lazımdır ki, iç-içə sorğunun açıq-aydın lazımsız məlumatlara daxil olmamasına zəmanət verilir. Xüsusilə, əvvəlki sorğu bu şəkildə yenidən yazılsa:

Fərdi şəxslə işin yerinə yetirilməsi üçün müqavilə.İşçi.Şəxs

Sənəd.Fiziki şəxslə işin görülməsi üçün müqavilə kimi fiziki şəxslə işin görülməsi üçün müqavilə

Fərdi.İşçi.Fərdi B ilə işin yerinə yetirilməsi üçün müqavilə (

Cədvəl.Fərdi AS Fərdi

Directory.Fərdi AS Cədvəl

Sorğu 1C məlumat bazasının müxtəlif obyektlərində olan məlumatları tez (bütün digər üsullarla müqayisədə) əldə etməyə və emal etməyə xidmət edən güclü bir vasitədir.

Sorğu yaradın

Sorğu tələb olunan atributu olan ayrıca obyekt kimi yaradılır Mətn, sorğunun özünün həqiqətən yerləşdirildiyi yer. Bundan əlavə, onun icrası üçün zəruri olan müxtəlif parametrlər sorğuya ötürülə bilər. Sorğunun mətni və parametrləri doldurulduqdan sonra sorğu icra edilməli və icranın nəticəsi seçimə və ya qiymətlər cədvəlinə yerləşdirilməlidir. Hamısı belə görünür:

//Sorğu yaradın
Sorğu = yeni sorğu;

//Sorğu mətnini doldurun
Sorğu. Mətn= "Bura sorğunun mətnini yazırıq";

//Parametrləri sorğuya ötürün
Sorğu. SetParameter("ParameterName", ParameterValue) ;

//Sorğu yerinə yetirin
Nəticə = Sorğu. Run();

//Sorğu nəticəsini seçimə yükləyin
Nümunə = Nəticə. seçin();

//Sorğu nəticəsini dəyər cədvəlinə yükləyin
Cədvəl = Nəticə. Boşaltma ();

//Son hərəkətlər birləşdirilə bilər
Get = Sorğu. Çalıştır() . seçin();
//və ya
Cədvəl = Sorğu. Çalıştır() . Boşaltma ();

1C sorğu dilinin əsasları

Ən sadə və ən çox istifadə edilən sorğular bəzi mənbədən məlumat əldə etmək üçün istifadə olunur. Mənbə hər hansı bir məlumatı ehtiva edən demək olar ki, bütün obyektlər ola bilər: kataloqlar, sənədlər, registrlər, sabitlər, siyahılar, xarakteristikanın növləri üçün planlar və s.

Bu obyektlərdən sorğudan istifadə edərək detalların, cədvəl hissələrinin, cədvəl hissələrinin təfərrüatlarının, dəyişikliklərin, resursların və s.

Sorğu mətnini əldə etmək üçün ondan istifadə etmək çox vaxt rahatdır Sorğu konstruktoru. Proqram modulunun istənilən yerində siçanın sağ düyməsini sıxdıqda çağırılır.

Məsələn, bütün kataloq təfərrüatlarının dəyərlərini almaq lazımdırsa Qarşı tərəflər, onda sorğu belə görünəcək:

Sorğu. Mətn = "SEÇİN
| *
|FROM
| Directory. Qarşı tərəflər"
;

Yalnız fərdi təfərrüatları əldə etmək lazımdırsa, bunu edin:

Sorğu. Mətn = "SEÇİN
| Kod,
| ad,
| Valideyn
|FROM
| Directory. Qarşı tərəflər"
;

Belə bir sorğu mətnini qəbul etmək üçün Sorğu konstruktoru tabda müvafiq sahələri seçməlisiniz Cədvəllər və sahələr.

Siz sorğuda seçilmiş elementlərə və mənbələrə ləqəblər təyin edə və onlardan sonra həm sorğunun özündə, həm də nəticə ilə işləyərkən istifadə edə bilərsiniz. Bundan əlavə, sorğuda əvvəlcədən müəyyən edilmiş xüsusi dəyəri olan və ya hesablanmış dəyəri olan sahələr ola bilər:

Sorğu. Mətn = "SEÇİN
| Clients.Code AS Nömrəsi,

| 1000 AS FieldWithValue
|FROM
;

Get = Sorğu. Çalıştır() . seçin();

Salam Seçim. Next() Döngüsü
ClientNumber = Nümunə. Nömrə;
ClientName = Seçim. Adı;
Dəyər = Nümunə. FieldWithValue;
EndCycle;

Ləqəbləri təyin etmək üçün tabdan istifadə edin Birliklər/ləqəblər V Sorğu qurucusu.

Sabit və ya hesablanmış dəyəri olan sahə tabda əl ilə yaradılır Cədvəllər və sahələr, sütunda Sahələr.

Bütün seçilmiş elementlər həm irəli, həm də tərs qaydada yerləşdirilə bilər. Sifariş vermək üçün bir və ya bir neçə sahə seçə bilərsiniz. Tənzimləmə ilə yanaşı, bəzən ilk elementlərdən yalnız birini və ya bir neçəsini seçmək faydalı ola bilər.

//Müştəriləri A-dan Z-yə adlarına görə sıralayın və ilk 10-u seçin
Sorğu. Mətn = "İLK 10-u SEÇİN
| Clients.Code AS Nömrəsi,
| Clients.Name AS Adı,
| 1000 AS FieldWithValue
|FROM

|SİFARİŞ
| ad"
;

//Ən son əlifba sırası ilə müştərini seçin
Sorğu. Mətn = "ÜST 1-i SEÇİN
| Clients.Code AS Nömrəsi,
| Clients.Name AS Adı,
| 1000 AS FieldWithValue
|FROM
| Kataloq.Qarşı tərəflər AS Müştərilər
|SİFARİŞ
| Ad AZALMA"
;

Siz elementlərin seçimini istifadəçinin giriş hüquqlarına malik olduğu elementlərlə məhdudlaşdıra bilərsiniz. Və ya sorğu nəticəsindən dublikat xətləri silin.

//İstifadəçiyə icazə verilən məlumatların seçilməsi
Sorğu. Mətn = "SEÇİLƏN İZİN VERİLİR
| Clients.Code AS Nömrəsi,
| Clients.Name AS Adı,
| 1000 AS FieldWithValue
|FROM
| Kataloq. Qarşı tərəflər AS Müştərilər"
;

//Təkrar etməyən elementlərin seçilməsi
Sorğu. Mətn = "MÜXTƏLİFİ SEÇİN
| Clients.Code AS Nömrəsi,
| Clients.Name AS Adı,
| 1000 AS FieldWithValue
|FROM
| Kataloq. Qarşı tərəflər AS Müştərilər"
;

Sifariş nişanda müəyyən edilir Sifariş verin V Sorğu qurucusu seçilmiş elementlərin sayı, qətnamə və təkrarlanma parametrləri nişandadır Əlavə olaraq.

Ardı var…