Konstruktorda o'rnatilgan so'rovlar. So'rovlar konstruktorlari 1c so'rovlar konstruktori shartlari

Shunday qilib, oddiy narsadan boshlaylik: konfiguratorda yangi ishlov berishni yarating, uni xohlaganingizcha Query Console yoki Query Builder deb nomlang.

Biz darhol "Ma'lumotlar" ga kelajakdagi parametrlar uchun jadval qo'shishimiz mumkin, shunda Konsolimizda biz eng oddiy so'rovni emas, balki parametrlar va havolalar bilan bajaramiz, masalan, ishimiz uchun davriy registrlarga so'rov yaratamiz. , lekin bu erda Parametr ko'rsatmalarisiz=&Sana hech bir joyda.

Parametrlar jadvalimizni yaratish uchun uning "Jadval qismi" dagi "Ma'lumotlar" yorlig'iga yangi jadval qo'shamiz, uni So'rov parametrlari deb nomlaymiz, bu erda biz ushbu jadvalning ustunlarini qo'shamiz: 1) ParameterName, string = 25 belgini yozing. ; ParameterValue, bu erda kompozit ma'lumotlar turi, rasmga qarang:

Shuning uchun, rasmda ko'rsatilganidek, biz Parametr qiymati ustuni uchun kompozit turni tanlaymiz: ochilgan turdagi menyuda "Kompozit tip" katagiga belgi qo'ying, raqamni, qatorni (20 belgini ko'rsating), sanani, Booleanni belgilang va belgilang. pastki katakcha - AnyLink - bu so'rovimiz parametrlarini belgilashda biz konfiguratsiyamizning istalgan ob'ektiga, masalan, kataloglar yoki hujjatlarga murojaat qilishimiz mumkin bo'lgan narsani anglatadi.

Endi biz kelajakdagi Query Console shaklini yaratishimiz kerak. Qayta ishlash jarayonida keling, "Formalar" yorlig'iga o'tamiz va yangisini qo'shamiz. Biz ushbu shaklni kiritamiz va bu erda allaqachon ijodkorlik uchun cheksiz maydon mavjud - siz yaratgan ikkita detalni va parametrlari bo'lgan plastinkani xohlaganingizcha tartibga solishingiz mumkin! Buni amalga oshirish uchun siz Guruh yoki sahifali sahifa kabi standart shakl elementlaridan foydalanishingiz mumkin (agar siz sahifalarni varaqlashni xohlasangiz).

Bu erda asosiy narsa bitta: “Matn qiymatlari” atributini shaklni tahrirlashning chap maydoniga tortgandan so'ng, uning xususiyatlarida “Ko'rish”=Matnli hujjat maydonini o'rnatganingizga ishonch hosil qiling.

"So'rovlar jadvali" atributining xususiyatlarida siz ixtiyoriy ravishda "Display Grid" va "Display Headers" ni belgilashingiz mumkin.

Keyin shaklni tahrirlash uchun o'ng oynada "Buyruqlar" yorlig'iga o'ting va yangi tugmani qo'shing, bosilganda konsolimiz ma'lum bir amalni bajaradi. Keling, "So'rovlar dizayneri" tugmachasini yaratamiz, agar xohlasangiz, tugmachaga belgi qo'shishingiz mumkin, asosiysi tugmani o'zi shaklni tahrirlash uchun chap oynaga joylashtirish - biz uni ko'rishimiz uchun. formani tahrirlash uchun o'ng oynada, bizning tugmachamizni o'ng tugmasini bosing va xususiyatlarni tanlang - xususiyatlarda "Harakat" bandini bosing, modal oyna paydo bo'ladi, bizning dastur kodimiz aynan qayerda bajarilishini so'raydi, biz uni tayinlaymiz. tugmasi - "Mijozda" ni tanlang.

Shakl moduli tayyor bo'sh protsedura "Protsedura so'rovlari konstruktori (buyruq)" bilan ochiladi. Ushbu protsedura ichida biz standart 1c8 Query Builder-ga qo'ng'iroqni tasvirlaymiz. Bu juda oson: Konstruktor = Yangi so'rov konstruktori; Ammo bu erda tuzoqlar bor - platformaga o'rnatilgan Query Constructor FAQAT qalin mijoz ostida foydalanuvchi rejimida ishlaydi! Shuning uchun, biz protsessor ko'rsatmasining shartini kiritamiz #Agar, lekin bu erda siz o'z platformangizga asoslanib o'zingiz qaror qilasiz yoki sizda oddiy shakllar mavjud, keyin "ni tanlang. FatClientRegularApp” yoki boshqariladigan shakllarga asoslangan platformangiz bor, keyin “ ThickClientManagedApplication“.rasmga qarang.

Endi ushbu protseduraga so'rov matnini yozib olish shartini qo'shish qoladi, bu so'rovlar ishlab chiqaruvchisi biz uchun "So'rov matni" formasi tafsilotlarida yaratadi:

Agar Constructor.OpenModal()=To'g'ri bo'lsa, Object.RequestText=Constructor.Text; endIf;

Ammo biz so'rov matnidagi biror narsani qo'lda o'zgartirishimiz mumkin (foydalanuvchi rejimida - "So'rov matni" atributi oynasida), so'rov konstruktori qayta chaqirilganda bizning o'zgarishlarimiz kiritilishi uchun - biz bu erda oddiy shart qo'shamiz:

Agar bo'lmasa EmptyString(Object.QueryText) Keyin Constructor.Text = Object.QueryText; endIf;

Hammasi shu, biz 1c8 platformasiga o'rnatilgan Query Constructor-ni uladik, keling, ishimizni ko'rib chiqaylik. Buning uchun quyidagi usullardan biri yordamida 1C: Enterprise-ni qalin mijoz rejimida ishga tushiring: 1) Konfiguratorning asosiy menyusi – Nosozliklarni tuzatish – Nosozliklarni tuzatishni boshlash – Qalin mijoz; 2) yoki agar sizda konfiguratordagi boshqaruv panelida ushbu tugmalar mavjud bo'lsa - shunchaki qalin nuqta bilan sariq doira bilan tugmani bosing, rasmga qarang:

1cEnterprise8 foydalanuvchi rejimi boshlanadi, biz qayta ishlashimizni topamiz, uni ishga tushiramiz, "So'rovlar dizayneri" tugmasini bosing va platformaga o'rnatilgan dizayner qanday ochilishini ko'ramiz. rasmga qarang.

Shunday qilib, bizda Query Constructor ishlayapti, biz kelajakdagi so'rovimizni unda jamlashni boshlashimiz mumkin, ammo biz yaratgan so'rov qanday ishlashini ko'rish bizni qiziqtiradi! Buning uchun konsolimiz shaklini tahrirlashda konfiguratorda boshqa tugmani yaratishimiz kerak, keling, uni "So'rovni ishga tushirish" deb ataymiz. "So'rovni ishga tushirish" tugmachasining xususiyatlarida "Harakat" tugmasini bosing, menyu yana paydo bo'ladi, unda dastur kodimiz qayerda qayta ishlanishi so'raladi, bu holda biz "Mijozda ham, serverda ham" ni tanlaymiz. yana biz o'zimizni Shakllar modulida topamiz.

Mijozda mavjud bo'lgan Execute Query() protsedurasida, agar foydalanuvchi so'rov matnini kiritmagan bo'lsa, lekin uni bajarishni so'rasa, biz shart yozamiz:

Agar EmptyString(Object.QueryText) Keyin report("So'rov matnini kiriting!"); endIf;

Tizim allaqachon avtomatik ravishda Execute RequestOnServer() protsedurasiga havolani yaratgan; - bu yaxshi, keling, serverda bajariladigan ushbu protseduraga o'tamiz va bu erga kiritilgan so'rovimizni bajarish kodini yozamiz.

Bu erda variantlar mavjud: so'rovlarni qurish bilan bog'liq barcha iboralarni o'zingiz yozishingiz mumkin, ya'ni. qo'lda, lekin undan ham oddiy variant mavjud - protsedura ichida sichqonchaning o'ng tugmachasini bosing va ochiladigan menyuda "Natijalarni qayta ishlash bilan so'rovlar yaratuvchisi" ni tanlang, rasmga qarang:

Agar siz "Natijani qayta ishlash bilan so'rovlar yaratuvchisi" bandini bosgan bo'lsangiz, "So'rov matni topilmadi. Yangisini yarating?" modal oynasi paydo bo'ladi, "Ha" tugmasini bosing. O'rnatilgan so'rovlar dizayneri ochiladi, uning birinchi yorlig'ida. "Natijalarni qayta ishlash" - "Natijani chetlab o'tish" birinchi bandini tanlang. Hammasi shu, bizga ushbu konstruktordan boshqa hech narsa kerak emas, "Ok" tugmasini bosing - modal oyna paydo bo'ladi "So'rovda hech qanday maydon tanlanmagan, "Ok" tugmasini bosing.

Shundan so'ng, bizning ExecuteRequestOnServer() protseduramiz ichida quyidagi tayyor shablon paydo bo'ladi:

Keling, konstruktor tomonidan tuzilgan ifodaga o'tamiz:

Request.Text = "";

Request.Text = Object.RequestText;

Bu qanchalik sodda, ishlov berish formasidagi "So'rovni bajarish" tugmasi allaqachon amalda ishlamoqda, hozircha u faqat oddiy so'rovlarni parametrlarsiz qayta ishlay oladi, lekin asosiysi u ishlaydi! Qolgan narsa, so'rovimiz natijalarini qayta ishlash shaklidagi "Qiymat jadvali" atributida vizual ravishda ko'rsatishdir. Shuni eslatib o'tamanki, bizning "Qiymat jadvali" atributimiz "Jadvalli hujjat" turiga kiradi, chunki aks holda biz natijalarimizni foydalanuvchi rejimida ko'rmaymiz. Jadval ma'lumotlarini foydalanuvchiga ko'rsatish har doim Jadvalli hujjat yoki Layout orqali amalga oshiriladi.Men ma'lumotlarni qiymatlar jadvali orqali ko'rsatish imkoniyati bo'lishini juda istardim - chunki ulardan foydalanish juda oson va tanish, lekin , afsuski, qiymatlar jadvali faqat ishlab chiquvchiga kerak bo'lgan vositadir, siz undan foydalanib ma'lumotlarni ekranda ko'rsata olmaysiz...

Keling, elektron jadval hujjati nima ekanligini batafsil ko'rib chiqaylik - bu Excel varag'iga o'xshaydi - siz ma'lum bir katakdagi yozuvga faqat Jadval hujayralari yordamida kirishingiz mumkin, bu erda biz ularni maydon deb ataymiz, lekin biz o'zimiz ushbu hududning diapazonini tanlashimiz mumkin. ma'lum bir hujayraga:

Shunday qilib, biz elektron jadval hujjati nima ekanligini aniqladik va o'zimiz uchun ushbu elektron jadval hujjatining ma'lum bir katagida so'rovimiz ma'lumotlarini aniqlashimiz kerakligini aniqladik. Ammo o'ylab ko'raylik: dizayner biz uchun juda tez yaratgan "So'rov natijasi" nima? Yordamni oching - so'rov natijasi tegishli xususiyatlarga ega bo'lgan jadvaldir! rasmga qarang.

Endi Query Result = Query.Execute(); (konstruktor tomonidan yaratilgan) ifodasidan keyin yozadigan bo'lsak, To'plamlar uchun shunday oddiy tsikl:

So'rov natijasidan har bir ustun nomi uchun.Ustunlar sikli hisoboti(UstunName.Name); EndCycle;

Ushbu tsikldan so'ng, konstruktor tomonidan avtomatik ravishda tuzilgan barcha iboralarni hozircha yozib oling. Va qalin mijoz ostida 1C: Enterprise8 ni ishga tushiring.Istalgan oddiy so'rovni yarating (Siz Query Builder-dan foydalanishingiz mumkin - u allaqachon biz uchun ishlaydi) va "So'rovni ishga tushirish" tugmasini bosing:

Xabar oynasining pastki qismida So'rov natijalari jadvalida oddiy so'rov yaratish orqali biz tanlagan maydonlar nomlari saqlanayotganini ko'rasiz.

Keling, bizning azob-uqubatlarimizning ushbu nomlarini Elektron jadval hujjatida ko'rsatamiz:

Har bir Ustun nomi uchun so'rov natijasi.Ustunlar tsikli katakchasi=Object.QueryTable.Area(1,QueryResult.Columns.Index(ColumnName)+1); Cell.Text=ColumnName.Name; EndCycle;

So'rov ma'lumotlarining tafsilotlarini ko'rsatish uchun, keling, dizayner tomonidan avtomatik ravishda yaratilgan iboralarni tahlil qilaylik va so'rovning "SelectionDetailedRecords" saralash tsikliga biz ustun nomlarini ko'rsatish uchun ishlatgan aylanani kiritamiz, faqat hozir biz uzatishimiz kerak. Hujayra matniga “So‘rov natijasi” jadvalidagi ma’lumotlar va Tanlovning o‘zi ma’lumotlari emas, keling, so‘rovning Batafsil tanlash maydoniga qanday kirishingiz mumkinligini yordamda ko‘rib chiqamiz:

SelectionDetailRecords = QueryResult.Select(); SelectionDetailedRecords.Next() Loop //birinchi satrda bizda allaqachon jadval ustunlari nomlari yozilgan, shuning uchun biz birinchi satr ostidagi ma'lumotlarni yuklaymizDocRowNumber=Object.QueryTable.TableHeight+1; Har bir Ustun nomi uchun so'rov natijasi.Ustunlar tsikli hujayra=Object.QueryTable.Area(DocRowNumber,QueryResult.Columns.Index(ColumnName)+1); Cell.Text = SelectionDetailedRecords[ColumnName.Name]; EndCycle; EndCycle;

Hammasi shu, biz tekshirishimiz, korxonani qalin mijoz ostida yuklashimiz, parametrlarsiz oddiy so'rovni kiritishimiz, "So'rovni ishga tushirish" tugmasini bosing, rasmga qarang:

Huray, hammasi ishlaydi !!!

So'rovlar konsolini ochish/yopishda, konsolni yopishdan oldin ishlagan so'rov matnimiz yana "So'rov matni" maydoniga yozilsa, bu juda qulay. Buni amalga oshirish uchun siz shunchaki forma xususiyatini yoqishingiz kerak = Avtomatik saqlash, rasmga qarang:

Mana, bizning konsolimiz ishlamoqda. Ularda ko'rsatilgan parametrlar bilan murakkabroq so'rovlarni yozishimiz uchun biz boshqa "Parametrlarni topish" tugmachasini, shuningdek "So'rovni ishga tushirish" tugmasi kodini yaratishimiz kerak - "Parametrlarni topish" tugmasi kodi bajariladi. mijoz va serverda. Keyinchalik, server protsedurasida biz so'rovni "So'rov matni" oynasidan unga kiritilgan matn bilan bir xil tarzda ishga tushiramiz, "Request.FindParameters()" iborasidan foydalanib, biz o'tkazilgan parametrlarni topamiz va ularni oddiygina kiritamiz. "So'rov parametrlari" shaklining jadval qismiga o'ting. Keyin ularni to'ldirilgan parametrlar jadvalidan "So'rovni ishga tushirish" protsedurasiga o'tkazishni unutmang.

Shuningdek, siz bizning Konsolimizga bir nechta tugmalarni qo'shishingiz mumkin, ular foydalanuvchi rejimida Parametrlar oynasini va Matn so'rov oynasini o'chiradi.

Bizning Query Console foydalanishga tayyor, sizga Query Console kabi oddiy va kuchli vositadan foydalangan holda muvaffaqiyatli ijodiy yechimlar tilayman!

Ushbu qayta ishlash 1c8.3 platformasida (boshqariladigan shakllar) yozilgan va qalin mijoz ostida ishlaydi. Uni 1c8.2 platformasida ham oddiy shakllar ostida ham, boshqariladiganlar ostida ham yozish mumkin.

Yuklab olishda biz yaratgan Query Console namunasi mavjud.

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

Query Console yangilanishi:

1) Endi o'rnatilgan Query Builder bilan bizning uy qurilishi So'rovlar konsolimiz har qanday mijoz ostida ishlaydi: oddiy va boshqariladigan shakllarning qalin mijozi ostida va nozik va veb-mijoz ostida.

p.s. O'rnatilgan Query Builderning shakli va ko'rinishi har xil - Konsolimizni qaysi mijoz ostida ishga tushirganimizga bog'liq. (Men shaxsan qalin mijoz ostida Query Builder shakli bilan ko'proq tanish va qulayroqman)

&Mijoz protsedurasi so'rovi konstruktori (buyruq) haqida //standart so'rovlar konstruktorini chaqirish faqat qalin mijoz ostida mumkin #If ThickClientManagedApplication yoki ThickClientNormalApplication Keyin Konstruktor=Yangi so'rovlar konstruktori; Agar bo'lmasa EmptyString(Object.QueryText) Keyin Constructor.Text = Object.QueryText; endIf; Agar Constructor.OpenModal()=To'g'ri bo'lsa, Object.RequestText=Constructor.Text; endIf; // #Else // Report("So'rov tuzuvchiga qo'ng'iroq qilish faqat qalin mijoz ostida mumkin"); // Qaytish; //# EndIf #Else Report("Siz Query Builder dasturini nozik mijoz ostida ishlayapsiz - u shakli va ishlash tezligida bir oz farq qiladi!"); Konstruktor = New QueryConstructor(); Agar bo'lmasa EmptyString(Object.QueryText) Keyin Constructor.Text = Object.QueryText; endIf; Konstruktor ogohlantirishi = Yangi AlertDescription ("RunAfterClosingConstructor", ThisForm); Constructor.Show(Constructor Alert); # EndIf Protseduraning oxiri &Mijoz protsedurasida ExecuteAfterClosingConstructor(Natija, ConstructorParameters) Eksport //Natija=matn, agar Konstruktor ok tugmasi yordamida yopilgan bo'lsa Object.RequestText = AbbreviatedLP(Natija); // ishlaydi!!! Jarayonning oxiri

2) Bizning oddiy Query Console-ga parametrlarga o'tgan Vaqtinchalik jadval bilan murakkab so'rovlarni kiritish imkoniyati qo'shildi!!! Mexanizm juda oddiy va oqlangan bo'lib chiqdi - professional konsollarda bo'lgani kabi XML kodini ishlatmasdan.

Siz kodning o'zi va vaqtinchalik jadvallar parametrlariga o'tkazish mexanizmining protseduralarini ikkinchi biriktirilgan faylda ko'rishingiz mumkin. Parametrlardagi Vaqtinchalik jadvallarning o'z versiyasini qanday ishlab chiqishni boshlaganimni ushbu havolada topishingiz mumkin https://forum.infostart.ru/forum9/topic183700/

Endi vaqtinchalik jadval uning parametrlariga o'tkazilganda murakkab so'rov uchun Konsoldan qanday foydalanish kerak. Masalan, siz ushbu so'rovning kodini olishingiz mumkin;

ExternalData.Product, ExternalData.Quantity PLACE ExternalData FROM &ExternalData AS ExternalData; ////////////////////////////////////////////// /////////////////////////// SELECT ExternalData.Mahsulot, ExternalData.Quantity, ISNULL(RemainingProductRemaining.QuantityRemaining, 0) AS Field1, ISNULL(Remaining) Mahsulotlar Qolganlar.Qolgan miqdor, 0) - Tashqi maʼlumotlardan qolgan tashqi maʼlumotlar miqdori CHOLQIB QOʻSHILGAN Jamgʻarmalarni roʻyxatdan oʻtkazing. Qolgan mahsulotlar.Qolganlar (&Sana, mahsulot IN (Tashqi maʼlumotlardan. Mahsulotni tashqi maʼlumotlardan tanlang).Tashqi maʼlumotlardan qolgan mahsulot. asosiy Mahsulot

Yuqoridagi so'rovlar kodining misoli va o'xshashligi asosida siz o'zingizning ma'lumotlar ob'ektlaringizni hisobga olgan holda o'zingizning murakkab so'rovingizni yaratishingiz mumkin.

Shunday qilib, so'rovlar dizaynerida biz Konstruktorni yopgan holda yuqoridagi so'rovni yaratdik - so'rov matni konsolimizning "So'rov matni" maydoniga kiradi, "Parametrlarni topish" tugmasini bosing, biz Parametrlar jadvalida qator paydo bo'lganligini ko'ramiz. = "Tashqi ma'lumotlar", Qiymat turi = "Qiymatlar jadvali", rasmga qarang.

Ushbu parametrlar jadvalida - Sana parametrini, masalan, bugungi sanani kiriting, so'ngra "Tashqi ma'lumotlar" jadvalining vaqtinchalik parametrini tahrirlashga urinib ko'rish uchun bosing, uchta nuqtada "Qiymatlar jadvali" bilan maydonni bosing - turlar tanlanadi. paydo bo'ladi, Qatorni bosing, bizning mexanizmimiz bizga formadagi sahifani aylantiradi, bu erda biz ushbu juda vaqtinchalik jadvalni qo'lda kiritishimiz kerak.

E'tibor bering, bu holda, "Parametrlardagi vaqtinchalik jadval nomi" maydonining pastki qismidagi "Vaqt jadvallari" sahifasida bizning vaqtinchalik jadvalimiz nomi paydo bo'ladi (u Parametrlar jadvalidan ko'chiriladi).

Hozircha "Vaqt jadvallari" sahifasida biz faqat bitta bo'sh jadvalni ko'ramiz - bu bizning kelajakdagi vaqtinchalik jadvalimiz turlari jadvali. "Qo'shish" tugmasidan foydalanib, biz kelajakdagi jadvalning tafsilotlari nomini va turini qo'shamiz. . Ehtiyot bo'ling - ism va turi &ExternalData so'rovida ko'rsatganimizga mos kelishi kerak:

Endi biz "Vaqtinchalik jadvalni yangilash" tugmasini bosamiz - va bu erda bizda ikkinchi jadval bo'ladi - biz uni "Qo'shish" tugmasi orqali to'g'ridan-to'g'ri vaqtinchalik jadval ma'lumotlari bilan to'ldiramiz.

Hammasi shunday, biz qayta ishlashning 1-sahifasidagi parametrlar jadvaliga so'rov parametrlarining ibtidoiy ma'lumotlarini kiritganimizni yana bir bor tekshirib ko'rishimiz mumkin va "So'rovni ishga tushirish" tugmasini bosing - hamma narsa hisoblab chiqiladi va mos ravishda tanlanadi. vaqtinchalik jadvalimiz parametrida o'tkazilgan ma'lumotlarning cheklanishi

p.s. Agar siz ma'lumotlar nomini va ularning turlarini (birinchi jadvalda) yozishda xatoga yo'l qo'ygan bo'lsangiz - shunchaki Konsolni yoping va uni qayta oching - vaqtinchalik ma'lumotlar jadvali o'chiriladi - va Turlar jadvali yana tahrirlanishi mumkin va yangi ma'lumotlar jadvali yana yaratilishi mumkin.

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

Hammasi shu, biz o'z qo'llarimiz bilan juda kuchli ishlaydigan vositani yaratishimiz mumkin, bundan tashqari, bizning konsolimiz professionallarga qaraganda hali ham juda tez - va bu ishlab chiquvchilar uchun juda katta plyus! Va, albatta, endi bizning konsolimiz istalgan mijoz ostida ishlaydi! Ijodiy rivojlaringizga omad!!!

Keling, ushbu ikkita jadvalni qanday qilib maydonlar bo'yicha birlashtirishni ko'rib chiqaylik Mahsulot kodi foydalanish
so'rovlar konstruktori (vaqtinchalik jadvallarni yaratish uchun kod misol sifatida keltirilgan
Men qilmayman. Yuqoridagi havoladan olishingiz mumkin).

Dizayner oynasini oching, yorliqga o'ting "Jadvallar va maydonlar", bo'limga
"Jadvallar" ikkala jadvalimizni va bo'limni tanlang "Dalalar" -
ikkala jadvaldagi so'rov natijasida ko'rmoqchi bo'lgan maydonlar.

Xatcho‘pga o‘ting "Aloqalar". Yangi qator qo'shing. Dalada 1-jadval
ochiladigan ro'yxatdan mahsulotlar bilan jadvalni tanlang va maydonda 2-jadval Jadval
mamlakatlar bilan.

Uchun Jadvallar 1 katakchani belgilang Hammasi. Uchun
Jadvallar 2 Biz bu katakchani belgilamaymiz. Bu shuni anglatadiki, dan Jadvallar 1
barcha yozuvlar tanlanadi va dan Jadvallar 2 faqat u amalga oshiriladiganlar uchun
ulanish sharti, ya'ni bayroqlarning bunday kombinatsiyasi bilan biz olamiz
CHap ULANISH. Keyinchalik siz to'ldirishingiz kerak Aloqa holati.
Bu erda biz ochiladigan ro'yxatlardan jadval maydonlarini va ochiladigan ro'yxatdagi taqqoslash belgisini ham tanlaymiz
ro'yxati.

Ushbu ulanish natijasida biz quyidagi so'rov matnini olamiz:

VT_Mahsulot.Mahsulot kodini, VT_Mahsulot nomini, VT_Country.Country FROM VT_Mahsulot AS QO'SHILING VT_Country AS VT_Country BY VT_Product.Product Code = VT_Country.Product Code

Endi ba'zi fikrlarni batafsil ko'rib chiqaylik.
Keling, katakchani almashtirishga harakat qilaylik Hammasi.


Oxir oqibat, bu amalga oshishi kerakdek tuyuladi TO'G'RI QO'SHILING, lekin agar biz
Keling, konstruktor tomonidan yaratilgan so'rov matnini ko'rib chiqamiz, biz jadvallar ekanligini ko'ramiz
joylar almashtirildi, lekin aloqa hali ham chapda qoldi:

VT_Mahsulot.Mahsulot kodini, VT_Mahsulot nomini, VT_Mamlakatni VT_Mamlakatdan CHAPDA QO'SHILING VT_Mahsulotni VT_Mahsulot BY VT_Mahsulot sifatida QO'SHILING.Mahsulot kodi = VT_Country.Mahsulot kodi

Keling, ikkala katakchani ham olib tashlasak nima bo'lishini ko'rib chiqamiz

Natijada biz ichki aloqaga ega bo'lamiz.

VT_Mahsulot.Mahsulot kodini, VT_Mahsulot.Nomini, VT_Country.Country FROM VT_Mahsulot AS VT_Mahsulot ICHKI QOʻSHILING VT_Country AS VT_Country BY VT_Mahsulot.Mahsulot kodi = VT_Country.Mahsulot kodi.

Nihoyat, agar ikkala katakcha belgilansa


biz to'liq aloqaga ega bo'lamiz

VT_Mahsulot.Mahsulot kodi, VT_Mahsulot.Nomi, VT_Mamlakatni VT_Mahsulot AS VT_Mahsulot TOʻLIQ BOG'LANISH VT_Mamlakatni VT_Mamlakat AS VT_Mahsulot.Mahsulot kodi = VT_Mahsulot kodini tanlang.

Xatcho'pda bir nechta qatorlarni belgilashingiz mumkin Ulanishlar. Bunday holda, bir nechta
qatorlar shart bo‘yicha bog‘lanadi VA. Bundan tashqari, chiziqlar kerak emas
har safar yana haydash. Ularni kalit yordamida nusxalash mumkin F9.
Va yangi qatorda faqat ulanish holatini o'zgartiring. Bu rivojlanishni sezilarli darajada tezlashtiradi.
Bundan tashqari, havola holatida faqat oldindan belgilangan maydonlardan foydalanish shart emas
ochiladigan ro'yxatlar. Siz qoniqtiradigan ixtiyoriy ifodadan foydalanishingiz mumkin
1C so'rovlar tili. Buning uchun siz katakchani belgilashingiz kerak ozod
va shartni to'g'ridan-to'g'ri maydonga kiriting yoki yordamchi oynani oching
so'rovlar tili funksiyalari bilan shablonlardan foydalanishingiz mumkin.


Albatta, amalda qaerda juda murakkab so'rovlar mavjud
bir-biri bilan turli xil aloqalarga ega bo'lgan bir nechta jadvallar. Lekin so'rovlar yaratuvchisida
har qanday murakkablikdagi ulanishlarni takrorlash mumkin.

So'rovlar dizayneri quyidagi yorliqlardan iborat:

1. "Jadvallar va maydonlar" - yorliqda uchta ierarxik ro'yxat mavjud:
a. "Ma'lumotlar bazasi" - so'rov qilish mumkin bo'lgan barcha mavjud ob'ektlar ro'yxati. Shuningdek, tugma "O'zgartirish jadvallarini ko'rsatish", uning yordamida siz axborot xavfsizligi ob'ektlari har qanday almashinuv rejasi uchun ro'yxatdan o'tgan bo'lsa, o'zgarishlar jadvallariga kirishingiz mumkin.
b. "Jadvallar" - so'rov bajariladigan tanlangan jadvallar ro'yxati. Shuningdek, ushbu oynada siz jadvalni o'chirishingiz, jadval nomini o'zgartirishingiz yoki almashtirishingiz va ichki so'rov qo'shishingiz mumkin.

"Virtual jadvallar parametrlari" tugmasini bosish orqali virtual jadvallar uchun parametrlarni belgilashingiz mumkin:

Ma'lum o'lchamlar bo'yicha tanlash uchun virtual jadvallar parametrlaridan faol foydalanish tavsiya etiladi, chunki bu so'rovlarni bajarish tezligini oshiradi. Parametrlarda tashqi o'zgaruvchilardan foydalanishingiz mumkin, ularning nomlari oldida "&" belgisi mavjud.
c. "Maydonlar" - jadvallardan tanlangan maydonlar ro'yxati. Hisoblangan maydonlarni ham qo'shishingiz mumkin, buning uchun "Qo'shish" tugmasini bosish maxsus ifoda konstruktorini ochadi:

Chap tomonda ifodada mavjud maydonlar joylashgan oyna mavjud. O'ng tomonda ishlatiladigan funktsiyalarga ishora mavjud. Quyida konstruktiv ixtiyoriy ifoda mavjud. Siz ifodalarda tashqi parametrlardan foydalanishingiz mumkin, ular “&” belgisi yordamida belgilanadi, masalan: &Period, &StartDate
Ehtiyot bo'lishingiz kerak, agar oynada kichik sintaksis xatosi bo'lgan uzun va murakkab ibora yozilsa, "OK" tugmasini bosgandan so'ng, tizim ogohlantirish chiqaradi va oynani yopadi. Barcha kiritilgan kod yo'qoladi, shuning uchun agar siz ifodaning to'g'riligiga ishonchingiz komil bo'lmasa, konstruktorni yopishdan oldin har doim tarkibni buferga (Ctrl-C) saqlashingizni maslahat beraman.

2. "Aloqalar" - yorliqda jadvallar orasidagi ulanishlar ko'rsatilgan.

Jadvalda bog'lanishi kerak bo'lgan jadvallar, bog'lanishi kerak bo'lgan jadvallar orasidagi munosabat va ulanish holati ko'rsatilgan. Agar ulanish sharti murakkab bo'lsa, unda siz ma'lum bir hisoblangan ifodani belgilashingiz mumkin va maxsus maydon konstruktori ochiladi.

3. “Guruhlash” - yorliqda qaysi maydonlar guruhlanganligi va qaysi biri jamlanganligi (jamlanishi) ko'rsatilgan.

4. "Shartlar" yorlig'i - so'rovga qo'yiladigan shartlarni sanab o'tadi.
Shartlarda siz oddiy ifoda konstruktori va tashqi o'zgaruvchilar yordamida murakkab iboralarni ham yozishingiz mumkin:

5. "Kengaytirilgan"
So'rovga qo'yilgan qo'shimcha parametrlar

6. “Assotsiatsiyalar va taxalluslar”
Ushbu yorliqda siz maydonlar uchun taxalluslarni belgilashingiz, shuningdek, "UNITE" yoki "UNITE ALL" konstruktsiyalari orqali bog'langan so'rovlarni boshqarishingiz mumkin.

7. "Buyurtma"
So'rov natijalari qanday tartibda ko'rsatiladi?

Diqqat! Xatcho'pning pastki qismida siz tasdiq belgisini ko'rishingiz mumkin "Avtomatik buyurtma"- ACS-dagi 1C 8.1 ning joriy versiyasida bu foydasiz, bundan tashqari, katakchani belgilashda, yozish paytida ACS xato beradi, shuning uchun uni ishlatmaslik kerak.

8. "Ma'lumotlar tarkibi"
Kirishni boshqarish tizimi uchun xizmat ko'rsatish maydonlari belgilangan yorliq. U oddiy hisobot dizayneridagi "Hisobot tuzuvchisi" yorlig'i bilan taxminan bir xil rol o'ynaydi.

A. "Jadvallar" yorlig'ida - so'rovda ishlatiladigan jadvallar ro'yxatga olinadi, "Zarur" katagiga belgi qo'yish orqali jadval so'rovga kiritilishi kerakligini ko'rsatishingiz mumkin. Bular. agar tanlovga hech qanday maydon kiritilmagan bo'lsa, unda bu jadval so'rovda umuman qatnashmaydi. Jadvallar uchun parametrlarni ham belgilashingiz mumkin.

Kirishni boshqarish tizimini o'rnatish jarayonida biz har qanday tanlovni belgilaymiz, keyin barcha tanlov qiymatlari virtual jadvallar parametrlariga almashtiriladi, bu yana so'rovni optimallashtirish va tezlashtirishga yordam beradi.
b. "Maydonlar" yorlig'ida ACS maydonlari ro'yxatiga qo'shiladigan maydonlar va ularning taxalluslari ko'rsatilgan.
c. "Shartlar" - agar tanlovlar ACS sozlamalarida ko'rsatilgan bo'lsa, barcha tanlov qiymatlari qo'shimcha shartlar sifatida qo'shiladi; shartlarga murakkab iboralar ham qo'shilishi mumkin.

9. "Xususiyatlar"
Odatiy chiqish shakli konstruktorida o'xshashi bo'lmagan xatcho'p.

Ushbu yorliq sizga xususiyatlarga ega so'rovlar ishini kengaytirish imkonini beradi. Yorliqdagi jadval bir nechta maydonlardan iborat:
a. "Qiymat turi" - xarakteristikalar tanlanadigan tur. Misol uchun, agar siz "Directory Link.Nomenklatura" ni belgilasangiz, so'rovda nomenklatura uchun barcha xususiyatlar tanlanadi.
b. "Manba" - xarakterli turlarning xususiyatlari uchun manba, so'rov yoki jadval bo'lishi mumkin. Ushbu maydonda biz faqat kerakli xususiyatlarni tanlash uchun so'rov yozishimiz mumkin.
c. "Xususiyatlar ro'yxati" - xarakteristikalar xususiyatlarining manbasi ko'rsatilgan maydon. Ko'pincha bu xarakterli turlar rejasi yoki so'rovdir. Shuningdek, mulkning "Identifikatori", "Ismi" va "Tiri" uchun mas'ul bo'lgan maydonlarni ko'rsatishingiz kerak.
d. "Manba" - bu jadval yoki so'rov bo'lishi mumkin bo'lgan xarakterli qiymatlarning manbasini ko'rsatadigan keyingi maydon.
e. "Xarakterli qiymat" - xarakterli qiymatlarni oladigan jadval yoki so'rov. Masalan, "ObjectPropertyValues" ma'lumotlar registri xarakteristikalar qiymatlari jadvali bo'lib xizmat qilishi mumkin. Shuningdek, biz xarakteristikaning "Ob'ekti", "Xususiyati" va "Qiymati" uchun javob beradigan jadval (yoki so'rov) maydonlarini ko'rsatishimiz kerak.
So'rovni tahrir qilgandan so'ng, so'rov matnini maydonlar ro'yxati ostidagi oynada ko'rish mumkin. Quyida, "Avtomatik to'ldirish" katagiga belgi qo'ygan holda, biz so'rovda ko'rsatilgan maydonlar uchun qo'shimcha parametrlarni to'ldirishni tartibga solishimiz mumkin. E'tibor bering, maydonlarning tarkibi faqat so'rovning o'zida aniqlanadi.

Saytdan olingan ma'lumotlar

Bugun biz buni qanday qilish haqida gaplashamiz ichki so'rovlar foydalanish so'rovlar yaratuvchisi. Keling, to'g'ridan-to'g'ri misolga o'taylik.

Aytaylik, bizda oddiy ma'lumotlar reestri mavjud bo'lib, unda narxlar tovarlar va etkazib beruvchilar tomonidan saqlanadi:

Biz bir nechta yetkazib beruvchiga ega bo'lgan barcha mahsulotlarni olishni so'ramoqchimiz. Buni quyidagi so'rov yordamida amalga oshirish mumkin:

Yetkazib beruvchilar sonini.Mahsulotni mahsulot sifatida tanlang (Narxni.Mahsulotni mahsulot sifatida, MIQNINI(TURLI Narx.Yetkazib beruvchini) RegisterMaʼlumotlaridan yetkazib beruvchilar sifatida.Narxni Narx.Mahsulot BOʻYICHA GURUH BOʻYICHA) Yetkazib beruvchilar soni QAYERDA Yetkazib beruvchilar soni.Etkazib beruvchilar soni >1

Konstruktorda ichki so'rovni shakllantirish

Konstruktor yordamida yuqoridagi so'rovni yaratamiz.

Buni amalga oshirish uchun, maydon ustidagi buyruqlar panelida Jadvallar tugmasini bosing Quyi so'rov yarating:


Shundan so'ng so'rovlar konstruktorining boshqa nusxasi bilan oyna ochiladi:


Va bu yangi oynada biz ichki so'rovni tuzamiz:




Tugmani bosish So'rov Pastki chap burchakda biz quyi so'rov matnini ko'rishimiz mumkin:


Yordamchi konstruktorda OK tugmasini bosgandan so'ng biz asosiy oynada quyidagi rasmni olamiz:


Bu iboradan beri NestedQuery idrok qilish uchun unchalik qulay emas, keling, jadval nomini o'zgartirish uchun sichqonchaning o'ng tugmasidan foydalanamiz Yetkazib beruvchilar soni, undan maydonni tanlang Mahsulot va xatcho'pda Shartlar Kerakli shartni yozamiz:




Va bu barcha manipulyatsiyalardan so'ng biz kerakli so'rovni olamiz. Agar kerak bo'lsa, siz bir necha darajali joylashtirish bilan so'rovlar yaratishingiz mumkin.

Konstruktorda oddiy so'rovdan ichki so'rovni qanday qilish kerak

Ko'pincha konstruktorda so'rov yuborishni boshlaganingizda vaziyat yuzaga keladi va bir nuqtada siz uni joylashtirish kerakligini tushunasiz. Albatta, bizning misolimizda hech qanday muammo yo'q - siz shunchaki hamma narsani o'chirib tashlashingiz va so'rovni qayta yuborishingiz mumkin. Ammo amalda ancha murakkab misollar mavjud, masalan, so'rovni amalga oshirish uchun bir necha soat sarflangan bir necha darajali uyalar mavjud. Va bu holatda juda oddiy chiqish yo'li bor. Siz dizaynerga o'rnatilgan so'rov matn muharriridan foydalanishingiz mumkin. Tugmani ishlatish kerak So'rov so'rov matnini oling (yuqoridagi rasmga qarang) va uni clipboardga nusxalash. Keyin yangi ichki so'rov yarating va tugmani yana bosing So'rov, buferdan matnni joylashtiring, OK tugmasini bosing. Shunga ko'ra, biz yuqori darajadagi eski so'rovni tozalaymiz. Shunday qilib, agar kerak bo'lsa, biz osongina ko'p darajali ichki so'rovlarni yaratishimiz mumkin.

So'rov matnini "qo'lda" yozish qobiliyati hech qachon "ortiqcha" bo'lmagan, ammo so'rovlar dizayneridan foydalanish qulayroqdir.

Izoh.

Afsuski, boshqariladigan ilovada siz "So'rov bilan tanishish" jarayonidagi so'rovlar dizayneridan foydalana olmaysiz. Oddiy rejimga o'tish orqali uni ushbu ishlov berishda ishlatishingiz mumkin, ammo biz buni qilmaymiz.

Keling, "So'rov konstruktori" ishlovini yaratamiz va uni "Hisobotlar va ishlov berish" quyi tizimida aniqlaymiz.

Qayta ishlash formasini yaratamiz va unga «Tabulyar hujjat» tipidagi «TabDoc» formasining atributini hamda «So‘rovni bajarish» amali bilan «So‘rovni bajarish» buyrug‘ini qo‘shamiz. Keyin ularni shaklga torting.

Forma modulida buyruq ishlashi uchun protsedura yozamiz:

&OnClient

So'rovni bajarish tartibi (buyruq)

ExecuteRequestServer();

Jarayonning oxiri

&Serverda

Jarayonning oxiri

Biz serverda chaqirilgan protsedura ichiga kiramiz va kontekst menyusidan "So'rov konstruktori bilan natijalarni qayta ishlash" ni chaqiramiz (2.65-rasm).

2.65-rasm Natijalarni qayta ishlash bilan so'rovlar konstruktori

Qayta ishlash turini "Elektron jadval hujjatiga chiqarish" ga o'rnating va "Keyingi" tugmasini yoki "Jadvallar va maydonlar" yorlig'ini bosing.

Dizaynerning "Jadvallar va maydonlar" yorlig'ida siz tizimdagi mavjud jadvallarni ko'rishingiz mumkin (chap qismi "Ma'lumotlar bazasi" deb nomlangan) (2.66-rasm).

2.67-rasm So'rovlar konstruktori

So'rov ma'lumotlarini oladigan jadvallar "Jadvallar" maydoniga o'tkaziladi; so'rov uchun talab qilinadigan maydonlar "Maydonlar" maydoniga o'tkaziladi. Buni 2.68-rasmdagidek bajaramiz.

2.68-rasm So'rovlar konstruktori

Bu erda biz yaratilgan standart ko'rinish maydonini olib tashladik - "TAQDIM (Mahsulot kvitansiyasiMahsulotlar. Nomenklatura)"

Dizayner bilan ishlashda istalgan vaqtda siz olingan so'rov matnini ko'rishingiz mumkin. Ushbu vazifani bajarish uchun siz dizayner formasining pastki chap burchagida joylashgan "So'rov" tugmasini bosishingiz kerak (2.69-rasm).

"Tahrirlash" tugmasini bosish orqali so'rov matnini qo'lda tahrirlashingiz mumkin.

Amaliyot. "OK" tugmasini bosing va foydalanuvchi rejimida ishlashimizni tekshiring. Agar siz so'rovni bajarishda olingan ma'lumotlarni tahlil qilsangiz, siz elementlarning "takrorlarini" topishingiz mumkin (agar bu siz uchun ishlamasa, istalgan "Tovarni qabul qilish" hujjatidan nusxa ko'chirishingiz va joylashtirishingiz mumkin).

Biz ExecuteRequestServer() protsedurasiga “So'rovlar konstruktori”ni qayta ishlashga qaytamiz va kontekst menyusidan “Natijani qayta ishlash bilan so'rov konstruktori”ni yana chaqiramiz.

Agar siz so'rov natijasini "yiqitmoqchi" bo'lsangiz, buning uchun so'rovlar dizaynerining "Guruhlash" yorlig'idan foydalanishingiz mumkin.

Guruhlashtirishni belgilashda siz quyidagi qoidaga amal qilishingiz kerak: barcha so'rovlarni tanlash maydonlari guruhlash (konvolyutsiya) amalga oshiriladigan maydonlarga, ichki o'rnatilgan jadvallar maydonlariga (guruhlash amalga oshirilganlarga nisbatan jamlangan maydonlar) va agregatlarga bo'linadi. funktsiyalari. Guruhlashlarni aniqlaymiz (2.70-rasm).

2.70-rasm So'rovlar tuzuvchisi

Agar so'rov bo'yicha olingan ma'lumotlar ba'zi shartlarga muvofiq tanlanishi kerak bo'lsa, bu holda "Shartlar" yorlig'idan foydalanish kerak bo'lishi mumkin. Tovarlarni qabul qilishTovarlarni tanlaymiz.Quantity=10 (2.71-rasm).

2.71-rasm So'rovlar konstruktorining sharti.

E'tibor bering, agar shart rasmdagi kabi aniqlangan bo'lsa, so'rov bajarilmaydi.

Vaziyatni tuzatishning ikki yo'li mavjud:

    "P..." bayrog'ini tekshirish orqali shartni qayta belgilash orqali;

    So'rov matnining o'zini o'zgartirish imkoniyatidan foydalanib ("So'rovni tahrirlash" tugmasini bosish orqali olinadi).

Qo'lda o'zgartirishning o'zi shundan iboratki, "10" raqamidan oldin "&" belgisini olib tashlash kerak. So'rov matnidagi ushbu belgi so'rov parametrlarini belgilaydi, ularga ba'zi qiymatlar keyinroq yozilishi kerak (lekin so'rovni bajarishdan oldin). "So'rovni tahrirlash" tugmasini bosing va tahrirlang (2.72-rasm).

2.73-rasm So'rovni tahrirlash

"Kengaytirilgan" yorlig'ida siz bir qator bayroqlarni tekshirishingiz mumkin (so'rovlar tilining "Tanlash" kalit so'zi bilan bog'liq) va so'rovni o'zgartirish uchun mo'ljallangan jadvallar tarkibini aniqlashingiz mumkin (2.74-rasm).

2.74-rasm Qo'shimcha so'rovlar funksiyalari

"Qo'shilishlar/taxalluslar" yorlig'ida siz "Taxalluslar" ni o'rnatish orqali maydon nomlarini o'zgartirishingiz mumkin, ammo biz buni qilmaymiz.

"Buyurtma" yorlig'ida siz so'rov natijasida yozuvlarni saralash tartibini aniqlashingiz mumkin (2.75-rasm).

Shakl 2.75 Yozuvlarni tartiblash tartibi

"Avto-buyurtma" bayrog'iga e'tibor bering, u mos yozuvlar turidagi maydonlar bo'yicha buyurtma berish uchun ishlatilishi mumkin.

"Jami" bo'limini belgilashda siz so'rov natijasida "qo'shimcha" jami yozuvlar paydo bo'lishiga tayyor bo'lishingiz kerak. Ushbu yozuvlar bilan birgalikda so'rov natijasi ierarxik bo'ladi (2.76-rasm).

2.76-rasm.So'rovlar konstruktorining natijalari.

Jami miqdorning bir nechta turlarini belgilash mumkin:

    Elementlar (so'rov natijalari tanlovi guruhlash jami va batafsil yozuvlarni o'z ichiga oladi);

    Ierarxiya (so'rov natijalarini tanlashda umumiy holatda ierarxiya bo'yicha yig'ma yozuvlar, guruhlash bo'yicha yig'ma yozuvlar va batafsil yozuvlar mavjud);

    Faqat ierarxiya (so'rov natijalarini tanlashda, umuman olganda, ierarxiya bo'yicha yig'ma yozuvlar mavjud).

Konstruktorning "Ok" tugmasini bosgandan so'ng, "Layout" hosil bo'ladi va ExecuteRequestServer() protsedurasi uchun kod forma modulida yoziladi:

&Serverda

ExecuteRequestServer() protsedurasi

//((QUERY_CONSTRUCTOR_WITH_RESULT_PROCESSING

// Ushbu fragment konstruktor tomonidan qurilgan.

// Konstruktorni qayta ishlatishda qo'lda kiritilgan o'zgartirishlar yo'qoladi!!!

Layout = Processing.QueryConstructor.GetLayout("Layout");

So'rov = Yangi so'rov;

So'rov.Matn =

| Tovarlarni qabul qilish Tovarlar Nomenklaturasi AS Nomenklaturasi,

| SUM (Tovarlarni qabul qilish tovar. Miqdori) AS Miqdori,

| SUM(Tovarlarni qabul qilish.Summa) AS Sum

| Hujjat.Tovarlarni qabul qilish.Tovar

| MAHSULOTLARNI QANDAY OLISH

| Tovarlarni qabul qilish Tovarlar miqdori > 1

|GROUP BY

| Tovarlarni qabul qilish.Nomenklatura

|Buyurtma berish

| Miqdori,

| Miqdori KASHAYDI

| SUM(Miqdor),

| SUM(sum)

| Nomenklatura IERARXIYA”;

Natija = Query.Run();

HeaderArea = Layout.GetArea("Sarlavha");

AreaFooter = Layout.GetArea("Footer");

TableHeadArea = Layout.GetArea ("TableHeader");

TableFooterArea = Layout.GetArea("Tablefooter");

AreaNomenklaturaIerarxiyasi = Layout.GetArea("NomenklaturaIerarxiyasi");

AreaNomenklatura = Layout.GetArea("Nomenklatura");

TabDoc.Clear();

TabDoc.Output(AreaHeader);

TabDoc.Output(TableHeadArea);

TabDoc.StartAutoGroupingRows();

TanlashNomenklaturasi = Natija.Tanlash(BypassQueryResult.ByGrouping);

While SelectionNomenclature.Next() sikl

Agar SelectionNomenclature.RecordType() = RequestRecordType.TotalByHierarchy keyin

Maydon = HududNomenklaturaIerarxiyasi;

Mintaqa = Mintaqa nomenklaturasi;

endIf;

Area.Parameters.Fill(SelectionNomenklatura);

TabDoc.Output(Maydon, TanlashNomenklaturasi.Level());

EndCycle;

TabDoc.FinishAutoGroupingRows();

TabDoc.Output(TableFooterArea);

TabDoc.Output(AreaFooter);

//))CONSTRUCTOR_QUERY_WITH_RESULT_ROCESSING