1c so'rovida ekspress operator

Shunday ekan, boshlaylik. So'rov - bu tizimdagi ma'lumotlar bazasi jadvallariga so'rovlarni yaratish va bajarish uchun ishlatiladigan 1C 8.2 da maxsus ob'ekt. So'rovni bajarish uchun so'rovlar ma'lumotlari manbalari sifatida qaysi jadvallar ishlatilishi, qaysi maydonlarni tanlash kerakligi, qanday saralash va guruhlar qo'llanilishi va hokazolarni tavsiflovchi so'rov matnini yaratishingiz kerak. So'rovlar haqida ko'proq ma'lumotni "1C 8.2 Dasturchilar uchun qo'llanma" kitobida o'qishingiz mumkin. 1C 8.2 so'rovlar tili sintaksisi bo'yicha boshqa SQL ma'lumotlar bazasi so'rovlari tillariga juda o'xshash, ammo farqlar ham mavjud. O'rnatilgan so'rovlar tilining asosiy afzalliklari qatorida, so'rovlarda maydonlarning yo'qolishini, virtual jadvallarning mavjudligini, jamilar bilan qulay ishlashni va so'rovlarda yozilmagan maydonlarni ta'kidlash kerak. Kamchiliklari shundaki, siz so'rovni chiqish maydoni sifatida ishlata olmaysiz, saqlangan protseduralardan foydalana olmaysiz va satrni raqamga aylantira olmaysiz.

1. So'rovning o'qish qobiliyatini oshirish va so'rov parametrlari sonini kamaytirish uchun so'rovda oldindan belgilangan konfiguratsiya ma'lumotlariga kirish uchun literaldan foydalanishingiz mumkin. QIYMAT (QIYMATNI TAKSIL qilish). Qiymatlarning ko'rinishi sifatida ro'yxatga olish qiymatlari, ma'lumotnomalarning oldindan belgilangan ma'lumotlari, hisoblash turlarining rejalari, xarakteristikalar turlarining rejalari, hisoblar jadvallari, bo'sh havolalar, marshrut nuqtalarining qiymatlari, tizim o'tkazmalari qiymatlari ( masalan, jamg‘arish harakati turi, hisob turi) dan foydalanish mumkin.

WHERE Shahar = VALUE(Katalog.Shaharlar.Moskva)

WHERE Shahar = VALUE(Directory.Cities.EmptyLink)

WHEREProductType = VALUE(Enumeration.MahsulotTypes.Service)

WHEREMovementType = VALUE(MovementTypeAccumulation.Incoming)

Marshrut nuqtasi qayerda =

VALUE(BusinessProcess.Agreement.RoutePoint.Agreement)

Qavslar ichidagi ibora har doim oldindan belgilangan qiymat turiga mos keladigan birlik so'z bilan boshlanadi (Katalog, Enumeration va boshqalar).

2.So'rovda avtomatik buyurtma berish jarayonni sezilarli darajada sekinlashtirishi mumkin. Saralash kerak bo'lmasa, uni umuman ishlatmaslik yaxshiroqdir. Ko'p hollarda kalit so'z yordamida tartiblashni yozish samaraliroq SARALASH TURI.

3. Taxalluslardan foydalanganda noaniq maydon paydo bo'lmasligiga ishonch hosil qilishingiz kerak. Aks holda, tizim qaysi ob'ektga kirish kerakligini tushunmaydi.

Noaniq maydonga ega so'rovga misol:

TANLANG

Qolgan Tovarlar Qolgan.Miqdori Qolgan

Katalog.Nomenklatura AS Nomenklaturasi

CHAP BOG'LANISh Qolgan Tovarlar Qolgan To'plamlarni Ro'yxatdan o'tkazing

Dasturiy ta'minot Qolgan MahsulotlarQolgan.Nomenklatura = Nomenklatura.Link

Jadval taxallusni to'g'rilash kerak, masalan: "Katalog.Nomenklatura AS Nomenklatura1" va "Nomenklatura.Link" "Nomenklatura1.Link" ga mos ravishda tuzatilishi kerak.

4.Ba'zan kalit so'z yordamida mos yozuvlar maydonlarining ko'rinishini olish foydali bo'ladi PERFORMANS ma'lumotlar bazasiga takroriy kirish imkoni bo'lmasligi uchun havola bilan birga. Bu so'rov natijasini jadvalda ko'rsatishda foydali bo'lishi mumkin.

TANLANG

Vakillik (Hujjat. Qarama-qarshi tomon) oluvchi sifatida,

TAQDIM (Hujjat. Baza)

Document.Invoice AS Hujjat

5.So'rovda foydalaning EXPRESS (Fayl AS turi) murakkab ma'lumotlar turidagi maydon bilan ulanishdan keraksiz jadvallarni olib tashlash imkonini beradi. Bu so'rovning bajarilishini tezlashtiradi.

Misol (ro'yxatga oluvchi - Qolgan tovarlarni jamlash reestrining jismoniy jadvali uchun kompozit turdagi maydon, so'rovda tovar qabul qilinganligi to'g'risidagi hujjatlarning sanasi va soni tanlanadi, hujjat ma'lumotlariga kirishda Sana va raqam orqali Ro'yxatga oluvchi, ro'yxatga olish jadvalining tovar qoldig'i registrini ro'yxatga oluvchilar bo'lgan hujjatlar jadvallari bilan bir nechta aloqasi yo'q ):

TURLI TANLASH
EXPRESS(Qolgan tovarlar.Registrator Hujjat AS. Tovarlarni qabul qilish).Raqam KABUL NORMASI,

EXPRESS(Qolgan tovarlar. Hujjat sifatida ro'yxatga oluvchi. Tovarlarni qabul qilish).

FROM
Qolgan tovarlar AS jamg'armalar reestri
QAYERDA
(EXPRESS(Qolgan tovarlar. Hujjat sifatida ro'yxatga oluvchi. Tovarlarni qabul qilish) BO'LGAN EMAS)

6.Agar 1C konfiguratsiyasida muayyan konfiguratsiya ob'ektlariga nisbatan cheklangan huquqlarga ega bo'lgan foydalanuvchilar mavjud bo'lsa, bunday ob'ektlarga so'rovda kalit so'zdan foydalanish kerak. RUXSAT BERILGAN so'rov xatosiz bajarilishi uchun (Ruxsat berilgan... ni tanlang)

7.Ich ichiga joylashtirilgan jadvallarni (masalan, jadval qismi bo'lgan hujjat) o'z ichiga olgan jadvallarni birlashtirganda kalit so'z foydali bo'lishi mumkin. EMPTYTABLE masalan, hujjatlardan birida jadval qismi bo'lmasa.

HAMMANI BIRLASHTIRISH

FROM Document.Invoice

8.Har biri bitta satrdan iborat bo'lgan jadvallarni birlashmalari bilan ishlaganda, jadvallar qatorlarini birlashtirish kerak bo'lishi mumkin (har ikkala jadvalda ham ularni birlashtirish uchun maydon yo'q). Bunga qurilish yordamida erishish mumkin " TO'LIQ ULANISH jadvali TRUE" Agar jadvallar bir nechta satrga ega bo'lsa, natijada ikkala jadval qatorlari sonining ko'paytmasiga teng qatorlar soni bo'ladi. Agar bitta jadvalda O satrlar mavjud bo'lsa, natijada olingan jadvaldagi qatorlar soni ikkinchi jadvaldagi qatorlar soniga teng bo'ladi. Bundan tashqari, bunday jadvallarni ulash uchun siz jadvallarning dekart mahsulotidan foydalanishingiz mumkin, bunda ikkala jadvaldagi barcha qatorlar kombinatsiyasi olingan jadvalda paydo bo'ladi. Shuni yodda tutishimiz kerakki, agar jadvallardan birida 0 ta satr bo'lsa, dekart mahsuloti 0 bo'ladi, shuning uchun to'liq qo'shilish yaxshiroq bo'ladi. Umuman olganda, to'liq ulanish o'rniga TO'G'RI Siz boshqa istalgan turdagi birlashmalardan foydalanishingiz mumkin, lekin bu holda jadvallardan birida nolga teng bo'lmagan qatorlar bo'lsa ham, natijada olingan jadval 0 qatorga ega bo'lishi ham mumkin. To'liq qo'shilish holatida, bu holat faqat bitta holatda yuzaga keladi, agar ikkala jadvaldagi qatorlar soni 0 bo'lsa. Agar jadvalda kamida bitta qator borligini bilsangiz, u holda siz foydalanishingiz mumkin CHAP ULANISH shartli boshqa jadval bilan TO'G'RI.

Misol (to'liq qo'shilish uchun o'ylab topilgan):

TANLANG

K. Qarama-qarshi tomon

Enumeration.Gender AS Jins

TO'LIQ ULANISH (Birinchi 1 D. Hujjatdan kontragentni tanlang. Tovarlarni sotish QANDAY D D. Vaqt bo'yicha tartibga solish)

BY (TO'G'RI)

9. Muayyan maydon uchun noyob yozuvlarni olish uchun guruhlash o'rniga kalit so'zdan foydalanish to'g'riroqdir. TURLI so'rovda, chunki bu qurilish ancha aniq va kalit so'z GROUP BY kengroq qo'llanilishiga ega va agar qo'shimcha ravishda agregat funktsiyalarni guruhlar bo'yicha hisoblash zarur bo'lsa, tez-tez ishlatiladi. Ba'zi hollarda cheklangan miqdordagi qatorlarni chiqarish kerak bo'ladi. Buning uchun so'rov tavsifida kalit so'zni ko'rsatishingiz kerak BIRINCHI va undan keyin - kerakli qatorlar soni.

uchun misol BIRINCHI:

Birinchi 5 ni tanlang

Katalog.Nomenklatura.Ism,

Katalog.Nomenklatura.PurchasingPrice

Saralash turi

Katalog.Nomenklatura.PurchasePrice pasayish

uchun misol TURLI:

Turli-ni tanlang

Hujjat.Iste'mol qilinadigan.Qarshi tomon

10.So‘rovdagi jamlash funksiyalaridan kalit so‘zsiz ham foydalanish mumkin GURUH. Bunday holda, barcha natijalar bir qatorga guruhlanadi.

Tanlang

Summa(Invoice.Amount) Miqdor sifatida

Hujjat.Invoice.Tarkib hisob-faktura sifatida

11.Tanlash maydonlaridagi so'rovlarda siz tanlov maydonlarining tafsilotlariga erkin kirishingiz mumkin. Bu xususiyat tanlangan maydonni yo'qotish deb ataladi. Agar ma'lumotlar manbai ichki o'rnatilgan jadval bo'lsa (hujjatning jadval qismi), u holda tanlov maydonlarida siz asosiy jadvalning maydonlariga ham kirishingiz mumkin (masalan, Bog'lanish maydoni orqali, asosiy jadvalning maydoniga kiring Hisob qaydnomasi)

TANLANG


Tovar va xizmatlarni qabul qilish miqdori AS miqdori,
Tovar va xizmatlarni qabul qilishGoods.Link.Counterparty
FROM

QAYERDA
Tovar va xizmatlarni qabul qilishGoods.Link = &Link

Agar so'rovda guruhlar mavjud bo'lsa, maydonni yo'qotishdan foydalanishning o'ziga xos xususiyati bor. So'rov maydonlari ro'yxatidagi guruhlarga ega har qanday so'rovlarda siz guruhlash maydonlarining tafsilotlariga erkin kirishingiz mumkin.

TANLANG

Tovar va xizmatlarni qabul qilish tovar nomenklaturasi.

Tovarlar va xizmatlarni qabul qilish kodeksi.

SUM (Tovar va xizmatlarni qabul qilish tovar. Miqdor) AS Miqdori,

Tovarlar va xizmatlarni qabul qilish to'g'risidagi hujjat

GROUP BY

Tovar va xizmatlarni qabul qilish tovar nomenklaturasi.

1C yordamida aytilishicha, agar guruhlash mavjud bo'lsa, so'rovlarni tanlash maydonlarida faqat guruhlash maydonlari va tanlov maydonlari uchun agregat funktsiyalari ishtirok etishi mumkin. Agregat funktsiyalar ichki o'rnatilgan jadval maydonlariga qo'llanilganda bitta istisno hol mavjud. Bunday holda, tanlov maydonlari ro'yxatida natijalarni ushbu maydonlar bo'yicha guruhlamasdan, yuqori darajadagi jadval maydonlariga kirish mumkin.

TANLANG

Tovar va xizmatlarni qabul qilish (SUM (Miqdor), Nomenklatura).

Tovar va xizmatlarni qabul qilish

Hujjat Tovar va xizmatlarni qabul qilish QANDAY Tovar va xizmatlarni qabul qilish

GROUP BY

Tovarlar va xizmatlarni qabul qilish (nomenklatura).

12. Ba'zan, guruhlashda biron bir maydonni belgilash o'rniga, so'rovlarni tanlash maydonlariga quyidagi parametrni kiritish foydali bo'ladi:

TANLANG
DocProducts.Nomenklatura,
&Qarshi tomon,
&davr,
SUM(DocProducts.Quantity * DocProducts.K) AS Miqdori,
SUM(DocProducts.Amount) AS Sum
FROM
Document.Admission.Mahsulotlar DocProducts AS
QAYERDA
DocProducts.Link = &Link

GROUP BY
DocProducts.Nomenklatura

Va keyin so'rov tanasida parametrni o'rnating:

Request.SetParameter("&Account", SelectAccount);

Query.SetParameter("&Don", Sana);

13. Universal so‘rovlarda parametrlardan so‘rovlar ma’lumotlari manbalarini tavsiflashda, sharoitlarda foydalanish mumkin. QAYERDA, jadvallarni birlashtirish sharoitida va virtual jadvallar parametrlarida. Umumiy so'rovlarni yaratishning ikkita usuli mavjud:

A) satrlarni birlashtirish mexanizmidan foydalanib, so'rov matniga o'zgaruvchilar qo'shish;

OrderingType = ?(SOME VARIABLE,"","DESC");

Query.Text = "Tanlash... Maydon 1 bo'yicha tartiblash " + OrderType + "...";

Query.Text = "1-maydonni tanlang...";

Agar SOME VARIABLE = 1 bo'lsa

Request.Text = Request.Text + ",Field2 ...";

endIf;

B) so'rovning turli qismlarida parametrlardan foydalaning (masalan, so'rovning ma'lumotlar manbalari bo'limida), so'ngra o'rnatilgan til usuli - STREPLACE(). Universal so'rovlarni loyihalashda ob'ektlarning xususiyatiga kirish foydali bo'ladi METADATA(), uning yordamida siz biron bir havola uchun jadval nomini aniqlashingiz mumkin (masalan, hujjat uchun bu shunday bo'ladi - Havola . METADATA().NAME), parametr orqali ba'zi universal protseduraga o'tdi.

Tanlang

DocTch.Nomenklatura,

&Ba'zi DocTC AS DocTC

Va keyin so'rov tanasida parametrni o'rnating

Request.Text = StrReplace(Request.Text, "&SomeDocTCH", "Hujjat."+Link.Metadata().Name+".Mahsulotlar");

Parametrlardan ixtiyoriy shartni yoqish uchun so'rov sharoitida foydalanish mumkin &Parameter OR NO SomeProperty:

Request.SetParameter(“&Parameter”, “Counterparty.Name=””Ivanov”””);

Literaldan foydalanish TO'G'RI so'rovdagi ba'zi filtrlarni olib tashlashingiz mumkin

Query.SetParameter("&Parameter", rost);

14.So'rovlar dizaynerida jadval kontekst menyusi buyrug'i juda foydali - " Jadval nomini o'zgartirish...", uning yordamida siz ma'lumotlar manbai uchun qandaydir umumlashtirilgan nomni topishingiz mumkin. Bir xil turdagi, tuzilishi o'xshash jadvallar uchun so'rovlarni yaratish uchun ikkinchi jadval uchun birinchi jadvalning so'rov matnini nusxalash foydali bo'lishi mumkin, o'ting. so'rovlar dizayneri oynasiga o'ting va jadvalning kontekst menyusidagi elementni tanlang - Jadvalni almashtiring... va ikkinchi jadvalni tanlang.

15.So'rovlar konstruktorining virtual jadvallari shartlari yoki parametrlari bo'limlarida ichki so'rovlar yaratish bilan ishlashda qavs ichidagi bo'sh joyni ajratib ko'rsatish texnikasidan foydalaniladi, so'ngra kontekst menyusida "So'rovlar konstruktori" bandi paydo bo'ladi va o'rnatilgan so'rovni tahrirlashda qavs ichidagi so'rovning hammasi shartda ta'kidlanadi.

Ichki so'rovga misol:

B mahsuloti (mahsulotni tanlang...)

16. Registrlarni muvozanatlash uchun so'rovlarda ACS hisobotlarini loyihalashda Period parametri sifatida ifodadan foydalanish qulayroq va to'g'ri bo'ladi. AddToSana(Yakuniy Davr(Davlat,KUN),SECOND,1), chunki virtual balanslar oxirgi soniyani hisobga olmaganda, davr boshida olinadi. Hujjatlar bilan +1 soniyali texnikadan foydalanish mumkin emas: hujjatlarni joylashtirishning yangi usuliga ko'ra, reestr qoldiqlari chegara ob'ekti tomonidan ko'rsatilgan Davr uchun, shu jumladan hujjatni taqdim etish vaqti bilan (bu sanada emas) olinishi kerak. hujjat +1 soniya!), va eski joylashtirish usuliga ko'ra - hujjatning vaqtida (hujjat sanasida emas!). Bir davr uchun aylanma yoki ma'lumotlarni tahlil qilganda, turi bilan parametr qo'shish qulay Standart davr(bu holda kunning oxirida intervalning oxirgi sanasini ko'rsatishning hojati yo'q). "Davrning boshlanishi" standart maydoni uchun "Ifoda" maydoniga siz kiritishingiz kerak "&Davr.Boshlanish sanasi" "Ifoda" maydoniga "Davr oxiri" standart maydoniga " deb yozing. &Davlat.Yakunlash sanasi". So'rovlar tili bo'yicha juda ko'p foydali ma'lumotlarni sintaksis yordamchisida emas, balki 1C 8.2 konfiguratorining to'liq yordamida (F1 tugmasi) topish mumkin.

17.So‘rovlar funksiyasi IsNull(inglizcha variantini yozish qulayroq IsNull) odatda raqamli so'rov maydonlari uchun Null qiymatlaridan xalos bo'lish uchun ishlatiladi. Ba'zi hollarda, masalan, ikkita jadvalning to'liq qo'shilishi, funktsiya IsNull (Parameter1,Parameter2) dizaynni muvaffaqiyatli almashtirishi mumkin TANLOV QACHON... KEYIN..BOSHQA.... OXIR, har qanday maydon uchun NULL qiymatlari birinchi jadvalda ham, ikkinchisida ham bo'lishi mumkin bo'lganda (bu konstruktsiya maydon uchun Null bo'lmagan qiymatni olishga imkon beradi). Ammo shartli operatordan farqli o'laroq, buni yodda tutishimiz kerak TANLOV funktsiyasi IsNull ikkinchi argument turini birinchi argument turiga o'zgartiradi, agar argument turlari boshqacha bo'lsa, buni hisobga olish kerak!

IsNull(Reg.Qolgan,0)

IsNull(Doc.Mahsulot,Doc1.Item)

18. Shartli qurilishda TANLOV Muayyan qiymatga tenglikni tekshirishning oddiy holati uchun muqobil sintaksis mavjud, ammo u hujjatlashtirilmagan:

Tanlangan ifoda qachon 1, keyin “yuqori” qachon 2, keyin “o‘rta” boshqasi “past”

19. NULL qiymatni tekshirish operatori Ha Null(Ingliz tilidagi versiyasidan foydalanishni tavsiya qilishimiz mumkin Null). Bu konstruksiya ikkita qiymatni taqqoslaydigan har qanday operatsiya, hech bo'lmaganda bittasi Null bo'lganligi sababli paydo bo'ldi. Yozing Bu erda Ism = Null noto'g'ri. Bu operatorni inkor qilish shakli ham qiziq Null yo'q- noto'g'ri, lekin to'g'ri Ha Null emas yoki shakl Yo'q (1-maydon null)- bu He operatori bilan birgalikda ishlatiladigan barcha operatorlardan sezilarli farq.

20. Ba'zan operator shakli foydali bo'ladi IN sanab o'tilgan qiymatlardan biri bilan mosligini tekshirish uchun.

...Mahsulot qayerda. Nomi B (“Maishiy texnika”, “Kompyuterlar”)

Ma'lumotnomalar uchun operator shakli foydali bo'lishi mumkin IN ierarxiya a'zoligini tekshirish.

...IERARXİYADA Nomenklatura qayerda (&Guruh)

Operator IN ko'pincha pastki so'rov natijasiga qiymat kiritilganligini tekshirish uchun ishlatiladi.

Quyi so'rovda siz tashqi so'rov maydonlariga vaziyatda kirishingiz mumkin.

// Mavjud bo'lgan mahsulotlarning nomlarini tanlang

// fakturalarda

TANLANG

Mahsulotlar nomi

Katalog. Nomenklatura QANDAY Mahsulotlar

(TANLANG

Hisob-fakturaning tarkibi. Nomenklatura

Document.Invoice.Composition AS InvoiceComposition

InvoiceContent.Nomenklatura = Products.Link)

Operatsiya IN massivlar, qiymatlar ro'yxati, qiymatlar jadvallari, ichki so'rovlar bilan ishlatilishi mumkin. Bunday holda, shartlarni kamaytirish mumkin

Quyi so'rov uchun sintaksisi

(ifoda1, ifoda2,..., ifodaN) In (Ifoda1, ifoda2,..., ifodaN...ni tanlang)

Qiymatlar jadvali sintaksisi

(ibora1, ifoda2,..., ifodaN) (&TK) da TK qiymatlari jadvalida birinchi N ta ustun ishlatiladi

20. Internetda so'rovlar dizaynerining har doim qanday ishlashi haqida hazil bor CHAP jadvallarni birlashtirish (va ularni almashtirish), biz qanday belgilaganimizdan qat'iy nazar TO'G'RI:

1C: Korxona "chapga" sevadi.

21. So'rovlar konsolida murakkab so'rovlarni disk raskadrovka qilish qulay. Internetda ularning ko'plari bor. So'rovni tuzatgandan so'ng, siz uni nusxalashingiz mumkin va so'rovlar dizaynerida ajoyib tugma mavjud " So'rov", bu erda siz uni bir xil shaklda joylashtirishingiz va saqlashingiz mumkin (ilgari uni faqat konfiguratorda nusxalash va so'rovni chiziqni buzish belgisi yordamida formatlash mumkin edi). "So'rov" tugmasini bosganingizda ochiladigan oynada siz so'rovni tahrirlashingiz va bajarilish natijasini ko'rishingiz mumkin, bu juda qulay.

22.ACS hisobotlarini loyihalashda shuni yodda tutish kerakki, agar siz ma'lum bir maydon bo'yicha filtrlashni ta'minlashingiz kerak bo'lsa, so'rov matniga parametr qo'shish shart emas. Query Builderda yorliq bor " Ma'lumotlar tarkibi", bu erda shartlarga parametrlarni qo'shishingiz mumkin. Bundan tashqari, ACS hisoboti darajasida shartlar yorlig'i mavjud bo'lib, unda siz o'zboshimchalik bilan shartlarni qo'shishingiz va ularni tezkor sozlamalarda saqlashingiz mumkin. Bunday holda, shartlar universal bo'ladi (tenglik, tengsizlik, tegishlilik, ro'yxatga kiritish va boshqalar).

23. Hujjatlar bilan ishlashda virtual jadval maydoni bo'yicha saralashni qo'shish kerak bo'lishi mumkin VAQT LAZASI, lekin omadsizlik - ichki so'rovlarda bu maydon bo'yicha tartiblash to'g'ri ishlamaydi. Tamburlar bilan raqsga tushish yordam beradi: virtual maydon bo'yicha saralash VAQT LAZASI ikkita saralash bilan almashtiriladi: sana va havola bo'yicha. Shuningdek, ichki so'rovni alohida so'rovga ko'chirish orqali muammoni vaqtinchalik jadval orqali hal qilishingiz mumkin. Ko'pgina versiyalarda bu xususiyat yoki xato tuzatilmagan.

Belgilangan kontragent (aniqrog'i, hujjatning jadval qismi) uchun oxirgi e'lon qilingan hujjatni qabul qiladigan noto'g'ri so'rovga misol:

TANLANG

Sarf materiallari. qator raqami,

Sarflanadigan buyumlar.Items,

Sarflanadigan buyumlar. Miqdori,

Iste'mol qilinadigan mahsulotlar narxi,

Sarflanadigan buyumlar.Mumkin

Hujjat. Sarflanadigan AS D

Mumkin echimlar:

A) bilan almashtiring SARALASH TURI yoqilgan

D.Date DESC tomonidan buyurtma.

B) Ichki so'rovni vaqtinchalik jadvalga ko'chirishingiz mumkin:

Hujjat. Sarflanadigan AS D

Va D.Counterparty = &Counterparty

////////////////////////////////////////////////////////////////////////////////

TANLANG

Sarf materiallari. Qator raqami,

Sarflanadigan buyumlar.Items,

Sarflanadigan buyumlar. Miqdori,

Iste'mol qilinadigan mahsulotlar narxi,

Sarflanadigan buyumlar.Mumkin

Hujjat. Sarf materiallari. Sarf materiallari AS

C) Hujjatning asosiy jadvaliga, shundan keyingina jadval qismiga murojaat qilish mumkin

TOP 1 TANLASH

Satr raqami,

mahsulot,

Miqdori,

Narxi,

so'm

Hujjat. Sarf materiallari AS Sarf materiallari

Xarajat.Qarshi taraf = &Qarshi tomon

Va sarf materiallari.O'tkazilgan

SARALASH TURI

Sarflanadigan.Vaqt lahzasi KASHAYDI

24. Hujjatning (katalogning) asosiy jadvaliga kirishda bo‘ysunuvchi jadvaldagi (jadval qismi) ma’lumotlarga ham kirish mumkin. Bu imkoniyat deyiladi jadval maydonlariga havolani bekor qilish. Vazifaning misoli jadval bo'limida ma'lum bir mahsulotni o'z ichiga olgan hujjatlarni qidirish vazifasidir.

Ushbu so'rovning "Kvitansiya. Tovarlar" ichki jadvalidagi so'rovdan afzalligi shundaki, agar hujjatlarda dublikatlar mavjud bo'lsa, so'rov natijasi kalit so'zdan foydalanmasdan faqat noyob hujjatlarni qaytaradi. TURLI.

Taqqoslash:

Bu, ehtimol, hamma narsa. So'rovlar tilida hali men ko'rib chiqmagan savollar ko'pligi aniq. Ushbu maqolani yozish uchun men 1C 8.2 spec8.ru asosiy kursini tamomlaganimdan so'ng olingan ma'lumotlardan, shuningdek, "1C 8.2 Dasturchilar uchun qo'llanma" kitobidan va Internetdan foydalandim.

Ushbu maqolada biz "Express" funktsiyasi tomonidan taqdim etilgan 1C so'rovlar tilida turdagi konvertatsiya qilish imkoniyatlarini tahlil qilamiz.
Keling, ushbu funktsiyadan foydalanishning bir nechta variantlarini ko'rib chiqaylik.
Va birinchi variant - raqamlarni yaxlitlash.

Buning uchun siz quyidagi formatda Express funksiyasidan foydalanishingiz kerak:

Ekspress(<Число>Raqam sifatida (<ДлинаЧисла>,<Точность>))

Qayerda:
Raqam— yaxlitlash kerak bo'lgan maydon
Uzunlik raqamlari- maksimal raqam uzunligi
Aniqlik— raqamlarni yaxlitlashning aniqligi

Uzunlik va aniqlik parametrlari musbat sonlar bo'lishi kerak.
Ushbu funktsiya qanday ishlashini quyidagi rasmda ko'ring.

Ikkinchi foydalanish holati - string casting. Ko'pincha konfiguratsiyalar cheksiz uzunlikdagi satrlardan foydalanadi, bu esa ba'zi cheklovlarni keltirib chiqaradi. Masalan, biz cheksiz uzunlikdagi satrlarni taqqoslay olmaymiz.
Quyidagi so'rovda FullName maydoni cheksiz uzunlikdagi qatorga ega va bu so'rov ishlamaydi.

Uning ishlashi uchun cheksiz uzunlikdagi maydonni ma'lum uzunlikdagi satrga aylantirish kerak, bu quyidagi formatda Express funktsiyasi yordamida amalga oshiriladi:

Ekspress(<Строка>String sifatida (<ДлинаСтроки>)

Qayerda
Chiziq uzunligi– satr qisqartiriladigan maksimal uzunlik.
Keling, so'rovni qayta ishlaymiz: shartda biz cheksiz qatorni ma'lum uzunlikdagi satrga aylantiramiz. Keyin hech qanday xato bo'lmaydi.

Keling, uni qo'llashning oxirgi va eng muhim variantini ko'rib chiqaylik: kompozit turdagi maydonlar bilan ishlashda.
Quyida kompozit maydonlardan foydalanadigan ikkita so'rov mavjud. Birinchisi noto'g'ri, ikkinchisi to'g'ri.

Bular. Murakkab turdagi maydonni olishingiz kerak bo'lganda, har doim bu maydonning qiymatini faqat Express funksiyasidan foydalangan holda turni translyatsiya qilgandan keyin oling. Bunday holda, hujjatlar va ma'lumotnomalar quyidagi formatga ega bo'ladi:

Ekspress(<Документ>Hujjat sifatida.<ИмяТаблицы>)
Ekspress(<Справочник>katalog sifatida.< ИмяТаблицы >)
.

Qayerda
Jadval nomi— dagi obyekt nomi.

Kompozit turlar bilan ishlashda har doim ekspress funksiyasidan foydalaning, u so'rovni sezilarli darajada optimallashtiradi.

Agar siz hali ham so'rovlar tilining konstruktsiyalarida "suzayotgan bo'lsangiz" va hatto eng oddiy so'rovlar ham sizga qiyinchilik tug'dirsa, men sizga "1C da boshlang'ichdan professionalgacha so'rovlar" kursimni tavsiya qilaman. Qaerda bu va boshqa ko'plab savollar batafsilroq muhokama qilinadi.

Ushbu kursning o'ziga xos xususiyati nimada:
Kurs 1C da so'rovlar tili bilan tanish bo'lmaganlar uchun mo'ljallangan;
O'quv materiali yaxshi tuzilgan va o'rganish oson;
Bir necha o'nlab darslar;
Foydali amaliy misollar;
Barcha darslar tushunarli va sodda tilda taqdim etiladi

O'quvchilarim uchun 25% chegirmali kupon: hrW0rl9Nnx

Men imkon qadar tez-tez turli xil qiziqarli bepul maqolalar va video darsliklarni chiqarishga harakat qilaman. Shuning uchun, agar biron bir miqdorni o'tkazish orqali loyihamni qo'llab-quvvatlasangiz, men juda xursand bo'laman:

Siz istalgan miqdorni to'g'ridan-to'g'ri o'tkazishingiz mumkin:
Yandex.Money - 410012882996301
Web Money - R955262494655

Mening guruhlarimga qo'shiling.

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) ikki 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) | Miqdor kunlar 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) AS Jismoniy shaxs, //oldindan belgilangan hisob QIYMATI(Hisoblar rejasi. O'z-o'zidan hisob.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.Summa > 7500 | KEYIN TCReceipts.Summa - 300 | Chegirma bilan chegirma bilan tugaydi | FROM |

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, | TANLANG | QAChON Sotish.Registrator LINK Hujjati.Iste'mol qilinadigan | KEYIN EXPRESS (Sotuv.Registrator Hujjat.Iste'mol qilinadigan) | BOSHQA TANLASH | Qachon Sotish.Registrator LINK hujjati |. Keyin EXPRESS(Sales.Registrator AS Document.Implementation) |

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 talab qilishimiz kerak? 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 turi bo'lsa, u holda u funktsiyaning ikkinchi parametri bilan almashtiriladi.

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

Foydalanish misoli:

Shuni ham yodda tutingki, har doim NULL turini ba'zi bir qiymat bilan almashtirish tavsiya etiladi, chunki NULL turi bilan taqqoslash, NULLni NULL bilan taqqoslasangiz 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" (MahsulotlarInStockRemains.InStockRemaining, 0) AS Qolgan |. Katalog. Nomenklatura AS 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 Qolganlar.Registrator LINK Document.Tovarlarni qabul qilish va Xizmatlar |. ALSE ""Iste'mol" |. Omborlarda qolgan mahsulotlar reestri.

2. Orasida dizayn- bu operator qiymat belgilangan diapazonda ekanligini tekshiradi.

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

Foydalanish misoli:

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

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 subhisoblarini 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'laning (Chart. Diagramma). O'z-o'zini qo'llab-quvvatlaydigan 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 "TANLAM | 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 | . Bo'sh qoldiqlar";

9. Dizayn Buyurtma berish- ma'lumotlarni ma'lum bir soha bo'yicha tartibga soladi. Agar maydon havola bo'lsa, u holda bayroqni o'rnatishda AVTO Buyurtma Saralash, agar bayroq o'chirilgan bo'lsa, havolalarni ko'rsatish orqali amalga oshiriladi;

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. |. AVTO TARTIBINI O'QISh";

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

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

Foydalanish misoli:

Query.Text = "Tanlash | MahsulotlarOmborlar.Nomenklaturasi AS Nomenklaturasi, | MahsulotlarOmborlar.Omborda , |. xazinalar.Ombor";

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 GROUP BY |. ProductsInWarehouses.Nomenklatura, |.Mavjud mahsulotlar.

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 |AmountForCalcCompRemains |AmountForCalcCompRemains |Place DataTzORRPins.Compenation.FROMister | ins |QAYERDA |KompensatsiyaRPORqolgan.KompensatsiyaQolgan<>0 | Va CompensationRPORemains.AmountForCalcCompRemaining> 100" ;

14. Dizayn NATIJALARI... UMUMIY- jamilarni hisoblashda foydalaniladi, dizayn jami maydonlarni hisoblash uchun maydonlarni va jami maydonlarga qo'llaniladigan agregat funktsiyalarni belgilaydi. TOTAL qurilishidan keyingi 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. Qarama-qarshi tomon shartnomasi. Shartnoma turi AS Shartnoma turi, | Hisob-kitoblar. Kontragent shartnomasi AS Shartnoma, | Hisob-kitoblar. Qarama-qarshi tomon, | Hisob-kitoblar. Balans AS o'zaro hisob-kitob balansi miqdori | FROM | Jamg'armalar reestri. Mut. Qarshi taraflar bilan hisob-kitoblar JAMOUNT (Balans) |.

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

1C so'rovlarida satrlar bilan ishlashning bir nechta mexanizmlari mavjud. Birinchidan, chiziqlar qo'shilishi mumkin. Ikkinchidan, siz satrdan pastki qatorni olishingiz mumkin. Uchinchidan, satrlarni, shu jumladan naqsh bo'yicha solishtirish mumkin. Bu, ehtimol, torlar bilan bajarilishi mumkin bo'lgan barcha narsadir.

String qo'shish

So'rovga qatorlar qo'shish uchun "+" operatsiyasidan foydalaniladi. Siz faqat cheklangan uzunlikdagi satrlarni qo'shishingiz mumkin.

"Ism:" + Kontrapartiyalar AS 1-Ustunni Katalogdan kontragentlar AS ni tanlang

Substring funktsiyasi

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

Ob'ekt modelidan Environment() funksiyasining analogi. Substring() funksiyasi string ma'lumotlariga qo'llanilishi mumkin va fragmentni tanlash imkonini beradi <Строки> , belgi raqami bilan boshlanadi <НачальнаяПозиция> (satrdagi belgilar 1 dan boshlab raqamlanadi) va uzunligi <Длина> belgilar. Funktsiyani hisoblash natijasi o'zgaruvchan uzunlikdagi satr turiga ega va agar bo'lsa, uzunlik cheksiz hisoblanadi. <Строка> cheksiz uzunlik va parametrga ega <Длина> doimiy yoki 1024 dan katta emas.

Agar satr uzunligi ikkinchi parametrda ko'rsatilganidan kichik bo'lsa, u holda funktsiya bo'sh qatorni qaytaradi.

Diqqat! Cheksiz uzunlikdagi satrlarni cheklangan uzunlikdagi satrlarga aylantirish uchun SUBSTRING() funksiyasidan foydalanish tavsiya etilmaydi. Buning o'rniga EXPRESS() cast operatoridan foydalangan ma'qul.

Funktsiya o'xshash

Agar string atributi ma'lum mezonlarga javob berishiga ishonch hosil qilishimiz kerak bo'lsa, biz uni taqqoslaymiz:

Qarama-qarshi tomonlar nomini 1-ustun.

Ammo nozikroq taqqoslash kerak bo'lsa-chi? Faqat tenglik yoki tengsizlik emas, balki ma'lum bir naqshga o'xshashlikmi? SIMILAR funksiyasi aynan shu uchun yaratilgan.

LIKE — qatorni naqshga oʻxshashligini tekshirish operatori. SQL da LIKE ning analogi.

SIMILAR operatori uning chap tomonida ko'rsatilgan ifoda qiymatini o'ngda ko'rsatilgan naqsh qatori bilan solishtirish imkonini beradi. Ifodaning qiymati string tipida bo'lishi kerak. Agar ifoda qiymati naqshga mos kelsa, operator natijasi TRUE, aks holda FALSE bo'ladi.

Naqsh qatoridagi quyidagi belgilar xizmat belgilari bo‘lib, satr belgisidan farqli ma’noga ega:

  • % (foiz): ixtiyoriy belgilarning istalgan sonini o'z ichiga olgan ketma-ketlik;
  • _ (pastki chiziq): ​​bitta ixtiyoriy belgi;
  • […] (kvadrat qavs ichida bir yoki bir nechta belgilar): kvadrat qavs ichida sanab o'tilgan har qanday bitta belgi. Ro'yxatda diapazonlar bo'lishi mumkin, masalan, a-z, ya'ni diapazonga kiritilgan ixtiyoriy belgi, jumladan diapazon oxirlari;
  • [^...] (kvadrat qavs ichida inkor belgisi, keyin bir yoki bir nechta belgilar): inkor belgisidan keyin sanab o‘tilganlardan boshqa har qanday bitta belgi.

Boshqa har qanday belgi o'zini anglatadi va qo'shimcha yuk ko'tarmaydi. Agar sanab o'tilgan belgilardan biri o'zi kabi yozilishi kerak bo'lsa, u holda uning oldiga yozilishi kerak<Спецсимвол>. O'zim<Спецсимвол>(har qanday mos belgi) SPECIAL CHARACTER kalit so'zidan keyin xuddi shu bayonotda aniqlanadi.

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 maydonni tip bilan o'zgartirishi mumkin deb noto'g'ri ishonishadi 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 guruhlashimiz mumkin emas; Shuning uchun biz cheksiz uzunlikdagi satrni cheklangan uzunlikdagi qatorga 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

GROUP BY
EXPRESS(Qabul.Izoh QAT (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(Sotish.Miqdori * Sotish.Narxi RAQAM(15, 2))
FROM

Murakkab turni bitta turga aylantirish

Ro'yxatga olish registrlari ko'pincha uni bir turga aylantirish uchun birikma turiga ega, 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 axlat))) Bularning barchasi nima uchun kerak, deb so'raysiz. 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 yozilgan bo'lsa, biz 20 ta chap qo'shilgan 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.



Sizga maqola yoqdimi? Do'stlaringizga ulashing: