İerarxiya sorğusunda hesab 1s. İerarxik kataloqlarla işləmək üçün sorğuların nümunələri

Bu bölmədə iyerarxik kataloqlarla işləyərkən tipik problemlərin həlli nümunələri göstərilir.

Verilmiş qrupa tabe olan iyerarxik kataloq elementlərinin əldə edilməsi

İerarxik kataloqun tabe elementlərini əldə etmək üçün sorğu dili IN HIERARCHY konstruksiyasını təmin edir. İERARXİYADA istifadə nümunəsi:


SEÇİN
Nomenklatura.Kodeks,
Nomenklatura.SatınalmaQiyməti
FROM

Bu misalda, &Qrup qrupunda yerləşən Nomenklatura kataloqunun bütün qeydləri, o cümlədən özü, onun tabe qrupları və tabe qruplara aid elementləri əldə ediləcək.

Əgər bizi yalnız bilavasitə verilmiş qrupda yerləşən elementlər və qruplar maraqlandırırsa, onda biz Ana sahəsində şərt qoyaraq belə elementləri əldə edə bilərik. Misal:


SEÇİN
Nomenklatura.Kodeks,
Nomenklatura.Ad AS Adı,
Nomenklatura.SatınalmaQiyməti
FROM
Kataloq.Nomenklatura AS Nomenklatura

HARADA
Nomenklatura.Valideyn = &Qrup

Bu sorğu &Qrup keçidi ilə qrupa tabe olan qrupları və elementləri seçəcək.

Kataloq elementinin tabe elementlərinin mövcudluğunun yoxlanılması

Kataloq elementinin tabeli qeydlərinin mövcudluğunu yoxlamaq üçün təqdim olunana bənzər bir sorğudan istifadə edə bilərsiniz:

Bu nümunədə uşaqları yoxlamaq istədiyiniz elementə istinad Ana sorğu parametrinə yazılır. Belə bir sorğunu yerinə yetirdikdən sonra nəticəni boşluq üçün yoxlamaq lazımdır. Nəticə boş deyilsə, o zaman tabeli qeydlər var. Əks halda - yox. Misal:


Əgər Request.Execute().Empty() Sonra
Hesabat ("Giriş yoxdur");
Əks halda
Hesabat ("Qeydlər mövcuddur");
endIf;

Bir elementin bütün valideynlərini əldə etmək

Sorğu dili elementin bütün valideynlərini əldə etmək üçün heç bir xüsusi vasitə təqdim etmir. Tapşırığı yerinə yetirmək üçün iyerarxik cəmlərdən istifadə edə bilərsiniz, lakin iyerarxik cəmlərin əldə edilməsi çoxlu sayda qeydlər üçün cəmi yaratmaq üçün optimallaşdırılıb və tək elementin valideynlərini əldə etmək üçün tamamilə effektiv deyil. Elementin bütün ana qeydlərini daha səmərəli şəkildə əldə etmək üçün onun valideynlərini kiçik hissələrdə dövrələmək tövsiyə olunur. Misal:


CurrentItemItem = ItemItem;

Sorğu = Yeni Sorğu("SEÇ
| Nomenklatura.Valideyn,
| Nomenklatura.Valideyn.Valideyn,
| Nomenklatura.Valideyn.Valideyn.Valideyn,
| Nomenklatura.Valideyn.Valideyn.Valideyn.Valideyn,
| Nomenklatura.Valideyn.Valideyn.Valideyn.Valideyn.Valideyn
|FROM
| Kataloq.Nomenklatura AS Nomenklatura
|HARADA
| Nomenklatura.Link = &CariNomenklaturaElement";

Həqiqət Dövrü ikən
Request.SetParameter("CurrentItemItem", CurrentItemItem);
Nəticə = Query.Run();
Əgər Nəticə.Empty() Sonra
Abort;
endIf;
Seçim = Nəticə.Seç();
Seçim.Next();
ColumnNumber üçün = 0 Nəticə üzrə.Columns.Quantity() - 1 Döngü
CurrentItemItem = Seçim[ColumnNumber];
Abort;
Əks halda
Hesabat (CurrentItemItem);
endIf;
EndCycle;

Əgər CurrentItemItem = Directories.Nomenclature.EmptyLink() O zaman
Abort;
endIf;
EndCycle;

Bu misalda, ElementNomenclature dəyişənində qeyd olunan keçid üçün bütün valideynlər xidmət mesajı pəncərəsində göstərilir. Dövrdə 5 link valideyn seçilir.

Kataloqdakı səviyyələrin sayı məhduddursa və kiçikdirsə, o zaman bütün valideynləri döngəsiz bir sorğu ilə əldə etmək mümkündür.

Hesabatda iyerarxik kataloqun göstərilməsi

İyerarxiyanı qoruyarkən hesabatda iyerarxik kataloqu göstərmək üçün aşağıdakılara bənzər sorğudan istifadə etməlisiniz:


SEÇİN
Nomenklatura.Kodeks,
Nomenklatura.Ad AS Adı,
Nomenklatura.SatınalmaQiyməti
FROM
Kataloq.Nomenklatura AS Nomenklatura
SORTLAMA
HIERARCHY adını verin

Bu sorğu kataloqdan bütün qeydləri seçir və onları iyerarxiyaya görə sıralayır. Nəticə iyerarxiya nəzərə alınmaqla adla sıralanacaq.

Kataloq qruplarının elementlərin üstündə yerləşdirilməsi üçün bu sorğuda ORDER BY bəndini aşağıdakılarla əvəz etmək lazımdır:


SORTLAMA
Nomenklatura. Bu Qrup İERARXİYASI,
ad

Nəticə yenə də iyerarxik qaydada sıralanacaq, lakin qruplar elementlərin üstündə görünəcək.

SİFARİŞ BY təklifini AVTO SİFARİŞ seçimi ilə əvəz etmək də mümkündür. Bu halda, nəticə kataloqun parametrlərinə uyğun olaraq sifariş ediləcək, yəni. əgər qovluq qrupların elementlərin üstündə yerləşdirilməli olduğunu bildirirsə, onda onlar yuxarıda yerləşəcəklər.

Nəticələrdən istifadə etməklə kataloqun iyerarxik strukturunu da əldə etmək mümkündür.


SEÇİN
Nomenklatura.Kodeks,
Nomenklatura.Ad AS Adı,
Nomenklatura.SatınalmaQiyməti

Kataloqdan.Nomenklatura AS Nomenklatura

HARADA
(Nomenklatura. Bu Qrup = FALSE)

Ada görə SİFARİŞ

İerarxiyaya görə cəmi əldə etmək

Sorğuda iyerarxiya üzrə cəmləri əldə etmək üçün siz cəmlərin hesablanacağı sahəni göstərdikdən sonra SOFTWARE TOTAL bəndində HIERARCHY açar sözünü göstərməlisiniz. İyerarxiya üzrə cəmi əldə etməklə "Məhsul dövriyyəsi" hesabatının nümunəsi:


SEÇİN

FROM

Nomenklatura İERARXİYA

Bu sorğu nəticəsində təkcə hər bir bənd üzrə deyil, həm də bu və ya digər maddənin aid olduğu qruplar üzrə yekunlar hesablanacaq.

Elementlər üçün cəmlərə ehtiyacımız olmadığı, ancaq qruplar üçün cəmi lazım olduğu halda, cəmilərdə YALNIZ HIERARCHY konstruksiyasından istifadə etməliyik. Misal:


SEÇİN
Nomenklatura dövriyyəsinin uçotu. Nomenklatura AS Nomenklatura,
Nomenklatura dövriyyəsinin uçotu.Nomenklatura.Təqdimat,
Nomenklatura dövriyyəsinin uçotu. Miqdar Dövriyyə KİMİ KəmiyyətDövriyyə
FROM
Yığım reyestri.Nomenklatura uçotu.Dövriyyə NECƏ Nomenklatura uçotuDövriyyə
NƏTİCƏLƏR MƏBLƏĞİ (QuantityTurnover) PO
Nomenklatura İERARXİYA YALNIZ

Bu sorğunun nəticəsi yalnız element qrupları üçün ümumi qeydlər olacaq.

Diqqət! Bu dərsin giriş versiyasıdır, materialları natamam ola bilər.

Sayta tələbə kimi daxil olun

Məktəb materiallarına daxil olmaq üçün tələbə kimi daxil olun

Başlayan proqramçılar üçün sorğu dili 1C 8.3: BETWEEN və IN operatorları

Məntiqi operator BETWEEN

Operator ARASINDA yoxlamağa imkan verir dəyəri daxildir? solunda göstərilən ifadə sağda göstərilən diapazona ( diapazon sərhədləri ilə birlikdə, yəni daxil olmaqla).

Beləliklə, əvəzinə

Əksinə, kalorili məzmunu sıraya daxil olmayan bütün qidaları seçmək lazımdırsa, aşağıdakı inkar forması uyğun gəlir (bir hissəcik meydana gəldi) YOX):

Operator ARASINDA Yalnız rəqəmli diapazonlardan daha çoxuna tətbiq edilə bilər. O, tarixlərlə də yaxşı işləyir:

Məntiqi operator B

Siyahıda göstərilənlərdən biri ilə uyğunluq yoxlanılır

Operator IN yoxlamağa imkan verir dəyəri uyğun gəlir onun solunda göstərilən ifadə, dəyərlərindən biri ilə sağda təsvir edilmişdir.

Beləliklə, əvəzinə

Daha qısa bir şey yaza bilərsinizmi?

Və nəticə eyni olacaq:

Əksinə, rəngi siyahıdan heç bir dəyərlə üst-üstə düşməyən bütün qidaları seçmək lazımdırsa, onda aşağıdakı inkar forması uyğun gəlir (hissəcik yaranıb) YOX):

Dəyərin sorğu nəticələrindən birinə uyğun olub-olmadığını yoxlamaq

Tutaq ki, verilənlər bazasından yalnız yeməyin təsvirində olan rəngləri seçməliyik. Beləliklə, seçilmiş siyahıda, məsələn, qara rəng olmamalıdır, çünki verilənlər bazamızda qara yemək yoxdur. Siz dərsin sınaq versiyasını oxuyursunuz, tam dərslər mövcuddur.

Bunun bir yolu məntiqi operatordan istifadə etməkdir IN, sağında bütün kataloq qeydlərindən rəng adlarını seçən bir alt sorğu olacaq Qida:

Kataloqdan Ad SEÇİN. Rənglər HARADA ADI (Rəng SEÇİN. Ad qovluğundan. Qida )

Bir kənara, qeyd edim ki, daxili sorğudan xarici sorğunun sahələrinə daxil olmaq mümkündür.

Yenə də operatorun bu forması üçün IN, hissəcik istifadəsi də mövcuddur YOX onun qarşısında.

Kataloqlar üçün iyerarxiya üzvlüyü yoxlanılır

Kataloqlar üçün iyerarxiya üzvlüyünün yoxlanılması da aparıla bilər.

Əvvəlcə iyerarxik kataloq nümunəsinə baxaq. Verilənlər bazamızda "Şəhərlər" kataloqunu açın:

Nəzərə alın ki, onun elementləri digər kataloqlardan fərqlidir ( Qida, Rənglər, Tatlar) sarı qovluqların olması. Bu kataloq qrupları.

Qruplar adi elementlərdən başqalarını da daxil edə bilmələri ilə fərqlənir qruplar və elementlər. Necə ki, qovluqlar başqa qovluq və faylları ehtiva edir.

Qrupun məzmununa baxmaq üçün üzərinə iki dəfə klikləyin:

Bir səviyyəyə qalxmaq üçün qrupa yenidən iki dəfə klikləyin:

Beləliklə, iyerarxik kataloqda həm adi elementlər (məsələn, Rio-de-Janeyro, Salvador), həm də qruplar (məsələn, Braziliya, Hindistan) ola bilər. Siz dərsin sınaq versiyasını oxuyursunuz, tam dərslər mövcuddur.

Hər bir elementin (istər qrup, istərsə də adi element) valideyni ola bilər. Məsələn, Rio-de-Janeyro elementinin valideyni Braziliya qrupudur:

Və bu doğrudur, çünki Rio de Janeyro kataloq iyerarxiyasında Braziliya qrupunun bir hissəsidir:

İndi seçilmiş ölkə qrupunu və ona daxil olan bütün şəhər elementlərini tələb edəcək bir sorğu yazaq.

Nəzərə alın ki, sorğu mətnində GroupCountry adından əvvəl ampersand (&) var. Ampersandı olan adlar sistem tərəfindən avtomatik olaraq sorğu yerinə yetirilməzdən əvvəl dəyəri təyin edilməli olan parametrlər kimi tanınır.

Bu sorğunu konsola yerləşdirdikdən və yeniləmək üçün Run düyməsini kliklədikdən sonra bu parametri təyin edə biləcəyik:

Dəyər olaraq "Rusiya" qrupunu seçin (Seç düyməsini):

İndi "Çalış" düyməsini sıxsaq, sorğunun nəticəsi aşağıdakı kimi olacaq:

Sorğunun nəticəsi qrupun özü (Rusiya) və onun bir hissəsi olan bütün elementlər (Perm, Krasnoyarsk və Voronej) oldu.

Əgər Rusiya əvəzinə “Braziliya” seçsəniz, nəticə belə olacaq:

Beləliklə, operatorun nəticəsi İERARXİYADAƏgər soldakı ifadənin dəyəri kataloq elementinə istinaddırsa və sağdakı (Braziliya) dəyərlər dəstinə daxil edilirsə və ya iyerarxik olaraq bu dəstdə olan hansısa qrupa aiddirsə (Sao Paulo, Rio) DOĞRU olacaq de Janeyro, Salvador).

Uyğunluq üçün yoxlanılacaq dəyərlər dəstinə sorğunun nəticəsi də daxil ola bilər. Bu halda, operatorun sağında IN sorğunun təsvirini göstərməlisiniz:

Operator üçün İERARXİYADA hissəciklərin istifadəsi də mövcuddur YOX onun qarşısında.

Testdən keçin

Testə başlayın

1. BETWEEN məntiqi operatoru dəyəri yoxlayır

2. Məntiqi ifadə 1 1 VƏ 1 ARASINDA

3. Məntiqi ifadə 1 2 VƏ 2 ARASINDA DEYİL

4. Məntiqi operator B yoxlayır

5. Məntiqi operator B yoxlamaq imkanı verir

1C:Enterprise 8.x sorğularında “HİERARXİYADA” dizaynı verilmiş seçimə uyğun olaraq iyerarxik konfiqurasiya obyektinin tabeli elementlərini əldə etməyə imkan verir. Bu gün məqalədə onun istifadəsi nümunəsinə, həmçinin platformanın DBMS tərəfindəki hərəkətlərinə və onun performansa təsirinə baxacağıq.

İstifadəsi

Gəlin “İERARXİYADA” konstruksiyadan istifadənin sadə nümunəsinə baxaq. Aşağıdakı sorğunu yerinə yetirərkən, "Link" dəyişəninin ötürülən qiyməti üçün "Məhsullar" iyerarxik kataloqunun tabeli elementləri alınacaq.

Sorğu Mətni = " SEÇ | Məhsullar . Link,| Mallar . satıcı kodu |FROM| kataloq . Məhsullar Məhsullar AS|HARADA | Mallar . HİERARXİYADA keçid(& Link)"

Test verilənlər bazasında "Məhsullar" kataloqunda aşağıdakı test məlumatları var:

Əlbəttə ki, şəkil bütün kataloq girişlərini göstərmir. Ekran görüntüsü iyerarxik kataloqda yalnız məlumat saxlama strukturunu göstərir. Kataloq cədvəli hər birində 200 elementdən ibarət 5 iç-içə qrupdan ibarət 10 yüksək səviyyəli qrupu saxlayır.

Test sorğusuna qayıdaq. "Qrup - 1" qrupuna keçidi "&Link" parametrinə keçirək (yuxarıdakı ekran görüntüsünə baxın). Sonra sorğunun nəticəsi belə görünəcək:

Gördüyümüz kimi, sorğu yuxarı qrupun özünə (parametr kimi ötürülmüş), həmçinin elementləri olan iç-içə qruplara keçid qaytardı. Beləliklə, "HİERARXİYADA" konstruksiyasından istifadə iyerarxik olaraq tabe olan məlumatları rahat şəkildə əldə etməyə imkan verir.

1C: Müəssisə sorğu dilinin sintaksisi klassik SQL bəzi cəhətdən çox oxşardır. Lakin “HİERARXİYADA” ifadəsinin SQL sorğu dilində analoqu yoxdur, məsələn, “B” platformasının sorğu dilinin ifadəsi üçün oxşar SQL operatoru “IN” mövcuddur. Buna görə də, bu operatordan istifadə edərkən platformanın DBMS ilə işi maraqlıdır.

Pərdə arxasında

Beləliklə, başlayaq. Məsələn, "Məhsullar" kataloqu üçün əvvəllər yazılmış sorğudan istifadə edəcəyik. Platformanın hərəkətlərini iki vəziyyət üçün təhlil edəcəyik:

  1. Biz “&Link” parametri kimi yuxarı səviyyəli “Qrup 1” qrupunu keçəcəyik (əvvəllər etdiyimiz kimi).
  2. Parametrdə yuxarı səviyyəli "Qrup 1" qrupuna daxil olan "Qrup 1 - 1" qrupuna keçid verəcəyik.

İndi, qaydasında. Birinci halda, platforma SQL serverində aşağıdakı hərəkətləri yerinə yetirəcək:

1. Birincisi, parametr kimi ötürülən kataloq qrupuna və bütün tabe qruplara keçid əldə etmək üçün SQL sorğusu icra edilir. Nəticə müvəqqəti "#tt1" cədvəlinə yerləşdirilir.

2. İkinci mərhələdə eyni sorğu iki dəfə yerinə yetirilir:

Ekran görüntüsündə SQL sorğusunun mətni ilə bağlı ətraflı şərhlər var. Bir sözlə, sorğu müvəqqəti cədvəldə istinad edilən qruplar üçün tabe elementləri seçməyə imkan verir. Sual qalır: "Sorğu niyə iki dəfə yerinə yetirilir?" Burada cavab sadədir: birincisi, sorğu artıq müvəqqəti cədvəldə olan birinci səviyyəli qruplar üçün tabe elementləri alır (1-ci bəndə baxın). İkinci sorğu daha sonra ikinci səviyyəli alt qruplar üçün alt elementləri alır. İerarxiyanın üçüncü səviyyəsində heç bir kataloq qrupu olmadığı üçün bu sorğu artıq yerinə yetirilmir.

Bizim vəziyyətimizdə, ikinci sorğu boş bir nəticə verəcəkdir, çünki iyerarxiyanın 3-cü səviyyəsində yerləşən qeydlər üçün tabeli elementlər yoxdur (orada heç bir qrup yoxdur).

3. Sorğunun yekun nəticəsini əldə etmək üçün platforma aşağıdakı SQL sorğusunu yaradır:

Bu xüsusi sorğunun nəticəsi platformanın daxili dilində alqoritmlər tərəfindən daha da işlənə bilər. Beləliklə, "#tt1" müvəqqəti cədvəlindəki qeydlər "_Reference41" istinad cədvəlindən seçmə şərtini təyin etmək üçün istifadə olunur.

4. Son mərhələdə 1C: Enterprise 8.x platforması gələcəkdə istifadə edilməyəcəyi üçün müvəqqəti “#tt1” cədvəlini silir.

Bununla “İERARXİYADA” operatorunun icrası prosesi başa çatır. Nəzərinizə çatdırım ki, SQL serverində nəzərdə tutulan hərəkətlər ardıcıllığı platforma tərəfindəki sorğuya yuxarı səviyyəli “Qrup - 1” qrupuna keçid ötürdükdə yerinə yetirildi. Bəs “&Link” parametri kimi ikinci səviyyəli “Qrup - 1 - 1” qrupuna keçid versək, platforma necə davranacaq? Aşağıdakı məqam istisna olmaqla, hər şey eyni şəkildə baş verəcək: yuxarıda, platforma tərəfindən SQL sorğularının yerinə yetirilməsinin ikinci mərhələsində, tabeli elementləri əldə etmək üçün sorğunun iki dəfə yerinə yetirildiyi yazılmışdır - üçün tabe elementlər əldə edildiyi təqdirdə. qrup "Qrup - 1 - 1" bu belə deyil . Müraciət yalnız bir dəfə yerinə yetiriləcək.

Fakt budur ki, tabeli elementləri əldə etmək üçün müraciətlərin sayı iyerarxiyadakı qrupların sayından asılıdır. Başqa sözlə, əgər element iyerarxiyası səviyyəsində ən azı bir qrup varsa, o zaman 2-ci bənddən tələb.

Performans Təsiri

Sorğuda hər hansı operatorun düzgün istifadə edilməməsi sistemin optimal işləməsi ilə nəticələnə bilər. “İERARXİYADA” nəzərdən keçirilən operator istisna deyil. O, ehtiyatla istifadə edilməlidir, çünki verilənlər bazasına SQL sorğularının icrası alqoritmini xeyli çətinləşdirir və bununla da DBMS serverinə yükü artırır.

İcazə verin, yuxarıda qeyd olunan kədərli nəticələrə səbəb ola biləcək suboptimal sorğuya misal verim:

Məhsulları SEÇİN. Link FROM Directory. Məhsullar HARƏDƏ (Məhsullar. HİERARXİYADA LİNK (& Link) VEYA Məhsullar. HİERARXİYADA LİNK (& Link1) VEYA Məhsullar. HİERARXİYADA LİNK (& Link2) )

Təxmin etdiyiniz kimi, sorğu çoxlu SQL sorğularının yaranmasına gətirib çıxaracaq ki, bu da informasiya sisteminin fəaliyyətinin azalması ilə nəticələnəcək.

Nəticələrinizi çıxarın!

Nəticə çıxarmaq sizin ixtiyarınızdadır. Sadəcə onu deyim ki, seçim şərtlərinə “IN QROUP”, “IN QROUP FROM THE LIST” və digərləri daxil olduqda, “İERARXİYADA” operatoru platforma tərəfindən verilənlərin tərtibi sistemi üçün istifadə olunur. Hesab edirəm ki, yanlış manipulyasiyalarla istifadəçilərin çox mürəkkəb seçimlər qura və 1C server və DBMS-də yükü bir neçə dəfə artıra biləcəyini izah etməyə ehtiyac yoxdur. Yalnız təcrübəli istifadəçilər üçün parametrləri dəyişdirək.

Əlbətdə ki, öz mexanizmlərinizi yazarkən "HİERARXİYADA" operatoruna diqqət yetirin. Bir tərəfdən çox rahat, digər tərəfdən təhlükəlidir.

1C kataloqu nədir və nə üçün lazımdır? Kataloq şərti olaraq daimi məlumatları saxlayır, yəni. uzun müddət ərzində demək olar ki, dəyişməz qalan məlumatlar. Məsələn, “Nomenklatura” kataloqunda satılan və ya istehsal olunan malların siyahısı var. Həmçinin, kataloq kataloq elementini təsvir edən bir çox xüsusiyyətləri ehtiva edə bilər.

Müqayisə üçün bir insanın cinsini götürsək, siyahı məhduddur və dəyişdirilmir, buna görə bir siyahı daha uyğundur.

Yeni bir kataloq yaratdıqdan sonra aşağıdakı şəkli görəcəyik.

Gəlin onun bütün əlfəcinlərinə baxaq.

Əsas

Burada ad (verilənlər bazasında identifikator) və sinonimi (kataloqun istifadəçi adı) göstərilir. Könüllü şərh kataloqun məqsədini izah edə və ya onun xüsusiyyətlərini təsvir edə bilən şərhdir.

İyerarxiya

Bu tabda siz kataloq elementlərinin yerləşdirilməsinin dərinliyini konfiqurasiya edə bilərsiniz. Bu parametrdən istifadə edərək elementləri bəzi meyarlara görə fərqləndirmək və detallaşdırmaq rahatdır. Məsələn, “Şkaflar” məhsulları bir qrupda, “Cədvəllər” məhsulları isə digər qrupdadır. Varsayılan olaraq, kataloq yaratarkən, o, təmsil edir elementlərin siyahısı. İyerarxik kataloq qutusunu işarələsəniz, hər bir element başqa elementə (qrupa) tabe ola bilər. Aşağıda bu əlfəcin fərdiləşdirilməsi və fərdi rejimdə ekranın dəyişdirilməsi variantları verilmişdir.

İyerarxiya növü:

Qrupların və elementlərin iyerarxiyası

Bu parametrlə elementlərin yuvalanması yalnız qruplarda (qovluqlarda) ola bilər.

Burada, gördüyünüz kimi, bütün elementlər və qruplar eyni ikonalara malikdir və istənilən elementi yuva qurmaq olar.

Qrupları yuxarıya qoyun

Bu onay qutusu işarələndikdə, qruplar həmişə yuxarıda olacaq, əks halda onlar növbə ilə düzüləcək, məsələn, bu kimi:

İyerarxiya səviyyələrinin sayını məhdudlaşdırmaq

Burada qeyd qutusu işarələnməyibsə, yuvalama limitsizdir.

Yoxlama qutusu seçilibsə, aşağıda səviyyələrin sayını təyin edə bilərsiniz.

Sahiblər

Əlfəcin üzərində sahibləri bunun tabe olduğu digər kataloqlar da göstərilə bilər. Tabeliyində olan kataloqların əlaqə diaqramı iyerarxik kataloqun əlaqə diaqramına bənzəyir, yalnız burada başqa bir kataloq əsas rol oynayır və sahib adlanır. Tipik konfiqurasiyalarda yaxşı bir nümunə "Sazişlər" kataloqunun "Qarşı tərəflər" kataloquna tabe olmasıdır, çünki Heç bir qarşı tərəfə aid olmayan müqavilə ola bilməz.

"Kataloq Sahiblərinin Siyahısı" sahəsində bu kataloqun elementlərinə sahib olan kataloqların siyahısını müəyyən edir.

Aşağıdakı “Tabeliyindən istifadə” sahəsində bu kataloqun elementlərinin nəyə tabe olacağı göstərilir.

Bir kataloqun iyerarxik olub olmadığını proqramlı şəkildə necə tapmaq olar

Bunu etmək üçün metadataya müraciət etməlisiniz

Bu HierarchicalDirectory = Metadata.Directories.Counterparties.Hierarchical;

Ardı var...

1C 8-də sorğu dili tanınmış "strukturlaşdırılmış proqramlaşdırma dilinin" sadələşdirilmiş analoqudur (daha tez-tez SQL adlanır). Lakin 1C-də yalnız məlumatları oxumaq üçün istifadə olunur, məlumatları dəyişdirmək üçün bir obyekt məlumat modeli istifadə olunur;

Digər maraqlı fərq rus sintaksisidir. Baxmayaraq ki, əslində siz ingilis dilli konstruksiyalardan istifadə edə bilərsiniz.

Müraciət nümunəsi:

SEÇİN
Banklar.Adı,
Banks.CorrAccount
FROM
Directory.Banks NECƏ Banklar

Bu sorğu bizə verilənlər bazasında mövcud olan bütün bankların adı və müxbir hesabı haqqında məlumatı görmək imkanı verəcək.

Sorğu dili məlumat əldə etməyin ən sadə və effektiv üsuludur. Yuxarıdakı nümunədən göründüyü kimi, sorğu dilində metadata adlarından istifadə etməlisiniz (bu, konfiqurasiyanı təşkil edən sistem obyektlərinin siyahısı, yəni kataloqlar, sənədlər, registrlər və s.).

Sorğu dili konstruksiyalarının təsviri

Sorğu strukturu

Məlumat əldə etmək üçün “SELECT” və “FROM” konstruksiyalarından istifadə etmək kifayətdir. Ən sadə sorğu belə görünür:

Directories.Nomenklaturadan * SEÇİN

Burada “*” cədvəlin bütün sahələrinin seçilməsi, Directories.Nomenklatura – verilənlər bazasında cədvəlin adı deməkdir.

Daha mürəkkəb və ümumi bir nümunəyə baxaq:

SEÇİN
<ИмяПоля1>NECƏ<ПредставлениеПоля1>,
cəmi(<ИмяПоля2>) NECƏ<ПредставлениеПоля2>
FROM
<ИмяТаблицы1>NECƏ<ПредставлениеТаблицы1>
<ТипСоединения>KÜRBƏK<ИмяТаблицы2>NECƏ<ПредставлениеТаблицы2>
BY<УсловиеСоединениеТаблиц>

HARADA
<УсловиеОтбораДанных>

GROUP BY
<ИмяПоля1>

SORTLAMA
<ИмяПоля1>

NƏTİCƏLƏR
<ИмяПоля2>
BY
<ИмяПоля1>

Bu sorğuda biz “CədvəlAdı1” və “CədvəlAdı” cədvəllərindən “SahəAdı1” və “SahəAdı1” sahələrinin məlumatlarını seçirik, “NEÇƏ” operatorundan istifadə edərək sahələrə sinonimlər təyin edir və müəyyən bir “CədvəlBağlantı Şərti” şərtindən istifadə edərək onları birləşdiririk. ”.

Alınan məlumatlardan yalnız "HARƏDƏ" "Məlumat Seçmə Şərti" şərtinə cavab verən məlumatları seçirik “Sahənin Adı1” və son sahə “Sahənin Adı2”.

Son addım ORDER BY konstruksiyasından istifadə edərək sorğunun çeşidlənməsidir.

Ümumi dizaynlar

1C 8.2 sorğu dilinin ümumi strukturlarına nəzər salaq.

İLKn

Bu operatordan istifadə edərək ilk qeydlərin n sayını əldə edə bilərsiniz. Qeydlərin sırası sorğudakı sıra ilə müəyyən edilir.

İLK 100 SEÇİN
Banklar.Adı,
Banklar BIC kodu
FROM
Directory.Banks NECƏ Banklar
SORTLAMA
Banklar. Adı

Sorğu əlifba sırası ilə sıralanmış “Banklar” kataloqunun ilk 100 qeydini alacaq.

İCAZƏ VERİLİR

Bu dizayn mexanizmlə işləmək üçün aktualdır. Mexanizmin mahiyyəti bütövlükdə cədvəli deyil, verilənlər bazası cədvəlindəki xüsusi qeydlər üçün istifadəçilərin oxumasını (və digər hərəkətləri) məhdudlaşdırmaqdır.

İstifadəçi onun üçün əlçatmaz olan qeydləri oxumaq üçün sorğudan istifadə etməyə çalışarsa, səhv mesajı alacaq. Bunun qarşısını almaq üçün "İZİN VERİLƏN" konstruksiyadan istifadə etməlisiniz, yəni sorğu yalnız ona icazə verilən qeydləri oxuyacaq.

SEÇİN İCAZƏ VERİLİR
Əlavə məlumatların anbarı
FROM
Əlavə məlumatların kataloqu

MÜXTƏLİF

“FƏRQLİ”dən istifadə dublikat sətirlərin 1C sorğusunun nəticəsinə daxil olmasının qarşısını alacaq. Dublikasiya bütün sorğu sahələrinin uyğun olması deməkdir.

İLK 100 SEÇİN
Banklar.Adı,
Banklar BIC kodu
FROM
Directory.Banks NECƏ Banklar

Boş Cədvəl

Bu tikinti sorğuları birləşdirmək üçün çox nadir hallarda istifadə olunur. Qoşularkən, cədvəllərdən birində boş iç-içə cədvəl təyin etməli ola bilərsiniz. Bunun üçün "Boş Cədvəl" operatoru tam uyğundur.

1C 8 yardımından nümunə:

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.*

ISNULL

Çoxlu səhvlərdən qaçmağa imkan verən çox faydalı xüsusiyyət. YesNULL() NULL dəyərini istədiyinizlə əvəz etməyə imkan verir. Birləşdirilmiş cədvəllərdə dəyərin mövcudluğunu yoxlamaq üçün çox tez-tez istifadə olunur, məsələn:

SEÇİN
Nomenklatura Ref.
IsNULL(Qalan Qalan Miqdar,0) Kəmiyyət Qalan
FROM


Başqa yollarla istifadə edilə bilər. Məsələn, əgər hər bir sıra üçün dəyərin hansı cədvəldə olduğu məlum deyilsə:

ISNULL(Qaimə-faktura Qəbul.Tarix, Faktura Verilmə.Tarix)

HOW bizə cədvələ və ya sahəyə ad (sinonim) təyin etməyə imkan verən operatordur. Yuxarıda istifadə nümunəsini gördük.

Bu konstruksiyalar çox oxşardır - onlar istədiyiniz dəyərin simli təsvirini əldə etməyə imkan verir. Yeganə fərq ondadır ki, REPRESENTATION hər hansı bir dəyəri sətir tipinə çevirir, REPRESENTATIONREF isə yalnız istinad dəyərlərini çevirir. REFERANS NÜMAYƏNDƏSİNİN optimallaşdırma üçün məlumat kompozisiya sistemi sorğularında istifadə edilməsi tövsiyə olunur, əlbəttə ki, seçimlərdə istinad məlumat sahəsinin istifadə edilməsi planlaşdırılmırsa.

SEÇİN
View(Link), //string, məsələn “Avans hesabat №123 10/10/2015
View(DeletionMark) AS DeleteMarkText, //string, “Bəli” və ya “Xeyr”
ViewReferences(DeletionMark) AS DeleteMarkBoolean //boolean, Doğru və ya Yanlış
FROM
Document.Avance Report

EXPRESS

Express, sahə dəyərlərini istədiyiniz məlumat növünə çevirməyə imkan verir. Siz dəyəri ya primitiv tipə, ya da istinad növünə çevirə bilərsiniz.

İstinad növü üçün ekspress, kompleks tipli sahələrdə tələb olunan məlumat növlərini məhdudlaşdırmaq üçün istifadə olunur, tez-tez sistem performansını optimallaşdırmaq üçün istifadə olunur. Misal:

EXPRESS(TableCost.Subconto1 AS Directory. Cost Items).Vergi Mühasibat Xərcləri üçün Fəaliyyət Növü

İbtidai növlər üçün bu funksiya çox vaxt qeyri-məhdud uzunluqlu sahələrdə simvolların sayını məhdudlaşdırmaq üçün istifadə olunur (belə sahələr ilə müqayisə edilə bilməz). Səhvdən qaçmaq üçün " Müqayisə əməliyyatında yanlış parametrlər. Sahələri müqayisə etmək mümkün deyil
qeyri-məhdud uzunluq və uyğun olmayan növlərin sahələri
", belə sahələri aşağıdakı kimi ifadə etməlisiniz:

EXPRESS(Şərh AS Xətt(150))

FƏRQLİ TARİX

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

1C sorğusunda IS NULL-dən istifadə nümunəsi:

SEÇİN
Ref
SOL BAĞLANTI Yığımları Qeydiyyatdan keçirin.Anbarlarda olan məhsullar.Qalan Məhsul KİMİ
Proqram NomenklaturasıRef.Link = Satılan MallarKomitələriQaldı.Nomenklatura
Qalan Məhsullar OLMAYAN yerdə Qalan Kəmiyyət NULL

Sorğuda verilənlərin növü TYPE() və VALUETYPE() funksiyalarından istifadə etməklə və ya məntiqi REFERENCE operatorundan istifadə etməklə müəyyən edilə bilər. İki funksiya oxşardır.

Əvvəlcədən təyin edilmiş dəyərlər

1C sorğu dilində sorğularda keçmiş parametrlərdən istifadə etməklə yanaşı, əvvəlcədən təyin edilmiş dəyərlərdən və ya istifadə edə bilərsiniz. Məsələn, köçürmələr, əvvəlcədən təyin edilmiş kataloqlar, hesablar planları və s.

İstifadə nümunəsi:

HARA Nomenklatura.Nomenklaturanın Növü = Dəyər(Kataloq.Nomenklatura Növləri.Məhsul)

HARADA Qarşı tərəflər.Əlaqə məlumatının növü = Dəyər(Saya.Əlaqə məlumatının növləri.Telefon)

HARADA Hesab Qalıqları.Mühasibat Hesabı = Dəyər(Hesablar Planı.Profit.ProfitsLoss)

Əlaqələr

4 növ əlaqə var: SOL, SAĞ, TAM, DAXİLİ.

SOL və SAĞ ƏLAQƏ

Müəyyən bir şərtə əsaslanan iki cədvəli əlaqələndirmək üçün birləşmələr istifadə olunur. Xüsusiyyət zaman SOL QOŞULUN ilk göstərilən cədvəli bütövlükdə götürüb ikinci cədvəli şərti olaraq bağlayırıq. İkinci cədvəlin şərtlə bağlana bilməyən sahələri dəyərlə doldurulur SIFIR.

Misal üçün:

O, Qarşı tərəflərin bütün cədvəlini qaytaracaq və “Bank” sahəsini yalnız “Qarşı tərəflər.Adı = Banklar.Adı” şərtinin yerinə yetirildiyi yerlərdə dolduracaq. Şərt yerinə yetirilməzsə, Bank sahəsi olaraq təyin ediləcək SIFIR.

1C dilində SAĞ QOŞULUN tamamilə oxşar SOL əlaqə, bir fərq istisna olmaqla - in QOŞULMA HÜQUQU"Əsas" cədvəl birinci deyil, ikincidir.

TAM ƏLAQƏ

TAM ƏLAQƏ soldan və sağdan fərqlənir ki, o, iki cədvəldən bütün qeydləri göstərir və yalnız şərti ilə birləşdirə bildiklərini birləşdirir.

Misal üçün:

FROM

TAM ƏLAQƏ
Directory.Banks NECƏ Banklar

BY

Sorğu dili yalnız qeydlərə qoşulma şərti yerinə yetirildiyi təqdirdə hər iki cədvəli tamamilə qaytaracaq. Sol/sağ birləşmədən fərqli olaraq, NULL-un iki sahədə görünməsi mümkündür.

DAXİLİ QOŞULUN

DAXİLİ QOŞULUN tamdan fərqlənir ki, o, yalnız verilmiş şərtə uyğun olaraq qoşula bilən qeydləri göstərir.

Misal üçün:

FROM
Müştərilər AS

DAXİLİ QOŞULUN
Directory.Banks NECƏ Banklar

BY
Clients.Name = Banks.Name

Bu sorğu yalnız bankın və qarşı tərəfin eyni ada malik olduğu sətirləri qaytaracaq.

Assosiasiyalar

JOIN və JOIN ALL konstruksiyaları iki nəticəni birləşdirir. Bunlar. iki yerinə yetirilməsinin nəticəsi bir ümumi birinə "birləşəcək".

Yəni sistem adi sistemlərlə eyni işləyir, yalnız müvəqqəti masa üçün.

INDEX BY-dən necə istifadə etmək olar

Bununla belə, bir məqamı nəzərə almaq lazımdır. Müvəqqəti cədvəldə indeks yaratmaq da başa çatdırmaq üçün vaxt tələb edir. Buna görə də, “ ” konstruksiyası yalnız müvəqqəti cədvəldə 1-2-dən çox qeyd olacağına əmin olduqda istifadə etmək məsləhətdir. Əks təqdirdə, təsir əksinə ola bilər - indekslənmiş sahələrin performansı indeksi qurmaq üçün lazım olan vaxtı kompensasiya etmir.

SEÇİN
Valyuta məzənnələri Ən son Currency AS Valyuta,
Valyuta məzənnələri Ən son kəsişmə.
PUT Valyuta Məzənnələri
FROM
Məlumat Qeydiyyatı.Valyuta Məzənnələri.Son Dilim(&Dövr,) AS Valyuta MəzənnələriSon Dilim
İNDEKSİ BY
Valyuta
;
SEÇİN
QiymətlərNomenklatura.Nomenklatura,
QiymətlərNomenklaturalar.Qiymət,
QiymətlərNomenklaturalar.Valyuta,
Valyuta məzənnələri. Məzənnə
FROM
Məlumat Qeydiyyatı.Nomenklatura Qiymətlər.Son Dilim(&Dövr,
Nomenklatura B (&Nomenklatura) VƏ QiymətNövü = &QiymətNövü) QiymətNomenklaturası AS
Valyuta Məzənnələri KİMİ SOL QOŞULUN
Proqram qiymətləriNomenklaturalar.Valyuta = Valyuta məzənnələri.Valyuta

Qruplaşdırma

1C sorğu dili sorğu nəticələrini qruplaşdırarkən xüsusi məcmu funksiyalardan istifadə etməyə imkan verir. Qruplaşdırma dublikatları "aradan qaldırmaq" üçün ümumi funksiyalar olmadan da istifadə edilə bilər.

Aşağıdakı funksiyalar mövcuddur:

Məbləğ, Kəmiyyət, Fərqli sayı, Maksimum, Minimum, Orta.

Nümunə №1:

SEÇİN
Malların və xidmətlərin satışı, malların nomenklaturası.
SUM(Sales of GoodsServicesGoods.Quantity) AS Miqdarı,
SUM(Malların SatışıXidmətlərMalların.Məbləği) Məbləğ AS
FROM

GROUP BY
Malların və xidmətlərin satışı Malların nomenklaturası

Sorğu malların olduğu bütün sətirləri qəbul edir və onları maddələr üzrə miqdar və məbləğlər üzrə ümumiləşdirir.

Nümunə № 2

SEÇİN
Banks.Code,
Dublikatların Sayı KİMİ (MÜXTƏLİF Banklar.Link).
FROM
Directory.Banks NECƏ Banklar
GROUP BY
Banks.Code

Bu nümunə “Banklar” kataloqunda BIC-lərin siyahısını göstərəcək və onların hər biri üçün neçə dublikat olduğunu göstərəcək.

Nəticələr

Nəticələr iyerarxik quruluşa malik sistemdən məlumat əldə etmək üsuludur. Ümumi funksiyalar qruplaşmalar üçün olduğu kimi xülasə sahələri üçün də istifadə edilə bilər.

Nəticələrin praktikada istifadəsinin ən məşhur yollarından biri malların partiya hesabından silinməsidir.

SEÇİN




FROM
Malların və Xidmətlərin Satılması Malların SATIŞI
SORTLAMA

NƏTİCƏLƏR
SUM(Kəmiyyət),
SUM(Cam)
BY
Nomenklatura

Sorğunun nəticəsi aşağıdakı iyerarxik olacaq:

Ümumi nəticələr

Əgər bütün “cəmlər” üçün yekunları əldə etmək lazımdırsa, “GENERAL” operatorundan istifadə edin.

SEÇİN
Malların və xidmətlərin satışı Malların Nomenklaturası.
Malların və Xidmətlərin Satışı Link AS Sənədi,
Malların və xidmətlərin satışı Malların miqdarı AS Miqdarı,
Malların və xidmətlərin satışı Malların məbləği
FROM
Malların və Xidmətlərin Satılması Malların SATIŞI
SORTLAMA
Malların və Xidmətlərin Satış Tarixi
NƏTİCƏLƏR
SUM(Kəmiyyət),
SUM(Cam)
BY
ÜMUMİDİR,
Nomenklatura

Sorğunun icrası nəticəsində aşağıdakı nəticəni əldə edirik:

Hansı qruplaşmanın 1 səviyyəsi bütün lazımi sahələrin yığılmasıdır.

Aranjıman

ORDER BY operatoru sorğunun nəticəsini çeşidləmək üçün istifadə olunur.

İbtidai növlər üçün çeşidləmə (sətir, nömrə, mantiq) adi qaydalara əməl edir. İstinad tipli sahələr üçün çeşidləmə kod və ya istinad təmsili ilə deyil, keçidin daxili təmsili (unikal identifikator) ilə baş verir.

SEÇİN

FROM
Kataloq.Nomenklatura AS Nomenklatura
SORTLAMA
ad

Sorğuda nomenklatura kataloqunda əlifba sırası ilə sıralanmış adların siyahısı göstərilir.

Avtomatik sifariş

Çeşidləməsiz sorğunun nəticəsi xaotik şəkildə təqdim edilmiş sətirlər dəstidir. 1C platformasının tərtibatçıları eyni sorğuları yerinə yetirərkən sətirlərin eyni ardıcıllıqla çıxacağına zəmanət vermirlər.

Cədvəl qeydlərini daimi ardıcıllıqla göstərmək lazımdırsa, Avtomatik Sifariş konstruksiyasından istifadə etməlisiniz.

SEÇİN
Nomenklatura.Ad AS Adı
FROM
Kataloq.Nomenklatura AS Nomenklatura
AVTO SİFARİŞ

Virtual masalar

1C-də virtual cədvəllər digər oxşar sintaksislərdə olmayan 1C sorğu dilinin unikal xüsusiyyətidir. Virtual cədvəl registrlərdən profil məlumatlarını əldə etməyin sürətli bir yoludur.

Hər bir registr növünün özünəməxsus virtual cədvəllər dəsti var, bunlar registr parametrlərindən asılı olaraq fərqlənə bilər.

  • birincinin kəsilməsi;
  • sonuncunun kəsilməsi.
  • qalıqlar;
  • inqilablar;
  • qalıqlar və dövriyyə.
  • subcontodan hərəkətlər;
  • inqilablar;
  • sürət Dt Kt;
  • qalıqlar;
  • qalıqlar və dövriyyə
  • subconto.
  • əsas;
  • qrafik məlumatları;
  • faktiki etibarlılıq müddəti.

Həll tərtibçisi üçün məlumatlar bir (virtual) cədvəldən götürülür, lakin əslində 1C platforması bir çox cədvəldən götürərək onları lazımi formaya çevirir.

SEÇİN
Anbarlarda olan məhsullar və dövriyyə.
Anbarlarda Qalan MəhsullarVə Dövriyyə. Miqdar İlkin Qalan,
MəhsullarAnbarlardaQalıqlarVə Dövr.KəmiyyətDövriyyə,
MallarAnbarlardaQalıqlarVə Dövriyyə.KəmiyyətDaxil olan,
MallarAnbarlardaQalıqlarVə Dövriyyə.Kəmiyyətİstehlak,
MəhsullarAnbarlardaQalıqlarVə Dövriyyə.Kəmiyyət Son Qalan
FROM
Yığımları Qeydiyyatdan keçirin.Anbarlarda olan mallar.QalıqlarVə DövriyyəAnbarlardaMallar kimiAnbarlardaQalıqlarVə Dövriyyə

Bu sorğu böyük miqdarda məlumatı tez bir zamanda əldə etməyə imkan verir.

Virtual Cədvəl Seçimləri

Virtual cədvəllərlə işləməyin çox vacib cəhəti parametrlərdən istifadədir. Virtual masa parametrləri seçim və konfiqurasiya üçün ixtisaslaşdırılmış parametrlərdir.

Belə cədvəllər üçün “HARADA” konstruksiyasında seçimdən istifadə etmək düzgün hesab edilmir. Sorğunun suboptimal olmasına əlavə olaraq, yanlış məlumat almaq mümkündür.

Bu parametrlərdən istifadə nümunəsi:

Anbarlardakı malların reyestri (& Dövrün əvvəli, & Dövrün sonu, ayın hərəkətləri və sərhədləri, Nomenklatura = & Tələb olunan Nomenklatura).

Virtual cədvəllər üçün alqoritm

Məsələn, “Qalıqlar” tipli ən çox istifadə olunan virtual cədvəldə iki fiziki cədvəldən – balanslar və hərəkətlərdən məlumatlar saxlanılır.

Virtual cədvəldən istifadə edərkən sistem aşağıdakı manipulyasiyaları yerinə yetirir:

  1. Cəmi cədvəldə tarix və ölçmələr baxımından ən yaxın hesablanmış dəyəri alırıq.
  2. Hərəkət cədvəlindəki məbləği ümumilər cədvəlindəki məbləğə "əlavə edirik".


Belə sadə hərəkətlər bütövlükdə sistemin işini əhəmiyyətli dərəcədə yaxşılaşdıra bilər.

Query Builder istifadə edərək

Sorğu Qurucusu– verilənlər bazası sorğularının işlənməsini xeyli asanlaşdıran 1C Enterprise sistemində quraşdırılmış alət.

Sorğu qurucusu kifayət qədər sadə, intuitiv interfeysə malikdir. Bununla belə, sorğu konstruktorunun istifadəsinə daha ətraflı baxaq.

Sorğunun mətn konstruktoru proqram kodunun istədiyiniz yerində kontekst menyusundan (siçanın sağ düyməsi) işə salınır.

1C sorğu konstruktorunun təsviri

Dizaynerin hər bir nişanına daha ətraflı baxaq. İstisna başqa müzakirə üçün mövzu olan Builder tabıdır.

Cədvəllər və Sahələr nişanı

Bu nişan məlumat mənbəyini və hesabatda göstərilməli olan sahələri müəyyən edir. Əslində burada SELECT.. FROM konstruksiyaları təsvir edilmişdir.

Mənbə fiziki verilənlər bazası cədvəli, virtual registr cədvəli, müvəqqəti cədvəllər, iç-içə sorğular və s. ola bilər.

Virtual cədvəllərin kontekst menyusunda virtual cədvəl parametrlərini təyin edə bilərsiniz:

Əlaqələr nişanı

Nişan bir neçə cədvəlin əlaqələrini təsvir etmək üçün istifadə olunur və CONNECTION sözü ilə konstruksiyalar yaradır.

Qruplaşdırma nişanı

Bu tabda sistem cədvəlin nəticəsinin tələb olunan sahələrini qruplaşdırmağa və ümumiləşdirməyə imkan verir. GROUP BY, SUM, MINIMUM, AVERAGE, MAXIMUM, QUICITY, SAYI FƏRQLİ konstruksiyaların istifadəsini təsvir edir.

Şərtlər nişanı

WHERE tikintisindən sonra sorğu mətnində gələn hər şeyə, yəni alınan məlumatlara qoyulan bütün şərtlərə cavabdehdir.

Qabaqcıl tab

Tab əlavə olaraqçox vacib olan bütün növ parametrlərlə doludur. Xüsusiyyətlərin hər birinə nəzər salaq.

Qruplaşdırma Qeydlərin seçilməsi:

  • Əvvəlcə N– sorğuya yalnız N qeydi qaytaran parametr (İLK operator)
  • Dublikat yoxdur– alınan qeydlərin unikallığını təmin edir (FƏRQLİ operator)
  • İcazə verilir- yalnız sistemin nəzərə alaraq seçməyə icazə verdiyi qeydləri seçməyə imkan verir (İZİN VERİLİR tikinti)

Qruplaşdırma Sorğu növü sorğunun hansı növ olacağını müəyyənləşdirir: məlumatların alınması, müvəqqəti cədvəlin yaradılması və ya müvəqqəti cədvəlin məhv edilməsi.

Aşağıda bayraq var Sonrakı dəyişiklik üçün alınan məlumatları kilidləyin. Bu, məlumatların oxunduğu andan dəyişdirilməsinə qədər təhlükəsizliyini təmin edən məlumatların kilidlənməsini təyin etmək imkanı verir (yalnız Avtomatik kilidləmə rejimi üçün uyğundur, DƏYİŞMƏ ÜÇÜN dizayn).

Qoşulmalar/ləqəblər nişanı

Sorğu tərtibatçısının bu sekmesinde siz müxtəlif cədvəllərə və ləqəblərə qoşulma qabiliyyətini təyin edə bilərsiniz (NECƏ quruluşu). Cədvəllər sol tərəfdə göstərilmişdir. Bayraqları masanın qarşısına qoysanız, UNITE konstruksiyası istifadə ediləcək, əks halda - BÜTÜN BİRLƏŞİN (iki üsul arasındakı fərqlər). Sağ tərəfdə müxtəlif cədvəllərdəki sahələrin uyğunluğu göstərilir, əgər uyğunluq göstərilməyibsə, sorğu NULL dəyərini qaytaracaq;

Sifariş nişanı

Bu, dəyərlərin sıralanma sırasını (SİPARİŞ BY) - azalan (DESC) və ya artan (ASC) göstərir.

Maraqlı bir bayraq da var - Avtomatik sifariş(sorğuda - AVTO SİFARİŞ). Varsayılan olaraq, 1C sistemi məlumatları "xaotik" qaydada göstərir. Bu bayrağı təyin etsəniz, sistem məlumatları daxili məlumatlara görə çeşidləyəcək.

Sorğu toplu nişanı

Sorğu dizayneri nişanında siz yenilərini yarada, həmçinin naviqasiya kimi istifadə edə bilərsiniz. Sorğu mətnində paketlər “;” (vergül) işarəsi ilə ayrılır.

Sorğu dizaynerində "Sorğu" düyməsi

Sorğu tərtibatçısının aşağı sol küncündə İstənilən vaxt sorğu mətninə baxa biləcəyiniz Sorğu düyməsi var:

Bu pəncərədə siz sorğuya düzəlişlər edib onu icra edə bilərsiniz.


Sorğu Konsolundan istifadə

Sorğu Konsolu mürəkkəb sorğuları aradan qaldırmaq və məlumatı tez əldə etmək üçün sadə və rahat üsuldur. Bu yazıda Query Console-dan necə istifadə olunacağını təsvir etməyə və Query Console-u yükləmək üçün keçid təqdim etməyə çalışacağam.

Bu alətə daha yaxından nəzər salaq.

1C sorğu konsolunu yükləyin

Əvvəla, sorğu konsolu ilə işə başlamaq üçün onu haradansa yükləmək lazımdır. Müalicələr adətən iki növə bölünür - idarə olunan formalar və şərti olanlar (və ya bəzən 8.1 və 8.2/8.3 adlanır).

Bu iki görünüşü bir emalda birləşdirməyə çalışdım - istədiyiniz forma istədiyiniz iş rejimində açılır (idarə olunan rejimdə konsol yalnız qalın rejimdə işləyir).

1C sorğu konsolunun təsviri

Əsas emal panelinin təsviri ilə sorğu konsoluna baxmağa başlayaq:

Sorğu konsolunun başlığında son sorğunun icra müddətini millisaniyəlik dəqiqliklə görə bilərsiniz, bu, müxtəlif dizaynları performans baxımından müqayisə etməyə imkan verir.

Komanda panelindəki ilk qrup düymələr cari sorğuların xarici faylda saxlanmasına cavabdehdir. Bu çox rahatdır, siz həmişə mürəkkəb sorğu yazmağa qayıda bilərsiniz. Və ya, məsələn, müəyyən dizaynların tipik nümunələrinin siyahısını saxlayın.

Solda, "Sorğu" sahəsində siz yeni sorğular yarada və onları ağac strukturunda saxlaya bilərsiniz. İkinci qrup düymələr sorğular siyahısının idarə edilməsinə cavabdehdir. Onun köməyi ilə siz sorğu yarada, köçürə, silə, köçürə bilərsiniz.

  • İcra etməkxahiş- sadə icra və nəticələr
  • Paketi icra edin– sorğular toplusunda bütün ara sorğulara baxmaq imkanı verir
  • Müvəqqəti cədvəllərə baxış– müvəqqəti sorğuların cədvəldə qaytardığı nəticələri görməyə imkan verir

Sorğu parametrləri:

Sorğu üçün cari parametrləri təyin etməyə imkan verir.

Sorğu parametrləri pəncərəsində aşağıdakılar maraqlıdır:

  • Düymə Müraciətdən alın geliştiricinin rahatlığı üçün sorğuda bütün parametrləri avtomatik olaraq tapır.
  • Bayraq Bütün sorğular üçün ümumi parametrlər– quraşdırıldıqda, sorğuların ümumi siyahısında sorğudan sorğuya keçərkən onun işlənməsi parametrləri təmizləmir.

Dəyərlərin siyahısı ilə parametr təyin edinÇox sadədir, sadəcə parametr dəyərini seçərkən aydın dəyər düyməsini (çarpaz) vurun, sistem sizə məlumat növünü seçməyi təklif edəcək, burada “Dəyər Siyahısı”nı seçməlisiniz:

Həmçinin yuxarı paneldə sorğu konsolunun parametrlərini çağırmaq üçün düymə var:

Burada siz sorğuların avtomatik saxlanması və sorğunun icrası parametrləri üçün parametrləri təyin edə bilərsiniz.

Sorğu mətni konsol sorğu sahəsinə daxil edilir. Bu, sadəcə sorğu testini yazmaqla və ya xüsusi alətə - sorğu tərtibatçısına zəng etməklə edilə bilər.

1C 8 sorğu dizayneri giriş sahəsinə kliklədiyiniz zaman kontekst menyusundan (siçanın sağ düyməsi) çağırılır:

Həmçinin bu menyuda sorğuya sətir fasilələrini (“|”) təmizləmək və ya əlavə etmək və ya sorğu kodunu bu rahat formada almaq kimi faydalı funksiyalar var:

Sorğu = Yeni Sorğu;
İstək. Mətn = ”
|SEÇ
| Valyutalar.Link
|FROM
| Directory.Currencies AS Valyutalar”;
RequestResult = Request.Execute();

Sorğu konsolunun aşağı sahəsi sorğunun nəticəsi sahəsini göstərir, buna görə də bu emal yaradılıb:



Həmçinin, sorğu konsolu, siyahıya əlavə olaraq, məlumatları ağac şəklində göstərə bilər - cəmi olan sorğular üçün.

Sorğunun optimallaşdırılması

1C müəssisəsinin məhsuldarlığının artırılmasında ən vacib məqamlardan biri 8.3 optimallaşdırmaistək. Bu nöqtə də nə zaman çox əhəmiyyətlidir sertifikatlaşdırmadan keçmək. Aşağıda qeyri-optimal sorğu performansının tipik səbəbləri və optimallaşdırma üsulları haqqında danışacağıq.

WHERE konstruksiyasından istifadə edərək virtual cədvəldə seçimlər

Yalnız VT parametrləri vasitəsilə virtual cədvəl detallarına filtrlər tətbiq etmək lazımdır. Heç bir halda virtual cədvəldə seçim üçün WHERE konstruksiyasından istifadə etməməlisiniz, bu, optimallaşdırma baxımından ciddi səhvdir; WHERE istifadə edərək seçim vəziyyətində, əslində, sistem BÜTÜN qeydləri qəbul edəcək və yalnız bundan sonra lazım olanları seçəcəkdir.

SAĞ:

SEÇİN

FROM
Təşkilatların İştirakçıları ilə Qarşılıqlı Hesablaşmaların Reyestri (.
,
Təşkilat = &Təşkilat
VƏ Fərdi = &Fərdi) NECƏ Təşkilatların İştirakçıları ilə Qarşılıqlı Hesablaşmalar Balanslar

YANLIŞ:

SEÇİN
Təşkilatların İştirakçıları ilə Qarşılıqlı Hesablaşmalar Balans
FROM
Təşkilatların İştirakçıları ilə Qarşılıqlı Hesablaşmaların Reyestri (,) Təşkilatların İştirakçıları ilə Qarşılıqlı Hesablaşmalar
HARADA
Təşkilatların İştirakçıları ilə Qarşılıqlı Hesablaşmalar Təşkilat = & Təşkilat
VƏ Təşkilatların İştirakçıları ilə Qarşılıqlı Hesablaşmalar Fərdi = &Fərdi

Nöqtədən istifadə edərək mürəkkəb tipli sahənin dəyərinin alınması

Nöqtə vasitəsilə sorğuda mürəkkəb tipli məlumatları qəbul edərkən, sistem kompleks tip sahəsində mümkün olan qədər cədvəlləri sol birləşmə ilə əlaqələndirir.

Məsələn, registr qeyd sahəsinə - qeydiyyatçıya daxil olmaq optimallaşdırma üçün çox arzuolunmazdır. Qeydiyyatçı, reyestrə məlumat yaza bilən bütün mümkün sənəd növlərini ehtiva edən kompozit məlumat növünə malikdir.

YANLIŞ:

SEÇİN
Record Set.Recorder.Tarix,
RecordSet.Quantity
FROM
Accumulations.ProductsOrganizations SetRecords kimi qeydiyyatdan keçin

Yəni, əslində belə bir sorğu bir cədvələ deyil, 22 verilənlər bazası cədvəlinə daxil olacaq (bu registrdə 21 qeydiyyatçı növü var).

SAĞ:

SEÇİN
SEÇİM
ZAMAN ProductsOrg.Registrator LINK Document.Məhsul və Xidmətlərin Satışı
SONRA İFADƏ EDİN(ProductsOrganization.Sənəd KİMİ Qeydiyyatçı.MallarınSatışXidmətləri).Tarix
ZAMAN GoodsOrg.Registrator LINK Sənədi.Malların QəbuluXidmətlər
SONRA İFADƏ EDİN(GoodsOrg.Registrator AS Document.Receip of GoodsServices).Tarix
TARİX KİMİ BİTİR,
ProductsOrg.Quantity
FROM
Akkumulyasiyalar.MəhsullarTəşkilatlar MəhsullarTəşkilat kimi qeydiyyatdan keçin

Və ya ikinci seçim, belə məlumatları detallara əlavə etmək, məsələn, bizim vəziyyətimizdə bir tarix əlavə etməkdir.

SAĞ:

SEÇİN
MəhsullarTəşkilatlar.Tarix,
MəhsullarTəşkilatlar.Kəmiyyət
FROM
Təşkilatların mallarının reyestri

Qoşulma vəziyyətində olan alt sorğular

Optimallaşdırma üçün, qoşulma şəraitində alt sorğulardan istifadə etmək qəbuledilməzdir, bu, sorğunu əhəmiyyətli dərəcədə yavaşlatır; Belə hallarda VT-dən istifadə etmək məsləhətdir. Qoşulmaq üçün əvvəllər onları əlaqə sahələri ilə indeksləşdirərək yalnız metadata və VT obyektlərindən istifadə etməlisiniz.

YANLIŞ:

SEÇİN …

SOL QOŞULUŞ (
RegisterInformation.Limits-DƏN SEÇİN
HARADA…
QRUPLA...
) BY …

SAĞ:

SEÇİN …
PUT Limitləri
Məlumat Registrindən. Limitlər
HARADA…
QRUPLA...
İNDEKSİ BY...;

SEÇİN …
Sənəddən Malların və Xidmətlərin Satışı
SOL QOŞULMA Limitləri
BY …;

Virtual Cədvəllərlə Yazıların Birləşdirilməsi

Virtual masanı başqalarına bağlayarkən sistemin optimal işləmədiyi vəziyyətlər var. Bu halda, sorğunun performansını optimallaşdırmaq üçün müvəqqəti cədvəl sorğusunda birləşdirilmiş sahələri indeksləşdirməyi unutmadan virtual cədvəli müvəqqəti olaraq yerləşdirməyə cəhd edə bilərsiniz. Bunun səbəbi VT-lərin çox vaxt bir neçə fiziki DBMS cədvəlində olmasıdır, nəticədə onları seçmək üçün alt sorğu tərtib edilir və problem əvvəlki nöqtəyə bənzəyir.

İndekslənməmiş sahələrə əsaslanan seçimlərdən istifadə

Sorğu yazarkən ən çox yayılmış səhvlərdən biri indeksləşdirilməmiş sahələrdə şərtlərdən istifadə etməkdir, bu, ziddiyyət təşkil edir. sorğu optimallaşdırma qaydaları.Əgər sorğuya indeksləşdirilə bilməyən sahələr üzrə seçim daxildirsə, DBMS sorğunu optimal şəkildə yerinə yetirə bilməz. Əgər müvəqqəti cədvəl götürsəniz, əlaqə sahələrini də indeksləşdirməlisiniz.

Hər bir şərt üçün uyğun bir indeks olmalıdır. Uyğun indeks aşağıdakı tələblərə cavab verən indeksdir:

  1. İndeks şərtdə sadalanan bütün sahələri ehtiva edir.
  2. Bu sahələr indeksin ən başındadır.
  3. Bu seçimlər ardıcıldır, yəni sorğu vəziyyətində iştirak etməyən dəyərlər onların arasına “bağlanmır”.

DBMS düzgün indeksləri seçməzsə, bütün cədvəl skan ediləcək - bu, performansa çox mənfi təsir göstərəcək və bütün qeydlər dəstinin uzun müddət bloklanmasına səbəb ola bilər.

Şərtlərdə məntiqi OR-dan istifadə

Hamısı budur, bu məqalə hər bir 1C mütəxəssisinin bilməli olduğu sorğuların optimallaşdırılmasının əsas aspektlərini əhatə etdi.

Sorğunun inkişafı və optimallaşdırılması üzrə çox faydalı pulsuz video kursu, Mən şiddətlə tövsiyə edirəm yeni başlayanlar və daha çoxu üçün!



Əlaqədar nəşrlər