Sorğuların yaradılması və onlarla işləmək (yeni başlayanlar üçün). Sorğuların yaradılması və onlarla işləmək (yeni başlayanlar üçün) 1s 8.3

1C proqramlaşdırması sadəcə proqram yazmaqdan daha çox şeydən ibarətdir. 1C istifadəçi hərəkətlərinin və işlədiyi məlumatların külçəsidir.

Məlumatlar verilənlər bazasında saxlanılır. 1C sorğuları verilənlər bazasından məlumatları istifadəçiyə formada göstərmək və ya emal etmək üçün əldə etmək üsuludur.

Hesabatın əsas hissəsi 1C sorğusudur. Hesabat vəziyyətində ACS hesabatın ən böyük hissəsidir.

Otur. Nəfəs al. Sakitləş. İndi sizə xəbər verəcəyəm.

1C-də proqramlaşdırmaq üçün 1C proqramlaşdırma dilini bilmək kifayət deyil. Siz həmçinin 1C sorğu dilini bilməlisiniz.

1C sorğu dili verilənlər bazasından hansı məlumatları əldə etməli olduğumuzu müəyyən etməyə imkan verən tamamilə ayrı bir dildir.

O da iki dillidir - yəni rus və ya ingilis dilində yaza bilərsən. Bu, SQL sorğu dilinə çox bənzəyir və onu bilənlər dincələ bilər.

1C Sorğularından necə istifadə olunur

İstifadəçi 1C-ni Müəssisə rejimində işə saldıqda, işləyən müştəridə bir qram məlumat yoxdur. Buna görə bir kataloq açmaq lazım olduqda, 1C verilənlər bazasından məlumatları tələb edir, yəni 1C sorğusu edir.

1C sorğuları bunlardır:

  • Avtomatik sorğular 1c
    Sistem tərəfindən avtomatik olaraq yaradılır. Sənəd siyahısı forması yaratdınız. Sütun əlavə edildi. Bu o deməkdir ki, siz bu formanı Müəssisə rejimində açdığınız zaman sorğu olacaq və bu sütun üçün məlumatlar tələb olunacaq.
  • Yarı avtomatik sorğular 1C
    1C dilində bir çox üsullar (funksiyalar) var, daxil olduqda verilənlər bazasına sorğu verilir. Məsələn.GetObject()
  • Manual 1C sorğuları (proqramçı tərəfindən xüsusi olaraq sorğu kimi yazılmışdır)
    1C sorğusunu özünüz kodda yazıb icra edə bilərsiniz.

1C sorğularının yaradılması və icrası

1C sorğusu 1C sorğu dilində sorğunun faktiki mətnidir.
Mətn qələmlə yazıla bilər. Yəni götür və yaz (bu dili bilirsənsə).

1C əl ilə kod yazmadan çox və ya demək olar ki, hər şeyin edilə biləcəyi vizual proqramlaşdırma konsepsiyasını təbliğ etdiyindən, sorğu dilini bilmədən sorğunun mətnini çəkməyə imkan verən xüsusi Query Constructor obyekti mövcuddur. Ancaq möcüzələr baş vermir - bunun üçün konstruktorla necə işləməyi bilməlisiniz.

1C sorğusunun mətni hazır olduqdan sonra onu yerinə yetirmək lazımdır. Bunun üçün 1C kodunda Request() obyekti var. Budur bir nümunə:

Sorğu = Yeni Sorğu();
Query.Text = "SEÇ
| Nomenklatura.Link
|FROM
| Kataloq.Nomenklatura AS Nomenklatura
|HARADA
| Nomenklatura.Xidmət";
Select = Query.Run().Select();

Hesabat(Seçim.Link);
EndCycle;

Nümunədə gördüyünüz kimi, 1C sorğusunu yerinə yetirdikdən sonra nəticə bizə gəlir və biz onu emal etməliyik. Nəticə cədvəlin bir və ya bir neçə sırasıdır (xüsusi formada).

Nəticə adi cədvələ yüklənə bilər:
Get = Query.Run().Unload(); //Nəticə – qiymətlər cədvəli

Və ya sadəcə sətir-sətir ətrafında gəzin.
Select = Query.Run().Select();
While Select.Next() döngəsi
//Sorğu nəticələri ilə bir şey edin
EndCycle;

1C sorğuları ilə işləmək

1C sorğularının əsas prinsipləri

1C sorğusunun qurulmasının əsas prinsipləri -
Cədvəl Başlığından Sahələrin Siyahısını SEÇİN HARADA Şərtlər

Belə bir 1C sorğusunun qurulmasına bir nümunə:

SEÇİN
//seçmək üçün sahələrin siyahısı
Link,
ad,
Kod
FROM
//verilənləri seçdiyimiz cədvəlin adı
//cədvəllərin siyahısı konfiqurator pəncərəsindəki obyektlərin siyahısıdır
Kataloq.Nomenklatura
HARADA
//seçimi göstərin
Məhsul növü = &Xidmət //xarici dəyərə görə seçim
Və ya Xidmət // Boolean tipli “Xidmət” atributu, dəyərinə görə seçim Doğrudur
SORTLAMA
//Çeşidləmə
ad

1c cədvəllərinin siyahısı

Cədvəl adlarını konfiqurator pəncərəsində görə bilərsiniz. Siz sadəcə olaraq “Directories” əvəzinə “Kataloq” yazmalısınız, məsələn, “Kataloq.Nomenklatura” və ya “Sənəd.Malların və xidmətlərin satışı” və ya “Yığım.Satış reyestri”.

Son nömrələri əldə etməyə imkan verən registrlər üçün əlavə cədvəllər (virtual) mövcuddur.

Məlumat Registri.RegistrAdı.Son Dilim(&Tarix) – 1C məlumat reyestrindən sorğu, əgər dövri olarsa, müəyyən bir tarix üçün

Yığım Reyestri.Registr Adı.Balanslar(&Tarix) – Müəyyən bir tarix üçün qalıqlar reyestrindən 1C sorğusu

Yığım Reyestri.Registr Adı.Dövriyyə (&Başlama tarixi, &Bitmə tarixi) – başlanğıc tarixindən bitmə tarixinə qədər dövr üçün dövriyyə reyestrindən 1C sorğusu.

Əlavə prinsiplər

Bəzi məlumatların siyahısını tələb etdikdə, əsas prinsiplər işləyir. Ancaq biz də nömrələr tələb edə bilərik və sorğu onları bizim üçün hesablaya bilər (məsələn, onları əlavə edin).

SEÇİN
//Quantity(FieldName) – kəmiyyəti hesablayır
//Field AS OtherName – sahənin adını dəyişir
Kəmiyyət (Link) AS Göndərilən Sənədlərin Kəmiyyəti
FROM

HARADA
keçirilmişdir

Bu 1C sorğusu bizə sənədlərin ümumi sayını qaytaracaq. Bununla belə, hər bir sənədin Təşkilat sahəsi var. Tutaq ki, biz 1C sorğusundan istifadə edərək hər bir təşkilat üçün sənədlərin sayını hesablamaq istəyirik.

SEÇİN
//sadəcə sənəd sahəsi
Təşkilat,
//kəmiyyəti hesablayın
Quantity(Link) AS QuantityBy Organizations
FROM
Sənəd.Malların və xidmətlərin satışı
HARADA
keçirilmişdir
GROUP BY

Təşkilat

Bu 1C sorğusu bizə hər bir təşkilat üçün sənədlərin sayını qaytaracaq (“təşkilat tərəfindən” də deyilir).

1C sorğusundan istifadə edərək bu sənədlərin məbləğini əlavə olaraq hesablayaq:

SEÇİN
//sadəcə sənəd sahəsi
Təşkilat,
//kəmiyyəti hesablayın

// məbləği hesablayın

FROM
Sənəd.Malların və xidmətlərin satışı
HARADA
keçirilmişdir
GROUP BY
//sahələrin siyahısında count() funksiyası və eyni zamanda bir və ya bir neçə sahə varsa istifadə edilməlidir - o zaman bu sahələr üzrə qruplaşdırmaq lazımdır
Təşkilat

Bu 1C sorğusu da sənədlərin məbləğini bizə qaytaracaq.

SEÇİN
//sadəcə sənəd sahəsi
Təşkilat,
//kəmiyyəti hesablayın
Quantity(Link) AS QuantityBy Organizations,
// məbləği hesablayın
Məbləğ(DocumentAmount) AS Məbləğ
FROM
Sənəd.Malların və xidmətlərin satışı
HARADA
keçirilmişdir
GROUP BY
//sahələrin siyahısında count() funksiyası və eyni zamanda bir və ya bir neçə sahə varsa istifadə edilməlidir - o zaman bu sahələr üzrə qruplaşdırmaq lazımdır
Təşkilat
PO NƏTİCƏLƏRİ Ümumi

1C sorğu dili geniş və mürəkkəbdir və biz onun bütün imkanlarını bir dərsdə nəzərdən keçirməyəcəyik - növbəti dərslərimizi oxuyun.

1C sorğu dilinin əlavə xüsusiyyətləri haqqında qısaca:

  • Çoxlu cədvəllərdən məlumatların birləşdirilməsi
  • İç-içə sorğular
  • Toplu sorğu
  • Öz virtual cədvəllərinizi yaratmaq
  • Qiymət cədvəlindən sorğu
  • Dəyərləri əldə etmək və manipulyasiya etmək üçün daxili funksiyalardan istifadə.

1C Query Builder

Sorğu mətnini əl ilə yazmamaq üçün 1C sorğu dizayneri var. Sadəcə modulun istənilən yerinə sağ klikləyin və 1C Query Designer seçin.

1C sorğu dizaynerində solda istədiyiniz cədvəli seçin və onu sağa sürükləyin.

1C sorğu tərtibatçısındakı cədvəldən tələb olunan sahələri seçin və sağa sürüşdürün. Yalnız bir sahə seçmək deyil, ona bir növ toplama funksiyası tətbiq etmək istəyirsinizsə, sürüklədikdən sonra siçan ilə sahəyə iki dəfə vurun. Qruplaşdırma tabında siz qruplaşdırma üçün tələb olunan sahələri seçməlisiniz (sürükləyin).

1C sorğu dizaynerindəki Şərtlər sekmesinde, eyni şəkildə lazımi seçimləri seçə bilərsiniz (seçim edəcəyiniz sahələri sürükləməklə). Düzgün şərt seçdiyinizə əmin olun.

Sifariş nişanında çeşidləmə göstərilir. Nəticələr sekmesinde - nəticələrin yekunlaşdırılması.

1C sorğu dizaynerindən istifadə edərək hər hansı mövcud sorğunu öyrənə bilərsiniz. Bunu etmək üçün mövcud sorğunun mətninə sağ vurun və həmçinin 1C sorğu dizaynerini seçin - və sorğu 1C sorğu dizaynerində açılacaq.

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 sessiyası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.

Sorğu . Mətn = "SEÇİN | StorageUnits.Link |FROM | Directory.usStorageUnits StorageUnits NECƏ İSTİFADƏ EDİLİR // Nümunə 1: boş boolean dəyəri ilə müqayisə: |HARADA | StorageUnits.AllowSelectionFromReserveZone = Yanlış // Nümunə 2. lakin bu Boolean müəyyən edilibsə, belə daha yaxşıdır: // mənfi Boolean üçün şərt: |HARADA | Saxlama Vahidləri DEYİL. Ehtiyat Zonadan Seçməyə İcazə Verin // Nümunə 3. “müəyyən bir növün kataloqu” tipinə malik boş sahənin şərti əsasında seçim |HARADA | StorageUnits.ActiveSelectionArea = DƏYƏR(Directory.usSelectionArea.EmptyRef) // Misal 3a. "müəyyən bir növün sənədi" tipinə malik boş sahənin vəziyyətinə əsaslanan seçim |HARADA | BizimMəlumatQeydiyyatımız.Sənəd = DƏYƏR(Sənəd.BizimSənədimiz.EmptyLink) // Misal 3b. "müxtəlif tipli sənədlər" tipinə malik boş sahənin şərti əsasında seçim ( kompozit sahə) |HARADA | (OurInformationRegister.Document = VALUE(Document.OurDocument1.EmptyLink) | OR OurInformationRegister.Document = VALUE(Document.OurDocument2.EmptyLink) | OR... (və s. - biz ardıcıl olaraq bu kompositetin bütün mümkün növləri üçün şərtləri sadalayırıq) ) // Nümunə 4. və ya əksinə, "sətir" tipli doldurulmuş dəyəri seçmək lazımdırsa, şərt kömək edəcək: |HARADA | Saxlama Vahidi. Adı > """" // Nümunə 5. Mürəkkəb məlumat növü olan müəyyən bir növ sənədləri seçmək lazımdırsa, məsələn, "RunningTasks" reyestrində, "Tapşırıq" resursunda dəyərləri arasında olan kompozit tip var. "Seçim" sənədi mümkündür |HARADA | EXPRESS(Məlumat Registerİcra edilənTasks.Task AS Document.Selection) LINK Document.Selection // Misal 5a. Müəyyən bir növ sənədləri seçmək lazım olduqda başqa bir oxşar nümunə | SEÇİM | NƏ ZAMAN İFADƏ EDİLMƏLİ (sənədlərin Uyğunluğu. DocumentBU AS Sənəd. Malların və xidmətlərin qəbulu) BAĞLANTI sənədi.Malların və xidmətlərin qəbulu | SONRA ""Malların və xidmətlərin qəbulu"" | NƏ ZAMAN İFADƏ EDİLMƏLİ (aq. Sənədlərin Uyğunluğu. DocumentBU AS Sənədi. Malların və xidmətlərin satışı) LINK Sənədi. Malların və xidmətlərin satışı | SONRA ""Malların və xidmətlərin satışı"" | BAŞQA """" | Sənəd Görünüşü KİMİ SON EDİN // Nümunə 6. Müəyyən edilməmiş qiymət şərti ilə seçim: |HARADA | SavedSettings.User = QEYD // Nümunə 7. Yığım registrinin "Giriş", "Xərc" - eyni şəkildə hərəkət növünə görə seçim: |HARADA | RegProductsInRetail.MovementType = DƏYƏR(Hərəkət TipiYığım.Gələn) // Nümunə 8. Sorğunun icrasına ehtiyac olmadığını sorğuda necə göstərmək olar (məsələn, hansısa şərtdən asılı olaraq proqramlı şəkildə boş sorğu nəticəsini qaytarmalısınız - Request.Text = StrReplace(Request.Text, "WHERE Doc.Link = &DocumentLink" , "HARADA YALAN");). Bunu etmək üçün sadəcə "Harada yalan" şərtini əlavə edin. Yeri gəlmişkən, nümunədə tələb olunan məlumatların həcmindən asılı olmayaraq, belə bir sorğu dərhal yerinə yetiriləcəkdir. |YALAN HARADIR // Nümunə 9. Sorğu nəticəsində verilənlərin olub-olmadığını yoxlamaq: Əgər olmasaSorğu.İcra etmək().Boş() Sonra // Nümunə 10. boş tarixə əsaslanan seçim: |HARADA | tbStrings.CancellationDate = DATETIME(1, 1, 1)

Bu yazıda sizinlə hər şeyi müzakirə etmək istəyirik 1C sorğu dili funksiyaları, və sorğu dili konstruksiyaları. Funksiya ilə dizayn arasındakı fərq nədir? Funksiya mötərizə və onların içərisində mümkün parametrlərlə çağırılır və konstruksiya mötərizəsiz yazılır. Şübhəsiz ki 1C sorğu dilinin bütün strukturları və funksiyaları məlumatların əldə edilməsi prosesini çevik və çoxfunksiyalı etmək. Bu funksiyalar və konstruksiyalar sorğu sahələrinə, bəziləri isə şərtlərə aiddir.

1C Query Dil Funksiyaları

Çünki aydın təsvir 1C sorğu dili funksiyaları strukturların təsvirlərindən daha az yayılmışdır, biz funksiyalara baxmağa başlamağa qərar verdik. İndi hər birinə ayrıca baxaq, məqsədini, sintaksisini və istifadə nümunəsini təsvir edək, beləliklə:

1. Funksiya TARİX VAXT- bu funksiya "Tarix" tipli sabit sahə yaradır.

Sintaksis: TARİX VAXT(<Год>,<Месяц>,<День>,<Час>,<Минута>,<Секунда>)

İstifadə nümunəsi:

2. TARİX FƏRQİ funksiyası- ölçülərdən birində (il, ay, gün, saat, dəqiqə, saniyə) iki tarix arasındakı fərqi qaytarır. Ölçmə parametr kimi qəbul edilir.

Sintaksis: FƏRQLİ TARİX(<Дата1>, <Дата2>, <Тип>)

İstifadə nümunəsi:

Query.Text = "SEÇ | FƏRQLİ TARİX(TARİXSAAT(2015, 4, 17), DATETIME(2015, 2, 1), GÜN) | Qty.Günlər KİMİ";

3. VALUE funksiyası- verilənlər bazasından əvvəlcədən təyin edilmiş qeyd ilə sabit bir sahə təyin edir; siz həmçinin istənilən növ boş keçid əldə edə bilərsiniz.

Sintaksis: VALUE(<Имя>)

İstifadə nümunəsi:

Request.Text = "SEÇİN //əvvəlcədən təyin edilmiş element | VALUE(Directory.Currencies.Dollar) AS Dollar, //boş keçid | VALUE(Sənəd.Malların və Xidmətlərin Qəbulu.EmptyLink) AS Qəbz, //köçürmə dəyəri | VALUE(Transfer) . Hüquqi Fiziki. Fiziki şəxs) AS Fərdi, //əvvəlcədən təyin edilmiş hesab | VALUE(Hesablar Planı. Özünü təmin edən. Materiallar) AS Hesab_10" ;

4. SEÇİM funksiyası- qarşımızda kodda istifadə olunan IF konstruksiyasının analoqu var, yalnız bu 1C sorğularında istifadə olunur.

Sintaksis: NƏ ZAMAN SEÇİN<Выражение>SONRA<Выражение>BAŞQA<Выражение>SON

İstifadə nümunəsi:

Request.Text = //məbləğ 7500-dən çox olarsa, onda 300 rubl endirim olmalıdır, //belə ki, şərt işə salınarsa, funksiya //məbləği qaytarır - 300 //əks halda sorğu sadəcə məbləği qaytaracaq. "SEÇ | SEÇ | ZAMAN TCReceipts.Məbləğ > 7500 | SONRA TCReceipts.Amount - 300 | BAŞQA TCReceipts.Məbləğ | Məbləğ KİMİ SON EDİREndirimlə |FROM | Sənəd.MallarXidmətləri.Mallar TCReceipts";

5. EXPRESS funksiyası- sabit sahəni konkret tiplə ifadə etməyə imkan verir.

Sintaksis: EXPRESS(Növ adı KİMİ SahəAdı)

İstifadə nümunəsi:

Query.Text = "MÜXTƏLİF SEÇİN | Satış.Registrator.Nömrəsi, | SEÇİN | ZAMAN. Satış.Qeydiyyatçı LINK Sənədi.İstehlak | SONRA İFADƏ EDİN (Satış.Qeydiyyatçı Sənədi.İstehlak) | BAŞQA SEÇİN | ZAMAN Satış.Registrator LINK Sənədi |Implement | SONRA İFADƏ EDİN(Sənəd KİMİ Satış.Registrator.Təcili).

Qarışıq tipli sahələrdə EXPRESS funksiyasından istifadə etmək üçün başqa variant varmı, onlar harada baş verir? Ən sadə nümunə istənilən reyestr üçün “Qeydiyyatçı”dır. Bəs niyə biz registratorda növü uyğunlaşdırmalıyıq? Qeydiyyatçıdan “Nömrə” sahəsini seçdiyimiz zaman vəziyyəti nəzərdən keçirək, nömrə hansı cədvəldən seçiləcək? Hamının düzgün cavabı! Buna görə də, sorğumuzun tez işləməsi üçün EXPRESS funksiyasından istifadə edərək açıq tip göstərməliyik

İstifadə nümunəsi:

Query.Text = "SEÇ | EXPRESS(Nomenklatura.Şərh AS Sətir(300)) AS Şərh, | EXPRESS(Nomenklatura.Cəmi Nömrə(15,2)) AS Cəmi |FROM | Directory.Nomenklatura AS Nomenklatura";

6. ISNULL funksiyası(alternativ orfoqrafiya ISNULL) - əgər sahə NULL tiplidirsə, o zaman funksiyanın ikinci parametri ilə əvəz olunur.

Sintaksis: ISNULL(<Поле>, <ПодставляемоеЗначение>)

İstifadə nümunəsi:

Həm də nəzərə alın ki, HƏMİŞƏ NULL növünü bəzi dəyərlə əvəz etmək məsləhətdir, çünki NULL növü ilə müqayisə həmişə NULL ilə NULL ilə müqayisə etsəniz belə FALSE qaytarır. Çox vaxt NULL dəyərlər cədvəllərin birləşdirilməsi nəticəsində formalaşır (daxili olanlardan başqa bütün növ birləşmələr).

Query.Text = //Bütün elementi və onun qalıqlarını seçin //bəzi elementdə balans yoxdursa, o zaman //NULL sahəsi olacaq və 0 "SELECT | No. Link, | ISNULL" dəyəri ilə əvəz olunacaq. (MəhsullarStockInStockRemains.InStockRemaining, 0) AS Qalan | FROM | Directory.Nomenklatura AS Nömrəsi | SOL BAĞLANTI Yığımları Qeydiyyatdan keçirin. MallarAnbarlarda. Qalanlar AS MallarAnbarlardaQalan | ON (MallarInStockl = Qalan No.)"

7. TƏMSİL funksiyası- sorğu sahəsinin təsvirini əldə etməyə imkan verir.

Sintaksis: PERFORMANS(<НаименованиеПоля>)

İstifadə nümunəsi:

Query.Text = "SEÇ | NÜMAYƏNDƏ (FreeRemainingRemaining.Nomenklatura) AS Nomenklatura, | NÜMAYƏNDƏ (FreeRemainingRemaining.Warehouse) AS Anbar, | FreeRemainingRemaining.InStockRemaining |FROM |FROM |Yığım Qeydiyyatı.FreeRemaining.

1C sorğu dilində qurur

Yuxarıda sizinlə müzakirə etdik 1C sorğu dili funksiyaları, indi düşünməyin vaxtıdır 1C sorğu dilində qurur, onlar daha az vacib və faydalı deyil, başlayaq.

1. Tikinti LINK- istinad tipini yoxlamaq üçün məntiqi operatordur. Mürəkkəb tipli sahəni müəyyən bir növlə yoxlayarkən ən çox rast gəlinir. Sintaksis: LINK<Имя таблицы>

İstifadə nümunəsi:

Request.Text = //registrator dəyər növü sənəd Qəbzidirsə, //sonra sorğu "Malların qəbulu"nu qaytaracaq, əks halda "Malların satışı" "SEÇ | SEÇ | QALAN ZAMAN.Qeydiyyatçı LINK Sənədi.Malların Qəbulu Xidmətləri | SONRA ""Qəbz"" | ƏSGƏ ""İstehlak"" | Hərəkət Növü KİMİ SON EDİLİR | Yığım Reyestrindən

2. ARASINDA dizayn- bu operator dəyərin müəyyən edilmiş diapazonda olub olmadığını yoxlayır.

Sintaksis: ARASINDA<Выражение>VƏ<Выражение>

İstifadə nümunəsi:

Request.Text = //kodu 1-dən 100-ə qədər diapazonda olan bütün nomenklaturanı əldə edin "SEÇ | Nomenklatura.Link |FROM | Directory.Nomenklatura AS Nomenklatura |HARA | Nomenklatura.Kod 1-dən 100-ə qədər" ;

3. Tikinti B və B İERARXİYASI- dəyərin köçürülmüş siyahıda olub-olmadığını yoxlayın (massivlər, qiymət cədvəlləri və s. siyahı kimi köçürülə bilər). IN HIERARCHY operatoru iyerarxiyaya baxmaq imkanı verir (Hesablar Planından istifadə nümunəsi).

Sintaksis: IN(<СписокЗначений>), İERARXİYADA(<СписокЗначений>)

İstifadə nümunəsi:

Request.Text = //hesabın bütün subhesablarını seçin "SEÇ | Özünü dəstəkləyən. Link AS Hesabı | FROM | Hesablar Planı. Özünü dəstəkləyən AS Özünü dəstəkləyən | HARADA | Özünü dəstəkləyən. HIERARXİYA DƏYƏRİNDƏ BAĞLANTI (Qrafik cədvəli). Hesablar. Özünü təmin edən. Mallar)";

4. OXŞAR dizayn- Bu funksiya bizə simli naxışla simli müqayisə etməyə imkan verir.

Sintaksis: KİMİ "<ТекстШаблона>"

Sıra nümunəsi variantları:

% - istənilən sayda ixtiyari simvoldan ibarət ardıcıllıq.

Bir ixtiyari xarakter.

[...] - kvadrat mötərizədə qeyd olunan hər hansı bir simvol və ya simvol ardıcıllığı. Sadalama diapazonları təyin edə bilər, məsələn, a-z, yəni aralığın ucları daxil olmaqla, aralığa daxil edilmiş ixtiyari simvol.

[^...] - inkar işarəsindən sonra sadalananlar istisna olmaqla, kvadrat mötərizədə qeyd olunan hər hansı bir simvol və ya simvol ardıcıllığı.

İstifadə nümunəsi:

Query.Text = //tərkibində TABUR kökünü ehtiva edən və //ya kiçik və ya böyük t hərfi ilə başlayan bütün nomenklaturanı tapın "SEÇ | Nomenklatura. Link | FROM | Kataloq. Nomenklatura AS Nomenklatura | HARADA | Məhsullar. Ad LIKE "" [Tt ]abur%""" ;

5. Dizayn İCAZƏ VERİLİR- bu operator məlumat bazasından yalnız zəng edənin oxumaq icazəsi olan qeydləri seçməyə imkan verir. Bu hüquqlar rekord səviyyədə (RLS) konfiqurasiya edilir.

Sintaksis: ALLOWED SELECT açar sözündən sonra yazılır

İstifadə nümunəsi:

Request.Text = "İcazə VERİLİR SEÇ | Qarşı tərəflər. Link | FROM | Kataloq. Qarşı tərəflər Qarşı tərəf kimi";

6. MÜXTƏLİF dizayn- dublikat qeydləri olmayan qeydləri seçməyə imkan verir.

Sintaksis: SELECT açar sözündən sonra VARIOUS yazılır

İstifadə nümunəsi:

Request.Text = //oxucunun hüquqlarına malik olduğu qeydləri seçir "MÜXTƏLİF SEÇ | Counterparties.Name |FROM | Directory. Qarşı tərəflər Qarşı tərəf kimi" ;

Həmçinin, MÜXTƏLİF konstruksiya İZİN VERİLƏN operator və digər operatorlarla istifadə oluna bilər.

İstifadə nümunəsi:

Request.Text = //oxucunun hüquqlarına malik olduğu müxtəlif qeydləri seçir "SEÇ İZİN VERİLƏN MÜXTƏLİF | Qarşı tərəflər.Ad |FROM | Kataloq. Qarşı tərəflər Qarşı tərəf kimi";

7. İLK dizayn- sorğu nəticəsindən parametrdə göstərilən qeydlərin sayını seçir.

Sintaksis: FIRST<число>

İstifadə nümunəsi:

Request.Text = //"SEÇ İLK 4 | CCD Nömrələri. Link | FROM | Directory. CCD Nömrələri AS CCD Nömrələri" kataloqundan ilk 4 CCD nömrəsini seçin;

8. DƏYİŞMƏK ÜÇÜN dizayn- masanı kilidləməyə imkan verir, yalnız əməliyyatlarda işləyir (yalnız avtomatik kilidlər üçün uyğundur).

Sintaksis: DƏYİŞİM ÜÇÜN<НаименованиеТаблицы>

İstifadə nümunəsi:

Query.Text = "SEÇ | Pulsuz Qalıqlar Qalanlar. Nomenklatura, | Pulsuz Qalıqlar Qalanlar. Anbar, | Pulsuz Qalıqlar Qalanlar. Anbarda Qalan | FROM | Yığımların Reyestrindən. Pulsuz Qalıqlar. Qalanlar Pulsuz Qalıqlar Qalanlar KİMİ | Yığımların DƏYİŞMƏSİ ÜÇÜN | . Sərbəst qalıqlar. Qalanlar";

9. Dizayn SİFARİŞ- verilənləri konkret sahə üzrə təşkil edir. Sahə bir keçiddirsə, bayrağı təyin edərkən AVTO SİFARİŞÇeşidləmə keçid təmsili ilə baş verəcək; əgər bayraq söndürülübsə, bağlantılar yaddaşda olan keçid ünvanının stajına görə sıralanır.

Sintaksis: SORTLAMA<НаименованиеПоля>AVTO SİFARİŞ

İstifadə nümunəsi:

Query.Text = "SEÇ | Pulsuz Qalan Qalanlar. Nomenklatura AS Nomenklatura, | Pulsuz Qalıqlar Qalanlar. Anbar AS Anbar, | Sərbəst Qalıqlar Qalanlar. Anbarda Qalan | FROM | Yığımları qeyd edin. Pulsuz Qalanlar. Pulsuz Qalan Qalanlar | SİPARİŞ | | Nomenklatura | AVTO SİFARİŞ BƏRPA";

10. Dizayn Qrupu BY- sorğu sətirlərini xüsusi sahələr üzrə qruplaşdırmaq üçün istifadə olunur. Rəqəmsal sahələr istənilən ümumi funksiya ilə istifadə edilməlidir.

Sintaksis: GROUP BY<НаименованиеПоля1>, .... , <НаименованиеПоляN>

İstifadə nümunəsi:

Query.Text = "SEÇ |MəhsullarAnbarlarda.Nomenklatura AS Nomenklatura, |MəhsullarAnbarlarda.Anbarda, |SUM(AnbardaMallar.Stokda) |FROM ature, | MəhsullarAnbarlarda.Anbar" ;

11. Dizayn VAR- WHERE konstruksiyası kimi məlumatların seçilməsi şərtinə ümumi funksiya tətbiq etməyə imkan verir.

Sintaksis: OLMAQ<агрегатная функция с условием>

İstifadə nümunəsi:

Query.Text = //InStock sahəsinin 3-dən çox olduğu qruplaşdırılmış qeydləri seçir "SEÇ | ItemsInStocks.Nomenclature AS Nomenclature, | ItemsInWarehouses.Warehouse, | SUM(ItemsInStocks.InStock) AS INSTOCK |FROM | RegisterAccsIcksIcksIn | QRUPLAMA GÖRƏ |MəhsullarAnbarlarda.Nomenklatura, |MəhsullarAnbarlarda.Anbarda | |Mövcuddur | MƏBLƏQ(MəhsullarAnbarlarda.InStock) > 3" ;

12. Tikinti İNDEKSİ BY- sorğu sahəsinin indeksləşdirilməsi üçün istifadə olunur. İndeksləmə ilə sorğunun tamamlanması daha uzun çəkir, lakin indekslənmiş sahələr üzrə axtarışı sürətləndirir. Yalnız virtual cədvəllərdə istifadə edilə bilər.

Sintaksis: İNDEKSİ BY<Поле1, ... , ПолеN>

İstifadə nümunəsi:

Query.Text = "SEÇ | Ts.NameOS, | Ts.FolderNumber, | Ts.CodeOS, | Ts.Term, | Ts.Type | PLACE DataTs | FROM | &Ts AS Ts | | INDEX BY | Ts.NameOS, | Ts .CodeOS";

13. Dizayn HARADA- istənilən seçim sahələrinə şərt qoymağa imkan verir. Nəticəyə yalnız şərti təmin edən qeydlər daxil olacaq.

Sintaksis: HARADA<Условие1 ОператорЛогСоединения УсловиеN>

İstifadə nümunəsi:

Query.Text = //ComensationRemaining olan bütün qeydlər seçilir<>0 və //MəbləğForCalcCompRemaining > 100 "SEÇ | CompensationRPORemains.Counterparty, |CompensationRPORemains.Child, | CompensationRPORemains.CompensationRemaining, | CompensationRPORemains.AmountForCalcCompRemains |Place DataTz |Compenation. stat ki |HARADA |KompensasiyaRPORqalan.CompensationRemaining<>0 | Və KompensasiyaRPORemains.AmountForCalcCompRemaining> 100" ;

14. Dizayn NƏTİCƏLƏRİ... ÜMUMİ- cəmləri hesablamaq üçün istifadə olunur; dizayn yekunların hesablanacağı sahələri və ümumi sahələrə tətbiq olunan məcmu funksiyaları müəyyən edir. TOTAL konstruksiyasından sonra hər bir sahə üçün cəmlərdən istifadə edərkən məlumatlar qruplaşdırılır. İsteğe bağlı GENERAL konstruksiya var; onun istifadəsi əlavə qruplaşdırmanı da təmin edir. Aşağıda sorğu nəticəsinin nümunəsini görəcəksiniz.

Sintaksis: NƏTİCƏLƏR<АгрегатнаяФункция1, ... , АгрегатнаяФункцияN>BY<ОБЩИЕ> <Поле1, ... , ПолеN>

İstifadə nümunəsi:

Request.Text = "SEÇ | Hesablamalar. Qarşı tərəf Müqaviləsi. Müqavilənin Növü AS Müqavilə Növü, | Hesablamalar. Qarşı tərəf Müqaviləsi AS Müqavilə, | Hesablamalar. Qarşı tərəf, | Hesablamalar. Qarşılıqlı hesablaşma balansının məbləği Balans AS | FROM | Yığımların Reyestrindən. Mut. Qarşı tərəflərlə hesablaşma. Qalıqlar AS Hesablamalar | ÜMUMİ | MƏBLƏK (Balans) |Proqram təminatı | ÜMUMİ, | Müqavilənin Növü";

Şəkildə sorğunun icrası zamanı formalaşmış qruplaşmalar göstərilib, yuxarıdakı biri ÜMUMİ bölməyə, ikincisi isə Qarşı tərəf Müqaviləsinin Müqavilə Növü sahəsinə aiddir.

Bu yazıda biz 1C sorğu dilində yuvalanmış cədvəllər mövzusunu araşdıracağıq.

Siz sorğu seçim sahələrində iç-içə sorğu mənbəyi cədvəlindən istifadə edə bilərsiniz. Məsələn, "Xidmətlərin göstərilməsi" sənədində Xidmətlərin cədvəl hissəsi var və buna görə də bu cədvəl hissəsi seçim sahəsində də göstərilə bilər. İndi bunun necə həyata keçirilə biləcəyini görəcəksiniz.

Təlim bazamda sorğu konsolunu işə salacağam, sorğu dizaynerini açacağam və “Xidmətlərin Təminatı” cədvəlini seçəcəyəm.

Gəlin bu cədvəli genişləndirək

Və orada "Xidmətlər" cədvəl hissəsini görürük.

Gəlin bütün cədvəl hissəsini seçək.

Gördüyünüz kimi, xidmətin bütün cədvəl hissəsi tamamilə sahələrə keçdi.

Nəzərə alın ki, cədvəl hissəsi əslində "Xidmətlər" adlı ayrıca sahə kimi gəlir və onun növü "Nəticə sorğusu" olacaq. Gəlin sorğuda daxili cədvəldən necə istifadə edəcəyimizi öyrənək.

Gəlin iç içə qoyulmuş cədvəlin üç sahəsini tərk edək və sənəd başlığından bəzi sahələr əlavə edək.

Dizaynerdə OK düyməsini klikləyək və sorğumuzun necə görünəcəyini görək.

Göründüyü kimi, sorğuda “Xidmətlər” sahəsindən sonra nöqtə var və ondan sonra seçilmiş sahələr mötərizədə qeyd olunur.

Gəlin xahişi yerinə yetirək.

Şəkildə görürük ki, sənədin cədvəl hissəsindəki bütün seçilmiş sahələr “Xidmətlər” sahəsində vergüllə ayrılmışdır. Bütün sorğu konsollarında yuxarıdakı şəkildəki kimi ekran yoxdur; bəzən sadəcə “ “ deyə bilər.

Başqa bir maraqlı məqam: yuvalanmış cədvəldə sahələr yerinə ulduz işarəsi qoya bilərsiniz, sonra cədvəl hissəsinin bütün sahələri görünəcək. Bu konstruktorda edilə bilməz, yalnız sorğuda əl ilə edilə bilər. Müraciət aşağıdakı formada olacaq:

Görək belə bir sorğu necə icra olunacaq.

Yeganə odur ki, sorğu konstruktorunu açsaq, bu ulduz saxlanmayacaq.

Konsolda iç-içə cədvəllə sorğu etməyi öyrəndik, indi seçimdə iç içə cədvəldən necə istifadə edəcəyimizi öyrənəcəyik.

Əslində, sorğunun işlənməsi zamanı iç-içə cədvələ daxil olmaq o qədər də çətin deyil. Siz sadəcə cədvəlinizin adı ilə seçimə daxil olursunuz və “Sorğu Nəticəsi” tipli dəyişən əldə edirsiniz. Və sonra onu normal sorğu nəticəsi kimi emal edirsiniz: istəsəniz nümunə götürün, istəsəniz yükləyin.

Aşağıda daxili cədvəllə işləyən kiçik kod nümunəsi verilmişdir:


&Serverdə
FillOnServer() proseduru
Sorğu = Yeni Sorğu;
Sorğu. Mətn = "SEÇİN
| Məhsulun satışı. Link,
| Məhsulun satışı.Məhsullar.(
| məhsul,
| Kəmiyyət
|FROM
| Sənəd.Məhsulların Satılması Məhsulların SATIŞI NECƏDİR"
;
Get = Sorğu. Çalışın(). seçin();
Salam Seçim. Next() Döngüsü
Ağacın TopLine = Məhsulların Satışı. GetItems();
NewRow = TopRowTree. Əlavə et();
Yeni xətt. Link = Seçim. Link;
Cədvəl Məhsulları = Seçim. mallar;
SelectionProducts = Cədvəl Məhsulları. seçin();
Məhsulların Seçilməsi zamanı. Next() Döngüsü
TreeChildRow = NewRow. GetItems();
ProductRow = ChildTreeRow. Əlavə et();
ProductString. Link = Məhsul seçimi. məhsul;
ProductString. Kəmiyyət = Nümunə Əşyaları. Kəmiyyət ;
EndCycle;
EndCycle;
Prosedurun Sonu

Yuxarıdakı kodu izah edim.

Əvvəla, xətti seçim aldıq və biz bu seçimdən bir döngədə keçirik, burada dəyər ağacının yuxarı sətirini yaradırıq (bu formadadır) və orada sənədimizə keçid yazırıq.

Və sonra ən maraqlısı, hətta daha sonra sazlayıcıda özünüz də baxa bilərsiniz, biz Məhsulların seçim sahəsinə müraciət edirik və rahatlıq üçün bu sahəni TableProducts-da ayrıca dəyişənlərə yazın. Bu dəyişən “Sorğu Nəticəsi” növüdür. Və bu nəticənin nümunəsini asanlıqla əldə edə bilərsiniz. Biz bunu edirik. Növbəti funksiyadan və while döngəsindən istifadə edərək bu seçimi keçmək qalır.

Və bu döngənin daxilində biz seçim sahələrinə iç-içə cədvəlin sahələri kimi istinad edəcəyik və onları formadan ağacın uşaq sətirlərinə yazacağıq.

Bu kodun qaytarılacağı nəticədir

Hələ suallarınız var?

“Yeni başlayanlar üçün 1C-də sorğular” kursumu öyrənəndə onlara özünüz cavab verəcəksiniz. Bu və bir çox digər məsələlərin daha ətraflı müzakirə edildiyi yer. Bütün məlumatlar sadə və əlçatan formada verilir və hətta 1C-də proqramlaşdırma ilə xüsusilə tanış olmayanlar üçün başa düşüləndir.

20% endirim üçün promo kodu: hrW0rl9Nnx

İstənilən məbləğdə ianə verməklə layihəmə dəstək olun

Qruplarıma qoşulun.