1C 8.2 sorğu dilində proqramlaşdırma. Sorğuların yaradılması və onlarla işləmək (yeni başlayanlar üçün)

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: 1C-nin quraşdırılması, verilənlər bazası və ilk sorğu ilə tanışlıq

Dərslərin girişini oxumamısınızsa, oxuyun: .

1C quraşdırılması və verilənlər bazası ilə tanış olmaq

Dərslərin praktik hissəsini tamamlamaq üçün bizə üç şey lazımdır:

  1. Platforma 1C 8.3 (8.3.4.482-dən aşağı olmayan).
  2. Əslində, sorğularımızla məlumatları çıxaracağımız verilənlər bazası.
  3. Sorğuları yerinə yetirmək üçün hər dəfə konfiquratora daxil olmamaq üçün xüsusi "Request Console" emalı.

Platformanın quraşdırılması

Əgər sizdə 1C 8.3 versiyası quraşdırılıbsa, ondan istifadə edin. Əgər belə deyilsə, 1C-nin xüsusi olaraq təhsil məqsədləri üçün istehsal etdiyi təhsil versiyasını yükləyin və quraşdırın.

Bunun üçün:

  • Linkdən yüklənmiş arxivi masaüstünüzdə ayrıca qovluğa çıxarın:
    • Dropbox-dan yükləmək üçün keçid (seçim №1)
    • Mail.ru saytından yükləmə linki (seçim №2)
  • "setup.exe" faylını işə salın.
  • Next, Next, Install klikləyin.
  • Quraşdırmanın tamamlanmasını gözləyin.

İş masanızda aşağıdakı qısa yol görünməlidir:

Verilənlər bazasının quraşdırılması və qoşulması

Bu seriyanın bütün dərsləri üçün hazırladığım Gastronom verilənlər bazasından istifadə edəcəyik. Onu aşağıdakılardan yükləyin, paketdən çıxarın və verilənlər bazası siyahısına əlavə edin.

"Sorğu Konsolu" işlənir

Dərslərimizdə bütün sorğuları 1C:Enterprise rejimində yerinə yetirəcəyik. Bunun üçün bizə bu məqsəd üçün nəzərdə tutulmuş “Query Console” emal lazımdır. Buradan yükləyin və masaüstünüzə çıxarın.

Nəhayət, iş yeri quruldu və indi Gastronom məlumat bazamızı 1C: Müəssisə rejimində açmağın vaxtıdır:

İstifadəçi: Administrator.
Parol boşdur.

Bizim verilənlər bazamızda artıq müəyyən məlumatlar var. Üst panel menyusundan əsas obyektlərin üzərinə klikləsəniz (Qida, Tatlar, Rənglər və s.) bunu yoxlaya bilərsiniz:

Obyektlərin növləri

Qida, Tatlar, Rənglər, Müştərilər, Müştəri sifarişləri... - bütün bunlar proqram verilənlər bazası obyektləridir. Bəzi tətbiq olunan problemin həllinə xidmət etdikləri üçün onlara tətbiq deyilir.

Məsələn, obyekt Qida orada hansı növ qida və obyekt haqqında məlumatların saxlanmasına xidmət edir Müştəri sifarişləri müştərilərimiz tərəfindən edilən sifarişlər haqqında məlumatları saxlayır.

Dərslər naminə, hələlik tətbiq verilənlər bazası obyektlərinin iki növdə olduğunu başa düşmək kifayətdir: KataloqlarSənədlər.

Kataloqlar

Kataloqlar sizə olan məlumatları saxlamağa imkan verir eyni struktur və siyahı xarakteri. Bu, məsələn, işçilərin siyahısı, malların siyahısı, təchizatçıların və ya müştərilərin siyahısı ola bilər.

Sənədlər

Sənədlər tətbiq həllində tamamlanmış biznes əməliyyatları haqqında məlumatı saxlamağa imkan verir. əməliyyatlar və ya hadisələrümumiyyətlə müəssisənin “həyatında” baş vermiş. Bunlar, məsələn, hesab-fakturalar, əmək sifarişləri, fakturalar, ödəniş tapşırıqları və s. ola bilər. Hər bir sənəd, kataloqlardan fərqli olaraq, nömrə, tarix və vaxt ilə xarakterizə olunur.

Məlumat bazamızda kim kimdir

İndi yuxarıda verilən məlumatlara əsaslanaraq verilənlər bazamızın obyektlərini bölməyə çalışaq KataloqlarSənədlər.

Geriyə baxmaq üçün vaxt ayırın. Əvvəlcə fikirlərinizi formalaşdırın.

Cavab bax

Obyektlərimizin əsl adları

Həmin obyekt adları ( Qida, Tatlar, ... , Müştəri sifarişi və s.), 1C: Müəssisə rejimində gördüyümüz heç də həmişə real deyil. Çox vaxt onlar istifadəçinin oxuması üçün xoş olması üçün görünürlər.

Amma sorğu yazmaq üçün obyektin əsl adını bilməliyik. Necə öyrənmək olar?

Məsələn, müştəri sifarişləri haqqında məlumat əldə etmək üçün sorğu yazmağa başlasaq, 1C: Müəssisə rejimində göstərilən “Müştəri Sifarişi” adından istifadə edə bilərikmi? Təbii ki, yox, çünki real deyil. Obyektin əsl adını 1C: Konfiqurator rejimində tapmaq olar.

Verilənlər bazası konfiquratoruna gedin və əsas menyudan "Konfiqurasiya" - "Konfiqurasiyanı açın" əmrini yerinə yetirin:

Bunlar bizim obyektlərimizdir (və burada, yeri gəlmişkən, kimin olduğu çox aydındır kataloq, ÜST Sənəd) və onların əsl adları.

Beləliklə, Müştəri Sifarişi obyektinin əsl adı nədir?

Cavab bax

Müştəri sifarişi

İlk xahişimiz

Nəhayət, istəklər üçün "Salam, Dünya"mızı yazaq. Əlbəttə, sorğu dilinin də hər bir dil kimi öz qaydaları var, lakin biz növbəti dərsdə onların nəzərdən keçirilməsinə keçəcəyik. Hələlik aşağıdakı sorğu mətnini verilən kimi götürün:

Kataloqdan * SEÇİN. Qida

Sorğu çox sadədir və prinsipcə, intuitivdir. Bunu özünüz anlamağa çalışın və yalnız bundan sonra izahata baxın.

izahata baxın

Mən öz töhfəmi vermək və yuxarıdakı məqalələrdə müzakirə olunmayan dilin xüsusiyyətlərini təsvir etmək qərarına gəldim. Məqalə yeni başlayan tərtibatçılar üçün nəzərdə tutulub.

1. “IZ” dizaynı.

Verilənlər bazasından məlumat əldə etmək üçün “FROM” konstruksiyasından istifadə etmək heç də lazım deyil.
Misal: Biz banklar kataloqundan banklar haqqında bütün məlumatları seçməliyik.
Sorğu:

Directory.Banks.* SEÇİN

Banklar kataloqundan bütün sahələri seçir. Və sorğuya bənzəyir:

Bankları SEÇİN.* Directory.Banks AS Banks

2. Məlumatların istinad sahəsi üzrə sifariş edilməsi

Sorğu məlumatlarını ibtidai növlər üzrə təşkil etməli olduğumuz zaman: "String", "Nömrə", "Tarix" və s. İstinad sahəsi bir keçiddir, unikal identifikatordur, yəni. Təxminən desək, bəzi ixtiyari simvol dəsti və adi sıralama tamamilə gözlənilməyən bir nəticə verə bilər. İstinad sahələrini sifariş etmək üçün "AVTO SİFARİŞ" konstruksiyası istifadə olunur. Bunu etmək üçün əvvəlcə "SİFARİŞ BY" konstruksiyasından, sonra isə "AVTO SİFARİŞ" konstruksiyasından istifadə edərək məlumatları birbaşa istinad növü üzrə sifariş etməlisiniz.

Bu halda, sənədlər üçün sifariş "Tarix->Nömrə", istinad kitabları üçün "Əsas Görünüş" sırasında həyata keçirilir. Əgər sifariş istinad sahələrində baş vermirsə, onda "AVTO SİFARİŞ" konstruksiyasından istifadə etmək tövsiyə edilmir.

Bəzi hallarda "AVTO SİFARİŞ" konstruksiyası seçim prosesini ləngidə bilər. Eyni şəkildə, sənədlər üçün avtomatik sifariş vermədən yenidən yaza bilərsiniz:

3. İstinad tipinin mətn təsvirinin əldə edilməsi. "TƏQDİMAT" dizaynı.

İstinad tipli bir sahəni, məsələn, "Banklar" kataloqunun elementinə keçid olan "Bank" sahəsini göstərmək lazım olduqda başa düşməlisiniz ki, bu sahəni göstərərkən "" alt sorğusu var. Banklar" kataloqu kataloqun görünüşünü əldə etmək üçün avtomatik olaraq icra ediləcək. Bu, məlumat çıxışını yavaşlatacaq. Bunun qarşısını almaq üçün dərhal obyektin təsvirini əldə etmək və sonra onu baxmaq üçün göstərmək üçün sorğuda “TƏQDİMAT” konstruksiyasından istifadə etməlisiniz.

Məlumatların kompozisiya sistemində bu mexanizm standart olaraq istifadə olunur, lakin hüceyrələrdə tərtibatlar yaratarkən istinad sahəsinin təsvirini təyin etməlisiniz və məsələn, keçidin özünü transkriptdə yerləşdirməlisiniz.

4. Şablon üzrə məlumatların seçilməsi şərti.

Məsələn, (8 -123- 456-78-912) formasının əməkdaşlarının mobil telefonlarını əldə etməlisiniz. Bunu etmək üçün sorğuda aşağıdakı şərti təyin etməlisiniz:

İşçi.Ad,İşçi.Telefon KİMİ MƏLUMATDAN Telefon KİMİ SEÇİN.İşçilər "_-___-___-__-__" kimi telefon

"_" simvolu xidmət simvoludur və istənilən simvolu əvəz edir.

5. Cəmilərin və qrupların eyni vaxtda istifadəsi.


Ümumilər çox vaxt qruplaşmalarla birlikdə istifadə olunur, bu halda ümumi funksiyalar cəmlərdə göstərilməyə bilər;

Xidmətlərin Təminatı SEÇİN. Təşkilat AS Təşkilat, Xidmətlərin Təminatı. Nomenklatura AS Nomenklatura, SUM(Xidmətlərin Göstərilməsi. Sənədin Məbləği) Sənəddən Sənədin Məcmuəsi KİMİ. Xidmətlərin Təminatı KİMİ XİDMƏTLƏRİN GÖRÜŞÜLMƏSİ QRUPU Xidmətlərin göstərilməsi. Təşkilat, təminat Xidmətlərin.Nomenklatura ÜMUMİ NƏTİCƏLƏR, Təşkilat, nomenklatura

Bu halda, sorğu demək olar ki, aşağıdakı sorğu ilə eyni şəkildə qayıdacaq:

Xidmətlərin Təminatı SEÇİN.Təşkilat AS Təşkilat, Xidmətlərin Təminatı.Nomenklatura AS Nomenklatura, Xidmətlərin Təminatı.Sənədin Məbləği Sənəddən Sənədin Məbləği.Xidmətlərin Göstərilməsi KİMİ NƏTİCƏLƏR (Sənəd Məbləği) ÜMUMİ, Təşkilat, Nomenklatura

Yalnız birinci sorğu eyni nomenklaturaya malik qeydləri yığışdıracaq.

6. Sahələrə istinadın ləğvi.

Nöqtə vasitəsilə sahələrə istinad etmək istinad sahəsinə istinadın ləğvi əməliyyatı adlanır. Misal üçün Ödəniş.Təşkilat.İnzibati Vahid. Bu halda, "Ödəniş" sənədinin "Təşkilat" arayış sahəsində "İnzibati Vahid" atributunun dəyərinin alınacağı digər "Təşkilatlar" cədvəlinə istinad edilir. Anlamaq lazımdır ki, sahələrə nöqtə vasitəsilə daxil olarkən platforma gizli şəkildə alt sorğu yaradır və bu cədvəllərə qoşulur.

Sorğu:

Aşağıdakı kimi təmsil oluna bilər:

Ödəniş.Link, Ödəniş.Təşkilat, Ödəniş.Təşkilat, Təşkilatları SEÇİN. Sənəddən İnzibati Vahid. Ödəniş KİMİ Ödəniş SAL QOŞULUN Directory.Organizations AS Organizations Software Payment.Organization = Organizations.Link

Mürəkkəb tipli istinad sahələrinə istinadı ləğv edərkən çərçivə həmin sahənin növünün bir hissəsi olan bütün cədvəllərə gizli birləşmələr yaratmağa çalışır. Bu halda sorğu optimal olmayacaqsa, onun hansı sahə növü olduğu aydındırsa, konstruksiya ilə belə sahələrin növlərinə görə məhdudlaşdırmaq lazımdır EXPRESS().

Məsələn, bir neçə sənədin qeydiyyatçı kimi çıxış edə biləcəyi "Bölüşdürülməmiş ödənişlər" yığım reyestri var. Bu halda, registrator təfərrüatlarının dəyərlərini bu şəkildə əldə etmək düzgün deyil:

Bölünməmiş Ödənişləri.Qeydiyyat.Tarix, ..... QEYDİYYATDAN Yığım.Bölüşdürülməmiş Ödənişləri Bölünməmiş Ödənişlər KİMİ SEÇİN

logger üçün kompozit sahənin növünü məhdudlaşdırmalısınız:

EXPRESS SEÇİN(Bölüşdürülməmiş Ödənişlər. Sənəd KİMİ QEYDİYYAT. Ödəniş).Tarix, ..... QeydiyyatdanYığım.Bölüşdürülməmiş Ödənişlər Bölüşməmiş Ödənişlər KİMİ

7. "HARADA" tikinti

İki cədvəlin sola birləşməsi ilə, sağ cədvələ “HARADA” şərti qoyduğunuzda, cədvəllərin daxili birləşməsi ilə nəticəyə oxşar nəticə əldə edəcəyik.

Misal. Müştərilər Kataloqundan bütün Müştəriləri seçmək lazımdır və "Təşkilat" = &Təşkilat atributunun dəyəri ilə ödəniş sənədi olan müştərilər üçün "Ödəniş" sənədini göstərin, olmayanlar üçün göstərməyin.

Sorğunun nəticəsi yalnız parametrdə təşkilat tərəfindən ödəniş etmiş müştərilər üçün qeydləri qaytaracaq və digər müştəriləri süzəcək. Buna görə də, əvvəlcə "belə və belə" təşkilat üçün bütün ödənişləri müvəqqəti cədvəldə almalı və sonra sol birləşmədən istifadə edərək onu "Müştərilər" qovluğuna qoşmalısınız.

Ödənişi SEÇİN. Ödəniş, Ödəniş. Müştəri KİMİ Səhmdar Sənəddən Ödənişlərə Müştəri YERİ. Ödəniş KİMİ Ödəniş HARADA Ödəniş. Filial = &Branch; /////////////////////////////////////////////// /////////////////////////// Müştəriləri SEÇİN.Link Müştəri, ISNULL(tPayment.Payment, "") Kataloqdan Ödəniş AS .Clients AS Müştərilər BAĞLANTILI ÖDƏNİŞLƏRİ ÖDƏNİŞLƏR KİMİ SOFTWARE Clients.Link = topayments.Client

Bu vəziyyətdən başqa bir şəkildə keçə bilərsiniz. İki cədvəl arasındakı əlaqəyə birbaşa “HARADA” şərtini qoymaq lazımdır. Misal:

Clients.Link, Payment.Link FROM Directory.US_Subscribers KİMİ SEÇİN BAĞLANTI SƏNƏDİNİ ABŞ_Abunəçiləri KİMİ SAL.Ödənişi Ödəniş Proqramı KİMİ (Clients.Link = Payment.Client AND Payment.Client.Ad "Şəkər Paketi" KİMİ) Ödəniş QRUPU, BLLYk. Link

8. İç içə və Virtual Cədvəllərlə birləşir

İç-içə sorğular tez-tez bəzi şərtlərə əsaslanan məlumatları əldə etmək lazımdır. Əgər siz onları digər cədvəllərlə birlikdə istifadə etsəniz, bu, sorğunun icrasını kəskin şəkildə yavaşlata bilər.

Məsələn, bəzi müştərilər üçün cari tarixə balans məbləğini almalıyıq.

Bölünməmiş Ödəniş Balanslarını SEÇİN. Müştəri, Bölünməmiş Ödəniş Balansları. Məbləğ Balansı (Müştəriləri SEÇİN. Rehberdən Link KİMİ. Müştərilər Clients.Link IN(&Clients)) JOStedINQuery Regulations.Pay.Pay. Nested nyRequest.Link BY Bölünməmiş Ödənişlər = Ayrılmamış Ödənişlər Balanslar. Müştəri

Belə bir sorğunu yerinə yetirərkən DBMS optimallaşdırıcısı plan seçərkən səhvlərə yol verə bilər ki, bu da sorğunun suboptimal icrasına gətirib çıxaracaq. İki cədvəli birləşdirən zaman DBMS optimallaşdırıcısı hər iki cədvəldəki qeydlərin sayına əsasən cədvəl birləşmə alqoritmini seçir. İç-içə sorğu varsa, iç-içə sorğunun qaytaracağı qeydlərin sayını müəyyən etmək olduqca çətindir. Buna görə də, iç içə sorğular əvəzinə həmişə müvəqqəti cədvəllərdən istifadə etməlisiniz. Beləliklə, sorğunu yenidən yazaq.

Müştəriləri.Link KİMİ SEÇİN Link YERİ tMüştəriləri Directory.Clients-DƏN MÜŞTƏRİ KİMİ HARADA
Clients.Link B (&Clients); /////////////////////////////////////////////// /////////////////////////// tMüştəriləri SEÇİN.Link,BölünməmişÖdənişlərQalan.Məbləğ,tMüştərilərdən tMüştərilər KİMİ QOŞULUŞAQ Reyestrdə Yığımlar.BölüşdürülməmişÖdənişlər. IN (SEÇİN tClients.Link FROM tClients)) AS UnallocatedPaymentsBalances tClients.Link = UnallocatedPaymentsBalances.Clients

Bu halda, optimallaşdırıcı tClients müvəqqəti cədvəlinin neçə qeyddən istifadə etdiyini müəyyən edə biləcək və cədvəllərə qoşulmaq üçün optimal alqoritmi seçə biləcək.

Virtual masalar , sizə ən çox tətbiq olunan tapşırıqlar üçün praktiki olaraq hazır məlumatları əldə etməyə imkan verir (Slice of the First, Slice of the Last, Remains, Turovers, Remains and Turnors) Burada əsas söz virtualdır. Bu cədvəllər fiziki deyil, sistem tərəfindən tez bir zamanda tərtib edilir, yəni. Virtual cədvəllərdən verilənləri qəbul edərkən sistem yekun registr cədvəllərindən məlumatları toplayır, toplayır, qruplaşdırır və istifadəçiyə verir.

Bunlar. Virtual cədvələ qoşulduqda alt sorğu ilə əlaqə qurulur. Bu halda, DBMS optimallaşdırıcısı qeyri-optimal əlaqə planını da seçə bilər. Əgər sorğu kifayət qədər tez yaradılmırsa və sorğu virtual cədvəllərdə birləşmələrdən istifadə edirsə, onda virtual cədvəllərə girişi müvəqqəti cədvələ köçürmək və sonra iki müvəqqəti cədvəl arasında birləşmə etmək tövsiyə olunur. Əvvəlki sorğunu yenidən yazaq.

Müştəriləri.Link KİMİ SEÇİN tMüştəriləri Directory.Clients-DƏN MÜŞTƏRİ KİMİ LİNK İLƏ İNDEKSİ HARADA
Clients.Link B (&Clients); /////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// SEÇİN Bölüşdürülməmiş Ödənişlər.Məbləğ,Bölüşdürülməmiş Ödənişlər.Müştəri KİMİ RegisterAccumulations.BölüşdürülməmişÖdənişlər.Balanslar(, Müştəri B () tClients-dən Link SEÇİN)) Bölünməmiş Ödənişlər Balansları; /////////////////////////////////////////////// ////////////////////////////////////////// tClients.Link, to Remainders.TClients-dən Qalan Məbləğ KİMİ SEÇİN tClients KİMİ tClients.Lk.-də Qalanlar KİMİ SALDI. = tRemainings.Client

9. Sorğunun nəticəsinin yoxlanılması.

Sorğunun nəticəsi boş ola bilər, boş dəyərləri yoxlamaq üçün aşağıdakı konstruksiyadan istifadə edin:

ResRequest = Request.Execute(); Əgər resQuery.Empty() varsa, Qayıdın; endIf;

Metod Boş()üsullardan əvvəl istifadə edilməlidir seçin() və ya Boşaltma(), çünki kolleksiyanın bərpası vaxt aparır.

Döngüdə sorğulardan istifadə etməyin son dərəcə arzuolunmaz olduğu heç kimə aşkar deyil. Bu, müəyyən bir funksiyanın işləmə müddətinə kritik təsir göstərə bilər. Sorğudakı bütün məlumatları qəbul etmək və sonra məlumatları bir dövrədə emal etmək çox arzu edilir. Ancaq bəzən sorğunu loopdan kənara çıxarmaq mümkün olmadığı hallar olur. Bu halda, optimallaşdırma üçün sorğunun yaradılmasını döngədən kənara köçürə və dövrədə lazımi parametrləri əvəz edə və sorğunu yerinə yetirə bilərsiniz.

Sorğu = Yeni Sorğu; Query.Text = "SEÇ | Müştərilər.Link, | Müştərilər.Doğum tarixi |FROM | Directory.Clients AS Clients |HARA | Clients.Link = &Client"; Cədvəl Müştərilərindən Hər Sətir üçün Loop Query.SetParameter("Müştəri", Müştəri); QueryResult = Query.Execute().Select(); EndCycle;

Bu, sistemi bir döngədə sorğunun yoxlanılmasından xilas edəcək.

11. Tikinti "HAVING".

İstəklərdə olduqca nadir olan bir dizayn. Məcmu funksiyaların dəyərlərinə (SUM, MINIMUM, AVERAGE və s.) şərtlər qoymağa imkan verir. Məsələn, yalnız sentyabr ayında ödəniş məbləği 13.000 rubldan çox olan müştəriləri seçməlisiniz. “HARADA” şərtindən istifadə etsəniz, əvvəlcə müvəqqəti cədvəl və ya iç-içə sorğu yaratmalı, oradakı qeydləri ödəniş məbləğinə görə qruplaşdırıb sonra şərti tətbiq etməli olacaqsınız. “HAVING” konstruksiyası bunun qarşısını almağa kömək edəcək.

Ödəniş.Müştəri, Sənəddən Məbləğ KİMİ MƏBLƏĞİ(Ödəniş.Məbləğ) SEÇİN. Ödəniş KİMİ AY (Ödəniş.Tarix) = 9 ÖDƏNİŞƏ GÖRƏ QRUP. MƏBLƏĞİ OLAN MÜŞTƏRİ(Ödəniş.Məbləğ) > 13000

Konstruktorda bunu etmək üçün sadəcə "Şərtlər" sekmesine keçin, yeni bir şərt əlavə edin və "Xüsusi" onay qutusunu yoxlayın. Sonra sadəcə yazın Məbləğ(Ödəniş.Məbləğ) > 13000


12. NULL dəyəri

Mən burada üç dəyərli məntiqin prinsiplərini təsvir etməyəcəyəm, bu mövzuda çoxlu məqalələr var; Necə haqqında qısaca SIFIR sorğunun nəticəsinə təsir edə bilər. NULL dəyəri əslində dəyər deyil və dəyərin qeyri-müəyyən olması məlum deyil. Buna görə də, NULL ilə istənilən əməliyyat, istər əlavə, çıxma, bölmə və ya müqayisə olsun, NULL qaytarır. NULL dəyəri NULL dəyəri ilə müqayisə edilə bilməz, çünki nəyi müqayisə edəcəyimizi bilmirik. Bunlar. bu müqayisələrin hər ikisi belədir: NULL = NULL, NULL<>NULL doğru və ya yanlış deyil, bilinmir.

Bir nümunəyə baxaq.

Ödənişləri olmayan müştərilər üçün “İmza” sahəsini “Ödəniş yoxdur” dəyəri ilə göstərməliyik. Üstəlik, belə müştərilərimizin olduğunu dəqiq bilirik. Və yuxarıda yazdıqlarımın mahiyyətini əks etdirmək üçün bunu belə edək.

Atribut KİMİ "Ödəniş yoxdur" SEÇİN, Ödəmələrin SƏNƏD YERİ KİMİ NULL; /////////////////////////////////////////////// //////////////////////////////////////// Müştəriləri SEÇİN.Link AS Müştəri, Ödəniş.Link Ödəniş tClientPayment-i Directory.Clients-DƏN NECƏ QOYUR. Ödəniş AS Ödəniş Proqramı Müştəriləri.Link = Ödəniş.Səhmdar; /////////////////////////////////////////////// ///////////////////////// tClientPayment.Client FROM tClientPayment AS DAXİLİ QOŞULUN tPayment KİMİ tClientPayment.Ödəniş = t

tClientPayment-in ikinci müvəqqəti cədvəlinə diqqət yetirin. Sol qoşulma ilə mən bütün müştəriləri və bu müştərilər üçün bütün ödənişləri seçirəm. Ödənişləri olmayan müştərilər üçün “Ödəniş” sahəsi NULL olacaq. Məntiqə əsasən, birinci müvəqqəti cədvəldə “ödəmələr” 2 sahəni təyin etdim, onlardan biri NULL, ikincisi “Ödənişləri yoxdur” sətridir. Üçüncü cədvəldə "Ödəniş" və "Sənəd" sahələrindən istifadə edərək "tClientPayment" və "tPayment" cədvəllərini daxili birləşmə ilə birləşdirirəm. Bilirik ki, birinci cədvəldə “Sənəd” sahəsi NULL, ikinci cədvəldə isə “Ödəniş” sahəsində ödənişləri olmayanlar da NULL-dur. Belə bir əlaqə bizə nə qaytaracaq? Amma heç nə qaytarmayacaq. Çünki NULL = NULL müqayisəsi True olaraq qiymətləndirilmir.

Sorğunun gözlənilən nəticəni qaytarması üçün onu yenidən yazaq:

"Ödəniş yoxdur" Atribut, VALUE(Document.Payment.EmptyLink) Ödənişlərə Sənəd YERİ KİMİ SEÇİN; /////////////////////////////////////////////// /////////////////////////// Müştəriləri SEÇİN.Link Müştəri, ISNULL(Ödəmə.Link, DƏYƏR(Sənəd.Ödəniş.BoşLink )) NECƏ Ödəniş tMüştəri Ödənişini Directory.Clients FROM FROM.Clients KİMİ SOLD BAĞLANTI Sənədi.Ödəniş Müştərilərin Ödənişi KİMİ.Link = Payment.Shareholder; /////////////////////////////////////////////// ///////////////////////// tClientPayment.Client FROM tClientPayment AS tClientPayment DAXİLİ QOŞULUN tClientPayment.Ödəniş = t

İndi ikinci müvəqqəti cədvəldə qeyd etdik ki, “Ödəniş” sahəsi NULL-dursa, bu sahə = ödəniş sənədinə boş bir keçiddir. Birinci cədvəldə biz də NULL-u boş istinadla əvəz etdik. İndi əlaqə NULL olmayan sahələri əhatə edir və sorğu gözlənilən nəticəni qaytaracaq.

Məqalədə olan bütün sorğular nəzərdən keçirmək istədiyim vəziyyətləri əks etdirir və başqa heç nə yoxdur. HAQQINDA Onlar xəyalpərəst və ya suboptimal olmaya bilər, əsas odur ki, nümunənin mahiyyətini əks etdirir.

13. "SEÇİM ZAMAN... SONRA... SON" dizaynının sənədsiz xüsusiyyəti.

Sorğuda "Şərtlər" konstruksiyasını təsvir etmək lazım olduqda, standart sintaksisdən istifadə edirik:

Users.Name = "Vasya Pupkin" SONRA "Sevimli işçimiz" SEÇİN ZAMAN "Biz bunu bilmirik" Directory.Users AS Users FROM Field1 KİMİ SON EDİN

Bəs, məsələn, sorğuda ayın adını almalıyıqsa? Müraciətdə nəhəng bir tikinti yazmaq çirkin və vaxt aparan işdir, ona görə də yuxarıdakı yazının bu forması bizə kömək edə bilər:

AYI SEÇİN(ABŞ_CalculationConsumption_TurnoverSchedule.CalculationPeriod) 1 NƏ ZAMAN "YANVAR" DA 2 SONRA "Fevral" DA 3 NƏ ZAMAN SONRA "Mart" 4 NƏ ZAMAN SONRA "Aprel" AYIN 5 ZAMAN SONRA "May" SONRA "NHJ77" ZAMAN 8 SONRA "Avqust" 9 NAXCİYƏ SONRA "Sentyabr" 10 NAXCƏ SONRA "Oktyabr" 11 ZAMAN SONRA "Noyabr" 12 NƏ ZAMAN SONRA "Dekabr" AY KİMİ BİTİR

İndi dizayn daha az çətin görünür və başa düşmək asandır.

14. Sorğunun toplu icrası.


Sorğuları çoxaltmamaq üçün bir böyük sorğu yarada, onu paketlərə ayıra və onunla işləyə bilərsiniz.
Məsələn, "İstifadəçilər" kataloqundan aşağıdakı sahələri almalıyam: "Doğum tarixi" və hər bir istifadəçi üçün mövcud rollar. bunu formada müxtəlif cədvəl hissələrinə yükləyin. Əlbəttə ki, bunu bir sorğuda edə bilərsiniz, sonra qeydləri təkrarlamalı və ya onları yığışdırmalı olacaqsınız və ya bunu edə bilərsiniz:

İstifadəçilər.Link KİMİ SEÇİN Tam Ad, İstifadəçilər.Doğum Tarixi, İstifadəçilər.Rol vtİstifadəçiləri Directory.İstifadəçilər AS İstifadəçilər KİMİ QOYUN; /////////////////////////////////////////////// ////////////////////////// SEÇİN tueUsers.Tam adı, tueUsers.Doğum tarixi tueUsers AS tueUsers QRUPLA tueUsers.tam ad, tueUsers . Doğum tarixi; /////////////////////////////////////////////// ///////////////////////// wUsers.Tam adı, wUsers.Role FROM wUsers BY WROUP BY wUsers.Tam Name, WUsers Doğum tarixi

tPackage = Request.ExecutePackage();

TP_BirthDate = tPackage.Upload();
TP_Roles = tPackage.Unload();

Gördüyümüz kimi, sorğu toplu şəklində yerinə yetirilə bilər və nəticə massiv kimi işlənə bilər. Bəzi hallarda çox rahatdır.

15. Toplu sorğuda şərtlər

Məsələn, toplu sorğumuz var, burada əvvəlcə "İstifadəçilər" kataloqundan "Ad, Doğum tarixi, Kod" sahələrini alırıq və "Şəxslər" kataloqundan bu sahələr üçün şərtləri olan qeydləri almaq istəyirik.

İstifadəçilər.Fərdi.Ad AS Ad, İstifadəçilər.Fərdi.Doğum Tarixi, Doğum Tarixi AS, İstifadəçilər.Fərdi.Kod SEÇİN. /////////////////////////////////////////////// /////////////////////// Fərdi şəxslər AS Directory

Bu kimi şərtlər qoya bilərsiniz:

HARADA Fərdilər.Kod GİRİŞ (vtUsers-DƏN vtUsers.Kodu SEÇİN) VƏ Fərdilər.Ad GİRİŞİ (vtUsers.Kodunu vtUsers-DƏN SEÇİN) VƏ Şəxslər.Doğum tarixi IN (tvİstifadəçilərindən vtUsers.DateDoğum tarixini SEÇİN)

Və bunu belə edə bilərsiniz:

HARADA (Şəxslər.Kodu, Fərdilər.Ad, Fərdilər.Doğum Tarixi) IN (SEÇİN tueUsers.Code, tueUsers.Name, tueUsers.Doğum tarixi tueUsers)

Üstəlik, asayişi qorumaq lazımdır.

16. Toplu sorğuda “şərt” üçün sorğu qurucusunun çağırılması

Şərt qoymaq lazım gəldikdə, yuxarıdakı nümunədə olduğu kimi, virtual cədvəldə bu və ya digər sahənin necə çağırıldığını unuda bilərsiniz.
Məsələn, "Doğum tarixi" sahəsinə şərt qoymalısınız və virtual cədvəldə bu sahə "Borclunun doğum tarixi" adlanır və adı unutsanız, şərti redaktə etmədən çıxmalı olacaqsınız. qənaət edin və sahənin adına baxın. Bunun qarşısını almaq üçün aşağıdakı texnikadan istifadə edə bilərsiniz.

“B” konstruksiyasından sonra mötərizələr qoymaq və mötərizələr arasında boşluq (boşluq) qoymaq, bu boşluğu seçmək və sorğu konstruktorunu çağırmaq lazımdır. Dizayner toplu sorğunun bütün cədvəllərinə çıxış əldə edəcək. Texnika həm virtual registr cədvəllərində, həm də "Şərtlər" sekmesinde işləyir. Sonuncu halda, "P (ixtiyari şərt)" qutusunu yoxlamaq və "F4" redaktə rejiminə daxil olmaq lazımdır.

Sorğular tez-tez tez tərtib edilir və onlar sadəcə nəzərdən keçirdiyim "texnikaları" göstərmək üçün xidmət edir.

Sorğularda indekslərin istifadəsinə baxmaq istədim, lakin bu çox geniş mövzudur. Ayrı bir məqalədə yerləşdirəcəm və ya sonra bura əlavə edəcəm.

upd1. 11,12 nöqtələri
upd2. 13,14,15,16-cı nöqtələr

İstifadə olunmuş Kitablar:
Sorğu dili "1C:Enterprise 8" - E.Yu. Xrustaleva
1C: Enterprise 8 sistemində peşəkar inkişaf."

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ÇİN | 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ş bir qeyd ilə sabit bir sahə təyin edir, həmçinin istənilən növ boş bir 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 şəxs) AS Fərdi, //əvvəlcədən təyin edilmiş hesab DƏYƏRİ(Hesablar Planı. Öz-özünə uçot.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əği Endirimlə SON EDİN | FROM |

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 EXPRESS(Satış.Registrator AS Document.Implementation) AS SON |.

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əhsullarInStockRemains.InStockRemaining, 0) Kataloqdan |.Nomenklatura AS No. ;

7. TƏMSİL funksiyası- sorğu sahəsinin təqdimatını ə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Ç | ZAMAN Qalanlar.Registrator LINK Sənədi.Malların qəbulu və Xidmətlər |. SONRA ""İstehlak" |. Anbarlarda Qalan Məhsullar AS |.

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). Özünü təmin edən mallar)";

4. OXŞAR dizayn- Bu funksiya sətri sətir nümunəsi ilə 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 | Directory. 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Ə ÜÇÜ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 | Pulsuz 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ə linkin göstərilməsi ilə baş verəcək, əgər bayraq söndürülürsə, bağlantılar yaddaşdakı 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İŞ | |. AVTO SİFARİŞ OXUMA";

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Ç | ProductsInWarehouses.Nomenklatura AS Nomenklatura, | ProductsInWarehouses.Warehouse, | SUM(MallarInStock.InStock) AS |FROM | RegisterAccumulations.ProductsInWarehouses |MəhsullarInhouses , |. Treasures.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 | GROUP BY |.MəhsullarAmbarda.Ambarda |Mövcuddur.

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ə //AmountForCalcCompRemaining > 100 "SELECT | CompensationRPORemains.Counterparty, |CompensationRPORemains.Child, | CompensationRPORemains.CompensationRemaining, | CompensationRPORemains.AmountForCalcCompRemains |AmountForCalcCompRemains |AmountForCalcCompRemains |AmountForCalcCompRemains |AmountForCalcCompRemains |MəlumatTəzminatı.Compenation.FROMASPlace | ins |HARADA |KompensasiyaRPORqalan.KompensasiyaQalan<>0 | Və KompensasiyaRPORemains.AmountForCalcCompRemaining> 100" ;

14. Dizayn NƏTİCƏLƏRİ... ÜMUMİ- cəmləri hesablamaq üçün istifadə olunur dizayn, cəmilərin hesablanacağı sahələri və ümumi sahələrə tətbiq olunan aqreqat funksiyaları müəyyən edir; TOTAL quruluşundan 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şmalar AS Hesablamalar |. ÜMUMİ |

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

İstək istifadəçiyə tələb olunan formada təqdim etmək üçün verilənlər bazasından məlumatları çıxarmaq və emal etmək üçün nəzərdə tutulmuşdur. Burada emal sahələrin qruplaşdırılması, sıraların çeşidlənməsi, ümumilərin hesablanması və s. 1C-də sorğulardan istifadə edərək məlumatları dəyişə bilməzsiniz!

Sorğu verilmiş təlimatlara uyğun olaraq icra olunur - sorğu mətni. Sorğu mətni sintaksis və qaydalara uyğun tərtib edilir sorğu dili. 1C: Enterprise 8 sorğu dili standarta əsaslanır SQL, lakin bəzi fərqlər və genişlənmələr var.

Sorğu ilə işləmə sxemi

Sorğu ilə işləməyin ümumi sxemi bir neçə ardıcıl mərhələdən ibarətdir:

  1. Sorğu obyektinin yaradılması və sorğu mətninin qurulması;
  2. Sorğu parametrlərinin qurulması;
  3. Sorğunun icrası və nəticəsinin alınması;
  4. Sorğu nəticəsində yan keçmək və alınan məlumatları emal etmək.

1. Obyekt Sorğu mülkü var Mətn, sorğu mətnini təyin etməli olduğunuz.

// Seçim 1
Sorğu = Yeni Sorğu;
Sorğu . Mətn =
"SEÇİN
| Valyuta məzənnələri.Dövr,
| Valyuta məzənnələri. Valyuta,
| Valyuta məzənnələri. Məzənnə
|FROM

|HARADA
;

// Seçim 2
Sorğu = Yeni Sorğu("SEÇ
| Valyuta məzənnələri.Dövr,
| Valyuta məzənnələri. Valyuta,
| Valyuta məzənnələri. Məzənnə
|FROM
| Məlumat reyestri. Valyuta məzənnələri Valyuta məzənnələri
|HARADA
| Valyuta məzənnələri. Valyuta = &Valyuta");

2. Parametr dəyərlərinin təyin edilməsi metoddan istifadə etməklə həyata keçirilir SetParameter(< Имя>, < Значение>) . Sorğu mətnindəki parametrlər " işarəsi ilə göstərilir. & " və adətən seçim şərtlərində (HERE bölməsi) və virtual cədvəl parametrlərində istifadə olunur.

sorğu);

3. Mətni təyin etdikdən və parametrlər təyin edildikdən sonra sorğu yerinə yetirilməli və icra nəticəsi alınmalıdır. İcra obyekti qaytaran Execute() metodu ilə həyata keçirilir Sorğu Nəticəsi. Sorğunun nəticəsindən siz:

  • Select metodundan istifadə edərək seçim əldə edin (< ТипОбхода>, < Группировки>, < ГруппировкиДляЗначенийГруппировок>) ;
  • Yükləmə metodundan istifadə edərək dəyərləri dəyər cədvəlinə və ya dəyər ağacına yükləyin (< ТипОбхода>) .

// Nümunə qəbul edin

Nümunə = Sorğu Nəticəsi. seçin();

// Dəyərlər cədvəlini əldə edin
RequestResult = Sorğu. Run();
Cədvəl = Sorğu Nəticəsi. Boşaltma();

4. Döngədən istifadə edərək sorğunun nəticəsi seçimini keçə bilərsiniz:

sağol Nümunə.Next() döngəsi
Hesabat (Seçim.Kurs);
EndCycle;

Sorğu ilə işləməyin tam nümunəsi belə görünə bilər:

// Mərhələ 1. Sorğunun yaradılması və sorğu mətninin qurulması
Sorğu = Yeni Sorğu;
Sorğu . Mətn =
"SEÇİN
| Valyuta məzənnələri.Dövr,
| Valyuta məzənnələri. Valyuta,
| Valyuta məzənnələri. Məzənnə
|FROM
| Məlumat reyestri. Valyuta məzənnələri Valyuta məzənnələri
|HARADA
| Valyuta məzənnələri. Valyuta = &Valyuta";

// Mərhələ 2. Parametrlərin qurulması
Sorğu . SetParameter("Currency", SelectedCurrency);

// Mərhələ 3. Sorğunun icrası və nümunənin alınması
RequestResult = Sorğu. Run();
Nümunə = Sorğu Nəticəsi. seçin();

// Seçimdən keçmək
sağol Nümunə.Next() döngəsi
Hesabat (Seçim.Kurs);
EndCycle;

Müraciət mətninin tərkibi

Müraciət mətni bir neçə bölmədən ibarətdir:

  1. Sorğu Təsviri— seçilə bilən sahələrin və məlumat mənbələrinin siyahısı;
  2. Sorğuların birləşdirilməsi— “BİRLƏŞİN” və “HAMISI BİRLƏŞİN” ifadələri;
  3. Nəticələrin təşkili— “SİFARİŞ BY...” ifadəsi;
  4. Avtomatik sifariş— “AVTO SİFARİŞ” ifadəsi;
  5. Nəticələrin təsviri- “NƏTİCƏLƏR ... BY …” ifadəsi.

Yalnız birinci bölmə məcburidir.

Müvəqqəti cədvəllər və toplu sorğular

1C sorğu dili istifadəni dəstəkləyir müvəqqəti masalar— sorğunun icrası nəticəsində alınmış və müvəqqəti saxlanılan cədvəllər.

Siz tez-tez belə bir vəziyyətlə qarşılaşa bilərsiniz ki, siz sorğunun mənbəyi kimi verilənlər bazası cədvəllərini deyil, başqa sorğunun icrasının nəticəsini istifadə etməlisiniz. Bu problem daxili sorğular və ya istifadə edərək həll edilə bilər müvəqqəti masalar. Müvəqqəti cədvəllərin istifadəsi mürəkkəb sorğunun mətnini onun tərkib hissələrinə bölmək yolu ilə sadələşdirməyə, həmçinin bəzi hallarda sorğunun icrasını sürətləndirməyə və kilidlərin sayını azaltmağa imkan verir. Müvəqqəti cədvəllərlə işləmək üçün obyektdən istifadə edin Cədvəl Meneceri. Müvəqqəti cədvəl PLACE açar sözündən sonra müvəqqəti cədvəlin adı ilə yaradılır.

ManagerVT = Yeni TemporaryTablesManager;
Sorğu = Yeni Sorğu;
Sorğu . ManagerTemporaryTables = ManagerVT;

Sorğu . Mətn =
"SEÇİN
| Valyutalar. Kodu,
| Valyutalar.Adı
|Valyuta ilə yer
|FROM
| Directory.Currencies AS Valyutalar";

RequestResult = Sorğu. İcra etmək();

VTVcurrency müvəqqəti cədvəlindən digər sorğularda istifadə etmək üçün bu sorğulara ümumi müvəqqəti cədvəl meneceri təyin etməlisiniz—VT Manager.

Toplu sorğu“;” simvolu ilə ayrılmış bir neçə sorğu ehtiva edən sorğudur. Toplu sorğunu yerinə yetirərkən ona daxil olan bütün sorğular ardıcıllıqla yerinə yetirilir və bütün müvəqqəti cədvəllərin nəticələri bütün sonrakı sorğular üçün əlçatan olur. Toplu sorğulara açıq şəkildə müvəqqəti cədvəl menecerinin təyin edilməsi lazım deyil. Əgər müvəqqəti cədvəl meneceri təyin olunmayıbsa, sorğu yerinə yetirildikdən dərhal sonra bütün müvəqqəti cədvəllər silinəcək.

Toplu sorğular üçün ExecuteBatch() metodu mövcuddur, o, bütün sorğuları yerinə yetirir və bir sıra nəticələr qaytarır. Toplu sorğuda müvəqqəti cədvəllər qeydlərin sayını saxlayan bir sıra və bir sütun “Saymaq” olan cədvəllə təmsil olunacaq. Toplu sorğuları aradan qaldırmaq üçün metoddan istifadə edə bilərsiniz ARALI MƏLUMATLARLA DƏSTƏYİ icra edin() : O, qeydlərin sayını deyil, müvəqqəti cədvəllərin faktiki məzmununu qaytarır.

// Toplu sorğu ilə işləmək nümunəsi
Sorğu = Yeni Sorğu;
Sorğu . Mətn =
"SEÇİN
| Valyutalar.Adı
|FROM
| Directory.Currencies Valyutalar AS
|;
|SEÇ
| Nomenklatura.Ad
|FROM
| Nomenklatura AS Nomenklaturası".;

BatchResult = Sorğu. ExecuteBatch();

TZ valyutaları =Paket Nəticə[ 0 ]. Boşaltma();
TZNomenklatura = Paket Nəticəsi[ 1 ]. Boşaltma();

// Toplu sorğuda müvəqqəti cədvəllərdən istifadə nümunəsi
Sorğu = Yeni Sorğu;
Sorğu . Mətn =
"SEÇİN
| Məhsullar NECƏ məhsul
|PLACE WTT Məhsulları
|FROM
| Directory.Nomenklatura NECƏ Məhsullar
|HARADA
| Məhsullar.Manufacturer = &İstehsalçı
|;
|SEÇ
| VTTProducts.Məhsul,
| Peşə məktəbi Kəmiyyət,
| Peşə məktəbi.Qiymət,
| Peşə məktəbi.Link AS DocumentReceipts
|FROM
| VT Məhsulları VT Məhsulları AS
| SOL BAĞLANTI PTU AS Malların və xidmətlərin qəbulu
| Proqram təminatı VTPProducts.Product = PTU.Nomenklatura"
;

Sorğu . SetParameter( "İstehsalçı", İstehsalçı);

RequestResult = Sorğu. Run();
Nümunə = Sorğu Nəticəsi. seçin();

sağol Nümunə.Next() döngəsi

EndCycle;

Virtual masalar

Virtual masalar- bunlar verilənlər bazasında saxlanmayan, lakin platforma tərəfindən yaradılan cədvəllərdir. Əsasən bunlar platforma tərəfindən icra edilən bir və ya daha çox fiziki cədvələ qarşı iç-içə sorğulardır. Virtual cədvəllər yalnız registrlərdən məlumat alır və əsasən yüksək ixtisaslaşmış məsələlərin həlli üçün nəzərdə tutulub.

Aşağıdakı virtual cədvəllər mövcuddur (mümkün parametrlər mötərizədə göstərilmişdir):

  • Məlumat registrləri üçün:
    • SliceFirst(<Период>, <Условие>) — göstərilən tarix üçün ən erkən qeydlər;
    • SliceLast(<Период>, <Условие>) — göstərilən tarix üçün ən son qeydlər;
  • Yığım registrləri üçün:
    • qalıqlar(<Период>, <Условие>) — müəyyən edilmiş tarixə qalıqlar;
    • İnqilablar (<НачалоПериода>, <КонецПериода>, <Периодичность>, <Условие>) - Dövr əməliyyatları;
    • QalıqlarVə Dövriyyə(<НачалоПериода>, <КонецПериода>, <Периодичность>, <МетодДополненияПериодов>, <Условие>) — dövr üzrə qalıqlar və dövriyyə;
  • Mühasibat uçotu registrləri üçün:
    • qalıqlar(<Период>, <УсловиеСчета>, <Субконто>, <Условие>) — hesab, ölçülər və subhesablar kontekstində göstərilən tarixə qalıqlar;
    • İnqilablar (<НачалоПериода>, <КонецПериода>, <Периодичность>, <УсловиеСчета>, <Субконто>, <Условие>, <УсловиеКорСчета>, <КорСубконто>) — hesablar, ölçülər, korr kontekstində dövr üzrə dövriyyə. hesablar, subconto, kor. subconto;
    • QalıqlarVə Dövriyyə(<НачалоПериода>, <КонецПериода>, <Периодичность>, <МетодДополненияПериодов>, <УсловиеСчета>, <Субконто>, <Условие>) — hesablar, ölçülər və subhesablar üzrə qalıqlar və dövriyyə;
    • DövriyyəDtKt(<НачалоПериода>, <КонецПериода>, <Периодичность>, <УсловиеСчетаДт>, <СубконтоДт>, <УсловиеСчетаКт>, <СубконтоКт>, <Условие>) — Dt hesabı, Kt hesabı, Subconto Dt, Subconto Kt hesabı üzrə dövr üzrə dövriyyə;
    • HərəkətlərSubconto(<НачалоПериода>, <КонецПериода>, <Условие>, <Порядок>, <Первые>) — alt konto qiymətləri ilə birlikdə hərəkətlər;
  • Hesablama registrləri üçün:
    • Baza(<ИзмеренияОсновногоРегистра>, <ИзмеренияБазовогоРегистра>, <Разрезы>, <Условие>) — hesablama registrinin əsas məlumatları;
    • DataGraphics(<Условие>)—qrafik məlumat;
    • Aktual Fəaliyyət Dövrü(<Условие>) faktiki qüvvədə olma müddətidir.

Virtual cədvəllərlə işləyərkən seçimləri HARA vəziyyətində deyil, virtual cədvəllərin parametrlərində tətbiq etməlisiniz. Sorğunun icra müddəti bundan çox asılıdır.

Sorğu konstruktoru

Sorğu mətnlərinin daxil edilməsini sürətləndirmək üçün platformada xüsusi vasitələr var: Sorğu konstruktoruNəticə emalı ilə sorğu konstruktoru. Konstruktorlara zəng etmək üçün siçanın sağ düyməsini sıxıb tələb olunan elementi seçmək lazımdır:

Konstruktorları əsas menyudan da çağırmaq olar Mətn.

Sorğu qurucusundan istifadə edərək proqramçı sorğu mətnini interaktiv şəkildə qura bilər. Bunun üçün siçan ilə lazımi cədvəl və sahələri seçin, əlaqələr, qruplaşmalar, yekunlar və s. Bu yanaşma vaxta qənaət edir və mümkün səhvləri aradan qaldırır. İşinin nəticəsi olaraq sorğu konstruktoru sorğu mətnini yaradır.

Nəticə emalı ilə sorğu konstruktoru sorğu mətnini yaratmaqla yanaşı, verilənlərin qəbulu və emalı üçün hazır kod fraqmenti yaradır.

RequestSchema obyekti

Platforma obyektdən istifadə edərək sorğu mətnini proqramlı şəkildə yaratmağa və redaktə etməyə imkan verir Sxem sorğusu. Obyektin vahid xassəsi var Müraciətlər toplusu, burada obyekt hazırda redaktə olunan bütün sorğuların xüsusiyyətlərini saxlayır. RequestSchema obyekti aşağıdakı üsulları dəstəkləyir:

  • SetQueryText(< Текст>) — ötürülən sorğu mətni əsasında Request Packet xassəsini doldurur;
  • GetQueryText() - Sorğu Paketi xassəsinə əsasən yaradılan sorğu mətnini qaytarır;
  • FindParameters() - sorğu parametrlərini qaytarır.

RequestSchema obyekti ilə işləmək nümunəsinə baxaq. Sorğu mətnini proqramlı şəkildə yaratmaq üçün

SORTLAMA
Valyutalar.Kod

Daxili dil kodu belə görünə bilər:

RequestScheme = Yeni RequestScheme;
Paket 1 = Sorğu sxemi. RequestBatch[ 0 ];
Operator 1 = Paket 1. Operatorlar[ 0 ];
// mənbə əlavə etmək
Qeydiyyat Cədvəli = Operator1. Mənbələr. əlavə et( "Directory. Valyutalar", "Valyutalar" );
// sahələrin əlavə edilməsi
FieldLink = Operator1. Seçilə bilən sahələr. Əlavə et("Currencies.Link" , 0 );
FieldCode = Operator1. Seçilə bilən sahələr. Əlavə et("Currencies.Code", 1);
// sahə ləqəblərinin təyin edilməsi
Paket 1 . Sütunlar[ 0 ]. Alias ​​= "Valyuta" ;
Paket 1 . Sütunlar[ 1 ]. Alias ​​= "Kod" ;
// şərt əlavə etmək
Operator 1 . Seçim. əlavə et( "Bayraq Silmə DEYİL");
// sifariş əlavə edin
Paket 1 . Sifariş verin. Əlavə et (FieldCode);
RequestText = RequestScheme. GetQueryText();

Sorğular verilənlər bazasında saxlanılan məlumatları oxumağa və emal etməyə imkan verən daxili dillə yanaşı, 1C:Enterprise-in əsas mexanizmlərindən biridir. Sorğuları tərtib etmək üçün 1C: Enterprise SQL-ə əsaslanan öz dilindən istifadə edir.

Kitab sorğu dili 1C: Enterprise 8 SQL master ilə tanış olmayan yeni başlayan tərtibatçılara kömək edəcəkdir. Kitab digər inkişaf mühitlərində SQL sorğularını yazmaq təcrübəsi olanlar üçün də faydalı olacaq, çünki 1C: Enterprise sorğu dili maliyyə və iqtisadi tapşırıqların xüsusiyyətlərinə yönəlmiş xeyli sayda genişləndirmələri ehtiva edir.

Kitabda xeyli sayda praktiki nümunələr yer alır. Nümunələrin yaradılması üçün 1C: Enterprise platformasının 8.3.3.687 versiyasından istifadə edilmişdir.

Əlavə edilmiş CD-də bu nümunələri təsvir edən demo konfiqurasiyalar və 1C: Enterprise 8 platformasının təlim versiyası var.

Əlavə materiallar:

Tətbiq 1C: Enterprise 8.2 platformasının təlim versiyasını ehtiva edir, onun köməyi ilə kitabda təsvir olunan nümunəni müstəqil surətdə çıxara bilərsiniz. Bütün addımlar ətraflı təsvir edilmişdir, belə ki, hər kəs müstəqil olaraq öz kompüterində onları təkrarlaya bilər.

Səhifədəki materialları və təlim versiyasını yükləyin, arxivi açın və yeni başlayanlar üçün İnternet konfransının quraşdırılması üçün təlimatlara əməl edin.

Fəsil 1. Sorğu mexanizmi

  • 1C: Enterprise-də məlumatların necə saxlanılması
  • Sorğular üçün mənbə cədvəlləri
  • Sorğu dili "1C: Enterprise"
    • Əsl masalar
    • Virtual masalar
  • Sorğu dili "1C: Enterprise"
    • Ümumi sorğunun icra sxemi
    • Mətn sintaksisini tələb edin
    • Tək cədvəldən məlumat almaq üçün sorğu dilinin istifadəsinə dair nümunələr
    • Birdən çox cədvəldən məlumat əldə etmək üçün sorğu dilinin istifadəsinə dair nümunələr

Fəsil 2. Daxili dildə sorğularla işləmək

  • Sorğu konstruktoru
  • Sadə sorğunun yaradılması
  • Sorğu Mənbə Əlaqələri
  • Sorğuların birləşdirilməsi
  • Müvəqqəti cədvəldən istifadə edən toplu sorğu yaradın
  • Daxili dildən sorğuların icrası
    • Sorğu yaradın
    • Parametrlərin sorğuya ötürülməsi
    • Sorğu nəticəsindən nümunə götürülür
    • Sorğu nəticəsindən seçimin keçməsi
    • Sorğu Qurucusundan istifadə edərək Sorğu Nəticələrinin Emalı
    • Sorğu nəticəsinin cədvələ və ya dəyərlər ağacına yüklənməsi
    • Daxili dildən istifadə edərək müvəqqəti cədvəllərdən istifadə
    • Sorğulardan istifadə edərək müxtəlif problemlərin həlli nümunələri

Fəsil 3. Tətbiqi məsələlərin həlli

  • Məlumatların saxlanması
    • Məlumat reyestrləri
    • Xarakterik tipli planlar
  • Vəsaitlərin hərəkətinin uçotu
    • Yığım registrləri
  • Mühasibat uçotu
    • Hesab planları
    • Xüsusiyyət növləri üçün planlar - subconto növləri
    • Mühasibat uçotu registrləri
  • Mürəkkəb dövri hesablamalar
    • Hesablama tipli planlar
    • Hesablama registrləri

Yüklənə bilən arxivlərdə elektron kitab faylları var:

  • 1C_QueryLanguage.epub* rəngli şəkilləri dəstəkləyən cihazlarda oxumaq üçün;

  • 1C_QueryLanguageBWReaders.epub* qara və ağ ekranlı cihazlarda oxumaq üçün;

  • 1C_QueryLanguage.pdf(A5 formatı).

Ödənişdən sonra siz onlardan hər hansı birini və ya hamısını bir anda yükləyə bilərsiniz.

Adobe Digital Editions

“1C: Enterprise 8 Query Language” çap nəşrinin elektron analoqu (ISBN 978-5-9677-1987-5, M.: 1C-Publishing MMC, 2013; 1C qiymət cədvəlinə uyğun olaraq çap kitabının məqalə nömrəsi şirkət: 4601546108029 ).

1C-Publishing MMC, 2013
© Dizayn. 1C-Publishing MMC, 2013
Bütün hüquqlar qorunur.
Materiallar alıcının şəxsi istifadəsi üçün nəzərdə tutulub.
Müəllif hüquqları sahiblərinin yazılı icazəsi olmadan materialları çoxaltmaq, yaymaq və ya materiallara onlayn girişi təmin etmək qadağandır.
İşlənmiş proqram həllərində istifadə üçün proqram kodunun fraqmentlərinin surətini çıxarmağa icazə verilir.

Sistem tələbləri:

  • .epub* formatında faylları oxumaq üçün proqram
    *.epub fayllarının Adobe Digital Editions oxuyucusu vasitəsilə kompüterdə oxunması tövsiyə olunur. Digər proqramlardan istifadə edərək oxuyarkən, eyni vaxtda iki səhifəni göstərən baxış rejimindən istifadə etmək tövsiyə edilmir - çox sayda şəkillərə görə, yanlış ekran baş verə bilər.

  • Adobe Reader pdf faylları oxumaq üçün

Kitab üçün ödəniş təsdiqləndikdən sonra siz alacaqsınız:

* Adobe Digital Editions oxuyucu proqramından istifadə edərək kompüterinizdə .epub fayllarını oxumağınız tövsiyə olunur. Digər proqramlardan istifadə edərək oxuyarkən, eyni vaxtda iki səhifəni göstərən baxış rejimindən istifadə etmək tövsiyə edilmir - çox sayda şəkillərə görə, yanlış ekran baş verə bilər.

Yüklənə bilən məhsullar niyə daha yaxşıdır?

Çatdırılma üçün pul ödəməyə ehtiyac yoxdur, jurnalı günün istənilən vaxtında bir neçə kliklə alırsınız;

Yükləmə sürəti yalnız bağlantınızın imkanlarından asılıdır, yükləmə menecerləri dəstəklənir;

Satınalmanızı almaqla bağlı hər hansı probleminiz varsa, onlayn məsləhətçilərimizlə əlaqə saxlaya bilərsiniz;

Yüklənir...Yüklənir...