So'rovni 1 soniya ichida bildiring

Mos kelmaydigan turlar "EXPRESS"- bu xabar 1C 8.2 yoki 8.3 dasturchisi ikki xil turni solishtirishga harakat qilganda paydo bo'ladi.

Express() funktsiyasi 1C so'rov maydonining qiymatini ma'lum bir turga aylantirish imkonini beradi. Bu ikki holatda kerak bo'lishi mumkin:

1. Kerakli raqam sig'imi yoki satr qiymatining kerakli miqdordagi belgilarini oling. Cheksiz turdagi maydonlardagi belgilar soni ma'lum xususiyatlar tufayli cheklangan bo'lishi kerak.

1C da 267 ta video darslarni bepul oling:

Masalan:

EXPRESS(Nomenklatura. Izoh STRING AS(300))
EXPRESS(Nomenklatura.Narxi RAQAM(15, 2))

2. Murakkab tipdagi maydonni bitta turdagi maydonga aylantiring. Bu maqsadlar uchun kerak bo'lishi mumkin. Agar terilgan maydon boshqa turdagi qiymatni o'z ichiga olsa, tizim NULLni qaytaradi, shuning uchun har doim "QAYER" bo'limida LINK operatori bilan cheklab qo'shimcha shart qo'yish kerak bo'ladi.

Masalan:

TANLANG

EXPRESS(Sales.Registrator Hujjat AS.Implementation)

FROM

WHERE Sales.Registrator LINK Document.Implementation

Qanday qilib xatolardan qochish kerak

Sintaksis noto'g'ri ishlatilganda "Mos kelmaydigan turlar EXPRESS..." kabi xatolar paydo bo'lishi mumkin.

Masalan, “EXPRESS(“123″ AS NUMBER(5, 2)) AS SUM” konstruksiyasi xato deb hisoblanadi, chunki standart usullar yordamida so‘rovni bir turdan boshqasiga o‘tkazib bo‘lmaydi.

Agar siz 1C dasturlashni o'rganishni boshlayotgan bo'lsangiz, biz bepul kursimizni tavsiya qilamiz (unutmang

So'rovlar tili ishlab chiquvchilar uchun 1C 8.3 ning asosiy mexanizmlaridan biridir. So'rovlar yordamida siz ma'lumotlar bazasida saqlangan har qanday ma'lumotlarni tezda olishingiz mumkin. Uning sintaksisi SQL ga juda o'xshash, ammo ba'zi farqlar mavjud.

1C 8.3 (8.2) so'rovlar tilining SQL-ga nisbatan asosiy afzalliklari:

  • mos yozuvlar maydonlarini bekor qilish (ob'ekt tafsilotlariga bir yoki bir nechta nuqtalarni ko'rsatish);
  • natijalar bilan ishlash juda qulay;
  • virtual jadvallarni yaratish qobiliyati;
  • so'rov ingliz va rus tillarida yozilishi mumkin;
  • blokirovkalardan qochish uchun ma'lumotlarni bloklash qobiliyati.

1C da so'rovlar tilining kamchiliklari:

  • SQL-dan farqli o'laroq, 1C so'rovlarida ma'lumotlarni o'zgartirishga ruxsat bermaydi;
  • saqlangan protseduralarning etishmasligi;
  • satrni raqamga aylantirishning mumkin emasligi.

Keling, 1C so'rovlar tilining asosiy konstruksiyalari bo'yicha mini qo'llanmamizni ko'rib chiqaylik.

1C-dagi so'rovlar faqat ma'lumotlarni olishga imkon berishi sababli, har qanday so'rov "SELECT" so'zi bilan boshlanishi kerak. Ushbu buyruqdan keyin ma'lumotlarni olish kerak bo'lgan maydonlar ko'rsatiladi. Agar siz "*" ni belgilasangiz, barcha mavjud maydonlar tanlanadi. Ma'lumotlar tanlanadigan joy (hujjatlar, registrlar, ma'lumotnomalar va boshqalar) "FROM" so'zidan keyin ko'rsatiladi.

Quyida ko'rib chiqilgan misolda "Nomenklatura" katalogidan butun nomenklaturaning nomlari tanlangan. "QANDAY" so'zidan keyin jadvallar va maydonlar uchun taxalluslar (nomlar) ko'rsatilgan.

TANLANG
Nomenklatura Nomenklatura nomi AS Nomenklatura nomi
FROM
Katalog.Nomenklatura AS Nomenklaturasi

“SELECT” buyrug'i yonida siz kalit so'zlarni belgilashingiz mumkin:

  • TURLI. So'rov faqat kamida bitta maydonda farq qiluvchi qatorlarni tanlaydi (dublikatlarsiz).
  • BIRINCHI n, Qayerda n- natijaning boshidan tanlanishi kerak bo'lgan qatorlar soni. Ko'pincha, bu konstruktsiya saralash (ORDER BY) bilan birgalikda qo'llaniladi. Masalan, sana bo'yicha yaqinda bo'lgan ma'lum miqdordagi hujjatlarni tanlashingiz kerak bo'lganda.
  • RUXSAT BERILGAN. Ushbu dizayn ma'lumotlar bazasidan faqat joriy foydalanuvchi uchun mavjud bo'lgan yozuvlarni tanlash imkonini beradi. Ushbu kalit so'zdan foydalanishga asoslanib, foydalanuvchi kirish huquqiga ega bo'lmagan yozuvlarni so'rashga urinayotganda xato xabarini oladi.

Ushbu kalit so'zlar birgalikda yoki alohida ishlatilishi mumkin.

O'ZGARISH UCHUN

Ushbu taklif o'zaro nizolarni oldini olish uchun ma'lumotlarni bloklaydi. Tranzaktsiya tugaguniga qadar bloklangan ma'lumotlar boshqa ulanishdan o'qilmaydi. Ushbu bandda siz qulflanishi kerak bo'lgan maxsus jadvallarni belgilashingiz mumkin. Aks holda, hamma bloklanadi. Dizayn faqat avtomatik qulflash rejimiga tegishli.

Ko'pincha balanslarni olishda "O'ZGARISH UCHUN" bandi qo'llaniladi. Axir, dasturda bir vaqtning o'zida bir nechta foydalanuvchilar ishlaganda, kimdir balansni olsa, boshqasi ularni o'zgartirishi mumkin. Bunday holda, olingan qoldiq endi to'g'ri bo'lmaydi. Agar siz ushbu taklif bilan ma'lumotlarni bloklasangiz, birinchi xodim to'g'ri balansni olguncha va u bilan barcha kerakli manipulyatsiyalarni bajarmaguncha, ikkinchi xodim kutishga majbur bo'ladi.

TANLANG
O'zaro hisob-kitoblar.Xodim,
O'zaro hisob-kitoblar.O'zaro hisob-kitoblar summasi Balans
FROM
Jamg'armalar reestri Xodimlar bilan o'zaro hisob-kitoblar Balanslar AS O'zaro hisob-kitoblar
O'ZGARISH UCHUN

QAYERDA

Dizayn yuklangan ma'lumotlarga qandaydir tanlovni qo'yish uchun zarur. Registrlardan ma'lumotlarni olishning ba'zi hollarda virtual jadvallar parametrlarida tanlash shartlarini ko'rsatish maqsadga muvofiqdir. "WHERE" dan foydalanilganda birinchi navbatda barcha yozuvlar olinadi va faqat keyin tanlov qo'llaniladi, bu so'rovni sezilarli darajada sekinlashtiradi.

Quyida ma'lum bir lavozim uchun aloqa xodimlarini olish so'roviga misol keltirilgan. Tanlash parametri quyidagi formatga ega: &ParameterName (parametr nomi ixtiyoriy).

TANLASH (CASE)

Dizayn to'g'ridan-to'g'ri so'rov matnida shartlarni belgilash imkonini beradi.

Quyidagi misolda “AdditionalField” hujjatning joylashtirilgan yoki joylashtirilmaganligiga qarab matnni o'z ichiga oladi:

TANLANG
Qabul T&U.Link,
TANLOV
Qabul T&U. Amalga oshirilganda
KEYIN "Hujjat qabul qilindi!"
BOSHQA "Hujjat e'lon qilinmadi..."
Qo'shimcha maydon sifatida tugaydi
FROM
Hujjat.Tovar va xizmatlarni qabul qilish QANDAY qabul qilish T&S

QO'SHILING

Muayyan munosabatlar sharti asosida ikkita jadvalni birlashtiradi.

CHAP/O'NG ULANISH

LEFT qo'shilishning mohiyati shundaki, birinchi ko'rsatilgan jadval to'liq olinadi va ikkinchisi ulanish shartiga ko'ra unga bog'lanadi. Agar ikkinchi jadvalda birinchi jadvalga mos yozuvlar bo'lmasa, ularning qiymatlari sifatida NULL o'zgartiriladi. Oddiy qilib aytganda, asosiy jadval birinchi ko'rsatilgan jadval va ikkinchi jadvalning ma'lumotlari (agar mavjud bo'lsa) allaqachon uning ma'lumotlari bilan almashtirilgan.

Masalan, “Tovar va xizmatlarni qabul qilish” hujjatlaridan ob’ektlarni va “Tovar narxlari” axborot reestridan narxlarni olish kerak. Bunday holda, agar biron bir pozitsiya uchun narx topilmasa, uning o'rniga NULLni almashtiring. Hujjatdagi barcha elementlar narxi bor yoki yo'qligidan qat'iy nazar tanlanadi.

TANLANG
Kvitansiya va U.Nomenklatura,
Narxlar.Narx
FROM
Hujjat.Tovar va xizmatlarni qabul qilish.Tovarlarni QANDAY qabul qilish T&C
ICHKI QO'SHILMA RegistrMa'lumot.NarxlarNomenklatura.SliceOxirgi AS Narxlar
Dasturiy ta'minot kvitansiyasi va U.Nomenklatura = Narxlar.Nomenklatura

TO'G'RIDA hammasi aksincha.

TO'LIQ ULANISH

Ushbu turdagi ulanish avvalgilaridan farq qiladi, natijada birinchi jadvalning ham, ikkinchisining ham barcha yozuvlari qaytariladi. Belgilangan havola sharti asosida birinchi yoki ikkinchi jadvalda hech qanday yozuv topilmasa, uning o'rniga NULL qaytariladi.

Oldingi misolda to'liq ulanishdan foydalanilganda, "Tovar va xizmatlarni qabul qilish" hujjatidagi barcha elementlar va "Tovar narxlari" registridagi barcha so'nggi narxlar tanlanadi. Birinchi va ikkinchi jadvallarda topilmagan yozuvlarning qiymatlari NULL ga teng bo'ladi.

ICHKI QO‘SHILMA

INNER JOIN va FULL JOIN o'rtasidagi farq shundaki, agar jadvallarning kamida bittasida yozuv topilmasa, so'rov uni umuman ko'rsatmaydi. Natijada, agar oldingi misolda "TO'LIQ" ni "INTERNAL" bilan almashtirgan bo'lsak, "Tovarlar va xizmatlarni qabul qilish" hujjatidan faqat "Tovar narxlari" ma'lumotlar reestrida yozuvlar mavjud bo'lgan bandlar tanlanadi.

GURUH BO'YICHA

1C so'rovlarida guruhlash sizga ma'lum bir umumiy xususiyatga (maydonlarni guruhlash) ko'ra jadval qatorlarini (guruhlash maydonlarini) yig'ish imkonini beradi. Guruhlash maydonlari faqat agregat funktsiyalari yordamida ko'rsatilishi mumkin.

Quyidagi so'rovning natijasi ular uchun maksimal narxlar bilan mahsulot turlarining ro'yxati bo'ladi.

TANLANG
,
MAX(Price.Price) AS Narx
FROM

GURUH BO'YICHA
Narxlar.Nomenklatura.Nomenklatura turi

NATIJALAR

Guruhlashdan farqli o'laroq, jamilardan foydalanilganda, barcha yozuvlar ko'rsatiladi va ularga jami qatorlar qo'shiladi. Guruhlash faqat umumlashtirilgan yozuvlarni ko'rsatadi.

Natijalarni butun jadval bo'yicha ("GENERAL" kalit so'zidan foydalangan holda), bir nechta maydonlar uchun, ierarxik tuzilishga ega bo'lgan maydonlar uchun ("HIERARCHY", "FAQAT IEARCHY" kalit so'zlari) umumlashtirish mumkin. Natijalarni umumlashtirishda agregat funktsiyalardan foydalanish shart emas.

Yuqoridagi misolga o'xshash misolni guruhlash yordamida ko'rib chiqamiz. Bunday holda, so'rov natijasi nafaqat guruhlangan maydonlarni, balki batafsil yozuvlarni ham qaytaradi.

TANLANG
Narxlar.Nomenklatura.Nomenklatura turi AS Nomenklatura turi,
Narxlar.Narx AS Narx
FROM
Axborot reyestri. Nomenklatura narxlari. So'nggi AS narxlarining surati
NATIJALAR
MAKSIMUM(narx)
BY
TuriNomenklatura

EGA

Bu operator WHERE operatoriga o'xshaydi, lekin faqat agregat funktsiyalar uchun ishlatiladi. Qolgan maydonlar, ushbu operator tomonidan ishlatiladiganlardan tashqari, guruhlangan bo'lishi kerak. WHERE operatori jamlangan funksiyalarga taalluqli emas.

Quyidagi misolda mahsulotning maksimal narxlari, agar ular 1000 dan oshsa, mahsulot turi bo'yicha guruhlangan holda tanlanadi.

TANLANG

MAX(Price.Price) AS Narx
FROM
Axborot reyestri. Nomenklatura narxlari. So'nggi AS narxlarining surati
GURUH BO'YICHA
Narxlar.Nomenklatura.Nomenklatura turi
EGA
MAKSIMUM(Narxlar.Narx) > 1000

SARALASH TURI

ORDER BY operatori so‘rov natijasini tartiblaydi. Yozuvlar izchil tartibda ko'rsatilishini ta'minlash uchun AVTO TARTIBI qo'llaniladi. Ibtidoiy turlar odatiy qoidalarga muvofiq tartiblangan. Malumot turlari GUID bo'yicha tartiblangan.

Xodimlarning nomlari bo'yicha tartiblangan ro'yxatini olish misoli:

TANLANG
Xodimlar.Nomi AS Ismi
FROM
Directory.Employees QANDAY Xodimlar
SARALASH TURI
Ism
AVTO Buyurtma

Boshqa 1C so'rovlar tili konstruktsiyalari

  • ARALASHTIRMOQ- ikkita so'rov natijalari bittaga.
  • HAMMANI BIRLASHTIRISH– COMBINE ga o‘xshash, lekin bir xil qatorlarni guruhlashsiz.
  • BO'SH JADOL- ba'zan so'rovlarga qo'shilganda bo'sh jadvalni ko'rsatish uchun ishlatiladi.
  • JOY- murakkab 1C so'rovlarini optimallashtirish uchun vaqtinchalik jadval yaratadi. Bunday so'rovlar ommaviy so'rovlar deb ataladi.

So'rov tilining xususiyatlari

  • SUBSTRING satrni belgilangan joydan belgilangan belgilar soniga qisqartiradi.
  • YIL...IKKINCHI raqamli turdagi tanlangan qiymatni olish imkonini beradi. Kirish parametri sana hisoblanadi.
  • DAVRANNING BOSHLANISHI VA DAVRANNING OXIRISHI sanalar bilan ishlashda foydalaniladi. Qo'shimcha parametr sifatida davr turi (KUN, OY, YIL va boshqalar) ko'rsatilgan.
  • ADDKDATE sanadan ma'lum turdagi vaqtni qo'shish yoki ayirish imkonini beradi (SECOND, MINUTE, DAY, va hokazo).
  • DIFFERENCE DATE chiqish qiymatining turini (KUN, YIL, OY va boshqalar) ko'rsatib, ikki sana orasidagi farqni aniqlaydi.
  • ISNULL etishmayotgan qiymatni belgilangan ifoda bilan almashtiradi.
  • VAKOLLIK VA VAKOLLIK havolalari belgilangan maydonning string tasvirini oling. Har qanday qiymatlarga va faqat mos yozuvlar qiymatlariga qo'llang.
  • TYPE, TYPE QIYMATLAR kirish parametrining turini aniqlash uchun ishlatiladi.
  • LINK atribut qiymati turi uchun mantiqiy taqqoslash operatori.
  • EXPRESS qiymatni kerakli turga aylantirish uchun ishlatiladi.
  • DATE VAQT raqamli qiymatlardan (yil, oy, kun, soat, daqiqa, soniya) "Sana" turidagi qiymatni oladi.
  • MA'NOSI 1C so'rovida u oldindan belgilangan qiymatlarni ko'rsatish uchun ishlatiladi - kataloglar, ro'yxatlar, xarakteristikalar turlari bo'yicha rejalar. Foydalanish misoli: " Bu yerda Yuridik Jismoniy shaxs = Qiymat (Ro‘yxat. Yuridik shaxs. Jismoniy shaxs)«.

So'rovlar yaratuvchisi

1C bilan so'rovlarni yaratish uchun juda qulay o'rnatilgan mexanizm mavjud - so'rovlar dizayneri. Unda quyidagi asosiy yorliqlar mavjud:

  • "Jadvallar va maydonlar" - tanlanishi kerak bo'lgan maydonlar va ularning manbalarini o'z ichiga oladi.
  • "Ulanishlar" - CONNECTION tuzilishi uchun shartlarni tavsiflaydi.
  • "Guruhlash" - guruhlash tuzilmalari va ular asosida jamlangan maydonlar tavsifini o'z ichiga oladi.
  • "Shartlar" - so'rovdagi ma'lumotlarni tanlash uchun javobgardir.
  • "Kengaytirilgan" - qo'shimcha so'rov parametrlari, masalan, "SELECT" buyrug'i uchun kalit so'zlar va boshqalar.
  • "Qo'shishlar/taxalluslar" - jadvallarni birlashtirish imkoniyatlari ko'rsatilgan va taxalluslar ko'rsatilgan ("QANDAY" konstruktsiyasi).
  • "Buyurtma" so'rovlar natijasini saralash uchun javobgardir.
  • "Jami" - "Guruhlash" yorlig'iga o'xshaydi, lekin "JAMI" konstruktsiyasi uchun ishlatiladi.

Pastki chap burchakdagi "So'rov" tugmasini bosish orqali so'rov matnini ko'rish mumkin. Ushbu shaklda uni qo'lda tuzatish yoki nusxalash mumkin.


So'rov konsoli

Korxona rejimida soʻrov natijasini tezda koʻrish yoki murakkab soʻrovlarni tuzatish uchun dan foydalaning. U so'rov matnini o'z ichiga oladi, parametrlarni o'rnatadi va natijani ko'rsatadi.

Siz so'rovlar konsolini ITS diskida yoki orqali yuklab olishingiz mumkin.

Endi qolganlarini ko'rib chiqaylik.

1C so'rovlarida satrlar bilan ishlash funktsiyalari

1C so'rovlarida qatorli ma'lumotlar bilan ishlash uchun bir nechta funktsiyalar va operatorlar mavjud.

Birinchidan, so'rovlardagi satrlarni qo'shish mumkin. Buning uchun "+" operatoridan foydalaning:

So'rov. Matn = "Tanlash
"" Qator: " " + Source.Name
;

Ikkinchidan, siz chiziqning bir qismini tanlashingiz mumkin. Buning uchun funksiyadan foydalaning SUBSTRUKSIYA. Funktsiya o'rnatilgan 1C tiliga o'xshaydi. U uchta parametrga ega:

  1. Manba qatori.
  2. Tanlangan qator boshlanishi kerak bo'lgan belgi raqami.
  3. Belgilar.

So'rov. Matn= "TANLANG
SUBSTRING("
"Qator:" ", 4, 3) Natijada"; // Natija: oka

Funktsiya ISNULL

NULL - 1C: Enterprise platformasidagi maxsus ma'lumotlar turi. Bundan tashqari, bu turdagi yagona mumkin bo'lgan qiymat. NULL so'rovlarda bir nechta hollarda paydo bo'lishi mumkin: so'rov manbalarini ulashda, agar jadvallardan birida mos keladigan qiymat topilmasa; mavjud bo'lmagan ob'ektning tafsilotlariga kirishda; agar so'rov maydonlari ro'yxatida NULL ko'rsatilgan bo'lsa (masalan, bir nechta jadvallardan tanlov natijalarini birlashtirishda) va hokazo.

Chunki NULL na null, na bo'sh satr, na hatto qiymatdir Aniqlanmagan, ko'pincha uni foydaliroq ma'lumotlar turi bilan almashtirish foydali bo'ladi. Funktsiya aynan shu maqsadda ishlab chiqilgan. ISNULL.

U ikkita parametrga ega:

  1. Qiymat tekshirilmoqda.
  2. Birinchi parametr NULL bo'lib chiqsa, uni almashtirish qiymati.

So'rov. Matn= "TANLANG
ISNULL(Source.Remainder, 0) AS Qoldiq"
; // Agar so'rov natijasi maydon qoldig'i bo'lsa = NULL,
// keyin u 0 ga almashtiriladi va siz u bilan matematik amallarni bajarishingiz mumkin

Funksiyalar PERFORMANS Va KIRISH havolalari

Bu funksiyalar turli qiymatlarning satr tasvirlarini olish uchun mo'ljallangan. Ya'ni, ular havolalarni, raqamlarni, mantiqiy qiymatlarni va boshqalarni o'zgartiradilar. oddiy matnga. Ularning orasidagi farq funktsiyada PERFORMANS har qanday ma'lumotlar turlarini matnga (string) va funksiyaga aylantiradi KIRISH havolalari- faqat havola qiladi va qolgan qiymatlarni o'zgartirilmagan holda qaytaradi.

So'rov. Matn= "TANLANG
Mantiqiy O'VNATISH (TO'G'RI),
Raqam sifatida taqdim etish (4),
VAKILIK (Source.Link) havola sifatida,
VAKILIK (DATETIME(2016,10,07)) Sana sifatida"
;
// Mantiqiy = "Ha", Raqam = "4", Havola = "Hujjat kassa kirim orderi No.... dan..."
// Sana = "07.10.2016 0:00:00"

So'rov. Matn= "TANLANG
Mantiqiy,
RAQAM OLIB VAKILIK MA'LUMOT (4).
PRESENTINGLINK(Source.Link) havola sifatida,
VAKILIK MA'LUMOT (DATETIME(2016,10,07)) Sana sifatida"
;
// Mantiqiy = TRUE, Raqam = 4, Havola = "Hujjat kassa kirim orderi №.... dan..."
// Sana=07.10.2016 0:00:00

Funksiyalar TYPE Va QIMMATLAR TURI

Funktsiya TYPE 1C: Enterprise platformasi ma'lumotlar turini qaytaradi.

So'rov. Matn= "TANLANG
TYPE (raqam)
TYPE (String),
TYPE (Hujjat. Xarajat kassa orderi)”
;

Funktsiya QIMMATLAR TURI unga berilgan qiymat turini qaytaradi.

So'rov. Matn= "TANLANG
QIMMATLAR TURI (5) Raqam sifatida,
TYPE ("
"Chiziq" ") AS String,
TYPE (Source.Link) AS Malumot
Directory.Source AS Manbadan"
;
//Raqam=Raqam, String=String, Katalog = DirectoryLink.Source

Ushbu funktsiyalardan foydalanish qulay, masalan, so'rovda olingan maydon qandaydir turdagi qiymat ekanligini aniqlash kerak bo'lganda. Masalan, kontragentlarning aloqa ma'lumotlarini Kontakt ma'lumotlari reestridan olamiz (u erda nafaqat kontragentlarning, balki tashkilotlar, jismoniy shaxslar va boshqalarning aloqalari saqlanadi):

So'rov. Matn= "TANLANG

FROM

QAYERDA
VALUES TYPE(ContactInformation.Object) = TYPE(Directory.Counterparties)"
;

Funktsiya MA'NOSI

Funktsiya Ma'nosi dan foydalanmasdan to'g'ridan-to'g'ri so'rovda 1C konfiguratsiya ob'ektlaridan foydalanishga imkon beradi.

Oldingi misolga yana bir shart qo'shamiz. Siz faqat kontragentlaringizning telefon raqamlarini olishingiz kerak.

So'rov. Matn= "TANLANG
Aloqa ma'lumotlari. Kirish
FROM
Axborot reestri Aloqa ma'lumotlari QANDAY Aloqa ma'lumotlari
QAYERDA
VALUES TYPE(ContactInformation.Object) = TYPE(Directory.Counterparties)
VA ContactInfo.Type = VALUE(Enum.ContactInfoTypes.Phone)"
;

Shuni ta'kidlash kerakki, bu funktsiya faqat oldindan belgilangan qiymatlar bilan ishlatilishi mumkin, ya'ni. konfiguratordan to'g'ridan-to'g'ri kirish mumkin bo'lgan qiymatlar bilan. Ya'ni, funktsiya MA'NOSI foydalanuvchilar tomonidan yaratilgan katalog elementlari bilan ishlatib bo'lmaydi, lekin ro'yxatlar, oldindan belgilangan katalog elementlari, qiymatlar bilan ishlashi mumkin. EmptyLink.

Operator LINK

Operator LINK so'rov orqali qaytarilgan qiymatlarni ma'lum bir mos yozuvlar turiga tegishli yoki yo'qligini tekshirish uchun mo'ljallangan. Xuddi shu vazifani funktsiyalar yordamida bajarish mumkin TYPE Va QIMMATLAR TURI(ular kengroq qamrovga ega va yuqorida muhokama qilingan).

Masalan, kontragentlar uchun aloqa ma'lumotlarini tanlash vazifasi shu tarzda hal qilinishi mumkin:

So'rov. Matn= "TANLANG
Aloqa ma'lumotlari. Kirish
FROM
Axborot reestri Aloqa ma'lumotlari QANDAY Aloqa ma'lumotlari
QAYERDA
ContactInformation.Object LINK Directory.Counterparties"
;

Operator EXPRESS

Operator EXPRESS 1C so'rovlarida ikki holatda ishlatiladi:

  • ibtidoiy tipning xususiyatlarini o'zgartirish kerak bo'lganda;
  • murakkab ma'lumotlar turiga ega bo'lgan maydonni bitta turdagi maydonga aylantirish kerak bo'lganda.

Primitiv ma'lumotlar turlariga quyidagilar kiradi: raqam, satr, sana, mantiqiy. Ushbu ma'lumotlar turlarining ba'zilari qo'shimcha xususiyatlarga ega. Turi Raqam uzunligi va aniqligi, turi bor Chiziq - uzunligi yoki cheksiz.

Operator EXPRESS ma'lumotlar turini emas, balki qo'shimcha xususiyatlarni o'zgartirishga imkon beradi. Masalan, u cheksiz uzunlikdagi ipni cheklangan uzunlikdagi ipga aylantira oladi. Agar so'rov natijalarini shunday maydon bo'yicha guruhlashingiz kerak bo'lsa, bu foydali bo'lishi mumkin. Cheksiz uzunlikdagi maydonlar bo'yicha guruhlash mumkin emas, shuning uchun biz uni 200 belgidan iborat bo'lgan qatorga aylantiramiz.

So'rov. Matn= "TANLANG
MAQDAN (TOVAR va xizmatlarning TURLI kelishi. Havola) Link AS
FROM
Hujjat.Tovar va xizmatlarni qabul qilish QANDAY Tovar va xizmatlarni qabul qilish
GURUH BO'YICHA
EXPRESS(Tovarlar va xizmatlarni qabul qilish. Qator AS (200))"
;

Ba'zi hollarda, kompozit ma'lumotlar turiga ega bo'lgan maydonlarga so'rovlar 1C platformasi tomonidan optimal tarzda qayta ishlanmasligi mumkin. Bu so'rovlar vaqtini uzaytiradi, shuning uchun oldindan birikma turini bitta turga aylantirish foydali bo'lishi mumkin.

So'rov. Matn= "TANLANG
EXPRESS(Tovar aylanmasi harakati. Hujjat AS. Buyurtma. Mijoz buyurtmasi). Sana Buyurtma sanasi,
Tovarlar aylanmasi.Nomenklatura
FROM
Jamg'armalarni ro'yxatdan o'tkazish. Tovarlar harakati. Tovar aylanmasi AS Tovarlar harakati.
QAYERDA
Tovarlarning aylanmasi.Order LINK Document.Mijoz buyurtmasi"
;

Operatorlar TANLOV Va IS NULL

Operator TANLOV operatorga o'xshash AGAR o'rnatilgan 1C tilida, lekin biroz qisqartirilgan funksionallikka ega.

Aytaylik, biz Aloqa ma'lumotlari registridan aloqa ma'lumotlarini olishni xohlaymiz va shu bilan birga, alohida so'rov maydonida uning kontragentga yoki jismoniy shaxsga tegishli ekanligini ko'rsatamiz.

So'rov. Matn= "TANLANG
Aloqa ma'lumotlari. Kirish,
TANLOV
QAChON QIYMATLAR TYPE(ContactInformation.Object) = TYPE(Directory.Counterparties)
KEYIN "
Qarama-qarshi tomon "
BOSHQA TANLOV
QAChON QIYMATLAR TYPE(ContactInformation.Object) = TYPE(Directory.Individuals)
KEYIN "
Individual"
BOSHQA "Boshqa birov" "
OXIRI
Egasi sifatida tugaydi
FROM
Axborot reestri. Kontakt ma'lumotlari AS Aloqa ma'lumotlari"
;

Misoldan ko'rinib turibdiki, dizaynda TANLOV so‘zdan keyin har doim shart bo‘ladi QACHON; so'zdan keyin shart rost bo'lsa qo'llaniladigan qiymat KEYIN va shart bajarilmasa, so'zdan keyin qo'llaniladigan qiymat BOSHQA. Barcha uchta dizayn elementi TANLOV majburiydir. Elementni o'tkazib yuborish BOSHQA, xuddi operatordan foydalanganda bo'lgani kabi AGAR o'rnatilgan 1C tilida bu mumkin emas. Shuningdek, operatordan TANLOV dizaynning o'xshashi yo'q ELSEIF, lekin siz investitsiya qilishingiz mumkin TANLOV boshqasida, bizning misolimizda bo'lgani kabi.

Operator IS NULL dizaynda foydalaniladi TANLOV so'rov maydonini NULL turi bilan solishtirish uchun.

So'rov. Matn= "TANLANG
TANLOV
QIYMAT NULL BO'LSA, 0 ga teng
ALSE Ma'nosi
OXIRI"
;

Bundan tashqari, operator IS NULL so‘roq sharoitlarida, masalan, gapda qo‘llanishi mumkin QAYERDA.

Ushbu maqolada biz siz bilan hamma narsani muhokama qilmoqchimiz 1C so'rovlar tilining funktsiyalari, shuningdek so'rovlar tili konstruktsiyalari. Funktsiya va dizayn o'rtasidagi farq nima? Funktsiya qavslar va ulardagi mumkin bo'lgan parametrlar bilan chaqiriladi va konstruktsiya qavssiz yoziladi. Shubhasiz 1C so'rovlar tilining barcha tuzilmalari va funktsiyalari ma'lumotlarni yig'ish jarayonini moslashuvchan va ko'p funktsiyali qilish. Bu funksiyalar va konstruksiyalar so'rov maydonlariga, ba'zilari esa shartlarga ham tegishli.

1C Query tili funksiyalari

Chunki aniq tavsif 1C so'rovlar tilining funktsiyalari tuzilmalarning tavsiflariga qaraganda ancha kam uchraydi, biz funktsiyalarni ko'rib chiqishga qaror qildik. Endi keling, ularning har birini alohida ko'rib chiqamiz, uning maqsadi, sintaksisi va foydalanish misolini tavsiflaymiz, shuning uchun:

1. Funktsiya DATE VAQT- bu funksiya “Sana” turi bilan doimiy maydon hosil qiladi.

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

Foydalanish misoli:

2. DATE FARQI funksiyasi- o'lchovlardan birida (yil, oy, kun, soat, daqiqa, soniya) ikkita sana o'rtasidagi farqni qaytaradi. O'lchov parametr sifatida o'tkaziladi.

Sintaksis: DIFFERENCE DATE(<Дата1>, <Дата2>, <Тип>)

Foydalanish misoli:

Query.Text = "TANLASH | DIFFERENCEDATE(DATETIME(2015, 4, 17), DATETIME(2015, 2, 1), DAY) | Kunlar soni AS";

3. VALUE funksiyasi- ma'lumotlar bazasidan oldindan belgilangan yozuv bilan doimiy maydonni o'rnatadi, shuningdek, istalgan turdagi bo'sh havolani olishingiz mumkin.

Sintaksis: VALUE(<Имя>)

Foydalanish misoli:

Request.Text = "SELECT //oldindan belgilangan element | VALUE(Directory.Currencies.Dollar) AS Dollar, //boʻsh havola | VALUE(Hujjat.Tovar va xizmatlarni qabul qilish.EmptyLink) AS Kvitansiya, //oʻtkazish qiymati | VALUE(Transfer) . Yuridik Jismoniy shaxs. Jismoniy shaxs) AS Jismoniy shaxs, //oldindan belgilangan hisob | VALUE(Hisoblar rejasi. Oʻz-oʻzini qoʻllab-quvvatlovchi. Materiallar) AS Hisob_10" ;

4. SELECT funksiyasi- bizning oldimizda kodda ishlatiladigan IF konstruktsiyasining analogi mavjud, faqat bu 1C so'rovlarida qo'llaniladi.

Sintaksis: QACHON TANLASH<Выражение>KEYIN<Выражение>BOSHQA<Выражение>OXIRI

Foydalanish misoli:

Request.Text = //agar summa 7500 dan ortiq bo'lsa, unda 300 rubl chegirma bo'lishi kerak, //shuning uchun, agar shart ishga tushirilsa, funksiya //Miqdorni qaytaradi - 300 //aks holda so'rov shunchaki miqdorni qaytaradi "TANLASH | TANLASH | QACHON TCReceipts.Sumi > 7500 | KEYIN TCReceipts.Amount - 300 | BOSHQA TCReceipts.Sumagʻi | CHEKIRILGAN YUQORI |DAN | Hujjat.TovarlarXizmatlari.Tovarlarni TCReceipts AS QABULLANISh";

5. EXPRESS funksiyasi- doimiy maydonni ma'lum bir tip bilan ifodalash imkonini beradi.

Sintaksis: EXPRESS(FieldName AS TypeName)

Foydalanish misoli:

Query.Text = "TURLI TANGLA | Sotish.Registrator.Number, | TANLA | QAChON Sotish.Registrator LINK Document.Expense | KEYIN EXPRESS (Sotish.Registrator Hujjat.Xarajat sifatida) | BOSHQA TANLASH | Qachon Sotish.Registrator LINK Hujjat |. KEYIN EXPRESS(Sotish.Registrator AS Hujjat.Implementation) | OXIRISh | ... | Raqam sifatida END | FROM | Jamgʻarmalarni roʻyxatdan oʻtkazish.Xaridlarni xaridlar sifatida”;

EXPRESS funksiyasidan aralash turdagi sohalarda foydalanishning boshqa varianti bormi, ular qayerda uchraydi? Eng oddiy misol - har qanday registr uchun "Registrator". Xo'sh, nega biz registratorda turni belgilashimiz kerak bo'lishi mumkin? Keling, registratordan "Raqam" maydonini tanlaganimizda vaziyatni ko'rib chiqaylik, raqam qaysi jadvaldan tanlanadi? Hammaga to'g'ri javob! Shuning uchun, so'rovimiz tez ishlashi uchun biz EXPRESS funksiyasidan foydalanib, aniq turni belgilashimiz kerak

Foydalanish misoli:

Query.Text = "SELECT | EXPRESS(Nomenclature.Comment AS Line(300)) AS Comment, | EXPRESS(Nomenclature.Sum AS Number(15,2)) AS Sum |FROM | Directory.Nomenklatura AS Nomenklatura";

6. ISNULL funktsiyasi(muqobil imlo ISNULL) - agar maydon NULL tipida bo'lsa, u holda u funktsiyaning ikkinchi parametri bilan almashtiriladi.

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

Foydalanish misoli:

Shuni ham yodda tutingki, DOIMO NULL turini qandaydir qiymat bilan almashtirish tavsiya etiladi, chunki NULL turi bilan taqqoslash, NULLni NULL bilan solishtirsangiz ham, har doim FALSE qiymatini qaytaradi. Ko'pincha NULL qiymatlar jadvallarni birlashtirish natijasida hosil bo'ladi (ichkidan tashqari barcha turdagi birlashmalar).

Query.Text = //To'liq elementni va uning balanslarini tanlang //agar ba'zi elementda balans bo'lmasa, //NULL maydoni bo'ladi, u 0 qiymati bilan almashtiriladi "SELECT | No. Link, | ISNULL" (MahsulotlarStockInStockRemains.InStockRemaining, 0) AS Qoldiq | FROM | Katalog.Nomenklatura AS № | CHAP BOG'LANISH To'planishlarni ro'yxatdan o'tkazish. Omborlardagi tovarlar. Qolganlar AS TovarlarIchki omborlarda qoldiqlari | ON (TovarlarInStockda Qolganlar; Havola No.)

7. VAKILISH funksiyasi- so'rov maydonining ko'rinishini olish imkonini beradi.

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

Foydalanish misoli:

Query.Text = "TANLAMA | TANLASH

1C so'rovlar tilida tuziladi

Biz siz bilan yuqorida muhokama qildik 1C so'rovlar tilining funktsiyalari, endi o'ylash vaqti keldi 1C so'rovlar tilida konstruktsiyalar, ular kamroq muhim va foydali emas, keling, boshlaylik.

1. Qurilish LINK- mos yozuvlar turini tekshirish uchun mantiqiy operator. Ko'pincha murakkab turdagi maydonni ma'lum bir turga nisbatan tekshirishda uchraydi. Sintaksis: LINK<Имя таблицы>

Foydalanish misoli:

Request.Text = //agar yozuvchi qiymat turi hujjat qabuli bo'lsa, //keyin so'rov "Tovarlarni qabul qilish" ni qaytaradi, aks holda "Tovarlarni sotish" "TANLASH | TANLASH | QACHON Qolgan.Registrator LINK Document.Receipt of GoodsServices | KEYIN ""Kvitansiya"" | BOSHQA ""Iste'mol"" | Harakat turi sifatida tugaydi | Yig'ish registridan. Omborlarda qolgan mahsulotlar AS qoldi" ;

2. Orasida dizayn- bu operator qiymat belgilangan diapazonda yoki yo'qligini tekshiradi.

Sintaksis: ORASIDA<Выражение>VA<Выражение>

Foydalanish misoli:

Request.Text = //kodi 1 dan 100 gacha bo'lgan oraliqda joylashgan butun nomenklaturani oling "SELECT | Nomenclature.Link |FROM | Directory.Nomenklatura AS Nomenklatura |QAYERDA | Nomenklatura. Kod 1 VA 100 O'RASI" ;

3. Qurilish B va B IEARXIYASI- qiymat o'tkazilgan ro'yxatda mavjudligini tekshiring (massivlar, qiymatlar jadvallari va boshqalarni ro'yxat sifatida o'tkazish mumkin). IN HIERARCHY operatori ierarxiyani ko'rish imkonini beradi (Hisoblar rejasidan foydalanish misoli).

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

Foydalanish misoli:

Request.Text = //hisobning barcha sub-hisoblarini tanlang "TANLASH | O'z-o'zini qo'llab-quvvatlovchi. Hisob AS bog'lanishi | FROM | Hisoblar jadvali. O'z-o'zini qo'llab-quvvatlovchi AS O'z-o'zini qo'llab-quvvatlovchi | QAYER | O'z-o'zini qo'llab-quvvatlovchi. IEARXIYA QIYMATIDAGI bog'lanish (Chart of the Diagram). Hisob-kitoblar. O‘zini-o‘zi ta’minlovchi. Tovarlar)”;

4. O'xshash dizayn- Bu funksiya satrni string naqsh bilan solishtirish imkonini beradi.

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

Qator naqsh variantlari:

% - ixtiyoriy belgilarning istalgan sonini o'z ichiga olgan ketma-ketlik.

Bitta ixtiyoriy belgi.

[...] - kvadrat qavslar ichida keltirilgan har qanday bitta belgi yoki belgilar ketma-ketligi. Ro'yxatga olish diapazonlarni belgilashi mumkin, masalan, a-z, ya'ni diapazonga kiritilgan ixtiyoriy belgi, jumladan, diapazon oxirlari.

[^...] - kvadrat qavslar ichida sanab o'tilgan har qanday bitta belgi yoki belgilar ketma-ketligi, inkor belgisidan keyin sanab o'tilganlardan tashqari.

Foydalanish misoli:

Query.Text = //TABUR ildizini o'z ichiga olgan va //yoki kichik yoki bosh harf t bilan boshlanadigan butun nomenklaturani toping "TANLAMA | Nomenklatura. Havola | FROM | Katalog. Nomenklatura AS Nomenklatura | QAYER | Mahsulotlar. Nomenklatura. LIKE "" [Tt ]abur%""" ;

5. Dizayn RUXSAT BERILGAN- bu operator ma'lumotlar bazasidan faqat qo'ng'iroq qiluvchining o'qish ruxsatiga ega bo'lgan yozuvlarni tanlash imkonini beradi. Ushbu huquqlar rekord darajada (RLS) tuzilgan.

Sintaksis: ALLOWED SELECT kalit so'zidan keyin yoziladi

Foydalanish misoli:

Request.Text = "RUXSAT BERILGAN | Qarama-qarshi tomonlar. Havola | FROM | Katalog. Qarama-qarshi tomonlar kontragent sifatida";

6. TURLI dizayn- takroriy yozuvlar mavjud bo'lmagan yozuvlarni tanlash imkonini beradi.

Sintaksis: VARIOUS SELECT kalit soʻzidan keyin yoziladi

Foydalanish misoli:

Request.Text = //o'quvchi huquqlarga ega bo'lgan yozuvlarni tanlaydi "TURLI TANGLA | Counterparties.Name |FROM | Directory. Kontragentlar kontragent sifatida" ;

Shuningdek, TURLI konstruksiyadan RUXSAT BERILGAN operator va boshqa operatorlar bilan foydalanish mumkin.

Foydalanish misoli:

Request.Text = //o'quvchi huquqlariga ega bo'lgan turli yozuvlarni tanlaydi "TANLASH RUXSAT BERILGAN TURLI | Counterparties.Name |FROM | Directory. Kontragentlar kontragent sifatida";

7. BIRINCHI dizayn- so'rov natijasidan parametrda ko'rsatilgan yozuvlar sonini tanlaydi.

Sintaksis: FIRST<число>

Foydalanish misoli:

Request.Text = //"FIRST 4 | CCD raqamlarini tanlang. Havola | FROM | Katalog. CCD raqamlari AS CCD raqamlari" katalogidan dastlabki 4 ta CCD raqamini tanlang;

8. O'ZGARISH UCHUN dizayn- jadvalni blokirovka qilishga imkon beradi, faqat tranzaktsiyalarda ishlaydi (faqat avtomatik qulflar uchun tegishli).

Sintaksis: O'ZGARISH UCHUN<НаименованиеТаблицы>

Foydalanish misoli:

Query.Text = "TANLAMA | Bo'sh qolgan qoldiqlar. Nomenklatura, | Bo'sh qolgan qoldiqlar. Ombor, | Bo'sh qolgan qoldiqlar. Zaxirada qolgan | FROM | Jamg'armalar reestri. Bo'sh qoldiqlar. Qolganlar Erkin qolganlar Qolganlar AS | O'ZGARTIRISH | . Erkin qoldiqlar. Qolganlar";

9. Dizayn BUYURUM BO'YICHA- ma'lumotlarni ma'lum bir soha bo'yicha tartibga soladi. Agar maydon havola bo'lsa, u holda bayroqni o'rnatishda AVTO Buyurtma Saralash havolani ko'rsatish bo'yicha amalga oshiriladi; agar bayroq o'chirilgan bo'lsa, havolalar xotiradagi havola manzilining kattaligi bo'yicha saralanadi.

Sintaksis: SARALASH TURI<НаименованиеПоля>AVTO Buyurtma

Foydalanish misoli:

Query.Text = "TANLASH | Boʻsh qolgan qoldiqlar. Nomenklatura AS Nomenklatura, | Boʻsh qolgan qoldiqlar. Ombor AS Ombor, | Boʻsh qolgan qoldiqlar. Zaxirada qolgan | FROM | Jamgʻarmalarni roʻyxatdan oʻtkazing. Boʻsh qolgan. | Nomenklatura | AVTO ORDER VANIE";

10. Dizayn GROUP BY- so'rovlar qatorlarini ma'lum maydonlar bo'yicha guruhlash uchun ishlatiladi. Raqamli maydonlar har qanday agregat funksiyasi bilan ishlatilishi kerak.

Sintaksis: GURUH BO'YICHA<НаименованиеПоля1>, .... , <НаименованиеПоляN>

Foydalanish misoli:

Query.Text = "TANLASH |ItemsInWarehouses.Nomenklatura AS Nomenklaturasi, |ItemsInWarehouses.Warehouse, | SUM(ItemsInWarehouses.InStock) INSTOCK OF |FROM | RegisterAccumulations.ItemsInWarehouses |ROGarehouses menklatura, | ItemsAtWarehouse ah.Warehouse" ;

11. Dizayn EGA- WHERE konstruktsiyasiga o'xshash ma'lumotlarni tanlash shartiga agregat funksiyasini qo'llash imkonini beradi.

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

Foydalanish misoli:

Query.Text = //InStock maydoni 3 "tanlash GURUH BO'YICHA | Omborlardagi mahsulotlar.Nomenklatura, | Omborlardagi mahsulotlar.Omborda | |MAVJUD | MUMKIN (Ombordagi mahsulotlar. InStock) > 3" ;

12. Qurilish INDEX BY- so'rov maydonini indekslash uchun ishlatiladi. Indekslash bilan so'rovni bajarish uchun ko'proq vaqt ketadi, lekin indekslangan maydonlar bo'ylab qidirishni tezlashtiradi. Faqat virtual jadvallarda foydalanish mumkin.

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

Foydalanish misoli:

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

13. Dizayn QAYERDA- har qanday tanlov maydonlariga shart qo'yish imkonini beradi. Natija faqat shartni qondiradigan yozuvlarni o'z ichiga oladi.

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

Foydalanish misoli:

Query.Text = //Kompensatsiya Qolgan barcha yozuvlar tanlangan<>0 va //AmountForCalcCompRemaining > 100 "SELECT | CompensationRPORemains.Counterparty, |CompensationRPORemains.Child, | CompensationRPORemains.CompensationRemaining, | CompensationRPORemains.AmountForCalcCompRemains |Place DataTzForCalcCompRemaining.FROMASRemains. |QAYERDA |KompensatsiyaRPORqolgan.KompensatsiyaQolgan<>0 | Va CompensationRPORemains.AmountForCalcCompRemaining> 100" ;

14. Dizayn NATIJALARI... UMUMIY- jamilarni hisoblash uchun ishlatiladi; dizayn jamilar hisoblab chiqiladigan maydonlarni va jami maydonlarga qo'llaniladigan agregat funktsiyalarni belgilaydi. TOTAL qurilishidan keyin har bir maydon uchun jamilardan foydalanilganda ma'lumotlar guruhlanadi. Ixtiyoriy GENERAL konstruksiya mavjud; undan foydalanish qoʻshimcha guruhlashni ham taʼminlaydi. Quyida so'rov natijasining namunasini ko'rasiz.

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

Foydalanish misoli:

Request.Text = "TANLA | Hisob-kitoblar. Kontraparta shartnomasi. Shartnoma turi AS Shartnoma turi, | Hisob-kitoblar. Kontraparta shartnomasi AS Shartnoma, | Hisob-kitoblar. Qarama-qarshi tomon, | Hisob-kitoblar. Balans AS o‘zaro hisob-kitob balansi summasi | FROM | Jamg‘armalar reestri. Mut. Qarama-qarshi tomonlar bilan hisob-kitob. Balanslar AS Hisob-kitoblar | JAMI | SUMUMI (balans) |Dastur ta’minoti | UMUMI, | Shartnoma turi”;

Rasmda so'rovni bajarish jarayonida shakllangan guruhlar ko'rsatilgan, yuqoridagisi UMUMIY bo'limga, ikkinchisi esa kontragent shartnomasining kelishuv turi maydoniga tegishli.

Ko'pchilik 1C 8 so'rovlar tilida EXPRESS funktsiyasini turdagi konvertor sifatida talqin qiladi, ammo u umuman bu maqsadlar uchun mo'ljallanmagan. Kesim ostidagi tafsilotlar...

Shunday qilib, ko'p odamlar noto'g'ri, ular maydonni tip bilan o'zgartirishi mumkin deb hisoblashadi Chiziq turi bilan maydonda Raqam yoki qatordagi havola. Aslida, EXPRESS operatori quyidagilarni o'zgartirishi mumkin:

  • ibtidoiy turdagi sozlamalar;
  • qo'shma tipdagi maydonni bitta turdagi maydonga;

Keling, ushbu vaziyatlarni batafsil ko'rib chiqaylik ...

Primitiv tip sozlamalarini konvertatsiya qilish

Keling, ma'lumotlarni cheksiz turdagi qator bo'yicha guruhlashni xohlagan vaziyatni ko'rib chiqaylik, masalan, bunday satr ko'pincha hujjatlardagi sharhdir. Bunday holda, biz sharhlar bo'yicha guruhlana olmaymiz; xatoga yo'l qo'yamiz. Shuning uchun biz cheksiz uzunlikdagi satrni cheklangan uzunlikdagi satrga aylantirishimiz va keyin uni guruhlashimiz kerak. Masalan, bir xil izohli hujjatlar sonini hisoblaylik:

TANLANG
EXPRESS(Admission.Comment AS LINE(300)) AS Comment,
QUANTITY(Incoming.Link) havola sifatida
FROM
Hujjat.Kirish zali AS Kirish zali

GURUH BO'YICHA
EXPRESS(Qabul. Izoh QATR (300))

Yana bir holat - so'rov hisob-kitoblardan foydalanganda, chiqishda biz ko'p sonli kasrli raqamni olishimiz mumkin (1100.001568794). So'rov tugallangandan so'ng, bu raqamni qayta ishlamaslik uchun siz uni darhol kerakli uzunlikka qisqartirishingiz mumkin, ammo raqam kesilayotganini va yaxlitlanmaganligini tushunish muhimdir. Misol:

TANLANG
Sotish.Mahsulot,
EXPRESS(Sotuv.Miqdor * Sotish.Narx RAQAM(15, 2))
FROM

Murakkab turni bitta turga aylantirish

Ro'yxatga olish registrlari ko'pincha qo'shma turga ega; uni bitta turga aylantirish uchun konstruktsiyadan foydalaning EXPRESS Biroq, namuna olish bosqichida siz amalga oshirish hujjatini kvitansiya hujjatiga aylantirmoqchi bo'lsangiz, so'rov, albatta, xato bilan bajarilmaydi, shuning uchun konvertatsiya qilishdan oldin siz havola turini tekshirishingiz kerak. Bu shunday bema'nilik))) Bularning barchasi nima uchun kerak, deb so'rayapsiz. Men javob beraman, bu yozma qisqalik hisobiga yashirin so'rovlarni optimallashtirish momentlaridan biridir. Keling, ushbu nuqtaning qo'llanilishini misol bilan ko'rib chiqaylik.

Aytaylik, siz RN Sales-dan har bir registratorning raqamini olishni maqsad qilgansiz. so'rov yozing:

TURLI TANLASH
Sotish.Registrator.Raqam
FROM
RegisterAccumulations.Sotish QANDAY Sotish

Aslida, hech narsa oddiyroq bo'lishi mumkin emas. Ammo 1C, ijro etilish bosqichida, ushbu so'rovni hech qanday ulanishlarsiz, bizda mumkin bo'lgan registratorlar mavjud bo'lgan chap ulanishlar bilan so'rovga aylantiradi. Bular. agar ushbu registrga 20 ta hujjat yozilsa, biz 20 ta chap qo'shilish bilan SQL so'rovini olamiz. Nima uchun bu sodir bo'lmoqda? O'rnatilgan 1C optimallashtiruvchisi nuqta orqali olingan maydonlarni juda yaxshi qayta ishlamasligi sababli, bu holda bu raqam atributidir. Bu piroglar, agar biz tez-tez hujjat raqamini olishni istasak, uni ro'yxatga olish ma'lumotlariga kiritish yoki EXPRESS operatoridan foydalanish maqsadga muvofiqdir, ammo qisqalik hisobiga:

TURLI TANLASH
Sotish.Registrator.Raqam,
TANLOV
QAChON Sales.Registrator LINK Document.Consumable
KEYIN EXPRESS (Sotish.Registrator Hujjat sifatida. Sarflanadigan)
BOSHQA TANLOV
QAChON Sales.Registrator LINK Document.Implementation
KEYIN EXPRESS (Sotish.Registrator Hujjat sifatida.Implementation)
OXIRI
...
Raqam sifatida tugaydi
FROM
RegisterAccumulations.Sotish QANDAY Sotish

Endi chap qo'shilish bitta aniq jadvalni o'z ichiga oladi.

Umuman olganda, siz diqqat bilan nuqta orqali ma'lumotlarga murojaat qilishingiz kerak, chunki 1C bu holda SQL so'rovida chap qo'shilishdan foydalanadi, bu esa ishlashga sezilarli ta'sir ko'rsatishi mumkin. Bu optimallashtirish nuqtalaridan biridir.