Sol və sağ 1c sorğularında birləşir. Sorğuda TYPE

Sorğu dili tərtibatçılar üçün 1C 8.3-ün əsas mexanizmlərindən biridir. Sorğulardan istifadə edərək verilənlər bazasında saxlanılan istənilən məlumatı tez bir zamanda əldə edə bilərsiniz. Onun sintaksisi SQL-ə çox bənzəyir, lakin bəzi fərqlər var.

1C 8.3 (8.2) sorğu dilinin SQL-dən əsas üstünlükləri:

  • istinad sahələrinə istinadın ləğvi (obyekt təfərrüatlarına bir və ya bir neçə nöqtənin istinad edilməsi);
  • nəticələrlə işləmək çox rahatdır;
  • virtual masalar yaratmaq imkanı;
  • sorğu həm ingilis, həm də rus dillərində yazıla bilər;
  • kilidlərin qarşısını almaq üçün məlumatları bloklamaq imkanı.

1C-də sorğu dilinin çatışmazlıqları:

  • SQL-dən fərqli olaraq, 1C sorğularında məlumatların dəyişdirilməsinə icazə verilmir;
  • saxlanılan prosedurların olmaması;
  • sətri nömrəyə çevirməyin mümkünsüzlüyü.

Gəlin 1C sorğu dilinin əsas konstruksiyalarına dair mini dərsliyimizə nəzər salaq.

1C-də sorğular yalnız məlumat almağa imkan verdiyinə görə istənilən sorğu “SEÇ” sözü ilə başlamalıdır. Bu əmrdən sonra verilənlərin əldə edilməli olduğu sahələr göstərilir. Əgər “*” göstərsəniz, bütün mövcud sahələr seçiləcək. Məlumatların seçiləcəyi yer (sənədlər, registrlər, kataloqlar və s.) “FROM” sözündən sonra göstərilir.

Aşağıda müzakirə edilən nümunədə bütün nomenklaturanın adları “Nomenklatura” kataloqundan seçilir. “NECƏ” sözündən sonra cədvəllər və sahələr üçün ləqəblər (adlar) göstərilir.

SEÇİN
Nomenklatura Adı AS Nomenklaturanın adı
FROM
Kataloq.Nomenklatura AS Nomenklatura

"SEÇ" əmrinin yanında müəyyən edə bilərsiniz açar sözlər:

  • MÜXTƏLİF. Sorğu yalnız ən azı bir sahədə (dublikatlar olmadan) fərqlənən sətirləri seçəcək.
  • İLK n, Harada n– nəticənin əvvəlindən seçilməli olan sətirlərin sayı. Çox vaxt bu konstruksiya çeşidləmə (SİPARİŞ BY) ilə birlikdə istifadə olunur. Məsələn, tarixə görə yeni olan müəyyən sayda sənədləri seçmək lazım olduqda.
  • İCAZƏ VERİLİR. Bu dizayn verilənlər bazasından yalnız cari istifadəçi üçün mövcud olan qeydləri seçməyə imkan verir. Bu açar sözün istifadəsinə əsasən, istifadəçi girişi olmayan qeydləri sorğulamağa cəhd edərkən xəta mesajı alacaq.

Bu açar sözlər birlikdə və ya ayrıca istifadə edilə bilər.

DƏYİŞİM ÜÇÜN

Bu təklif qarşılıqlı münaqişələrin qarşısını almaq üçün məlumatları bloklayır. Tranzaksiya bitənə qədər kilidlənmiş məlumatlar başqa bir əlaqədən oxunmayacaq. Bu bənddə siz kilidlənməsi lazım olan xüsusi cədvəlləri təyin edə bilərsiniz. Əks halda hamı bloklanacaq. Dizayn yalnız avtomatik kilidləmə rejiminə aiddir.

Çox vaxt qalıqlar alınarkən “DEĞİŞİKLİK ÜÇÜN” bəndindən istifadə olunur. Axı, bir neçə istifadəçi eyni vaxtda proqramda işlədikdə, biri balans alarkən, digəri onları dəyişə bilər. Bu halda, yaranan qalıq artıq düzgün olmayacaq. Bu təkliflə məlumatları bloklasanız, birinci işçi düzgün balansı alana və onunla bütün lazımi manipulyasiyaları yerinə yetirənə qədər ikinci işçi gözləmək məcburiyyətində qalacaq.

SEÇİN
Qarşılıqlı hesablaşmalar.İşçi,
Qarşılıqlı hesablaşmalar Qarşılıqlı hesablaşmaların məbləği Balans
FROM
Yığımların reyestri İşçilərlə qarşılıqlı hesablaşmalar Balanslar AS Qarşılıqlı hesablaşmalar
DƏYİŞİM ÜÇÜN

HARADA

Yüklənmiş məlumatlara bir növ seçim tətbiq etmək üçün dizayn lazımdır. Registrlərdən məlumatların alınmasının bəzi hallarda virtual cədvəllərin parametrlərində seçim şərtlərini müəyyən etmək daha məqsədəuyğundur. "HARADA" istifadə edərkən əvvəlcə bütün qeydlər alınır və yalnız bundan sonra seçim tətbiq edilir ki, bu da sorğunu əhəmiyyətli dərəcədə yavaşlatır.

Aşağıda müəyyən bir vəzifə üçün əlaqə adamlarının əldə edilməsi sorğusunun nümunəsi verilmişdir. Seçim parametrinin formatı var: &ParameterName (parametr adı ixtiyaridir).

SEÇİM (İŞİ)

Dizayn birbaşa sorğunun mətnində şərtləri təyin etməyə imkan verir.

Aşağıdakı nümunədə "Əlavə Sahə" sənədin yerləşdirilib-yerləşdirilməməsindən asılı olaraq mətndən ibarət olacaq:

SEÇİN
QəbulT&U.Link,
SEÇİM
QəbuluT&U.Yerinə ETMƏNDƏ
SONRA "Sənəd qəbul olundu!"
YAXŞI “Sənəd yerləşdirilməyib...”
Əlavə Sahə KİMİ SON EDİN
FROM
Sənəd.Malların və xidmətlərin qəbulu NECƏ Qəbz T&C

QOŞULUN

Müəyyən bir əlaqə şərtinə əsaslanan iki cədvəli əlaqələndirir.

SOL/SAĞ BAĞLANTI

LEFT birləşmənin mahiyyəti ondan ibarətdir ki, birinci göstərilən cədvəl bütövlükdə götürülür, ikincisi isə əlaqə şərtinə uyğun olaraq onunla əlaqələndirilir. İkinci cədvəldə birinci cədvələ uyğun heç bir qeyd yoxdursa, onda NULL onların dəyərləri ilə əvəz olunur. Sadəcə olaraq, əsas cədvəl ilk göstərilən cədvəldir və ikinci cədvəlin məlumatları (əgər varsa) artıq onun məlumatları ilə əvəz edilmişdir.

Məsələn, “Malların və xidmətlərin qəbulu” sənədlərindən mal maddələri və “Maşınların qiymətləri” məlumat reyestrindən qiymətlər əldə etmək lazımdır. IN bu halda, hər hansı mövqe üçün qiymət tapılmadıqda, əvəzinə NULL əvəz edin. Sənəddəki bütün əşyalar qiymətinin olub-olmamasından asılı olmayaraq seçiləcək.

SEÇİN
Qəbz və U.Nomenklatura,
Qiymətlər.Qiymət
FROM
Sənəd.Malların və xidmətlərin qəbulu.Malların NECƏ qəbulu və spesifikasiyalar
DAXİLİ QOŞULUN Qeydiyyatdan keçinMəlumat.QiymətlərNomenklatura.SliceSon AS Qiymətlər
Proqram Qəbzi&U.Nomenklatura = Qiymətlər.Nomenklatura

DOĞRUDA hər şey tam tərsinədir.

TAM ƏLAQƏ

Bu əlaqə növü əvvəlkilərdən onunla fərqlənir ki, nəticədə həm birinci cədvəlin, həm də ikincinin bütün qeydləri geri qaytarılacaq. Göstərilən keçid şərtinə əsasən birinci və ya ikinci cədvəldə heç bir qeyd tapılmazsa, əvəzinə NULL qaytarılacaq.

Əvvəlki nümunədə tam əlaqədən istifadə edərkən, "Malların və xidmətlərin qəbulu" sənədindəki bütün maddələr və "Malların qiymətləri" reyestrindən ən son qiymətlər seçiləcəkdir. Həm birinci, həm də ikinci cədvəllərdə tapılmayan qeydlərin dəyərləri NULL-ə bərabər olacaqdır.

DAXİLİ QOŞULUN

INNER JOIN ilə FULL JOIN arasındakı fərq ondadır ki, ən azı cədvəllərdən birində qeyd tapılmasa, sorğu onu ümumiyyətlə göstərməyəcək. Nəticədə, əvvəlki nümunədə “TAM”ı “DAXİLİ” ilə əvəz etsək, “Malların və xidmətlərin qəbulu” sənədindən yalnız “Malların qiymətləri” məlumat reyestrində qeydlər olan bənd bəndləri seçiləcək.

GROUP BY

1C sorğularında qruplaşdırma müəyyən bir ümumi xüsusiyyətə (sahələrin qruplaşdırılması) uyğun olaraq cədvəl sətirlərini (qruplaşma sahələrini) yığışdırmağa imkan verir. Qruplaşdırma sahələri yalnız ümumi funksiyalardan istifadə etməklə göstərilə bilər.

Aşağıdakı sorğunun nəticəsi maksimum qiymətləri olan məhsul növlərinin siyahısı olacaq.

SEÇİN
,
MAX(Qiymət.Qiymət) Qiymət kimi
FROM

GROUP BY
Qiymətlər.Nomenklatura.Nomenklaturanın növü

NƏTİCƏLƏR

Qruplaşdırmadan fərqli olaraq, cəmlərdən istifadə edərkən bütün qeydlər göstərilir və onlara ümumi sətirlər əlavə edilir. Qruplaşdırma yalnız ümumiləşdirilmiş qeydləri göstərir.

Nəticələr bütün cədvəl üzrə (“GENERAL” açar sözündən istifadə etməklə), bir neçə sahə üçün, iyerarxik strukturu olan sahələr üçün (“HİERARXİYA”, “YALNIZ HİERARXİYA” açar sözləri) ümumiləşdirilə bilər. Nəticələri ümumiləşdirərkən ümumi funksiyalardan istifadə etmək lazım deyil.

Qruplaşdırmadan istifadə edərək yuxarıdakı nümunəyə bənzər bir nümunəyə baxaq. Bu halda, sorğunun nəticəsi yalnız qruplaşdırılmış sahələri deyil, həm də ətraflı qeydləri qaytaracaqdır.

SEÇİN
Qiymətlər.Nomenklatura.Nomenklaturanın Növü AS Nomenklaturanın Növü,
Qiymətlər.Qiymət kimi
FROM
Məlumat reyestri Nomenklatura qiymətləri Ən son AS qiymətlərinin şəkli
NƏTİCƏLƏR
MAKSİMUM(Qiymət)
BY
TipNomenklatura

OLMAQ

Bu operator WHERE operatoruna bənzəyir, lakin yalnız ümumi funksiyalar üçün istifadə olunur. Bu operatorun istifadə etdiyi sahələr istisna olmaqla, qalan sahələr qruplaşdırılmalıdır. WHERE operatoru ümumi funksiyalar üçün uyğun deyil.

Aşağıdakı misalda, maddə növünə görə qruplaşdırılaraq, 1000-dən çox olan bir maddənin maksimum qiymətləri seçilir.

SEÇİN

MAX(Qiymət.Qiymət) Qiymət kimi
FROM
Məlumat reyestri Nomenklatura qiymətləri Ən son AS qiymətlərinin şəkli
GROUP BY
Qiymətlər.Nomenklatura.Nomenklaturanın növü
OLMAQ
MAKSİMUM(Qiymətlər.Qiymət) > 1000

SORTLAMA

ORDER BY operatoru sorğunun nəticəsini çeşidləyir. Qeydlərin ardıcıl ardıcıllıqla göstərilməsini təmin etmək üçün AUTO ORDER istifadə olunur. İbtidai növlər adi qaydalara uyğun olaraq sıralanır. İstinad növləri GUID-ə görə sıralanır.

Ada görə sıralanmış işçilərin siyahısını əldə etməyə bir nümunə:

SEÇİN
İşçilər.Adı AS Adı
FROM
Directory.Employees NECƏ İşçilər
SORTLAMA
ad
AVTO SİFARİŞ

Digər 1C sorğu dili konstruksiyaları

  • BİRLƏŞİN– iki sorğunun nəticələri birində.
  • HƏR ŞEYİ QARŞI VERİN– COMBINE-ə bənzəyir, lakin eyni cərgələri qruplaşdırmadan.
  • BOŞ MASA– bəzən sorğulara qoşulduqda boş iç-içə cədvəli təyin etmək üçün istifadə olunur.
  • YER– mürəkkəb 1C sorğularını optimallaşdırmaq üçün müvəqqəti cədvəl yaradır. Belə sorğulara toplu sorğular deyilir.

Sorğu Dili Xüsusiyyətləri

  • SUBSTRING sətri müəyyən edilmiş mövqedən müəyyən edilmiş simvol sayına qədər kəsir.
  • İL...İKİNCİədədi növün seçilmiş dəyərini əldə etməyə imkan verir. Giriş parametri tarixdir.
  • DÖVRÜN BAŞLIĞI və DÖVRÜN SONU tarixlərlə işləyərkən istifadə olunur. Əlavə parametr kimi dövrün növü (GÜN, AY, İL və s.) göstərilir.
  • ADDKDATE tarixdən müəyyən növdə müəyyən edilmiş vaxtı əlavə etməyə və ya çıxarmağa imkan verir (İKİNCİ, DƏQİQƏ, GÜN və s.).
  • FƏRQLİ TARİXçıxış dəyərinin növünü (GÜN, İL, AY və s.) göstərməklə iki tarix arasındakı fərqi müəyyən edir.
  • ISNULL itkin dəyəri göstərilən ifadə ilə əvəz edir.
  • NÜMAYƏNDƏLİK VƏ NÜMAYƏNDƏ LİNKLƏR göstərilən sahənin simli təsvirini əldə edin. Müvafiq olaraq istənilən dəyərlərə və yalnız istinad dəyərlərinə tətbiq edin.
  • TİP, TİP QİYMƏTLƏRİ giriş parametrinin növünü təyin etmək üçün istifadə olunur.
  • LINK atribut dəyər növü üçün məntiqi müqayisə operatorudur.
  • EXPRESS dəyəri istədiyiniz tipə çevirmək üçün istifadə olunur.
  • TARİX VAXT-dən "Tarix" tipli qiymət alır ədədi dəyərlər(il, ay, gün, saat, dəqiqə, saniyə).
  • MƏNA 1C sorğusunda əvvəlcədən təyin edilmiş dəyərləri - kataloqlar, siyahılar, xüsusiyyət növləri üçün planları göstərmək üçün istifadə olunur. İstifadə nümunəsi: " Harada Hüquqi Fərdi = Dəyər (Saya. Hüquqi Fərdi. Fərdi)«.

Sorğu Qurucusu

1C ilə sorğu yaratmaq üçün çox rahat daxili mexanizm var - sorğu dizayneri. O, aşağıdakı əsas nişanları ehtiva edir:

  • "Cədvəllər və Sahələr" - seçilməli olan sahələri və onların mənbələrini ehtiva edir.
  • "Əlaqələr" - BAĞLANTI strukturu üçün şərtləri təsvir edir.
  • “Qruplaşdırma” — qruplaşdırma strukturlarının və onlara əsaslanan ümumi sahələrin təsvirini ehtiva edir.
  • "Şərtlər" - sorğuda məlumatların seçilməsinə cavabdehdir.
  • "Qabaqcıl" - əlavə sorğu parametrləri, məsələn, "SEÇ" əmri üçün açar sözlər və s.
  • “Qoşulmalar/ləqəblər” - cədvəllərin qoşulma imkanları göstərilir və ləqəblər göstərilir (“NECƏ” konstruksiya).
  • “Sifariş” sorğuların nəticəsinin çeşidlənməsinə cavabdehdir.
  • "Cəmi" - "Qruplaşdırma" tabına bənzəyir, lakin "CƏMİ" konstruksiyası üçün istifadə olunur.

Sorğunun mətninə aşağı sol küncdəki “Sorğu” düyməsini sıxmaqla baxmaq olar. Bu formada əl ilə düzəldilə və ya kopyalana bilər.


İstək Konsolu

Müəssisə rejimində sorğunun nəticəsini tez görmək və ya mürəkkəb sorğuları aradan qaldırmaq üçün istifadə edin. O, sorğunun mətnini ehtiva edir, parametrləri təyin edir və nəticəni göstərir.

Siz sorğu konsolunu ITS diskinə və ya vasitəsilə yükləyə bilərsiniz.

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şlanğıc proqramçılar üçün sorğu dili 1C 8.3: əlaqələr

Sorğulara qoşulur

Qoşulma relational verilənlər bazası idarəetmə sistemləri tərəfindən həyata keçirilən ən vacib və zəruri əməliyyatlardan biridir.

Əlaqələr üçün istifadə olunur uyğun simlər bir cədvəldən digər cədvəlin sətirlərinə.

Əlaqələrə ehtiyacı anlamaq üçün aşağıdakı problemi həll edək.

Bizim verilənlər bazamızda bir kataloq var Müştərilər:

kataloq Rənglər:

Və istinad kitabı Assosiasiyalar:

Bizim vəzifəmiz rəng əsasında müştərilərin sevimli assosiasiyalarını əldə etməkdir.

Beləliklə, Nataşa üçün ot onun sevimli birliyi olacaq, çünki onun sevimli rəngi yaşıldır. Və Peter üçün - günəş. Siz dərsin sınaq versiyasını oxuyursunuz, tam dərslər mövcuddur.

Andrey üçün ümumiyyətlə uyğun bir birləşmə yoxdur, çünki onun sevimli rəngi qırmızıdır və verilənlər bazasında qırmızı birləşmələr yoxdur.

Problemi tədricən həll edəcəyik.

Əvvəlcə biz bütün müştərilərdən və onların sevimli rənglərini soruşacağıq:

Sonra bütün assosiasiyaları və onların rənglərini tələb edin:

Bu sorğunu yerinə yetirməyə çalışsaq, xəta alacağıq:

Səhv səbəbi sahənin olmasıdır ad hər iki cədvəldə eyni anda mövcuddur ( MüştərilərAssosiasiyalar) və sistem sadəcə olaraq hansı cədvəldən demək istədiyi sahəni bilmir.

Birdən çox cədvəldən nümunə götürərkən bu cür qeyri-müəyyənlikləri aradan qaldırmaq üçün qeyd etmək adətdir tam sahə adları. Tam sahə adına tam cədvəl adı daxildir (məsələn, Directory.Clients) və sahənin özü (məsələn, ad).

Beləliklə, sahənin tam adıdır ad masadan Müştərilər olacaq Directory.Clients.Name.

Və sahənin tam adı ad masadan Assosiasiyalar olacaq Kataloq.Assosiasiyalar.Adı.

Çarpaz əlaqə

Əvvəlki sorğunu tam sahə adları ilə yenidən yazaq:

Sadəcə istehsal etdik çarpaz əlaqə iki masa. Nəticənin necə formalaşdığına diqqət yetirin:

Daxili birləşmə

Aydındır ki, iki cədvəlin çarpaz birləşməsinin nəticəsi problemimizin həlli deyil. Bizə xaçdan bütün qeydlərə ehtiyacımız yoxdur, ancaq sahələrində olanlar lazımdır Sevimli rəngRəng eyni mənaya malikdir:

Bu qeydləri əldə etmək üçün əvvəlki sorğuya bölmə əlavə edin HARADA:

Bizə lazım olan budur - problemi həll etdik!

Son sorğuda əlavə şərtlə çarpaz birləşmədən istifadə etdik (bölmədə HARADA). Siz dərsin sınaq versiyasını oxuyursunuz, tam dərslər mövcuddur. Belə bir əlaqə daxili adlanır.

Eyni şeyi yazmağın başqa bir yolu var daxili birləşmə:

Bunu və əvvəlki sorğunu müqayisə edin. Platforma nöqteyi-nəzərindən tamamilə eynidirlər, sadəcə fərqli sintaksisə malikdirlər. Həm bu, həm də əvvəlki sorğular daxili cədvəl birləşməsini ehtiva edir Müştərilər masa ilə Assosiasiyalar sahələrə görə Sevimli rəngRəng müvafiq olaraq.

Sol əlaqə

Nəzərə alın ki, daxili birləşmənin nəticəsinə Andrey daxil deyildi. Və hamısı ona görə ki, onun sevimli rəngi qırmızıdır və verilənlər bazamızda heç bir qırmızı birləşmə yoxdur.

Məlum oldu ki, qırmızı rəngi ilə Andrey üçün assosiasiya cədvəlindən sadəcə uyğunluq yox idi.

Gəlin sorğunu yenidən yazaq ki, nəticəyə birinci cədvəldəki qeydlər daxil olsun ki, onlar üçün ikinci cədvəldən heç bir cüt tapılmadı (bu halda Andrey):

Bu əlaqə adlanır sol qoşul.

Rsol birləşmə nəticəsi təmsil edir: hər şey daxili birləşmədən qeydlər PLUS hər şey ilk cədvəldən qeydlər, daxili daxil deyil

Düzgün əlaqə

Ancaq yenidən daxili birləşməyə qayıdaq:

Qeyd edək ki, daxili birləşmənin nəticəsi assosiasiyanı ehtiva etmir Ağ qar, çünki sevimli rəngi ağ olan bir müştəri yox idi.

Gəlin sorğunu yenidən yazaq ki, nəticəyə birinci cədvəldən heç bir cüt tapılmayan ikinci cədvəldəki qeydlər daxil olsun (bu halda ağ qar):

Bu əlaqə adlanır düzgün əlaqə.

Doğru birləşmənin nəticəsi edir: PLUS hər şey ikinci cədvəldən qeydlər, daxili daxil deyiləlaqə (heç bir cüt tapılmadı).

Tam əlaqə

Bəs daxili birləşməyə əlavə olaraq sorğu nəticəsini daxil etmək lazımdırsa nə edək Andreyqar eyni vaxtda?

Bunu etmək üçün sol və sağ birləşmələrin nəticələrini birləşdirməlisiniz. Bu əlaqə növü artıq icad edilmişdir və adlanır tam əlaqə:

Tam əlaqənin nəticəsi təmsil edir: daxili birləşmədən bütün qeydlər PLUS birinci cədvəldən daxili cədvələ daxil olmayan bütün qeydlərəlaqə (heç bir cüt tapılmadı) PLUS daxili cədvələ daxil olmayan ikinci cədvəldəki bütün qeydlərəlaqə (heç bir cüt tapılmadı).

Cədvəl ləqəbləri

Razılaşın ki, bu dərsdə yazdığımız bütün sorğular olduqca çətin görünür. Bu da ona görədir ki, biz məcbur olub işarə edirik tam adlar qeyri-müəyyənliyin qarşısını almaq üçün sahələr.

Tam cədvəl adını qısaltmaq üçün (məsələn, Directory.Clients) ləqəblərdən istifadə etməyə icazə verilir (həmçinin sahələrin özləri üçün).

Son sorğunu yenidən yazaq ki, yerinə tam sahə adları yaradanda Directory.Clients təxəllüsdən istifadə edə bilərsiniz TO, və əvəzinə Directory.Assosiasiyalar- təxəllüs A:

Sorğunun nəticəsini daha da aydınlaşdırmaq üçün əvvəlki dərslərdən birində baxdığımız sahələrə ləqəblər əlavə edək:

NULL ilə idarə olunur

Son sorğunun nəticələrinə (həmçinin bu dərsdəki bir çox əvvəlkilər kimi) daha yaxından nəzər salın.

Sahə dəyərləri hansılardır? AssosiasiyaOnun Rəngi birinci sətir üçün? Sahələr haqqında nə deyə bilərsiniz? MüştəriOnun Rəngi son sətir üçün?

Onlar bərabərdirlər SIFIR, bu, artıq bildiyimiz kimi, heç bir mənanın olmaması deməkdir:

Və o vaxtdan SIFIR dəyərin olmaması deməkdir, onda onunla hər hansı əməliyyatı yerinə yetirmək cəhdi (müqayisə, əlavə...) müəyyən edilməmiş verilənlər bazası davranışına, gözlənilməz xətaya səbəb olacaq.

Buna görə də dəyərlərin işlənməsi məcburi hesab olunur SIFIR nə vaxt yarana bilsələr.

Emal dedikdə nəzərdə tutduğumuz odur ki, biz sorğumuzda deməliyik ki, əgər sahələrdən biri bərabərdirsə SIFIR, onda bu sahəyə başqa bir dəyər əvəz edilməlidir.

Bu halda, sahələr üçün MüştəriAssosiasiya aşkar edildiyi halda SIFIR boş "" sətrini əvəz edəcəyik.

Və burada tarlalar var Onun RəngiOnun Rəngi kataloq elementlərinə keçidlərdir Rənglər, buna görə də, yalnız göstərilən növlərin istinadları olan dəyərlər onlara əvəz edilə bilər. Hər bir istinad növü (məsələn, Kataloq və ya Sənəd) əvvəlcədən təyin edilmiş elementə malikdir EmptyLink. Sorğuda onun dəyərini göstərmək üçün funksiyadan istifadə edəcəyik MƏNA.

Sahədə nə olduğunu müəyyən etmək üçün SIFIRƏvvəlki dərslərdən bizə tanış olan funksiyadan istifadə edəcəyik ISNULL:

SELECT ISNULL( K. Adı, "" ) Müştəri AS, ISNULL( K. Sevimli Rəng, VALUE(Directory. Rənglər. EmptyLink) ) AS Onun Rəngi, ISNULL( A. Adı, "" ) AS Assosiasiya, ISNULL( A. Rəng, VALUE (Directory. Colors. EmptyLink) ) AS HerColor Kataloqdan. Müştərilər BAĞLANTI qovluğunu NECƏ TAMAMLAYIR. Assosiasiyalar AS A BY K. SevimliRəng = A. Rəng

Görünüşdə (sorğu konsolundan) nəticə dəyişməyib. Biz hələ də boş sahələr görürük. Ancaq bu, yalnız simli nümayəndəliklərə sahib olmasıdır SIFIR və bütün növ boş sahələr eyni və boş sətirə bərabərdir.

Əslində bu boş sahələr artıq yoxdur SIFIR(dəyər yoxdur) , İndi onların artıq işləyə biləcəyiniz (əməliyyatları yerinə yetirə biləcəyiniz) dəyərləri var.

Unutmayın, boş dəyər və heç bir dəyər bir-birindən çox fərqli şeylərdir.

İkidən çox masaya qoşulma

İstədiyiniz qədər cədvələ ardıcıl olaraq qoşula bilərsiniz.

Tutaq ki, aşağıdakı problemi həll etməliyik. Siz dərsin sınaq versiyasını oxuyursunuz, tam dərslər mövcuddur. Müştərilərin və onların sevimli assosiasiyalarının və sevimli məhsullarının bütün mümkün variantlarını onların sevimli rənginə əsasən çıxarın.

Bunun üçün cədvəli ardıcıl olaraq rəngə görə birləşdirək Müştərilər masa ilə Assosiasiyalar və sonra (nəticəni) cədvəllə Qida:

Testdən keçin

Testə başlayın

1. Əlaqələr üçün istifadə olunur

; İç-içə sorğular (inkişaf mərhələsindədir).

Tapşırıq №1: bütün yerləşdirilən sənədləri seçmək üçün sorğudan istifadə edin Malların və xidmətlərin satışı,

İzahat: konfiqurasiyalar Mühasibat uçotu 2.0 / 3.0 Tətbiq verilmiş hesab-fakturaya keçid saxlamır. Bu sənədlər arasında əlaqə tərsdir: fakturada (detallarda Sənəd bazası) aid olduğu icraya istinad saxlanılır. Beləliklə, hansı tətbiqlərdə fakturaların olmadığını başa düşmək üçün sorğuda iki cədvəldən istifadə etməlisiniz: Malların və xidmətlərin satışıFaktura Verildi.

Tapşırıq №2: deyək ki, kataloqun verilənlər bazasında Qarşı tərəflərin müqavilələriəlavə məlumatlar yaradılmışdır Təxirə salınma(saxlama yerinin qeydiyyatı əlavə informasiya). 0-dan 10 günə qədər gecikmə ilə göstərilən qarşı tərəfin bütün müqavilələrini seçmək üçün sorğudan istifadə edin.

İzahat: bu tapşırıqda bir şərt olmasaydı, iki cədvəldən istifadə etmədən etmək olardı: sıfır möhlətlə müqavilələrin seçilməsi. Məsələ burasındadır ki, reyestrdə əlavə informasiyaƏlavə məlumat üçün boş dəyərlər saxlanmır, buna görə orada sıfır təxirə salınma üçün heç bir giriş olmayacaq. Buna görə də bu reyestri kataloqa əlavə etməli olacaqsınız Qarşı tərəflərin müqavilələri, müqavilələrdən hər hansı biri üçün təxirə salınma ilə heç bir qeyd yoxdursa, o zaman sıfırdır.

Yeni tablar: Əlaqələr

Yeni mexanizmlər: 1C sorğusunda sıfırın yoxlanılması.

3 nömrəli dərsin nəzəri hissəsi

1C sorğusu yalnız bir cədvəldən istifadə edirsə, məlumat yalnız ondan alınır. Ancaq bir neçə cədvəldən məlumat seçmək lazımdırsa, bu cədvəllər arasında əlaqələr qurmalısınız. Əlaqələr, bir verilənlər bazası cədvəlinin sətirlərini başqa bir cədvəlin sətirləri ilə müqayisə etmək və beləliklə, sorğu formalaşdırarkən bütün sorğu cədvəllərindən lazımi məlumatları ehtiva edən yekun cədvəl əldə etmək üçün lazımdır.

Hər bir xüsusi əlaqə iki cədvəl arasında konfiqurasiya edilir, onlardan biri adlanır Sol, digər Sağ. Üç növ əlaqə var:

  • DAXİLİ QOŞULUN- sorğunun nəticəsində yalnız əlaqə şərti yerinə yetirildikdə, sağdakı cədvəldən qeyd yalnız əlaqə şərti yerinə yetirildikdə sorğunun nəticəsində sol cədvəldən qeyd görünəcək;
  • SOL ƏLAQƏ- istənilən halda sol cədvəldən olan qeyd sorğunun nəticəsinə daxil ediləcək, sağdakı cədvəldən qeyd yalnız əlaqə şərti yerinə yetirildikdə seçimə daxil ediləcək. Solun analoqudur SAĞ QOŞULUN sağ cədvəldəki məlumatlar istənilən halda nəticəyə daxil edilir, sol cədvəldəki məlumatlar yalnız şərt yerinə yetirildikdə. Adətən sorğu yazarkən ondan istifadə olunur Sol əlaqə, əgər düzgün olandan istifadə etsəniz, növbəti dəfə sorğunu açdığınız zaman sorğu tərtibatçısı cədvəlləri dəyişdirərək onu sola çevirəcək;
  • TAM ƏLAQƏ- istənilən halda ilk olaraq sorğunun nəticəsində sol cədvəldən qeyd görünəcək, sonra yalnız əlaqə şərti yerinə yetirildikdə, hər bir halda ilk olaraq sorğunun nəticəsində sağdakı cədvəldən qeyd, sonra yalnız əlaqə şərti olduqda görünəcək. qarşılanır. Bu halda, yaranan dublikat sətirlər nümunədən çıxarılır.

Təcrübəsiz 1C proqramçısı üçün nəzəri olaraq sorğu cədvəllərinə qoşulmağı başa düşmək olduqca çətindir, lakin nümunələri öyrənərkən bütün aydın olmayan məqamlar daha aydın olacaq.

Sorğu Dizaynerində Əlaqələr sekmesi

Sorğu dizaynerində nişana keçin Əlaqələr. Bu, bütün müxtəlif cədvəllər cütləri üçün lazımi sayda əlaqənin yaradıldığı bir cədvəldir. Cədvəlin yuxarısında yerləşən düymələrdən istifadə edərək əlaqələri əlavə edə, silə, köçürə və dəyişə bilərsiniz (hər birini ətraflı təhlil etməyəcəyik).

Yeni əlaqə əlavə etdikdən sonra cədvəlin bütün sütunlarını doldurmalısınız. Bağlantı cədvəlinin hər bir sütununa baxaq:

  • Cədvəl 1. Bu sütunda sol rabitə cədvəli seçilir. Siz yalnız tabda seçilmiş cədvəllərdən istifadə edə bilərsiniz Cədvəllər və sahələr;
  • Hamısı. Sol cədvəl üçün bütün məlumatları seçmək lazımdırsa, bu sütundakı bayraq yerləşdirilir (üçün Sol və ya Taməlaqələr);
  • Cədvəl 2. Bu sütunda düzgün əlaqə cədvəli seçilir;
  • Hamısı. Bu sütundakı bayraq, düzgün cədvəl üçün bütün məlumatları seçmək lazımdırsa yerləşdirilir (üçün Sağ və ya Taməlaqələr);
  • pulsuz. Bağlantı vəziyyətinin əl ilə redaktə rejiminə keçə biləcəyiniz bayraq;
  • Bağlantı vəziyyəti.-də müzakirə edilən şərtlərə bənzər sorğu dilində şərt. Bu, həmişə iki dəyərdən birini qaytarmalı olan bir ifadədir: Doğru və ya Yalan. Tipik olaraq, bir əlaqə şərti üç hissədən ibarətdir:
    • Sol tərəf. Adətən sol cədvəldəki sahədir, lakin o, həm də sağ cədvəldəki sahə və ya parametr ola bilər (yalnız xüsusi vəziyyətin redaktə rejimində);
    • Müqayisə operatoru. Defolt olaraq, "=", "<>», «<«, «>», «>=», «<=». Но в произвольном режиме редактирования можно использовать и некоторые другие, например «Между»;
    • Sağ hissə. Adətən sağ cədvəldəki sahədir, lakin o, həm də sol cədvəldəki sahə və ya parametr ola bilər (yalnız fərdi vəziyyətin redaktəsi rejimində);

Doldurma və redaktə etmək Rabitə şərtləri, son dərsdə müzakirə olunan müntəzəm şərtin redaktəsinə bənzər, istisna olmaqla, şərtin sağ hissəsində parametr deyil, sağ cədvəldə bir sahə göstərilmişdir. Pulsuz rejimdə pulsuz ifadə redaktoru da mövcuddur.

3 nömrəli dərsin praktiki hissəsi

Dərsin əvvəlində verilən problemlərin həllinə baxaq.

Tapşırıq №1

Sorğu ilə göndərilən bütün sənədləri seçin Malların və xidmətlərin satışı, hesab-faktura yaradılmayan göstərilən müddət üçün.

  • Gəlin yeni sorğu yaradaq;
  • Cədvəlləri seçək Malların və xidmətlərin satışıFaktura Verildi ipdən Sənədlər;
  • Masadan Malların və xidmətlərin satışı sahə seçin Link;
  • Gəlin nişana keçək Şərtlər;
  • Fəsildə Sahələr, gəlin mövzunu açaq Malların və xidmətlərin satışı"+" düyməsini istifadə edərək;
  • Gəlin rekvizitləri tapaq Tarix və onu şərtlər bölməsinə sürükləyin, müqayisə operatorunu seçin Arasında və məsələn, dövrün əvvəli və sonu üçün parametrləri göstərin Dövrün başlanğıcıDövrün Sonu;
  • Bölmədən Sahələr rekvizitləri sürükləyək keçirilmişdir, şərti ilə sıraya bir bayraq qoyun pulsuz və “= &Passed” şərtinin əlavə hissəsini silin;
  • Gəlin nişana keçək Rabitə;
  • "Əlavə et" düyməsini istifadə edərək yeni bir əlaqə yaradaq;
  • Sahədə Cədvəl 1 masa seçin Malların və xidmətlərin satışı(bu sol masa olacaq) ;
  • Problemi düzgün həll etmək üçün bütün tətbiqləri əldə etməliyik, onlara hesab-fakturalar əlavə etməliyik və faktura tapılmadıqda, sorğunun nəticəsi olaraq icranı göstərməliyik. Gəlin bu tapşırığı iki alt tapşırığa ayıraq:
    • Gəlin bütün satışları seçək və əlaqədən istifadə edərək onların fakturasını tapmağa çalışaq;
    • Şərtdən istifadə edərək, biz yalnız faktura olmayan sətirləri seçəcəyik;
  • Əvvəlki bənddən belə çıxır ki, istifadə etməliyik Sol əlaqə, bütün tətbiqləri seçmək üçün. Ona görə də sütuna bayraq qoyaq Hamısı
  • Sahədə cədvəl 2 masa seçin Faktura Verildi(bu düzgün masa olacaq);
  • İcraya keçid faktura təfərrüatlarında saxlanıldığından D Sənəd bazası,əlaqə şəraitində biz seçirik:
    • Meydançanın sol tərəfində Malların və xidmətlərin satışı. Link;
    • Sahənin sağ tərəfində: InvoiceInvoiceIssued.DocumentBase.
  • Bağlantının qurulması tamamlandı;

Sol birləşmə ilə, əgər sol cədvəlin bir sırası üçün əlaqə şərtlərinə cavab verən sağ cədvəlin bir sırası yoxdursa, sol cədvəlin verilmiş cərgəsi üçün sağ sağ cədvəlin bütün sahələri dəyərə malikdir. SIFIR. Gəlin bundan istifadə edək ki, sol cədvəlin yalnız faktura olmayan sətirlərini seçin;

1C sorğu dilində sahənin dəyərinin olub olmadığını yoxlamağa imkan verən xüsusi məntiqi operator var SIFIR, onun sintaksisi <Поле>NULL IS. Bir dəyər qaytarır Doğru sahənin dəyəri varsa SIFIRYalan- əks halda.

Qeyd edək ki, sahənin dəyərini ilə yoxlayın SIFIR yalnız göstərilən funksiyadan, konstruksiyadan istifadə etməklə mümkündür <Поле>= NULL Bu yoxlama mümkün olmayacaq.

  • Gəlin nişana keçək Şərtlər;
  • Cədvəl sahələrindən birini şərtlər bölməsinə sürükləyin Faktura Verildi, məsələn, sahə Link;
  • Xəttdə bir bayraq qoyun pulsuz və operatoru sahədən sonra əlavə edin NULL IS, əvvəllər şərtin lazımsız hissəsini silməklə;

Sorğu = Yeni Sorğu; Request.SetParameter("StartPerid" , StartPerid); Request.SetParameter("Dövrün Sonu", Dövrün Sonu); Request.Text = "SEÇ | Malların və xidmətlərin satışı. Link | FROM | Sənəd. Malların və xidmətlərin satışı AS Malların və xidmətlərin satışı | SOL ƏLAQƏ SƏNƏDİ. Faktura Kimi Verilmiş Faktura Faktura Verilmiş | Proqram təminatı Malların və Xidmətlərin Satışı. Link = Verilmiş Faktura. Sənəd Əsası | HARADA | Malların və Xidmətlərin Satışı. ARASINDA və Dövrün əvvəli və & Dövrün Sonu | Malların və Xidmətlərin Satışı. Aparılan | VƏ Verilmiş Faktura. Arayış NULLDUR";

Tapşırıq № 2

  • Gəlin yeni sorğu yaradaq;
  • Sorğu dizaynerini işə salaq;
  • Nişanda Cədvəllər və sahələr Gəlin iki cədvəl seçək: Qarşı tərəflərin müqavilələri ipdən KataloqlarƏlavə informasiya ipdən Məlumat registrləri;
  • Masadan Qarşı tərəflərin müqavilələri sahə seçin Link;

Şərtə görə, sorğunun nəticəsi yalnız bir qarşı tərəfin müqavilələrini əhatə etməlidir ki, onların dəyəri parametrdən istifadə etməklə sorğuya ötürüləcək. Müqavilənin aid olduğu qarşı tərəf sahədə saxlanılır Sahibi kataloq Qarşı tərəflərin müqavilələri.

  • Gəlin nişana keçək Şərtlər. Masadan Qarşı tərəflərin müqavilələri sahəni şərtlər bölməsinə köçürün Sahibi. Şərtin sağ tərəfində ehtiyac duyduğumuz qarşı tərəfi köçürəcəyimiz parametrin adını təyin edəcəyik, gəlin zəng edək Qarşı tərəf;
  • Biz həmçinin 0-dan 10-a qədər gecikmə ilə müqavilələrin seçilməsi tapşırığını iki alt vəzifəyə böləcəyik:
    • Gəlin bütün müqavilələri seçək və bağlantılardan istifadə edərək onların təxirə salınma müddətini tapmağa çalışaq;
    • şərtdən istifadə edərək, yalnız bizə lazım olan möhlətləri olan müqavilələri seçəcəyik;
  • Gəlin müqavilələr və əlavə məlumatlar arasında əlaqə quraq. Gəlin Əlaqələr sekmesine keçək və yeni bir əlaqə əlavə edək;
  • Sahədə Cədvəl 1 masa seçin Qarşı tərəflərin müqavilələri(bu sol masa olacaq);
  • Bütün müqavilələrə ehtiyacımız olduğu üçün istifadə edəcəyik Sol əlaqə. Sol cədvələ aid olan All sütununa bayraq qoyaq;
  • Sahədə cədvəl 2 masa seçin Əlavə informasiya(bu düzgün masa olacaq);
  • Müqaviləyə istinad ölçüdə saxlandığından Bir obyekt məlumat reyestri Əlavə informasiya,əlaqə şəraitində biz seçirik:
    • Meydançanın sol tərəfində Qarşı tərəflərin müqavilələri;
    • Standart müqayisə operatorunu tərk edək "=";
    • Sahənin sağ tərəfində: Əlavə Məlumat.Obyekt.

Bütün əlavələri seçəcəyimiz bir keçid əlavə etdik. hər bir müqavilə haqqında məlumat. Ancaq bizə yalnız bir əlavə lazımdır. qarışdırmaq - Təxirə salınma, daha bir əlaqə əlavə etməliyik. Bu halda Təxirə salınmaəlavə əmlakdır. Əlavə xüsusiyyətlər növüdür Xarakteristika növlərinin planı Əlavə məlumat və məlumat. Reyestrdə Əlavə informasiyaəlavə dəyər xassələri ölçüdə saxlanılır Əmlak. Beləliklə, biz yalnız Təxirə salınma xüsusiyyətinə əlavə məlumatları məhdudlaşdıran əlaqə əlavə etməliyik.

  • Yeni bir əlaqə əlavə edək;
  • Sahədə Cədvəl 1 masa seçin Qarşı tərəflərin müqavilələri;
  • Bilmək vacibdir ki, əgər eyni cüt cədvəldə birdən çox əlaqəniz varsa, onlar üçün eyni birləşmə növündən istifadə etməlisiniz. Bizim vəziyyətimizdə belədir Sol əlaqə. Ona görə də sütuna bayraq qoyaq Hamısı, sol masa ilə əlaqədar;
  • Sahədə cədvəl 2 masa seçin Əlavə informasiya;
  • Əlaqə şəraitində sol cədvəl sahəsindən istifadə etməyə ehtiyac qalmayacaq, bunun əvəzinə ölçüyə şərt qoyacağıq Əmlak, onu əlavəyə bərabərləşdirir. əmlak Təxirə salınma, parametrdən istifadə edərək sorğuya ötürüləcək;
  • Bayrağı qoyaq pulsuz mənada Doğru və aşağıdakı şərt mətnini əl ilə yazın: “Əlavə Məlumat.Property = &PropertyDelay”;

  • Bağlantının qurulması tamamlandı;

İndi yalnız möhlət məbləğinə şərt qoymaq qalır. 0-dan 10-a qədər intervaldan istifadə etdiyimiz üçün Between müqayisə operatorundan istifadə etmək lazım gələcək. Sıfır geri çəkilmə əlavə məlumatda saxlanmadığından, bu halda qoşulduqda, bütün registr sahələri dəyəri qaytaracaq. SIFIR. Bir vəziyyətdə dəyəri əvəz etmək üçün SIFIR 0-a qədər sorğu dili funksiyasından istifadə edəcəyik ISNULL(<Выражение1>, <Выражение2>) . Funksiya qayıdır İfadə 1, bərabər deyilsə SIFIRİfadə 2əks halda.

  • Gəlin nişana keçək Şərtlər dizayneri sorğulayın və yeni şərt əlavə edin;
  • Gəlin orada bir bayraq qoyaq pulsuz və sərbəst ifadə redaktoruna gedin;
  • Sorğu dili funksiyaları bölməsində filialı genişləndirəcəyik Funksiyalar -> Digər funksiyalar;
  • Bir funksiyanı ifadələr bölməsinə sürükləyək ISNULL;
  • Yaranan tikintidən sonra biz Between müqayisə operatoruna daxil olacağıq və intervalı təyin edəcəyik: 0 və 10;
  • OK düyməsini basın, şərt hazırdır;

Ediləcək son şey, sorğu sahələrində təxirə salınma dəyərini göstərməkdir. Bunun əvəzinə SIFIR 0 dəyəri göstərildi, biz də sərbəst ifadə redaktorundan və funksiyadan istifadə edirik ISNULL.

  • Gəlin nişana keçək Cədvəllər və sahələr və yeni sahə əlavə edin;
  • Açılan sərbəst ifadə redaktorunda funksiyanı seçin ISNULL;
  • İfadə 1 yerinə Əlavə Məlumat.Dəyər sahəsini və İfadə 2 yerinə 0 daxil edin;
  • OK düyməsini basın, sahə hazırdır;

Nəticədə, aşağıdakı mətnlə sorğu alacağıq:

Sorğu = Yeni Sorğu; Query.SetParameter("PropertyDelay", PropertyProperty); Request.SetParameter("Hesab", Hesab); Query.Text = "SEÇ | Qarşı Tərəf Müqavilələri. Link, | ISNULL(Əlavə Məlumat. Dəyər, 0) AS Sahəsi1 | FROM | Kataloq. Qarşı Tərəf Müqavilələri Qarşı Tərəf Müqavilələri KİMİ | SOL QOŞULUŞ Məlumat Qeydiyyatı. Əlavə Məlumat | AS Əlavə Məlumat | Qarşı tərəf Razılaşması . Link = Əlavə Məlumat. Obyekt | VƏ (Əlavə Məlumat. Əmlak = & Əmlak Gecikməsi) |HARADA |Qarşı Tərəf Müqavilələri. Sahib = &Qarşı Tərəf | VƏ ISNULL (Əlavə Məlumat. Dəyər, 0) 0 İLƏ 10";

Həmçinin 1C 8 sorğu dili haqqında məqalələri oxuyun.

Eyni zamanda bir neçə cədvəldən məlumatları görmək istədikdə, yəni. bir neçə cədvəli bir yerə toplamaq üçün cədvəlləri birləşdirən anlayış və onlar arasında əlaqələr yaranır. Dörd növ əlaqə var:

  • sol;
  • sağ,
  • daxili;
  • tam.

Mücərrəd bir nümunədən istifadə edərək hər bir növə baxacağıq. 2 cədvəl var, birincidə maddə haqqında təsviri məlumatları, ikincisində onun qalıqları haqqında məlumat saxlayırıq:

Bu cədvəllərdən birini əldə etmək üçün hansı sahələri, hansı şərtlə və tiplə birləşdirəcəyimizi açıq şəkildə göstərməliyik. İndi daha aydın olacaq.

Sol əlaqə

Sol birləşmədən istifadə edərək, sistemə bildiririk ki, nəticədə sol cədvəldən bütün qeydləri, sağdan isə əlaqə şərtini ödəyən qeydləri görmək istəyirik. Tutaq ki, məhsul sahəsi üzrə cədvəlləri bərabər şərtlə birləşdiririk, onda belə bir cədvəl alacağıq:

İstək. Mətn =
"SEÇİN
| Nomenklatura.Məhsul,
| Nomenklatura.Rəng AS RəngNomenklaturası,
| Qalır.Rəng AS Rəng qalır,
| Balanslar. Kəmiyyət
|FROM

";

Qalıqlar cədvəlindən kafedra üçün uyğunluqlar yox idi, buna görə də sahələr ISNULL funksiyası tərəfindən işlənməli olan NULL dəyərlərlə dolduruldu, 1C 8 Sorğu Dili Funksiyalarına baxın.

Sol birləşmə təqribən bir dövrə daxilində döngə kimi işləyir - o, sol cədvəldən ilk qeydi götürür və əlaqə şərtinin təmin olunmasını təmin etmək üçün sağdakı cədvəldən bütün qeydləri keçir. Sonra sol cədvəldən ikinci qeyd götürülür və s. Əgər birdən sağ cədvəldən bir neçə qeyd əlaqə şərtini ödəyirsə, o zaman yaranan cədvələ bir neçə cərgə əlavə olunacaq (uğurlu qoşulmaların sayına görə).Gördüyümüz kimi, nəticə cədvəli informativ deyil, verilənlər əks olunmur. Əsl mahiyyət, ona görə də bu cədvəlləri iki sahə ilə birləşdirmək daha yaxşıdır: Məhsul və Rəng, yalnız bu dəfə NULL-ləri idarə edəcəyik:

İstək. Mətn =
"SEÇİN
| Nomenklatura.Məhsul,
| Nomenklatura.Rəng,
| ISNULL(Qalan.Kəmiyyət, 0) Kəmiyyət AS
|FROM
| Nomenklatura AS Nomenklatura
| SOL QOŞULUN Qalanları Qalıqlar KİMİ
| Proqram Nomenklaturası.Məhsul = Qalan.Məhsul

Düzgün əlaqə

Sağ əlaqə mahiyyətcə soldan fərqlənmir. Cədvəlləri dəyişdirsəniz, sağ birləşmə sola birləşməyə çevriləcək, üstəlik konstruktordan istifadə edərkən sistem özü bütün sağ birləşmələri sol birləşmələrə çevirir.

Daxili birləşmə

Daxili birləşmədən istifadə edərək, sistemə deyirik ki, nəticədə həm sağ, həm də sol cədvəldən yalnız əlaqə şərtini təmin edən qeydləri görmək istəyirik. Beləliklə, əldə edilən qeydlərin sayı birləşmədə iştirak edən ən qısa cədvəlin qeydlərinin sayından az və ya ona bərabər olacaqdır. Cədvəllərimizin Məhsul və Rəng sahələrinə daxili birləşmə tətbiq edək:

İstək. Mətn =
"SEÇİN
| Nomenklatura.Məhsul,
| Nomenklatura.Rəng,
| Qalanlar. Miqdar Kəmiyyət AS
|FROM
| Nomenklatura AS Nomenklatura
| INNER JOIN Qalıqları Qalıqlar KİMİ
| Proqram Nomenklaturası.Məhsul = Qalan.Məhsul
| Və Nomenklatura.Rəng = Qalan.Rəng";

Tam əlaqə

Tam qoşulma hər iki cədvəldəki bütün qeydlərlə nəticələnəcək, əlaqə şərtini təmin edən qeydlər birləşdiriləcək, əlaqə şərtini təmin etməyən qeydlər hələ də sorğunun nəticəsi ilə bitəcək, lakin bəzi NULL sahələri ilə. Tam birdə sol və sağ əlaqələr kimidir.

Bu mövzuda bir çox problem ola bilər, onlardan birini həll etməyə çalışaq. Təşkilatımız 2 mebel fabrikinin dileridir: “Zarya” və “Rassvet”. Fabriklərin hər birinin qiyməti ilə çeşid müxtəlif cədvəllərdə saxlanılır. Vahid qiymət siyahısı yaratmaq və minimum qiymətə məhsulları daxil etmək lazımdır:

Gəlin bütün sahələrin seçimi ilə tam qoşulma tətbiq edək, biz məhsulla birləşdirəcəyik:

İstək. Mətn =
"SEÇİN
| NomenklaturaZarya.Product AS ProductZarya,
| NomenklaturaZarya.Qiymət AS QiymətZarya,
| Nomenklatura Rassvet Məhsul AS Product Rassvet,
| NomenklaturaRassvet.Qiymət AS PriceRassvet
|FROM

Bizə tam olaraq bu lazım deyil, gəlin məhsul sahəsini birinə birləşdirək və NULL-ləri emal edək:

İstək. Mətn =
"SEÇİN
//ISNULL konstruksiyası sorğu dili funksiyaları bölməsində müzakirə edilmişdir
//qiymət müəyyən edilməyibsə, onu işə salın
//niyə 1000000 aşağıda izahata baxın
| ISNULL(NomenklaturaZarya.Qiymət, 1000000) AS QiymətZarya,
| ISNULL(NomenklaturaRassvet.Qiymət, 1000000) AS PriceRassvet
|FROM
| NomenklaturaZarya AS NomenklaturaZarya
| TAM ƏLAQƏ NomenklaturaŞəfəq AS NomenklaturaŞəfəq
| Software NomenclatureZarya.Product = NomenclatureDawn.Product";

Yalnız minimum qiyməti seçmək qalır. Son sorğu mətni belə görünəcək:

İstək. Mətn =
"SEÇİN
| ISNULL(NomenclatureZarya.Product, NomenclatureDawn.Product) AS Məhsul,
| SEÇİM
| VAXT OLAN ISNULL(NomenklaturaZarya.Qiymət, 1000000) > ISNULL(NomenklaturaRassvet.Qiymət, 1000000)
| SONRA ISNULL(NomenklaturaRassvet.Qiymət, 1000000)
| ELSE ISNULL(NomenklaturaZarya.Qiymət, 1000000)
| QİYMƏT KİMİ BİTİR
|FROM
| NomenklaturaZarya AS NomenklaturaZarya
| TAM ƏLAQƏ NomenklaturaŞəfəq AS NomenklaturaŞəfəq
| Software NomenclatureZarya.Product = NomenclatureDawn.Product";

Qiymət müəyyən edilməyibsə (NULL), o zaman müəyyən dəyərlə işə salınmalıdır, əks halda daha çox/az üçün müqayisə əməliyyatı xəta ilə uğursuz olacaq. Qiyməti qeyri-real böyük məbləğlə başlayırıq ki, müqayisə əməliyyatında “itirsin”, çünki problemin şərtlərinə uyğun olaraq ən aşağı qiyməti seçirik.

← 1C sorğu dilinin funksiyaları 8 | 1C 8 sorğularına qoşulur →

Dostlarınızla paylaşın və ya özünüz üçün qənaət edin:

Yüklənir...