Sorğunu 1 saniyədə ifadə edin 8.2. Document.Consumables AS Sarf materialları

Qalanlarına indi baxaq.

1C sorğularında sətirlərlə işləmək üçün funksiyalar

1C sorğularında sətir məlumatları ilə işləmək üçün bir neçə funksiya və operator var.

Birincisi, sorğulara sətirlər əlavə edilə bilər. Bunu etmək üçün "+" operatorundan istifadə edin:

Sorğu. Mətn = "SEÇ
"" Xətt: " " + Mənbə.Ad
;

İkincisi, xəttin bir hissəsini seçə bilərsiniz. Bunu etmək üçün funksiyadan istifadə edin ƏMƏK. Funksiya daxili 1C dilinə bənzəyir. Onun üç parametri var:

  1. Mənbə sətri.
  2. Seçilmiş xəttin başlamalı olduğu simvolun nömrəsi.
  3. Personajlar.

Sorğu. Mətn= "SEÇİN
SUBSTRING("
"Xətt:" ", 4, 3) Nəticə olaraq"; // Nəticə: tamam

Funksiya ISNULL

NULL 1C: Enterprise platformasında xüsusi məlumat növüdür. O, həm də bu növün yeganə mümkün dəyəridir. NULL sorğularda bir neçə halda görünə bilər: sorğu mənbələrini birləşdirərkən, cədvəllərdən birində müvafiq qiymət tapılmadıqda; mövcud olmayan obyektin təfərrüatlarına daxil olduqda; sorğu sahələrinin siyahısında NULL göstərilibsə (məsələn, bir neçə cədvəldən seçim nəticələrini birləşdirərkən) və s.

Çünki NULL nə null, nə boş sətir, nə də dəyərdir Müəyyən edilməmiş, onu daha faydalı məlumat növü ilə əvəz etmək çox vaxt faydalıdır. Funksiya bunun üçün nəzərdə tutulub. ISNULL.

Onun iki parametri var:

  1. Yoxlanılan dəyər.
  2. Birinci parametrin NULL olduğu ortaya çıxarsa, onu əvəz edəcək dəyər.

Sorğu. Mətn= "SEÇİN
ISNULL(Mənbə.Qalıq, 0) AS Qalan"
; // Əgər sorğunun nəticəsi sahənin qalığıdırsa = NULL,
// onda 0 ilə əvəz olunacaq və siz onunla riyazi əməliyyatlar yerinə yetirə bilərsiniz

Funksiyalar PERFORMANSGİRİŞ BAĞLANTILARI

Bu funksiyalar müxtəlif dəyərlərin simli təsvirlərini əldə etmək üçün nəzərdə tutulmuşdur. Yəni onlar istinadları, nömrələri, booleanları və s. düz mətnə. Aralarındakı fərq funksiyasıdır PERFORMANS istənilən məlumat növlərini mətnə ​​(sətir) və funksiyaya çevirir GİRİŞ BAĞLANTILARI- yalnız əlaqə qurur və qalan dəyərləri olduğu kimi qaytarır, çevrilmir.

Sorğu. Mətn= "SEÇİN
Boolean KİMİ TƏMSİL (DOĞRU),
NÖMRƏ OLARAQ TƏMSİL (4),
TƏMSİL (Mənbə.Link) Link,
TƏMSİL (TARİXSAAT(2016,10,07)) Tarix KİMİ"
;
// Boolean = "Bəli", Nömrə = "4", Link = "Sənəd kassa mədaxil orderi No.... from..."
// Tarix="07.10.2016 0:00:00"

Sorğu. Mətn= "SEÇİN
Məntiq KİMİ TƏMSİL REFERANS(DOĞRU),
NÖMRƏ KİMİ TƏMSİL ARAYIQ(4).
TƏQDİM LINK(Mənbə.Link) Link AS,
NÜMAYƏNDƏTİ ARAYIŞ(TARİXSAAT(2016,10,07)) Tarix KİMİ"
;
// Boolean = DOĞRU, Nömrə = 4, Link = "Nağd pul mədaxil orderi №....-dən... sənədləşdirin"
// Tarix=07.10.2016 0:00:00

Funksiyalar TİPTİP DƏYƏRLƏR

Funksiya TİP 1C: Enterprise platforması məlumat növünü qaytarır.

Sorğu. Mətn= "SEÇİN
TYPE (Nömrə)
TYPE (String),
NÖVÜ (Sənəd. Xərc Kassa Sifarişi)"
;

Funksiya TİP DƏYƏRLƏR ona ötürülən dəyərin növünü qaytarır.

Sorğu. Mətn= "SEÇİN
DƏYƏRLƏR TİPİ (5) Nömrə,
TİP ("
"Xətt" ") AS String,
TYPE (Source.Link) AS Referans
Directory.Source AS Mənbədən"
;
//Nömrə=Nömrə, Sətir=String, Directory = DirectoryLink.Source

Bu funksiyalardan istifadə etmək rahatdır, məsələn, sorğuda alınan sahənin hansısa növ dəyər olub-olmadığını öyrənmək lazım olduqda. Məsələn, Kontakt Məlumatı məlumat reyestrindən qarşı tərəflərin əlaqə məlumatlarını alaq (orada təkcə qarşı tərəflərin deyil, həm də təşkilatların, fiziki şəxslərin və s. kontaktlar saxlanılır):

Sorğu. Mətn= "SEÇİN

FROM

HARADA
DƏYƏRLƏR TİPİ(Əlaqə Məlumatı.Obyekt) = TYPE(Directory.Qarşı tərəflər)"
;

Funksiya MƏNA

Funksiya Məna istifadə etmədən 1C konfiqurasiya obyektlərini birbaşa sorğuda istifadə etməyə imkan verir.

Əvvəlki nümunəyə daha bir şərt əlavə edək. Sizə yalnız qarşı tərəflərin telefon nömrələrini almaq lazımdır.

Sorğu. Mətn= "SEÇİN
Əlaqə Məlumatı. Giriş
FROM
Məlumat reyestri Əlaqə məlumatı NECƏ Əlaqə məlumatı
HARADA
DƏYƏRLƏR NÖVÜ(Əlaqə Məlumatı.Obyekt) = TYPE(Directory.Qarşı tərəflər)
AND ContactInfo.Type = DƏYƏR(Enum.ContactInfoTypes.Phone)"
;

Qeyd etmək lazımdır ki, bu funksiya yalnız əvvəlcədən təyin edilmiş dəyərlərlə istifadə edilə bilər, yəni. konfiquratordan birbaşa əldə edilə bilən dəyərlərlə. Yəni funksiya MƏNA istifadəçilər tərəfindən yaradılan kataloq elementləri ilə istifadə edilə bilməz, lakin siyahılarla, əvvəlcədən təyin edilmiş kataloq elementləri ilə, dəyərlərlə işləyə bilər EmptyLink.

Operator LINK

Operator LINK sorğu ilə qaytarılan dəyərlərin müəyyən bir istinad növünə aid olub olmadığını yoxlamaq üçün nəzərdə tutulmuşdur. Eyni vəzifə funksiyalardan istifadə etməklə yerinə yetirilə bilər TİPTİP DƏYƏRLƏR(daha geniş əhatə dairəsinə malikdir və yuxarıda müzakirə edilmişdir).

Məsələn, qarşı tərəflər üçün əlaqə məlumatlarının seçilməsi vəzifəsi bu şəkildə həll edilə bilər:

Sorğu. Mətn= "SEÇİN
Əlaqə Məlumatı. Giriş
FROM
Məlumat reyestri Əlaqə məlumatı NECƏ Əlaqə məlumatı
HARADA
Əlaqə Məlumatı.Obyekt LINK Directory.Qarşı tərəflər"
;

Operator EXPRESS

Operator EXPRESS 1C sorğularında iki halda istifadə olunur:

  • primitiv bir növün xüsusiyyətlərini dəyişdirmək lazım olduqda;
  • mürəkkəb məlumat növü olan sahəni tək tipli sahəyə çevirmək lazım olduqda.

Primitiv məlumat növlərinə aşağıdakılar daxildir: nömrə, sətir, tarix, boolean. Bu məlumat növlərindən bəziləri əlavə xüsusiyyətlərə malikdir. Növ Nömrə uzunluğu və dəqiqliyi, növü var Xətt - uzunluğu və ya qeyri-məhdud.

Operator EXPRESS məlumat tipini deyil, əlavə xüsusiyyətləri dəyişdirməyə imkan verir. Məsələn, o, qeyri-məhdud uzunluqlu simi məhdud uzunluqlu simə çevirə bilər. Sorğu nəticələrini belə bir sahə üzrə qruplaşdırmaq lazımdırsa, bu faydalı ola bilər. Siz qeyri-məhdud uzunluğa malik sahələr üzrə qruplaşdıra bilməzsiniz, ona görə də onu 200 simvol uzunluğunda sətirə çeviririk.

Sorğu. Mətn= "SEÇİN
KƏMİYYƏTİ (MALLARIN VƏ XİDMƏTLƏRİN MÜXTƏLİF gəlişi. Link) Link AS
FROM
Sənəd.Malların və xidmətlərin qəbulu NECƏ Malların və xidmətlərin qəbulu
GROUP BY
EXPRESS(Malların və xidmətlərin qəbulu. ROW KİMİ Şərh (200))"
;

Bəzi hallarda, kompozit məlumat növü olan sahələrə sorğular 1C platforması tərəfindən optimal şəkildə işlənməyə bilər. Bu, daha uzun sorğu vaxtları ilə nəticələnir, ona görə də mürəkkəb növü əvvəlcədən bir növə çevirmək faydalı ola bilər.

Sorğu. Mətn= "SEÇİN
EXPRESS(Malların Dövriyyəsi.Sənəd KİMİ Sifariş.Müştəri Sifarişi).Tarix Sifariş Tarixi,
Malların dövriyyəsi.Nomenklatura
FROM
Reyestr Yığımlar.Malların Hərəkəti.Tirnover AS Malların HərəkətiDövriyyəsi
HARADA
Malların Dövriyyəsi.Sifariş LINK Sənədi.Müştəri Sifarişi”
;

Operatorlar SEÇİMNULL IS

Operator SEÇİM operatora bənzəyir ƏGƏR daxili 1C dilində, lakin bir qədər azaldılmış funksionallığa malikdir.

Deyək ki, biz Əlaqə məlumatı məlumat reyestrindən əlaqə məlumatı almaq istəyirik və eyni zamanda onun qarşı tərəfə və ya fiziki şəxsə aid olub-olmadığını ayrıca sorğu sahəsində qeyd edək.

Sorğu. Mətn= "SEÇİN
Əlaqə Məlumatı. Giriş,
SEÇİM
DƏYƏRLƏR NÖVÜ(Əlaqə Məlumatı.Obyekt) = TİP (Directory.Qarşı tərəflər)
SONRA "
Qarşı tərəf "
BAŞQA SEÇİM
VAXT DƏYƏRLƏR TİPİ(Əlaqə Məlumatı.Obyekt) = TYPE(Directory.Şəxslər)
SONRA "
fərdi"
YAXŞI "Başqası" "
SON
SAHİBİ KİMİ SON EDİN
FROM
Məlumat reyestri. Əlaqə məlumatı AS Əlaqə məlumatı"
;

Nümunədən göründüyü kimi, dizaynda SEÇİM sözdən sonra həmişə şərt olur NƏ VAXT;şərt sözdən sonra doğru olarsa tətbiq edilən dəyər SONRA və şərt yerinə yetirilmədikdə tətbiq olunan dəyər sözdən sonra BAŞQA. Hər üç dizayn elementi SEÇİM məcburidir. Elementi buraxın BAŞQA, operatordan istifadə edərkən olduğu kimi ƏGƏR daxili 1C dilində bu mümkün deyil. Həm də operatordan SEÇİM dizaynın analoqu yoxdur ELSEIF, ancaq birinə investisiya edə bilərsiniz SEÇİM digərində, bizim nümunəmizdə olduğu kimi.

Operator NULL IS dizaynda istifadə olunur SEÇİM sorğu sahəsini NULL növü ilə müqayisə etmək.

Sorğu. Mətn= "SEÇİN
SEÇİM
DƏYƏR NULL OLSUNDA 0
ALSE Mənası
SON"
;

Bundan əlavə, operator NULL IS sorğu şərtlərində, məsələn, cümlədə istifadə oluna bilər HARADA.

Bu yazıda biz "Express" funksiyası tərəfindən təmin edilən 1C sorğu dilində növün dəyişdirilməsi imkanlarını təhlil edəcəyik.
Bu funksiyadan istifadə etmək üçün bir neçə varianta baxaq.
Və ilk seçim rəqəmlərin yuvarlaqlaşdırılmasıdır.

Bunun üçün aşağıdakı formatda Express funksiyasından istifadə etməlisiniz:

Ekspres(<Число>Nömrə kimi(<ДлинаЧисла>,<Точность>))

Harada:
Nömrə— yuvarlaqlaşdırılmalı olan sahə
UzunluqNömrələri- maksimum nömrə uzunluğu
Dəqiqlik— ədədin yuvarlaqlaşdırılması dəqiqliyi

Həm uzunluq, həm də dəqiqlik parametrləri müsbət tam ədədlər olmalıdır.
Aşağıdakı şəkildə bu funksiyanın necə işlədiyinə baxın.

İkinci istifadə halı simli tökmədir. Çox vaxt konfiqurasiyalar müəyyən məhdudiyyətlər qoyan qeyri-məhdud uzunluqlu sətirlərdən istifadə edir. Məsələn, biz qeyri-məhdud uzunluqdakı sətirləri müqayisə edə bilmərik.
Aşağıdakı sorğuda TamAd sahəsi qeyri-məhdud uzunluqlu sətir tiplidir və bu sorğu işləməyəcək.

Onun işləməsi üçün qeyri-məhdud uzunluqlu sahəni müəyyən uzunluqlu sətirə çevirmək lazımdır, bu, aşağıdakı formatda Express funksiyasından istifadə etməklə həyata keçirilir:

Ekspres(<Строка>string kimi(<ДлинаСтроки>)

Harada
Xətt Uzunluğu– sətrin qısaldılacağı maksimum uzunluq.
Sorğunu yenidən işləyək: şərti olaraq biz limitsiz sətri müəyyən uzunluqlu sətirə çevirəcəyik. Sonra heç bir səhv olmayacaq.

Onun tətbiqi üçün sonuncu və deyərdim ki, ən vacib variantı nəzərdən keçirək: kompozit tipli sahələrlə işləyərkən.
Aşağıda kompozit sahələrdən istifadə edən iki sorğu var. Birincisi səhv, ikincisi isə düzgündür.

Bunlar. Mürəkkəb tipli bir sahə əldə etmək lazım olduqda, həmişə bu sahənin dəyərini yalnız Express funksiyasından istifadə edərək növü yayımladıqdan sonra əldə edin. Bu halda sənədlər və arayış kitabları aşağıdakı formatda olacaq:

Ekspres(<Документ>Sənəd kimi.<ИмяТаблицы>)
Ekspres(<Справочник>bir kataloq kimi.< ИмяТаблицы >)
.

Harada
Cədvəl Adı— obyektin adı.

Kompozit növlərlə işləyərkən həmişə ekspress funksiyasından istifadə edin, o, sorğunu çox optimallaşdırır.

Əgər siz hələ də sorğu dilinin konstruksiyalarında “üzərsinizsə” və hətta ən sadə sorğular belə sizin üçün çətinlik yaradırsa, onda sizə “1C-də başlanğıcdan peşəkara qədər sorğular” kursumu tövsiyə edirəm. Bu və bir çox digər məsələlərin daha ətraflı müzakirə edildiyi yer.

Bu kursun özəlliyi nədir:
Kurs 1C-də sorğu dili ilə tanış olmayanlar üçün nəzərdə tutulmuşdur;
Tədris materialı yaxşı tərtib edilmişdir və öyrənmək asandır;
Bir neçə onlarla dərs;
Faydalı praktik nümunələr;
Bütün dərslər aydın və sadə dildə təqdim olunur

Oxucularım üçün 25% endirim kuponu: hrW0rl9Nnx

Mən mümkün qədər tez-tez müxtəlif maraqlı pulsuz məqalələr və video dərslər buraxmağa çalışıram. Ona görə də hər hansı məbləği köçürməklə layihəmi dəstəkləsəniz çox şad olaram:

İstənilən məbləği birbaşa köçürə bilərsiniz:
Yandex.Money - 410012882996301
Web Money - R955262494655

Qruplarıma qoşulun.

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 açar sözləri təyin edə bilərsiniz:

  • 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. Bu halda, hər hansı mövqe üçün qiymət tapılmazsa, əvəzinə NULL-u ə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ə (“ÜMUMİ” 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) üçün ü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ədi dəyərlərdən (İl, Ay, Gün, Saat, Dəqiqə, Saniye) "Tarix" tipli bir dəyər alır.
  • 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.


Sorğu 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.

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

Bir çox insanlar 1C 8 sorğu dilində EXPRESS funksiyasını tip çeviricisi kimi şərh edirlər, lakin o, ümumiyyətlə bu məqsədlər üçün nəzərdə tutulmayıb. Təfərrüatlar kəsim altında...

Beləliklə, bir çox insanlar səhvən bir sahəni tiplə çevirə biləcəklərinə inanırlar Xətt növü ilə sahədə Nömrə və ya xətt üzrə keçid. Əslində, EXPRESS operatoru aşağıdakıları çevirə bilər:

  • primitiv tip parametrləri;
  • mürəkkəb tipli sahəni tək tipli sahəyə;

Bu hallara daha ətraflı baxaq...

Primitiv Tip Parametrlərinin çevrilməsi

Məlumatları qeyri-məhdud tipli bir sətirlə qruplaşdırmaq istədiyimiz bir vəziyyəti nəzərdən keçirək, məsələn, belə bir sətir tez-tez sənədlərdə bir şərhdir. Bu halda şərhə görə qruplaşdıra bilməyəcəyik; xəta alacağıq. Buna görə də, biz qeyri-məhdud uzunluqlu bir sətri məhdud uzunluqlu sətirə çevirməli və sonra qruplaşdırmalıyıq. Məsələn, eyni şərhləri olan sənədlərin sayını hesablayaq:

SEÇİN
EXPRESS(Qəbul.Şərh KİMİ SƏTİR(300)) Şərh AS,
KƏMİYYƏT(Gələn.Link) Link AS
FROM
Sənədi.Giriş zali AS Giriş zalı

GROUP BY
EXPRESS(Qəbul.ŞƏRH SIRA (300))

Başqa bir vəziyyət, sorğuda hesablamalardan istifadə edildikdə, çıxışda çox sayda onluq yerləri olan bir nömrə əldə edə bilərik (1100.001568794). Sorğu tamamlandıqdan sonra bu nömrəni emal etməmək üçün onu dərhal lazımi uzunluğa kəsə bilərsiniz, lakin nömrənin kəsildiyini və yuvarlaqlaşdırılmadığını başa düşmək vacibdir. Misal:

SEÇİN
Satış.Məhsul,
EXPRESS(Satış.Miqdar * Satış.Qiymət NÖMRƏ(15, 2)) Məbləğ KİMİ
FROM

Mürəkkəb tipin tək tipə çevrilməsi

Qeydiyyat registrləri çox vaxt mürəkkəb tipə malikdir; onu tək tipə çevirmək üçün konstruksiyadan istifadə edin EXPRESS Bununla belə, seçmə mərhələsində icra sənədini qəbz sənədinə çevirməyə cəhd etsəniz, sorğu mütləq səhvlə uğursuz olacaq, buna görə də konvertasiya etməzdən əvvəl linkin növünü yoxlamaq lazımdır. Bu belə cəfəngiyyatdır))) Bütün bunlar niyə lazımdır, soruşursan. Cavab verirəm ki, bu, yazının qısalığı hesabına gizli sorğuların optimallaşdırılması məqamlarından biridir. Bu nöqtənin tətbiqinə bir nümunə ilə baxaq.

Deyək ki, siz RN Sales-dən hər bir qeydiyyatçının nömrəsini almağa getmisiniz. sorğu yazın:

MÜXTƏLİF SEÇİN
Satış.Registrator.Nömrə
FROM
Qeydiyyatdan Akkumulyasiyalar.Satış NECƏ Satış

Əslində, heç bir şey daha sadə ola bilməz. Lakin 1C, icra mərhələsində, bu sorğunu heç bir əlaqə olmadan, mümkün qeydiyyatçılarımız olduğu qədər çox sol əlaqələri olan sorğuya çevirir. Bunlar. bu registrə 20 sənəd yazılsa, biz 20 sol birləşmə ilə SQL sorğusu alacağıq. Bu niyə baş verir? Quraşdırılmış 1C optimallaşdırıcısı nöqtə vasitəsilə alınan sahələri çox yaxşı emal etmədiyindən, bu halda o, Nömrə atributudur. Bunlar tortlardır, əgər biz tez-tez sənəd nömrəsini almaq istəyiriksə, onu reyestr məlumatlarına daxil etmək və ya EXPRESS operatorundan istifadə etmək daha məqsədəuyğundur, lakin qısalıq hesabına:

MÜXTƏLİF SEÇİN
Satış.Registrator.Nömrə,
SEÇİM
ZAMAN Satış.Registrator LINK Sənədi.İstehlak
SONRA EXPRESS(Sənəd KİMİ Satış.Registrator.İstehlak)
BAŞQA SEÇİM
ZAMAN Sales.Registrator LINK Document.Implementation
SONRA İFADƏ EDİN(Satış.Registrator Sənəd KİMİ.Tətbiq)
SON
...
Nömrə KİMİ SON
FROM
Qeydiyyatdan Akkumulyasiyalar.Satış NECƏ Satış

İndi sol birləşmə bir xüsusi cədvəli əhatə edəcək.

Ümumiyyətlə, nöqtə vasitəsilə məlumatlara diqqətlə müraciət etməlisiniz, çünki 1C bu vəziyyətdə SQL sorğusunda performansa əhəmiyyətli dərəcədə təsir göstərə bilən sol birləşmədən istifadə edir. Bu optimallaşdırma nöqtələrindən biridir.

1C sorğularında sətirlərlə işləmək üçün bir neçə mexanizm var. Birincisi, xətlər əlavə edilə bilər. İkincisi, sətirdən alt sətir götürə bilərsiniz. Üçüncüsü, simlər, o cümlədən nümunə ilə müqayisə edilə bilər. Yəqin ki, strings ilə edilə bilən bütün bunlardır.

Simli əlavə

Sorğuya sətir əlavə etmək üçün “+” əməliyyatından istifadə olunur. Yalnız məhdud uzunluqdakı sətirləri əlavə edə bilərsiniz.

"Ad: " + Qarşı tərəfləri SEÇİN. DİQQƏTDƏN 1-ci Sütun KİMİ Adlandırın. Qarşı tərəflər Qarşı tərəflər HARƏDƏ Qarşı tərəflər. Link = &Link

Alt sətir funksiyası

SUBSTRING(<Строка>, <НачальнаяПозиция>, <Длина>)

Obyekt modelindən Environment() funksiyasının analoqu. Substring() funksiyası sətir məlumatlarına tətbiq oluna bilər və fraqmenti seçməyə imkan verir <Строки> , simvol nömrəsi ilə başlayır <НачальнаяПозиция> (sətirdəki simvollar 1-dən başlayaraq nömrələnir) və uzunluq <Длина> personajlar. Funksiya hesablamasının nəticəsi dəyişən uzunluqlu sətir növünə malikdir və əgər uzunluq məhdudiyyətsiz hesab ediləcək <Строка> məhdudiyyətsiz uzunluğa və parametrə malikdir <Длина> sabit deyil və ya 1024-dən böyük deyil.

Sətin uzunluğu ikinci parametrdə göstəriləndən azdırsa, funksiya boş sətir qaytaracaq.

Diqqət! Qeyri-məhdud uzunluqlu sətirləri məhdud uzunluqlu sətirlərə çevirmək üçün SUBSTRING() funksiyasından istifadə etmək tövsiyə edilmir. Bunun əvəzinə EXPRESS() operatorundan istifadə etmək daha yaxşıdır.

Oxşar funksiya

Əgər sətir atributunun müəyyən meyarlara cavab verdiyinə əmin olmaq lazımdırsa, onu müqayisə edirik:

Qarşı tərəfləri SEÇİN. qovluqdan 1-ci sütun kimi ad verin. Qarşı tərəflər Qarşı tərəflər HARƏDƏ Qarşı tərəflər. Adı = "Qazprom"

Bəs daha incə bir müqayisəyə ehtiyacınız olsa nə etməli? Yalnız bərabərlik və ya bərabərsizlik deyil, müəyyən bir nümunəyə bənzərlik? Oxşar funksiya məhz bunun üçün yaradılmışdır.

LIKE — Nümunəyə oxşarlıq üçün sətri yoxlamaq üçün operator. SQL-də LIKE analoqu.

Oxşar operator onun solunda göstərilən ifadənin qiymətini sağda göstərilən nümunə sətri ilə müqayisə etməyə imkan verir. İfadənin dəyəri sətir tipli olmalıdır. Əgər ifadənin qiyməti nümunəyə uyğun gəlirsə, operatorun nəticəsi TRUE, əks halda isə YANLIŞ olacaqdır.

Şablon sətirindəki aşağıdakı simvollar xidmət simvollarıdır və sətir simvolundan fərqli məna daşıyır:

  • % (faiz): istənilən sayda ixtiyari simvoldan ibarət ardıcıllıq;
  • _ (alt xətt): bir ixtiyari simvol;
  • […] (kvadrat mötərizədə bir və ya bir neçə simvol): kvadrat mötərizə içərisində sadalanan istənilən tək simvol. Sadalama diapazondan ibarət ola bilər, məsələn, a-z, yəni aralığın sonları daxil olmaqla, aralığa daxil edilmiş ixtiyari simvol;
  • [^...] (kvadrat mötərizədə bir və ya bir neçə simvoldan sonra inkar işarəsi): inkar işarəsindən sonra sadalananlardan başqa hər hansı bir simvol.

Hər hansı digər simvol özü deməkdir və heç bir əlavə yük daşımır. Sadalanan simvollardan birinin özü kimi yazılması lazımdırsa, ondan əvvəl olmalıdır<Спецсимвол>. Özüm<Спецсимвол>(hər hansı uyğun simvol) SPECIAL CHARACTER açar sözündən sonra eyni ifadədə müəyyən edilir.