1c virtual stol balanslari va aylanmasi. So'rovlar to'plami yorlig'i

Men o'z hissamni qo'shishga va tilning yuqoridagi maqolalarda muhokama qilinmagan xususiyatlarini tasvirlashga qaror qildim. Maqola yangi boshlanuvchilar uchun mo'ljallangan.

1. “IZ” dizayni.

Ma'lumotlar bazasidan ma'lumotlarni olish uchun "FROM" konstruktsiyasidan foydalanish shart emas.
Misol: Banklar katalogidan banklar haqidagi barcha ma'lumotlarni tanlashimiz kerak.
Talab:

Directory.Banks ni tanlang.*

Banklar katalogidan barcha maydonlarni tanlaydi. Va so'rovga o'xshaydi:

Banklarni tanlang.* Directory.Banks AS Banks

2. Malumot maydoni bo'yicha ma'lumotlarni buyurtma qilish

So'rov ma'lumotlarini ibtidoiy turlar bo'yicha tartibga solish kerak bo'lganda: "String", "Raqam", "Sana" va boshqalar, keyin hamma narsa "ORDER BY" konstruktsiyasi yordamida hal qilinadi, agar ma'lumotni mos yozuvlar maydoni bo'yicha buyurtma qilish kerak bo'lsa? Malumot maydoni havola, noyob identifikator, ya'ni. Taxminan aytganda, ba'zi bir ixtiyoriy belgilar to'plami va oddiy tartib butunlay kutilmagan natijaga olib kelishi mumkin. Malumot maydonlariga buyurtma berish uchun "AUTO ORDER" konstruktsiyasidan foydalaniladi. Buni amalga oshirish uchun avval "ORDER BY" konstruktsiyasidan foydalangan holda ma'lumotlarni to'g'ridan-to'g'ri mos yozuvlar turi bo'yicha buyurtma qilishingiz kerak, keyin esa "AUTO ORDER" konstruktsiyasi.

Bunday holda, hujjatlar uchun buyurtma "Sana->Raqam", ma'lumotnomalar uchun "Asosiy ko'rinish" tartibida amalga oshiriladi. Agar buyurtma mos yozuvlar maydonlari bo'yicha amalga oshirilmasa, u holda "AVTO TARTIBOR" konstruktsiyasidan foydalanish tavsiya etilmaydi.

Ba'zi hollarda "AVTO BUYURT" konstruktsiyasi tanlov jarayonini sekinlashtirishi mumkin. Xuddi shunday, siz hujjatlarni avtomatik buyurtma qilmasdan qayta yozishingiz mumkin:

3.Malumot turining matnli tasvirini olish. "TAQDIMAT" dizayni.

Ma'lumotnoma turidagi maydonni, masalan, "Banklar" katalogining elementiga havola bo'lgan "Bank" maydonini ko'rsatish kerak bo'lganda, ushbu maydonni ko'rsatishda "" pastki so'rovi ekanligini tushunishingiz kerak. Banklar" katalogi katalog ko'rinishini olish uchun avtomatik ravishda bajariladi. Bu ma'lumotlar chiqishini sekinlashtiradi. Bunga yo'l qo'ymaslik uchun ob'ektning tasvirini darhol olish va keyin uni ko'rish uchun ko'rsatish uchun so'rovda "TAQDIM" konstruktsiyasidan foydalanishingiz kerak.

Ma'lumotlar tarkibi tizimida bu mexanizm sukut bo'yicha ishlatiladi, lekin hujayralardagi tartiblarni yaratishda siz mos yozuvlar maydonining ko'rinishini ko'rsatishingiz va, masalan, havolani transkriptga joylashtirishingiz kerak.

4. Shablon bo'yicha ma'lumotlarni tanlab olish sharti.

Masalan, siz (8 -123- 456-78-912) shakldagi xodimlarning mobil telefonlarini olishingiz kerak. Buning uchun so'rovda quyidagi shartni o'rnatishingiz kerak:

Ma'lumotnomadan Xodim.Ismi, Xodim.Telefonini TANLANG.

"_" belgisi xizmat belgisi bo'lib, har qanday belgi o'rnini bosadi.

5. Bir vaqtning o'zida jami va guruhlashlardan foydalanish.


Jami ko'pincha guruhlashlar bilan birgalikda ishlatiladi, bu holda yig'indi funktsiyalari yig'indida ko'rsatilmasligi mumkin.

Xizmatlarni taqdim etish.Tashkilot AS Tashkilot, xizmatlar ko'rsatish.Nomenklatura AS Nomenklatura, SO'M(Xizmatlarni taqdim etish.Hujjat summasi) Hujjatdan hujjat yig'indisi AS. Xizmatlar.Nomenklatura UMUMIY NATIJALAR, Tashkilot, Nomen klatura

Bunday holda, so'rov quyidagi so'rov bilan deyarli bir xil bo'ladi:

Xizmatlarni taqdim etish.Tashkilot AS Tashkilot, xizmatlar ko'rsatish.Nomenklatura AS Nomenklatura, xizmatlar ko'rsatish.Hujjat summasi Hujjatdan hujjat miqdori. Nomenklatura

Faqat birinchi so'rov bir xil nomenklaturaga ega yozuvlarni to'xtatadi.

6. Maydonlarni havoladan chiqarish.

Maydonlarga nuqta orqali murojaat qilish mos yozuvlar maydonini yo'qotish operatsiyasi deb ataladi. Masalan To'lov.Tashkilot.Ma'muriy birlik. Bunday holda, "To'lov" hujjatining "Tashkilot" ma'lumot maydonida "Ma'muriy birlik" atributining qiymati olinadigan boshqa "Tashkilotlar" jadvaliga ishora qiladi. Maydonlarga nuqta orqali kirishda platforma bilvosita pastki so'rovni yaratishini va ushbu jadvallarni birlashtirishini tushunish muhimdir.

Talab:

Quyidagi tarzda ifodalanishi mumkin:

Toʻlov.Link, Toʻlov.Tashkilot, Toʻlov.Tashkilot, Tashkilotlarni tanlang. Hujjatdan ma'muriy birlik. To'lov AS to'lov QO'SHILISh Katalog. Tashkilotlar dasturiy ta'minot tashkilotlari AS To'lov. Tashkilot = Tashkilotlar.Link

Kompozit turdagi mos yozuvlar maydonlariga havolani bekor qilganda, ramka ushbu maydon turining bir qismi bo'lgan barcha jadvallar uchun yashirin birikmalar yaratishga harakat qiladi. Bunday holda so'rov optimal bo'lmaydi.Agar u qanday maydon turi ekanligi aniq ma'lum bo'lsa, bunday maydonlarni konstruktsiya bilan turi bo'yicha cheklash kerak. EXPRESS().

Masalan, "Taqsimlanmagan to'lovlar" jamg'arma registri mavjud bo'lib, unda bir nechta hujjatlar ro'yxatga oluvchi sifatida harakat qilishi mumkin. Bunday holda, ro'yxatga oluvchi tafsilotlarining qiymatlarini shu tarzda olish noto'g'ri:

Ajratilmagan toʻlovlarni.Roʻyxatdan oʻtish.Sana, ..... Roʻyxatdan oʻtish.Toʻlovlarni taqsimlanmagan toʻlovlar sifatida tanlang

logger uchun kompozit maydon turini cheklashingiz kerak:

EXPRESS (Ajratilmagan toʻlovlar. Hujjat sifatida roʻyxatdan oʻtish. Toʻlov). Sana, ..... Roʻyxatdan oʻtish toʻplash. Ajratilmagan toʻlovlarni taqsimlanmagan toʻlovlar sifatida tanlang.

7. "QAYERDA" qurilishi

Ikkita jadvalni chapga birlashtirish bilan, o'ng stolga "QAYER" shartini qo'yganingizda, biz jadvallarning ichki qo'shilishi bilan natijaga o'xshash natijaga erishamiz.

Misol. Mijozlar katalogidan barcha Mijozlarni tanlash kerak va "Tashkilot" = &Tashkilot atributi qiymatiga ega bo'lgan to'lov hujjatiga ega bo'lgan mijozlar uchun "To'lov" hujjatini ko'rsating, yo'qlar uchun uni ko'rsatmang.

So'rov natijasi faqat parametr bo'yicha tashkilot tomonidan to'lovni amalga oshirgan mijozlar uchun yozuvlarni qaytaradi va boshqa mijozlarni filtrlaydi. Shuning uchun, siz avval "shunday va shunga o'xshash" tashkilot uchun barcha to'lovlarni vaqtinchalik jadvalda olishingiz kerak, so'ngra chap qo'shilish yordamida uni "Mijozlar" katalogiga ulashingiz kerak.

Toʻlovni. Toʻlov, toʻlov. Aktsiyadorni Hujjatdan toʻlovlar uchun mijoz JOYI. Toʻlov sifatida toʻlovni TANlang. Toʻlov. Filial = &Branch; ////////////////////////////////////////////// /////////////////////////// SELECT Clients.Link AS Client, ISNULL(tPayment.Payment, "") Katalogdan to'lov AS .Clients AS Mijozlar to'lovlarni to'lovlar sifatida QO'LLANGAN ULANISH DASTURI Clients.Link = topayments.Client

Siz bu holatni boshqa yo'l bilan engishingiz mumkin. Ikki jadval o'rtasidagi munosabatga to'g'ridan-to'g'ri "QAYER" shartini qo'yish kerak. Misol:

Clients.Link, Payment.Link FROM Directory.US_Subscribers AS US_Subscribers CHAPLANGAN ULANISH Hujjat.To'lovni to'lov dasturi sifatida (Clients.Link = Payment.Client AND Payment.Client.Ismi "Shakar Paketi" kabi) To'lovlar. GROUP.LYk. Havola

8. Nested va virtual jadvallar bilan birikadi

Ichki so'rovlar ko'pincha ba'zi shartlar asosida ma'lumotlarni olish uchun zarur. Agar siz ularni boshqa jadvallar bilan birgalikda ishlatsangiz, bu so'rovning bajarilishini keskin sekinlashtirishi mumkin.

Misol uchun, biz ba'zi mijozlar uchun joriy sanadagi Balans miqdorini olishimiz kerak.

Ajratilmagan toʻlovlar qoldiqlarini.Customer, Unalocated PaymentsRemains.Qolgan miqdorni (Clients.Link OF FROM Directory.Clients AS Clients AS WHERE Clients.Link IN(&Clients)) SIBI TANGLASH NestedQuery. ocatedPayments BY Nested Request.Link = UnallocatedPaymentsBalances. Mijoz

Bunday so'rovni bajarishda DBMS optimallashtiruvchisi rejani tanlashda xatolarga yo'l qo'yishi mumkin, bu esa so'rovning suboptimal bajarilishiga olib keladi. Ikki jadvalni birlashtirganda, DBMS optimallashtiruvchisi ikkala jadvaldagi yozuvlar soniga qarab jadvallarni birlashtirish algoritmini tanlaydi. Agar ichki so'rov mavjud bo'lsa, ichki so'rov qaytaradigan yozuvlar sonini aniqlash juda qiyin. Shuning uchun, ichki so'rovlar o'rniga har doim vaqtinchalik jadvallardan foydalanishingiz kerak. Shunday qilib, so'rovni qayta yozamiz.

Clients.Link OF HALOQLANISH JOYINI TANGLASH tClientsni Directory.Clients-dan Clients sifatida QAYERDA
Clients.Link B (&Clients); ////////////////////////////////////////////// /////////////////////////// tClients.Link, UnallocatedPaymentsRemains.Amount, FROM tClients FROM AS tClients CHOP QO'SHILMA registr Jamg'armalar.BallocatedPayments.Bal. IN (TClients.Link FROM tClients)) AS UnallocatedPaymentsBalances tClients.Link = UnallocatedPaymentsBalances.Clients

Bunday holda, optimallashtiruvchi tClients vaqtinchalik jadvali qancha yozuvlardan foydalanishini aniqlay oladi va jadvallarni birlashtirish uchun optimal algoritmni tanlashi mumkin.

Virtual jadvallar , koʻpgina qoʻllaniladigan vazifalar uchun amalda tayyor maʼlumotlarni olish imkonini beradi.(Birinchi boʻlak, Oxirgi tilim, qoldiqlar, aylanmalar, qoldiqlar va aylanmalar) Bu yerda kalit soʻz virtualdir. Ushbu jadvallar jismoniy emas, lekin tizim tomonidan tezda tuziladi, ya'ni. Virtual jadvallardan ma'lumotlarni qabul qilishda tizim yakuniy registr jadvallaridagi ma'lumotlarni yig'adi, yig'adi, guruhlaydi va foydalanuvchiga beradi.

Bular. Virtual jadvalga ulanishda pastki so'rovga ulanish amalga oshiriladi. Bunday holda, DBMS optimallashtiruvchisi optimal bo'lmagan ulanish rejasini ham tanlashi mumkin. Agar so'rov yetarlicha tez yaratilmasa va so'rov virtual jadvallardagi birlashmalardan foydalansa, virtual jadvallarga kirishni vaqtinchalik jadvalga ko'chirish va keyin ikkita vaqtinchalik jadvallar o'rtasida ulanishni amalga oshirish tavsiya etiladi. Oldingi so'rovni qayta yozamiz.

Clients.Link OF HALOQLANISH JOYINI TANGLASH tClientsni Directory.Clients AS Clients INDEX BY BY INDEX
Clients.Link B (&Clients); ////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////// Ajratilmagan to'lovlarni TANGLASH tClients ni tanlang.. tClientsdan havola)) Taqsimlanmagan to'lovlar qoldig'i sifatida; ////////////////////////////////////////////// /////////////////////////// tClients.Link, to Remainders.Qolgan miqdor tClients ASKI tClients.Lk. = tRemainings.Client

9.So'rov natijasini tekshirish.

So'rov natijasi bo'sh bo'lishi mumkin; bo'sh qiymatlarni tekshirish uchun quyidagi konstruktsiyadan foydalaning:

ResRequest = Request.Execute(); Agar resQuery.Empty() bo'lsa, Qaytish; endIf;

Usul Bo'sh() usullaridan oldin foydalanish kerak tanlang() yoki Yuklash(), chunki to'plamni olish vaqt talab etadi.

So'rovlarni tsiklda ishlatish juda istalmaganligi hech kimga vahiy emas. Bu ma'lum bir funktsiyaning ishlash vaqtiga jiddiy ta'sir ko'rsatishi mumkin. So'rovdagi barcha ma'lumotlarni olish va keyin ma'lumotlarni tsiklda qayta ishlash juda ma'qul. Ammo ba'zida so'rovni tsikldan tashqariga ko'chirishning iloji bo'lmagan holatlar mavjud. Bunday holda, optimallashtirish uchun siz so'rovni yaratishni tsikldan tashqariga ko'chirishingiz mumkin va tsiklda kerakli parametrlarni almashtirib, so'rovni bajarishingiz mumkin.

So'rov = Yangi so'rov; Query.Text = "SELECT | Clients.Link, | Clients.Birthdate |FROM | Directory.Clients AS Clients |QAYERDA | Clients.Link = &Client"; Har bir Qator uchun TableClients Loop Query.SetParameter("Mijoz", Client); QueryResult = Query.Execute().Select(); EndCycle;

Bu tizimni so'rovni tsikldagi sintaksisni tekshirishdan qutqaradi.

11. "HAVING" qurilishi.

So'rovlarda juda kam uchraydigan dizayn. Agregat funktsiyalar qiymatlariga (SUM, MINIMUM, AVERAGE va boshqalar) shartlar qo'yish imkonini beradi. Misol uchun, siz faqat sentyabr oyida to'lov miqdori 13 000 rubldan ortiq bo'lgan mijozlarni tanlashingiz kerak. Agar siz “QAYER” shartidan foydalansangiz, avval vaqtinchalik jadval yoki ichki so‘rov yaratishingiz, u yerda to‘lov miqdori bo‘yicha yozuvlarni guruhlashingiz va keyin shartni qo‘llashingiz kerak bo‘ladi. "HAVING" konstruktsiyasi buning oldini olishga yordam beradi.

Toʻlov.Mijoz, Hujjatdan SOʻMIM (Toʻlov.Summa) SABIRDA TANLASH.Toʻlov QAYERDA OY(Toʻlov.Sana) = 9 GURUH toʻlov boʻyicha. Mijozda SUMDAR (Toʻlov.Summa) > 13000

Buni amalga oshirish uchun konstruktorda "Shartlar" yorlig'iga o'ting, yangi shart qo'shing va "Maxsus" katagiga belgi qo'ying. Keyin shunchaki yozing Summa(To'lov.Summa) > 13000


12. NULL qiymati

Men bu erda ma'lumotlar bazasida uchta qiymatli mantiq tamoyillarini tasvirlamayman, bu mavzu bo'yicha ko'plab maqolalar mavjud. Qanday qilib haqida qisqacha NULL so'rov natijasiga ta'sir qilishi mumkin. NULL qiymati aslida qiymat emas va qiymat aniqlanmaganligi noma'lum. Shuning uchun, NULL bilan har qanday operatsiya qo'shish, ayirish, bo'lish yoki taqqoslash bo'lsin, NULLni qaytaradi. NULL qiymatni NULL qiymat bilan taqqoslab bo'lmaydi, chunki biz nimani solishtirishni bilmaymiz. Bular. bu taqqoslashlarning ikkalasi: NULL = NULL, NULL<>NULL rost yoki noto'g'ri emas, bu noma'lum.

Keling, bir misolni ko'rib chiqaylik.

To'lovlari bo'lmagan mijozlar uchun biz "To'lovlar yo'q" qiymati bilan "Imzolash" maydonini ko'rsatishimiz kerak. Bundan tashqari, bizda bunday mijozlar borligini aniq bilamiz. Va yuqorida yozganlarimning mohiyatini aks ettirish uchun keling, buni shunday qilaylik.

Atribut sifatida “Toʻlovlar yoʻq”ni, toʻlovlar uchun Hujjat PLACE AS NULL NI TANLASH; ////////////////////////////////////////////// /////////////////////////////////////// Mijoz AS.Linkni tanlang, To'lov.Link To'lov tClientTo'lovni katalogdan QANDAY QO'YDI.Clients CLIents AS BOG'LANISH HUJJATINI CHAPLADI. To'lov AS to'lov dasturi Clients.Link = Payment.Shareholder; ////////////////////////////////////////////// ////////////////////////// tClientPayment.Client FROM tClientPayment AS tClientPayment ICHKI QO'SHILING tClientPayment.To'lov = tClientTo'lov.

tClientPaymentning ikkinchi vaqtinchalik jadvaliga e'tibor bering. Chapga qo'shilish bilan men barcha mijozlarni va ushbu mijozlar uchun barcha to'lovlarni tanlayman. To'lovlari bo'lmagan mijozlar uchun "To'lov" maydoni NULL bo'ladi. Mantiqqa asoslanib, birinchi vaqtinchalik "tTo'lovlar" jadvalida men ikkita maydonni belgiladim, ulardan biri NULL, ikkinchi qator "To'lovlar yo'q". Uchinchi jadvalda men "tClientPayment" va "tPayment" jadvallarini "To'lov" va "Hujjat" maydonlari yordamida ichki birlashma bilan bog'layman. Bizga ma'lumki, birinchi jadvalda "Hujjat" maydoni NULL, ikkinchi jadvalda esa "To'lov" maydonida to'lovlari bo'lmaganlar ham NULL. Bunday aloqa bizga nima qaytaradi? Lekin u hech narsani qaytarmaydi. Chunki NULL = NULL taqqoslash rost deb baholanmaydi.

So'rov kutilgan natijani qaytarishi uchun uni qayta yozamiz:

“Toʻlovlar yoʻq” atributi, VALUE(Document.Payment.EmptyLink) NI Toʻlovlar uchun hujjat JOYI sifatida TANlang; ////////////////////////////////////////////// /////////////////////////// Clients.Link AS Client, ISNULL(Payment.Link, VALUE(Document.Payment.EmptyLink )) QANDAY TANLASH To'lov tClientTo'lovni Directory.Clients FROM CLIENTS O'ZBEKISTON IQTISODIYoTI BOG'LANISHINI CHAPLADI Document.Payment Clients BY to'lov sifatida. ////////////////////////////////////////////// ////////////////////////// tClientPayment.Client FROM tClientPayment AS tClientPayment ICHKI QO'SHILING tClientPayment.To'lov = tClientTo'lov.

Endi, ikkinchi vaqtinchalik jadvalda, agar "To'lov" maydoni NULL bo'lsa, bu maydon = to'lov hujjatiga bo'sh havola ekanligini ko'rsatdik. Birinchi jadvalda biz NULL ni bo'sh havola bilan almashtirdik. Endi ulanish NULL bo'lmagan maydonlarni o'z ichiga oladi va so'rov kutilgan natijani qaytaradi.

Maqolada keltirilgan barcha so'rovlar men ko'rib chiqmoqchi bo'lgan vaziyatlarni aks ettiradi va boshqa hech narsa emas. HAQIDA Ular xayolparast yoki suboptimal bo'lmasligi mumkin, asosiysi, ular misolning mohiyatini aks ettiradi.

13. “TANLASH QACHON...KEYIN...END” dizaynining hujjatsiz xususiyati.

Agar so'rovda "Shartlar" konstruktsiyasini tavsiflash zarur bo'lsa, biz standart sintaksisdan foydalanamiz:

Users.Name = "Vasya Pupkin" KEYIN "Bizning sevimli xodimimiz" BOSHQA "Biz buni bilmaymiz" FROM 1-maydon sifatida TUGANING.

Ammo, masalan, so'rovda oyning nomini olishimiz kerak bo'lsa-chi? So'rovda ulkan qurilishni yozish xunuk va ko'p vaqt talab qiladi, shuning uchun yuqoridagi yozishning ushbu shakli bizga yordam beradi:

OYNI (AQSh_CalculationConsumption_ScheduleTurnover.CalculationPeriod) 1 KEYIN "YANVAR" QACHON 2 KEYIN "Fevral" QACHON 3 KEYIN "mart" QACHON 4 QACHON SO'NG "Aprel" QACHON 5 KEYIN "KEYIN" 6 "May" QACHON QACHON 8 KEYIN "Avgust" 9 QACHON KEYIN "Sentyabr" QACHON 10 KEYIN "Oktyabr" QACHON 11 QACHON "Noyabr" QACHON 12 KEYIN "Dekabr" OY OLIB TUGADI

Endi dizayn kamroq og'ir ko'rinadi va tushunish oson.

14. To'plamli so'rovlarni bajarish.


So'rovlarni ko'paytirmaslik uchun siz bitta katta so'rov yaratishingiz, uni paketlarga bo'lishingiz va u bilan ishlashingiz mumkin.
Misol uchun, men "Foydalanuvchilar" katalogidan quyidagi maydonlarni olishim kerak: "Tug'ilgan sana" va har bir foydalanuvchi uchun mavjud rollar. buni shakldagi turli jadval qismlariga yuklang. Albatta, siz buni bitta so'rovda qilishingiz mumkin, keyin siz yozuvlarni takrorlashingiz yoki ularni yopishingiz kerak bo'ladi yoki buni qilishingiz mumkin:

Foydalanuvchilarni.Linkni toʻliq ism, foydalanuvchilar.tugʻilgan sana, foydalanuvchilar.roli TANILASH vtUsers FROM Directory.Users foydalanuvchilar sifatida; ////////////////////////////////////////////////// ////////////////////////////// ВЫБРАТЬ втПользователи.ФИО, втПользователи.ДатаРождения ИЗ втПользователи КАК втПользователи СГРУППИРОВАТЬ ПО втПользователи.ФИО, втПользователи. Tug'ilgan kun; ////////////////////////////////////////////////// ////////////////////////////// ВЫБРАТЬ втПользователи.ФИО, втПользователи.Роль ИЗ втПользователи КАК втПользователи СГРУППИРОВАТЬ ПО втПользователи.ФИО, втПользователи. Tug'ilgan kun

tPackage = Request.ExecutePackage();

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

Ko'rib turganimizdek, so'rovni to'plamda bajarish va natijani massiv sifatida qayta ishlash mumkin. Ba'zi hollarda bu juda qulay.

15. To'plam so'rovidagi shartlar

Masalan, bizda ommaviy so'rov bor, bu erda biz "Foydalanuvchilar" katalogidan "Ism, tug'ilgan sana, kod" maydonlarini olamiz va "Jismoniy shaxslar" katalogidan ushbu maydonlar uchun shartlar bilan yozuvlarni olishni xohlaymiz.

Users.Individual.Name AS Ism, Users.Individual.Date AS Tug'ilgan sana, Users.Individual.Code AS COD PLACE vtUsers FROM Directory.Users Users AS; ////////////////////////////////////////////// /////////////////////////// Jismoniy shaxslarni TANLASH. Katalogdan Jismoniy shaxs sifatida havola. Jismoniy shaxslar AS

Siz quyidagi shartlarni qo'yishingiz mumkin:

QAYERDA Individuals.Code IN (vtUsers.Code FROM vtUsers) VA Individuals.Name IN (vtUsers.Code FROM vtUsers) VA Individuals.BirthSana IN (TVUsers.DateTug'ilgan sanasini tanlang)

Va buni shunday qilishingiz mumkin:

QAYERDA (Individuals.Code, Individuals. Name, Individuals. Date) IN (Tanlash tueUsers.Code, tueUsers.Name, tueUsers.Date of TueUsers)

Bundan tashqari, tartibni saqlash kerak.

16. Paket so'rovida "shart" uchun so'rovlar tuzuvchisini chaqirish

Yuqoridagi misoldagi kabi shart qo'yish zarur bo'lganda, virtual jadvalda u yoki bu maydon qanday chaqirilishini unutishingiz mumkin.
Masalan, "Tug'ilgan sana" maydoniga shart qo'yishingiz kerak va virtual jadvalda bu maydon "Qarzdorning tug'ilgan kuni" deb nomlanadi va agar siz ismni unutib qo'ysangiz, shartni tahrirlashdan chiqishingiz kerak bo'ladi. saqlash va maydon nomiga qarang. Buning oldini olish uchun siz quyidagi texnikadan foydalanishingiz mumkin.

"B" konstruktsiyasidan keyin qavslarni qo'yish va qavslar orasida bo'sh joy (bo'shliq) qoldirish kerak, bu bo'shliqni tanlang va so'rov konstruktorini chaqiring. Dizayner ommaviy so'rovning barcha jadvallariga kirish huquqiga ega bo'ladi. Texnika virtual registr jadvallarida ham, "Shartlar" yorlig'ida ham ishlaydi. Ikkinchi holda, siz "P (ixtiyoriy shart)" katagiga belgi qo'yishingiz va "F4" tahrirlash rejimiga kirishingiz kerak.

So'rovlar ko'pincha tezda tuziladi va ular men ko'rib chiqayotgan "texnikalarni" tasvirlash uchun xizmat qiladi.

Men so'rovlarda indekslardan foydalanishni ko'rib chiqmoqchi edim, lekin bu juda keng mavzu. Men uni alohida maqolaga qo'yaman yoki keyinroq qo'shaman.

yangilash1. 11,12 ball
yangilash2. 13,14,15,16-bandlar

Ishlatilgan kitoblar:
"1C: Enterprise 8" so'rov tili - E.Yu. Xrustaleva
1C: Enterprise 8 tizimida malaka oshirish.

Haqiqiy muammolarda namunalarni tashkil qilishda, aksariyat hollarda ma'lumotlarni tanlash ma'lum mezonlarga muvofiq tashkil etiladi.

Agar tanlov haqiqiy stoldan qilingan bo'lsa, hech qanday qiyinchiliklar yuzaga kelmaydi. Ma'lumotlar mutlaqo ahamiyatsiz tarzda qayta ishlanadi:

Agar so'rovdagi manba virtual jadval bo'lsa, vaziyat biroz murakkablashadi.


So'rovlar tili virtual jadvallar tanloviga ikkita usulda shart qo'yish imkonini beradi: WHERE bandida va virtual jadval parametrlaridan foydalanish. Ikkala usul ham bir xil natijaga olib keladi (ba'zi aniq holatlar bundan mustasno), ammo shunga qaramay, ular ekvivalentdan uzoqdir.

Biz allaqachon bilamizki, virtual jadvallar virtual deb ataladi, chunki ular aslida ma'lumotlar bazasida emas. Ular faqat ularga so'rov berilgan paytda shakllanadi. Shunga qaramay, biz uchun (ya'ni so'rovni yozuvchilar) virtual jadvallarni haqiqiy deb hisoblash qulay. Biz tuzgan so'rov virtual jadvalga kirsa, 1C Enterprise 8 tizimida nima bo'ladi?

Birinchi bosqichda tizim virtual jadval tuzadi. Ikkinchi bosqichda natija jadvalidan WHERE bandida ko'rsatilgan shartni qondiradigan yozuvlar tanlanadi:
Ko'rinib turibdiki, yakuniy namuna virtual jadvaldagi barcha yozuvlarni (va shuning uchun ma'lumotlar bazasidan) emas, balki faqat berilgan shartni qondiradiganlarni o'z ichiga oladi. Va qolgan yozuvlar shunchaki natijadan chiqarib tashlanadi.

Shunday qilib, tizim shunchaki foydasiz ishni emas, balki ikki baravar foydasiz ishlarni ham bajaradi! Birinchidan, resurslar keraksiz ma'lumotlar asosida virtual jadval yaratishga sarflanadi (rasmda ular "A va B ma'lumotlar sohalari" deb belgilangan), so'ngra ushbu ma'lumotlarni yakuniy natijadan filtrlash bo'yicha ish olib boriladi.

Virtual jadvalni yaratish bosqichida keraksiz ma'lumotlardan foydalanishni darhol to'xtatish mumkinmi? Bu mumkin ekan. Virtual jadval parametrlari aynan shu uchun mo'ljallangan:

Virtual jadvalni parametrlash orqali biz so'rov tomonidan qayta ishlanadigan ma'lumotlar miqdorini darhol cheklaymiz.

"Qo'shish usuli" virtual jadval parametrining qiymatlari o'rtasidagi farq nima?
Qo'shish usuli "harakatlar" ga o'rnatilganda, faqat harakatlar bo'lgan davrlar qaytariladi. "Harakatlar va davr chegaralari" o'rnatilganda, u holda yuqoridagi harakatlarga 2 ta yozuv qo'shiladi: VT parametrlarida ko'rsatilgan davr boshida va oxirida harakatlar. Ushbu 2 ta yozuv uchun “Registrator” maydoni bo‘sh bo‘ladi.

Saytdan olingan ma'lumotlar

Haqiqiy muammolarda namunalarni tashkil qilishda, aksariyat hollarda ma'lumotlarni tanlash ma'lum mezonlarga muvofiq tashkil etiladi.

Agar tanlov haqiqiy stoldan qilingan bo'lsa, hech qanday qiyinchiliklar yuzaga kelmaydi. Ma'lumotlar mutlaqo ahamiyatsiz tarzda qayta ishlanadi:

Agar so'rovdagi manba virtual jadval bo'lsa, vaziyat biroz murakkablashadi.

So'rovlar tili virtual jadvallar tanloviga ikkita usulda shart qo'yish imkonini beradi: WHERE bandida va virtual jadval parametrlaridan foydalanish. Ikkala usul ham bir xil natijaga olib keladi (ba'zi aniq holatlar bundan mustasno), ammo shunga qaramay, ular ekvivalentdan uzoqdir.

Biz allaqachon bilamizki, virtual jadvallar virtual deb ataladi, chunki ular aslida ma'lumotlar bazasida emas. Ular faqat ularga so'rov berilgan paytda shakllanadi. Shunga qaramay, biz uchun (ya'ni so'rovni yozuvchilar) virtual jadvallarni haqiqiy deb hisoblash qulay. Biz tuzgan so'rov virtual jadvalga kirsa, 1C Enterprise 8 tizimida nima bo'ladi?

Birinchi bosqichda tizim virtual jadval tuzadi. Ikkinchi bosqichda natija jadvalidan WHERE bandida ko'rsatilgan shartni qondiradigan yozuvlar tanlanadi:


Ko'rinib turibdiki, yakuniy namuna virtual jadvaldagi barcha yozuvlarni (va shuning uchun ma'lumotlar bazasidan) emas, balki faqat berilgan shartni qondiradiganlarni o'z ichiga oladi. Va qolgan yozuvlar shunchaki natijadan chiqarib tashlanadi.

Shunday qilib, tizim shunchaki foydasiz ishni emas, balki ikki baravar foydasiz ishlarni ham bajaradi! Birinchidan, resurslar keraksiz ma'lumotlar asosida virtual jadval yaratishga sarflanadi (rasmda ular "A va B ma'lumotlar sohalari" deb belgilangan), so'ngra ushbu ma'lumotlarni yakuniy natijadan filtrlash bo'yicha ish olib boriladi.

Virtual jadvalni yaratish bosqichida keraksiz ma'lumotlardan foydalanishni darhol to'xtatish mumkinmi? Bu mumkin ekan. Virtual jadval parametrlari aynan shu uchun mo'ljallangan:


Virtual jadvalni parametrlash orqali biz so'rov tomonidan qayta ishlanadigan ma'lumotlar miqdorini darhol cheklaymiz.

"Qo'shish usuli" virtual jadval parametrining qiymatlari o'rtasidagi farq nima?
Qo'shish usuli "harakatlar" ga o'rnatilganda, faqat harakatlar bo'lgan davrlar qaytariladi. "Harakatlar va davr chegaralari" o'rnatilganda, u holda yuqoridagi harakatlarga 2 ta yozuv qo'shiladi: VT parametrlarida ko'rsatilgan davr boshida va oxirida harakatlar. Ushbu 2 ta yozuv uchun “Registrator” maydoni bo‘sh bo‘ladi.

PriceSliceLast virtual jadvalining parametrlarini kiritish uchun dialog oynasini chaqiramiz va davr ReportDate parametrida o'tishini ko'rsatamiz. Buning uchun Jadvallar ro'yxatidan ushbu jadvalni tanlang va Virtual jadval parametrlari tugmasini bosing. Keyin jadvallardan quyidagi maydonlarni tanlang:

    Sprnomenklaturasi. Ota-ona,

    NarxlarOxirgi parcha.Price.

Chap stol qo'shilishi

- Xatcho'pda Ulanishlar: Aloqa holati maydonida, axborot registrining Nomenklatura o'lchamining qiymati Nomenklatura katalog elementiga havolaga teng bo'lishi kerak. Shuningdek, ro'yxatga olish jadvali uchun "Hammasi" katagiga belgi qo'ying va uni qidirish jadvali uchun tekshiring, shu bilan ulanish turini qidirish jadvali uchun chap ulanish sifatida o'rnating:

Guruch. 13.15. So'rovdagi jadvallar o'rtasidagi munosabat

- Xatcho'pda Shartlar Nomenklatura katalogidan elementlarni tanlash shartini o'rnatamiz - tanlangan elementlar Nomenklatura turi so'rovi parametrida o'tgan nomenklatura turiga mos kelishi kerak:

Guruch. 13.16. Elementlarni tanlash shartlari

- Xatcho'pda Birlashmalar/taxalluslar: maydonning taxallus nomini belgilang Ota-ona = Xizmatlar guruhi, va Havola = Xizmat maydoni. - OK ni bosing -

Shundan so'ng, yorliqda buni amalga oshirish uchun ma'lumotlarni joylashtirish sxemasini tahrirlashingiz kerak Resurslar, tugmasini bosing qo'shish va manbani tanlang - Narxi

- Xatcho'pda Variantlar Nomenklatura turi parametrining qiymatini o'rnating - Enumeration.Nomenclature Types.Service. Bundan tashqari, biz ReportDate parametri uchun mavjudlik cheklovini olib tashlaymiz. Ushbu parametr turi maydonida sana tarkibini o'rnating - Sana. Period parametri uchun, aksincha, biz mavjudlik cheklovini o'rnatdik:

Guruch. 13.17. Joylashtirish sxemasi parametrlari

Sozlamalar

- Keling, xatcho'pga o'tamiz Sozlamalar: Guruhlash turini Ierarxiyani belgilab, Xizmatlar guruhi maydoni asosida guruhlash yaratamiz.

Hisobot guruhlari uchun quyidagi ierarxiya turlari mavjud: Ierarxiyasiz - guruhlashda faqat ierarxik bo'lmagan yozuvlar ko'rsatiladi. Ierarxiya - guruhlashda ierarxik bo'lmagan va ierarxik yozuvlar ko'rsatiladi. Faqat ierarxiya - guruhlashda faqat ierarxik (ota-ona) yozuvlar ko'rsatiladi. Ushbu guruh ichida biz guruh maydonini ko'rsatmasdan boshqasini yaratamiz. Pastki yorliqda Tanlangan maydonlar: chiqish maydonlarini belgilang Xizmat va Narx:

Guruch. 13.18. Hisobot tuzilishi va maydonlari

Pastki yorliqda Boshqa sozlamalarini biz quyidagi amallarni bajaramiz:

Guruch. 13.19. "Xizmat guruhi" guruhlash uchun umumiy jami ko'rsatish sozlamalari

Guruch. 13.20. Global hisobot uchun natijalarni o'rnatish va ko'rsatish

Nihoyat, foydalanuvchi sozlamalariga Hisobot sanasi parametrini kiritamiz va uning tahrirlash rejimini Tez kirish rejimiga o'rnatamiz. Keling, ma'lumotlar tarkibi sxemasi dizaynerini yopamiz va Xizmatlar ro'yxati ob'ektini tahrirlash oynasida "Quyi tizimlar" yorlig'iga o'tamiz. Konfiguratsiya quyi tizimlari ro'yxatida "Xizmat ko'rsatish" va "Buxgalteriya hisobi" quyi tizimlariga e'tibor bering.

    1C da: Korxona rejimi

1C: Enterprise-ni disk raskadrovka rejimida ishga tushiramiz va birinchi navbatda Narxlar davriy registrini ochamiz. Keyin biz hisobotni sinab ko'ramiz.

Ushbu hisobotdan misol sifatida foydalanib, biz ma'lumotlar tarkibi tizimi davriy ma'lumotlar registridan eng so'nggi qiymatlarni qanday olishini va katalog ierarxiyasi bo'yicha guruhlar qanday ko'rsatilishini o'rganib chiqdik.

Agar mening nashrim siz uchun foydali bo'lsa, unga plyus berishni unutmang :-)

Bu erda to'plamdagi barcha vazifalar uchun rubrikator(har bir vazifa uchun forum mavzulariga havolalarni o'z ichiga olgan sahifa)
http://chistov.spb.ru/forum/16-969-1

Xo'sh, endi mening ishlanmalarim va tayyorgarlik jarayonida yaratgan yozuvlarim.
Yuqorida aytib o'tilgan ikkitasini iloji boricha kamroq takrorlashga harakat qilaman oxirgi nashrlar.

Shunday qilib, keling, boshlaylik:


Agar siz uni masofadan turib olsangiz, imtihon oxirida ish stolingizda ikkita ob'ekt bo'lishi kerak:

1. Axborot bazasini yakuniy yuklash (dt fayli)
2. Tushuntirish xati

Boshqa hech narsa bo'lmasligi kerak, oraliq nusxalar va hokazo.

Tushuntirish xatini yozishni unutmang!
Noaniq shakllangan vazifa bo'lsa, u erda aniq shunday va shunga o'xshash echim variantini tanlaganingizni yozing.
Bundan tashqari, kodning asosiy joylarida fanatizmsiz qisqacha sharhlar qoldirish yaxshidir, lekin imtihonchining savollari bo'lishi mumkin bo'lgan joyda yozish yaxshiroqdir.

Ammo bu haqda sizga imtihondan oldin o'qish uchun beriladigan ko'rsatmalarda aytiladi.
Oldindan bilish yaxshidir)


So'rovlarda ampersand belgisidan foydalanish.

Ba'zan vaqtni tejab, tartibni oldinga va orqaga almashtirishdan ko'ra qo'shimcha klaviaturadan yozish tezroq bo'ladi.
& = Alt+38

*************************************************************************************************
So'rovlarda TimePoint() dan foydalanish

Jamg'arma va buxgalteriya registrlariga so'rovlarda virtual jadval (davr) parametri sifatida hujjat sanasidan emas, balki kodda quyidagicha belgilangan Moment parametridan foydalanish kerak:

Moment = ?(O'tish rejimi = Hujjatni joylashtirish rejimi. Operatsion, Aniqlanmagan, Vaqt momenti());

*************************************************************************************************
Hujjatlarning harakatini reestr bo'yicha yaratishda, joylashtirishni qayta ishlash jarayonining boshida, joriy hujjatning harakatlarini reestr bo'yicha tozalash kerak.

Kod quyidagicha:

Movement.RegisterName.Write = Rost; Movements.RegisterName.Clear();

Jarayon davomida ushbu registrdagi yozuvlarni tahlil qilish kerak bo'lishi mumkin.
Shunday qilib, joriy yozuvlarni tahlil qilishda (xujjat o'zgartirilgunga qadar eskilari) ular aniq namunaga kiritilmasligi uchun yuqoridagi ikkita qatorga yana bitta qator qo'shishingiz mumkin:

Movement.RegisterName.Write();

Yoki, yozuvlarni tahlil qilishda, joriy hujjatning vaqt nuqtasini o'z ichiga olmaydigan chegarani aniq ko'rsating.

Ammo hamma joyda men ushbu uchta qatorning qurilishini ko'rsatdim:

Movement.RegisterName.Write = Rost; Movements.RegisterName.Clear(); Movement.RegisterName.Write();

*************************************************************************************************
Ma'lumotni blokirovka qilishning ikki yo'li mavjud, ular orasidagi tanlov ishlatilgan usulga bog'liq - eski yoki yangi:

1) Muntazam ravishda boshqariladigan blokirovka, hujjatlarni qayta ishlashning eski usuli (ma'lumotlarni blokirovka qilish ob'ekti)

Balanslar avval tekshirilib, keyin hisobdan chiqarilsa, o'rnating.
Harakatni shakllantirish uchun reestrdan ba'zi ma'lumotlarga ega bo'lishimiz kerak bo'lgan holatda.


Misol:

Hujjatda - miqdori, reestrda - miqdori va miqdori (narxi)
Demak, biz tovar miqdorini hujjatdan bilamiz - qanchasini hisobdan chiqaramiz, lekin narxi - yo'q.
Biz buni faqat registrdan bilib olamiz, lekin qoldiqlarni qabul qilish va harakatlarni qayd etish momenti o'rtasida hech kim registrni o'zgartirmasligini ta'minlash uchun balansni o'qishdan oldin ham registrni qulflashimiz kerak.
Shunday qilib, bu holda, Data Locking ob'ekti ishlatiladi. Va uni yaratishda registrni qaysi o'lchamlar bilan bloklayotganimizni ko'rsatish to'g'riroq (masalan, bizning holatlarimizda - faqat hujjatda ko'rsatilgan element bo'yicha) - keraksiz qulflar bo'lmasligi va boshqa foydalanuvchi boshqasini sotishi mumkin. element.


1. Data Lock obyekti yordamida blokirovka o‘rnating
2. Qolganlarini o'qing
3. Hisobdan chiqarish imkoniyatini tekshiramiz
4. Biz harakatlarni yaratamiz, masalan, tovarlarni hisobdan chiqaramiz
5. Hujjatni joylashtirgandan so'ng, blokirovka avtomatik ravishda olib tashlanadi (bloklash joylashtirish tranzaksiyasining bir qismi sifatida amal qiladi va tizim tomonidan avtomatik ravishda olib tashlanadi). Ya'ni, ob'ektni maxsus qulfdan chiqarishning hojati yo'q.

2) Hujjatlarni qayta ishlashning yangi metodologiyasi (LockForChange xususiyatidan foydalanib = True)

Harakatlarni shakllantirish uchun registrlardan ma'lumot kerak bo'lmasa ishlatiladi va biz hisobdan chiqarishda salbiyga kirgan yoki yo'qligini tekshirishimiz mumkin, agar qayd etilgandan so'ng registrdagi qoldiqlarga qarasak va manfiylar borligini ko'rsak. . Bunday holda, biz juda ko'p hisobdan chiqarganimizni tushunamiz va hisobdan chiqarish operatsiyasini bekor qilamiz.

Misol:
Keling, mahsulotni sotish operatsiyasini ko'rib chiqaylik.
Hujjatda - miqdor, registrda - faqat miqdor
Demak, biz tovar miqdorini hujjatdan bilamiz.
Hujjatda ko'rsatilgan miqdor bilan harakatlarni shakllantiramiz va ularni qayd qilamiz. Keyinchalik, biz registrni o'qiymiz, balanslarni ko'rib chiqamiz va salbiy holatlar mavjudligini tahlil qilamiz. Agar mavjud bo'lsa, xatoni ko'rsating va Rad etish = True o'rnating.

Ya'ni, ketma-ketlik quyidagicha:
1. Registr bo'ylab harakatlanish uchun BlockForChange xususiyatini o'rnating = True
2. Biz harakatlarni yaratamiz - tovarlarni hisobdan chiqaramiz
3. Harakatlarni yozib oling
4. Registrni o'qing va salbiy qoldiqlar yo'qligiga ishonch hosil qiling. Agar mavjud bo'lsa, ular ortiqcha narsalarni yozdilar, agar bo'lmasa, hamma narsa yaxshi.

Shunday qilib, bu holda, registrni qaysi o'lchamlar bilan bloklashimiz kerakligini ko'rsatishning hojati yo'q.
Harakatlarimizni yozib olishdan, harakatlarni shakllantirishdan va yozib olishdan oldin BlockForChange xususiyatini rostga o'rnatamiz.
Tizimning o'zi biz yozib olgan narsalarni tahlil qilib, kerakli o'lchovlar bo'yicha ro'yxatga olish vaqtida registrni bloklaydi.
Tugallangach, blokirovka olib tashlanadi.

Ushbu parametr (ikkinchi variant) soddaroq, u "hujjatlarni qayta ishlashning yangi metodologiyasi" deb ataladi va 1C iloji bo'lsa, undan foydalanishni tavsiya qiladi va agar birinchi variant ishlatilsa, ballarni olib tashlaydi, lekin ba'zi hollarda uni qo'llash mumkin emas va birinchi variant bilan Ma'lumotlarni qulflash ob'ekti ishlatiladi (yuqoridagi misolga qarang).

Shuni ham ta'kidlaymanki, tanlangan usuldan qat'i nazar, ular bilan ishlashdan oldin harakatlarni tozalash kerak (oldingi maslahatga qarang)

*************************************************************************************************
Ma'lumotlarni blokirovka qilish (yuqoridagi tavsifdan №1 blokirovka qilish usuli)

Ma'lumotlar o'qilgan va bu ma'lumotlar asosida harakatlar amalga oshirilganda boshqariladigan qulflash talab qilinadi
Boshqariladigan blokirovka kodini olishning eng tezkor usuli bu "Ma'lumotlarni bloklash" ni kiritish, Sintaksis Assistant-ga qo'ng'iroq qilish va oddiygina misol kodini u yerdan nusxalashdir. Keyin uni ro'yxatga olish va o'lchamlaringiz nomiga o'zgartiring.

Bu shunday ko'rinadi:

Lock = NewDataLock; Qulflash elementi = Locking.Add("Jamlash registr.GoodsInWarehouses"); LockElement.Mode = DataLockMode.Exclusive; BlockingElement.DataSource = PM; Locking Element.UseFromDataSource("Nomenklatura", "Nomenklatura"); Lock.Lock();

*************************************************************************************************
Hujjatlarning jadval qismini oddiygina "TC" deb atash yaxshiroqdir.

Hujjatlarning 99 foizida faqat bitta jadval qismi mavjud. Jadval qismlari uchun bunday yagona nom vaqtni tejashga yordam beradi, chunki:
1) Juda qisqa - tez yozing
2) Barcha hujjatlar uchun bir xil, kod yozishda uning nima deb atalishini eslab qolish shart emas

*************************************************************************************************
So'rov natijasini olish yoki texnik spetsifikatsiyaga yuklashdan oldin bo'shligini tekshirish kerak.

Umuman olganda, men barcha topshiriqlarda namuna olishdan foydalandim.

Namuna olish unumdorlik nuqtai nazaridan tizim uchun maqbulroqdir, chunki u faqat ma'lumotlarni o'qish uchun (TK dan farqli o'laroq) "o'tkirlashadi".

Lekin har qanday holatda, Select() usulidan oldin, so'rov natijasini bo'shliqqa tekshirish yaxshiroqdir, bu tizimdagi yukni yanada kamaytiradi.

Natija = Query.Run(); Agar Natija emas.Empty() Unda tanlang = Natija.Select(TravelQueryResult.ByGrouping); ... EndIf;

Va agar so'rovdan faqat bitta qiymat olishimiz kerak bo'lsa
(masalan, joriy yil uchun belgilangan buxgalteriya siyosatiga muvofiq faqat hisobdan chiqarish usuli):

Natija = Query.Run(); Agar Natija emas.Empty() bo'lsa, unda tanlang = Natija.Select(); Tanlash.Keyingi(); Xarajatlarni hisobdan chiqarish usuli = Namuna. Xarajatlarni hisobdan chiqarish usuli; endIf;

*************************************************************************************************
Buxgalteriya hisobi uchun "Operatsiya" hujjati

Buxgalteriya hisobi vazifalari uchun Operatsion hujjatni yaratish kerak.

Biz buning uchun e'lon qilishni butunlay o'chirib qo'yamiz ("Posting = Rad etish" xususiyatlarida), buxgalteriya registrida harakatlarni amalga oshirayotganini ko'rsatamiz va harakatlarni shaklga tortamiz.

*************************************************************************************************
Hujjatlarni tezkor qayta ishlash:

Bo `lish kerak kiritilgan:
Operatsion va buxgalteriya hisobida. hujjatlarni hisobga olish yoqilgan bo'lishi kerak ("Operatsiya" hujjatidan tashqari, pastga qarang).

Bo `lish kerak o'chirilgan:
hisoblash vazifalarida ish haqi hujjati uchun mantiqiy emas.

"Operatsiya" hujjati uchun e'lon qilish butunlay o'chirib qo'yilishi kerak (hujjatning "Posting = Taqiqlash" xususiyatlarida),
chunki u yozganda oddiygina ma'lumotlarni to'g'ridan-to'g'ri registrga yozadi.

*************************************************************************************************
"Ko'rsatilgan nomenklatura yoki ko'rsatilmagan bo'lsa, har qanday" shaklidagi so'rovdagi shart

So'rovlarda quyidagi vazifaga duch keladi: masalan, ko'rsatilgan nomenklaturaga ega hujjatlarni yoki nomenklatura ko'rsatilmagan bo'lsa, barcha hujjatlarni tanlash kerak.
Bu so'rovning o'zida quyidagi shart bilan hal qilinadi:

Nomenklatura = &Nomenklatura OR &Nomenklatura = Qiymat(Directory.Nomenklatura.EmptyLink)

Ammo bu shartni o'zgartirish yanada maqbul va to'g'ri bo'lar edi (yukonga rahmat):


Request.Text = Request.Text + "WHERE Nomenklatura = &Nomenklatura";

endIf;

8.3.5 da so'rov ob'ekti modeli paydo bo'lishi bilan shartni xavfsizroq qo'shish mumkin bo'ladi:

Agar ValueFilled (Nomenklatura) keyin
Query1.Selection.Add("Item = &Nomenklatura");
Request.SetParameter("Nomenklatura", Nomenklatura);
endIf;

*************************************************************************************************
So'rovlarda jadvallarni birlashtirish:

Umumiy yozuvlar soni birlashtirilgan jadvalning maydoni ko'rsatilishiga bog'liq emas, bu faqat tuzilgan munosabatlarga bog'liq.
Ya'ni, biriktirilgan jadvalning maydoni ko'rsatilmasligi mumkin.

Jadvalni hech qanday shartlarsiz biriktirmoqchi bo'lsangiz, shartlar yorlig'ida "TRUE" shartini yozing.
Bunday holda, jadval aniq birlashtiriladi.

*************************************************************************************************
Xususiyat turlari rejasidan foydalanish (PVX):

1. Ob'ektlarning xususiyatlarini tavsiflash mexanizmi sifatida foydalaning.

1.1. Biz PVX ni yaratamiz. Bular Xarakteristika turlari bo'ladi (masalan, rang, o'lcham, maksimal tezlik va boshqalar). Sozlamalarda xarakterli qiymatlarning barcha mumkin bo'lgan turlarini tanlang va agar kerak bo'lsa, 1.2-banddan ob'ektni yarating va uni sozlamalarda ko'rsating.

1.2. PVX ning qo'shimcha qiymatlari uchun biz xarakteristikaning qo'shimcha qiymatlari (yoki oddiygina xarakteristikalar qiymatlari) bo'ysunuvchi katalogini yaratamiz.
Agar ular mavjud kataloglarda bo'lmasa, u xususiyatlarni saqlaydi. Agar bizga kerak bo'lgan barcha xususiyatlar mavjud kataloglarda bo'lsa yoki bu qiymatlar elementar ma'lumotlar turlari bilan ifodalanishi mumkin bo'lsa, biz uni yarata olmaymiz. PVX sozlamalarida biz ushbu katalog qo'shimcha maqsadlarda ishlatilishini ko'rsatamiz. xususiyatlar qiymatlari.

1.3. Biz ma'lumotlar registrini yaratamiz, u aslida uchta ob'ektni bog'laydi:
- Biz xarakteristikalar mexanizmini bog'laydigan ob'ekt
- Turi Xususiyatlari (PVX turi)
- xarakteristikalar qiymati (turi - xarakteristikasi, bu PVX yaratilgandan keyin tizimda paydo bo'lgan yangi tur.
va xarakterli qiymat olishi mumkin bo'lgan barcha mumkin bo'lgan ma'lumotlar turlarini tavsiflash).
Axborot registrida biz Xarakteristik tipning Xarakteristik Qiymatning egasi ekanligini (tanlov parametriga havola), shuningdek, Xarakteristik Qiymat uchun tipli ulanishni yana Xarakteristik Tipdan ko'rsatamiz.

Yana bir xususiyat shundan iboratki, har bir yaratilgan xarakteristikalar uchun xarakterli qiymatning turini belgilashingiz mumkin, agar sizga ushbu xarakteristikaning qiymatini tavsiflash uchun barcha mumkin bo'lgan turlar kerak bo'lmasa.

2. Buxgalteriya registrining sub-konto mexanizmini yaratish uchun PVXdan foydalanish .

2.1. Biz PVC TypesSubconto-ni yaratamiz.

2.2. Biz ValuesSubConto bo'ysunuvchi katalogini yaratamiz (xususiyatlarda bo'lgani kabi, agar boshqa kataloglarda bunday bo'lmasa, u subconto qiymatlarini o'z ichiga oladi).

2.3. Aloqa hisoblar rejasi yordamida amalga oshiriladi.

*************************************************************************************************
Buxgalteriya registrlari resurslari:

Miqdor - balans,
Miqdor - balansdan tashqari va buxgalteriya xarakteristikasi bilan bog'liq Miqdor

*************************************************************************************************
Virtual buxgalteriya registrlari jadvallari:

Aylanma: bitta hisobning aylanmasi
TurnoverDtKt: har qanday ikkita hisob o'rtasidagi aylanma, ya'ni davr uchun barcha bir xil operatsiyalar.

*************************************************************************************************
Buxgalteriya registrlarida valyuta hisobi - qanday amalga oshiriladi:

Hisoblar rejasida "valyuta" buxgalteriya atributini yaratamiz.
Buxgalteriya registrida biz qo'shimcha ravishda yaratamiz:
- valyuta o'lchovi (bo'sh qiymatlarni taqiqlash, balansdan tashqari, buxgalteriya atributi - valyuta)
- Resurs CurrencyAmount (balansdan tashqari, buxgalteriya atributi - valyuta, u summani valyutada saqlaydi, masalan, $100)
Hammasi.

Shunday qilib, registrning tuzilishi:

O'lchovlar:
- Valyuta
Resurslar
- Miqdor
- miqdori (summa rublda)
- Valyuta summasi (valyutadagi summa)

Shunday qilib, valyuta buxgalteriya hisobi faqat Belarus Respublikasida an'anaviy buxgalteriya hisobini takomillashtirish bo'lib, u, masalan, resurs miqdorining mohiyatini o'zgartirmaydi.
(bu erda, odatdagidek, hisob chet el valyutasida yoki yo'qligidan qat'i nazar, summa rublda).
Va agar hisob uchun Valyuta hisobi xususiyati o'chirilgan bo'lsa, unda bu Belarus Respublikasining odatiy tuzilishi (resurslar - faqat miqdor va miqdor).

*************************************************************************************************
Virtual jadvalning bir bo'lagini olish uchun parametrlarni o'rnatishda biz shartlarni resurslarga emas, balki o'lchamlarga qo'yamiz.

Aks holda, biz eng so'nggi bo'laklarni emas, balki belgilangan manba qiymatiga ega oxirgi yozuvni olamiz - bu o'lchamlar to'plamidagi oxirgi bo'lmasligi mumkin.

*************************************************************************************************
Hisoblash registridagi resurs va tafsilotlarning ma'nosi

Hisoblash registrlarida resurs yaratish ushbu registr yordamida bazani hisoblashda uni olish imkonini beradi.
Va hatto berilgan davrga mutanosib ravishda, resurs qiymati qayta hisoblab chiqiladi (agar asosiy davr registrning davriyligiga to'g'ri kelmasa).

Va atributning qiymati faqat hisoblash registrining haqiqiy jadvalida mavjud, virtual jadvallarda mavjud emas.

*************************************************************************************************
Hisoblash registrining o'lchami xususiyatlarida "Asosiy" katagiga belgi qo'ying
Bu shuni anglatadiki, kelajakda ushbu o'lchovdan baza olinadi va ushbu maydon uchun qiymatlarni qo'shimcha indekslash uchun xizmat qiladi.

*************************************************************************************************
Ro'yxatga olish yozuvlari to'plamini yozishda ta'tilning amal qilish muddatini oylar bo'yicha taqsimlash,
agar ta'til hujjatda bir qatorda bir vaqtning o'zida bir necha oy davomida ko'rsatilgan bo'lsa:

Joriy oyning boshlanish sanasi = Oyning boshi(TexLineMainAccruals.ActionPeriodStart); CurrentMonthEndDate = EndMonth(TexLineMainAccruals.ActionPeriodStart); CurrentMonth = Sana; WhileDateStartCurrentMonth<= НачалоМесяца(ТекСтрокаОсновныеНачисления.ПериодДействияКонец) Цикл Движение = Движения.ОсновныеНачисления.Добавить(); Движение.Сторно = Ложь; Движение.ВидРасчета = ТекСтрокаОсновныеНачисления.ВидРасчета; Движение.ПериодДействияНачало = Макс(ДатаНачалаТекМесяца, ТекСтрокаОсновныеНачисления.ПериодДействияНачало); Движение.ПериодДействияКонец = КонецДня(Мин(ДатаОкончанияТекМесяца, ТекСтрокаОсновныеНачисления.ПериодДействияКонец)); Движение.ПериодРегистрации = Дата; Движение.Сотрудник = ТекСтрокаОсновныеНачисления.Сотрудник; Движение.Подразделение = ТекСтрокаОсновныеНачисления.Подразделение; Движение.Сумма = 0; Движение.КоличествоДней = 0; Движение.График = ТекСтрокаОсновныеНачисления.График; Движение.Параметр = ТекСтрокаОсновныеНачисления.Параметр; Движение.БазовыйПериодНачало = НачалоМесяца(ДобавитьМесяц(Дата, -3)); Движение.БазовыйПериодКонец = КонецДня(КонецМесяца(ДобавитьМесяц(Дата, -1))); ДатаНачалаТекМесяца = НачалоМесяца(ДобавитьМесяц(ДатаНачалаТекМесяца, 1)); ДатаОкончанияТекМесяца = КонецМесяца(ДатаНачалаТекМесяца); КонецЦикла; КонецЕсли;

*************************************************************************************************
Gantt diagrammasini yaratish:

Formaga “Gantt Chart” tipidagi elementni joylashtiramiz, uni DG deb nomlaymiz, so‘ng “Yaratish” buyrug‘ini yaratamiz va forma moduliga quyidagilarni yozamiz:

&OnClient protsedurasi Generate(Buyruq) GenerateOnServer(); Protseduraning oxiri &Serverda Procedure GenerateOn Server() DG.Clear(); DG.Update = False; So'rov = Yangi so'rov("SELECT |AsosiyAccrualsActualActionPeriod.Employee, |BasicAccrualsActualActionPeriod.CalculationType, |AsociAccrualsActualActionPeriod.ActionPeriodActionPeriodStart As ActionPeriodStarticalActualActionPeriod.Start. ActionsEnd |FROM |Hisoblash registr.BasicHisoblash.ActualPeriodAktsiyalarAsosiyHisoblashAktualDavrAksiyalar |QAYERDA VA &Yakunlangan sana "); Query.SetParameter("StartDate", Period.StartDate); Request.SetParameter("EndDate", Period.EndDate); Select = Query.Run().Select(); While Selection.Next() Loop Point = DG.SetPoint(Selection.Employee); Series = DG.SetSeries(Selection.CalculationType); Qiymat = DG.GetValue(Point, Series); Interval = Value.Add(); Interval.Start = Sample.PeriodActionStart; Interval.End = Sample.ActionPeriodEnd; EndCycle; DG.Update = rost; Jarayonning oxiri

Aslida, bu erda biz uchun faqat tsikldagi kod muhim, qolganlari yordamchi, men ushbu kichik vazifani to'liq bajarishni berdim.
So'rovda biz uchun xodimning mavjudligi, to'lov turi, davrning boshlanish sanasi va tugash sanasi muhim ahamiyatga ega.
Kod aslida juda oddiy, eslab qolish oson, agar qiyin bo'lib tuyulsa, xavotirlanmang

*************************************************************************************************
Hisoblash vazifalaridagi "teskari" yozuvlarni qayta ishlash:

Tranzaktsiyalarni qayta ishlash protsedurasida (ob'ekt moduli) biz barcha harakatlarni shakllantiramiz, keyin boshqa davrlarda yozuvlar mavjud bo'lsa, biz ularni shunday olamiz.
(tizim ularni avtomatik ravishda yaratadi - bizga yordam beradi):

Qo'shish yozuvlari = Movements.MainAccruals.GetAddition(); // Qo'shimchani olish uchun harakatlarni yozib olishning hojati yo'q

Yozuv qo'shimchalari aylanishidan boshlab har bir texnologiya liniyasi uchun
Record = Movements.MainAccruals.Add();
FillPropertyValues(Record, TechString);
Record.RegistrationPeriod = TechString.RegistrationPeriodReversal;
Record.ActionPeriodStart = TechString.ActionPeriodStartReverse;
Record.ActionPeriodEnd = TechString.ActionPeriodEndReversal;
Tsiklning oxiri

Va yozuvlarni hisoblashda cheklarni qo'ying:

Agar TechMotion.Reversal bo'lsa
CurrentMovement.Sum = - CurrentMovement.Sum;
endIf;

*************************************************************************************************
Hisoblash vazifalarida asosiy hisob-kitoblarga nimalar kiritilganligi va qo'shimcha hisob-kitoblarga nimalar kiritilganligini qanday aniqlash mumkin.

Ammo bu har doim ham 100% aniq emas; Bundan tashqari, murakkabroq holatlar mavjud, garchi ularning bir nechtasi bor
(masalan, bir oydagi ish kunlari soniga bog'liq bo'lgan bonus - bu HE).

Asosiy to'lovlar:
Agar hisob-kitob turi jadvalga bog'liq bo'lsa (kalendar sanalari bilan ma'lumotlar reestrini anglatadi), u asosiy to'lovlarga tegishli.

OH misoli:
- Ish haqi
- Ish kunlari sonidan hisoblangan narsa (va buning uchun siz jadvaldan foydalanishingiz kerak): yoki amal qilish davrida (ish haqi kabi) yoki asosiy davrda

Qo'shimcha to'lovlar:
Hisoblangan summadan yoki ISHLAYDIGAN vaqtdan (me'yor emas!) Nima hisobga olinadi yoki umuman bog'liq emas - bu qo'shimcha. hisob-kitoblar.

Ya'ni: hisoblash uchun vaqt standarti qo'llaniladigan (ehtimol fakt ham) OH va haqiqiy ma'lumotlar yoki umuman hech narsa kerak bo'lmagan hisob-kitoblar DN hisoblanadi.

Yoki boshqacha aytganda:

Agar VR vaqt standartidan foydalansa, amal qilish muddati VR uchun kiritilishi kerak.

*************************************************************************************************
"Nomenklatura" katalogining ro'yxat shaklida "Ma'lumotnomalar bilan ishlash" o'rnatilgan yordam bo'limini ochish qobiliyatini qo'shing.

Formada buyruqni bajaring:

&OnClient
Protsedura yordami (buyruq)
OpenHelp("v8help://1cv8/EnterprWorkingWithCatalogs");
Jarayonning oxiri

Bo'lim chizig'ini quyidagicha aniqlaymiz:
Konfiguratsiya ob'ektining yordam ma'lumotlariga o'ting (konfiguratorda), so'z yozing, uni tanlang, Elementlar/Link menyusiga o'ting va 1C Yordamining kerakli bo'limini tanlang, shundan so'ng havola avtomatik ravishda kiritiladi. Bu murakkab ko'rinadi, lekin amalda bu oson.

*************************************************************************************************
Shakllar o'rtasidagi o'zaro ta'sirni amalga oshirish, masalan, tanlash:

1. Joriy shakldan "OpenForm()" usuli yordamida keraklini oching, tuzilmani parametrlari bilan ikkinchi parametr sifatida o'tkazing (agar kerak bo'lsa). Uchinchi parametr ushbu shaklga havolani o'tkazishi mumkin - ThisForm.

2. Ochilgan shaklda “When CreatedOnServer()” ishlov beruvchisida “Parameters.[ParameterName]” orqali 1-bosqichda o‘tkazilgan parametrlarni ushlashimiz mumkin. Ushbu shaklni ochishni boshlagan shaklga "Egasi" identifikatori orqali kirish mumkin (agar u, albatta, 1-bosqichda ko'rsatilgan bo'lsa).

Va eng muhimi, egasi shaklining eksport funktsiyalari mavjud bo'ladi. Ya'ni, biz manba formasining eksport funksiyasini chaqirishimiz va u erda tanlovni qayta ishlash uchun parametr sifatida biror narsani o'tkazishimiz mumkin. Va bu funktsiya asl shaklda kerakli narsalarni allaqachon to'ldiradi. Faqat bitta ogohlantirish bor - siz mijozlar protseduralari o'rtasida qiymatlar jadvalini o'tkaza olmaysiz, lekin biz uni vaqtincha saqlashga joylashtirishimiz va shunchaki VX manzilini o'tkazishimiz va keyin uni VX dan chiqarib olishimiz mumkin.

*************************************************************************************************
Shakl parametrlarining hayot aylanishi

Shaklni ochish vaqtida unga o'tkazilgan barcha parametrlar faqat "When CreateOnServer" protsedurasida ko'rinadi.
Yaratilgandan so'ng, barcha parametrlar yo'q qilinadi va endi shaklda mavjud bo'lmaydi.
Istisno forma muharririda "Kalit parametr" atributi bilan e'lon qilingan parametrlar uchundir.
Ular shaklning o'ziga xosligini aniqlaydi.
Shaklning o'zi mavjud ekan, bu parametr mavjud bo'ladi.

*************************************************************************************************
Taksi interfeysidan foydalanish

Rivojlanish jarayonida siz konfiguratsiya xususiyatlarida odatiy boshqariladigan interfeys 8.2 ni o'rnatishingiz mumkin - bu hamma narsani sezilarli darajada ixcham va tanish qiladi.
Bu, ayniqsa, agar siz masofadan turib ijaraga olsangiz, to'g'ri keladi - ekran o'lchamlari juda kichik va "taksi" interfeysi bilan hech narsa qilish mumkin emas.
Ishingiz tugagach, yana “Taksi” ni qo'yishni unutmang!Aks holda, imtihon topshiruvchi ballarni olib tashlaydi!

*************************************************************************************************

PS: E Barcha vazifalarda qo'llaniladigan alohida standart pastki vazifalar mavjud va siz ularni hal qilishingiz kerak (masalan, PVX dan foydalanish (yaxshi, bu juda kam uchraydi) va boshqalar). Va barcha vazifalarda ular oddiygina takrorlanadi (qaerdadir ba'zi kichik vazifalar mavjud, boshqa joyda, faqat turli xil kombinatsiyalarda). Bundan tashqari, ular uzoq vaqtdan beri yangi to'plamni chiqarishga va'da berishgan (agar ular hali yo'q bo'lsa), unda ko'proq muammolar bo'lishi kerak, ya'ni individual muammolarning echimlarini yodlashning ma'nosi yo'q, qanday qilishni o'rganish mantiqan. individual standart pastki vazifalarni hal qiling, keyin siz har qanday muammoni hal qilasiz.

PSS: Hamkasblar, agar kimdir imtihonga tayyorgarlik ko'rish va uni topshirish bo'yicha boshqa foydali ma'lumotlarga ega bo'lsa, sharhlarda yozing va biz maqolaga qo'shamiz.