1c so'rovda sanalarni taqqoslash. So'rovda bo'sh sanani qanday ko'rsatish mumkin? Sanaga aylantiring

Ko'pincha "Sana" tipidagi o'zgaruvchilar bilan ishlashga ehtiyoj bor. Ushbu maqolada biz asosiy usullarni ko'rib chiqamiz - joriy sanani o'tkazish, bo'sh qiymatni tekshirish, o'zboshimchalik sanasi.

So'rovlarni yozishda siz ko'pincha ma'lumotlarni joriy sana bilan taqqoslashingiz kerak. O'rnatilgan 1C tilida CurrentDate() funksiyasi mavjud. Bu sizning kompyuteringizdagi joriy vaqt va sanani aniqlash imkonini beradi. Joriy sana bilan operatsiyalarni bajarish uchun siz ushbu funktsiyaning qiymatini so'rovga parametr sifatida o'tkazishingiz kerak.

Quyida yaratilish sanasi bilan harajat hisobotlariga biriktirilgan barcha fayllarni tanlaydigan so'rov quyida keltirilgan:

ExampleRequest = Yangi so'rov;
Misol so'rovi.Text = "
|SELECT
| AdvanceReportAttachedFiles.Link
|FROM
| Directory.AdvanceReportAttachedFilesAS AdvanceReportAttachedFiles
|QAYERDA
| AdvanceReportAttachedFiles.Date< &ТекДата»;
Misol Request.SetParameter("CurrentDate", CurrentDate());

Maxsus sana

Yuqorida muhokama qilingan funksiya solishtirish va shuning uchun istalgan davr uchun tanlov qilish imkonini beradi. Ushbu usul qo'shimcha parametrlardan foydalanmasdan so'rovda qat'iy tanlovni belgilash imkonini beradi.

Shuni esda tutingki, yuqoridagi misolda ushbu funktsiyadan foydalanganda biz faqat uchta raqamni (yil, oy, kun) kiritish parametrlari sifatida o'tkazdik. Oxirgi uchta (soat, daqiqa, soniya) ixtiyoriy va agar yo'q bo'lsa, "0" bilan almashtiriladi, ya'ni kunning boshi.

Ushbu misol o'tgan 2016 yil oxirigacha xarajatlar hisobotiga biriktirilgan barcha fayllarni oladi. Shu munosabat bilan biz "2016 yil 31 dekabr 23:59:59" vaqt nuqtasini solishtirish uchun soat, daqiqa va soniyani ko'rsatamiz.

TANLANG
AdvanceReportAttachedFiles.Link
FROM
Directory.AdvanceReportAttachedFiles AS AdvanceReportAttachedFiles
QAYERDA
AdvanceReportAttachedFiles.Date< ДАТАВРЕМЯ(2016, 12, 31, 23, 59, 59)

Bo'sh sana

O'zgaruvchida bo'sh sana bor yoki yo'qligini tekshirishning eng oson yo'li oddiy taqqoslashdan foydalanishdir. Ushbu misolda, so'rovdan foydalanib, biz kirish sanasi to'ldirilmagan hisobdagi barcha pul tushumlarini tanlaymiz.

43
NULL - etishmayotgan qiymatlar. Nol qiymat bilan adashtirmaslik kerak! NULL raqam emas, bo'sh joy, bo'sh havola yoki Aniqlanmaganga teng emas. NULL - turni shakllantiruvchi qiymat, ya'ni. NULL turi va bu turdagi bitta qiymat mavjud. NULL... 26
1C platformasida ma'lumotlar bazasi jadvallariga so'rovlarni yaratish va bajarish uchun Query dasturlash tilining maxsus ob'ekti qo'llaniladi. Ushbu ob'ekt New Request konstruktsiyasini chaqirish orqali yaratiladi. Qulay so'rov... 18
Maqolada 1C v.8.2 so'rovlari bilan ishlashda foydali texnikalar, shuningdek, so'rovlar tili haqida unchalik ma'lum bo'lmagan ma'lumotlar keltirilgan. Men berishga harakat qilmayman To'liq tavsif so'rov tili, lekin men faqat to'xtalib o'tmoqchiman ... 13
LIKE - satrning naqshga o'xshashligini tekshirish uchun operator. SQL da LIKE ning analogi. SIMILAR operatori uning chap tomonida ko'rsatilgan ifoda qiymatini o'ngda ko'rsatilgan naqsh qatori bilan solishtirish imkonini beradi. So'zning ma'nosi ...

1C-dagi "Sana" turi raqam, satr va mantiqiy ma'lumotlar bilan birga 4 ta asosiy ma'lumotlar turlaridan biridir. Konfiguratsiyalarda sanalar hamma joyda uchraydi - ishlab chiqish jarayonida ushbu turdagi ma'lumotlar bilan ishlashdan qochib bo'lmaydi. Shuning uchun, sanalarni qanday qayta ishlash kerakligini, ular bilan ishlash uchun qanday imkoniyatlar mavjudligini va ular qanday saqlanishini tushunadigan so'rovlarni yozishni boshlash yaxshiroqdir. Keling, turli sanalar bilan so'rovlarni yozishning barcha nuanslariga misollarni ko'rib chiqaylik.

1C so'rovlarida sanalar bilan ishlashga misollar

Avvalo, so'rovdagi sanani kerakli formatda - vaqt bilan yoki vaqtsiz olishingiz kerak. Ushbu vazifani bajarishning bir necha yo'li mavjud:

  1. Parametr orqali o'tish. Ushbu usul yordamida faqat joriy sessiya sanasini olishingiz mumkin;
  2. Tanlov maydonidan so'rovdagi sanani oling;
  3. DATETIME() funksiyasidan foydalanib, raqamli qiymatlardan aylantiring.

Hujjatlar bilan ishlashda eng keng tarqalgan vazifa bu 1C so'rovida bo'sh sanani tekshirish. Bunday holda, DATETIME(1,1,1) funksiyasi yordamida olingan bo'sh sana bilan o'zgaruvchi yoki maydonni solishtirish eng oson:

DATETIME (1, 1, 1)

Shunga o'xshash buyruq yordamida siz so'rovda o'zboshimchalik bilan sana va vaqtni olishingiz mumkin. Bundan tashqari, ular 6 ta raqamni parametr sifatida ko'rsatish orqali bir soniyagacha aniqlik bilan aniqlanishi mumkin. Agar faqat 3 ta raqam ishlatilsa, soatlar, daqiqalar va soniyalar 0 ga (kun boshiga) o'rnatiladi. Masalan, so'rovda 2018 yil yanvar oyining dastlabki 10 kuni uchun hujjatlarni tanlashimiz kerak:

Kvitansiyani Joriy hisob qaydnomasiga TANlang. Hujjatdan havola sifatida joriy hisob raqamiga Kvitansiyani Joriy hisob raqamiga Kvitansiya sifatida, Joriy hisob qaydnomasiga kvitansiya QAYERDA. Sana DATETIME (2018, 1, 1, 0, 0, 0) VA DATETIME (2018, 1,) 10, 23, 59, 59)

O'rnatilgan 1C tilidagi so'rovda siz nafaqat turli maydonlarni tanlashingiz va parametrlarni olishingiz mumkin. Muayyan vazifa uchun sanalarni formatlashni osonlashtiradigan ko'plab funktsiyalar mavjud. Agar siz tez-tez so'rovda sanalar bilan ishlasangiz, quyidagi buyruqlarni bilishingiz kerak:

  • DAVRAN BOSHLANISHI. Parametrlar sananing boshlanishini olish kerak bo'lgan sana va vaqtni belgilaydi. Sanani vaqtsiz formatga aylantirish uchun foydalaniladi. Buni amalga oshirish uchun siz ikkinchi parametrni o'rnatishingiz kerak - "DAY";
DAVRAN BOSHLANISHI(,) DAVRAN BOSHLANGAN (&Sana, KUN) davr>sana>
  • DAVRAN OXIRISHI. Parametrlarda ko'rsatilgan birliklar bo'yicha oxirgi sanani qaytaradigan shunga o'xshash buyruq;
  • ADDKDATE. Belgilangan vaqt birliklarining belgilangan soniga kattaroq sanani olish imkonini beradi. Funktsiya parametrlari sana, vaqt birligi va raqamni o'z ichiga oladi;
ADDKDATE(,) ADDKDATE(&Sana, KUN, 10) miqdori>turi>sana>
  • DIFFERENCE DATE. Belgilangan birliklarda sanalar orasidagi farqni oladi;
DIFFERENCEDATE(,) DIFFERENCEDATE(&Sana1, &Sana2, KUN) turi>sana2>sana1>
  • HAFTA KUNI. Hafta kunlaridan birining seriya raqamini qaytaradi.

Ushbu funktsiyalardan to'g'ri foydalangan holda, ishlab chiquvchi juda ahamiyatsiz muammolarni hal qilishi mumkin. Masalan, so'rovda joriy sananing hafta kuni nomini qator sifatida olish:

HAFTANING SHAXTASINI(&Joriy sana) = 1 KEYIN "DUShanba" WHENDAYDAY(&CurrentDate) = 2 KEYIN "Seshanba" WHENDAYDAY(&CurrentDate) = 3 KEYIN "Chorshanba" WHENDAYDAY(&CurrentDate) = WHENDAYDAY(&CurrentDate) = 4 DAY"KUNDA HAFTA "ENH HAFTANI TANLANING. (&CurrentDate) = 5 KEYIN "Juma" HAFTA SAXTASI(&CurrentDate) = 6 KEYIN "Shanba" BOSHQA "Yakshanba" OXIRGI

1C so'rovidagi turlarni raqam yoki qatordan sanaga o'tkazish ko'p mehnat talab qiladigan ishdir. Siz raqamlardan sanani DATETIME funksiyasidan foydalanib, qatordan - SUBSTRING funksiyasi va SELECT WHEN THEN ELSE konstruktsiyasini birlashtirib olishingiz mumkin. Bunga asoslanib, ishlab chiquvchilar moduldagi boshqa turlardan sanani olishni va parametr yordamida so'rovga o'tkazishni afzal ko'radilar. Afsuski, bu har doim ham mumkin emas, shuning uchun siz so'rovda sana formatini o'zgartirishingiz kerak.

Virtual registr jadvallaridan ma'lumotlarni olish parametri sifatida 1C so'rovida sanani ko'rsatish mumkin. Bu rol yuqoridagi barcha funksiyalardan ham foydalanishi mumkin. Ammo bu erda ruxsat bermaslik muhimdir bo'sh sana 1C so'rovida kod bajarilishining yakuniy natijasiga ta'sir qilishi mumkin, shuning uchun tekshirish kerak.

Ko'pincha 1C so'rovlarida sanalar bilan ishlash kerak. Ayniqsa, davriy ma'lumotlarni o'z ichiga olgan metadata ob'ektlariga so'rov yuborilganda. Qoida tariqasida, bu registrlar (ma'lumotlar, jamg'arish, hisob-kitoblar, buxgalteriya hisobi). Keling, sanalar bilan ishlash uchun 1C so'rovlar tilining eng ko'p ishlatiladigan funktsiyalarini ko'rib chiqaylik. Biz ma'lumotlar registriga asoslangan misollar tuzamiz Xodimlar tashkilotlari ZUP konfiguratsiyasi versiyasi 2.5.

  • DATE VAQT

    Yil, oy, kun, soat, daqiqa, soniyani ko'rsatish orqali so'rovda sanani (vaqt bilan yoki vaqtsiz) olish imkonini beradi.
    Sintaksis:
    DATETIME(yil, oy, kun, soat, daqiqa, soniya)
    Odatda soat, daqiqa va soniya ko'rsatilmaydi. Keling, kichik misol keltiraylik. Query Console-ga quyidagi matnni kiriting:

    DATETIME NI TANLASH(2016, 1, 1)

    So'rovni bajarish natijasida biz sanani olamiz - 01/01/2016
    Aslida, so'rovda sana shu tarzda ko'rsatilgan vaziyatni tasavvur qilish qiyin. Axir, siz davrni belgilashingiz kerak bo'lganda, parametrlar ishlatiladi. Ammo bu funktsiya alohida ahamiyatga ega bo'lgan holat mavjud. Bu maydonlarda yoki so'rov shartlarida bo'sh sanani ko'rsatishimiz kerak bo'lganda. Eslatib o'taman, 1C tili uchun bo'sh sana 0001.01.01 shaklga ega. Shunday qilib, so'rovda bo'sh sanani olish uchun shunchaki belgilang DATETIME(1, 1, 1). Misol tariqasida, ma'lumotlar registridan tanlaymiz Xodimlar tashkilotlari to'ldirilmagan yozuvlar Tugatish davri:

    Tashkiliy Xodimlarni TANLASH. Davr, Tashkilot xodimlari. Xodim, Tashkilot Xodimlari. Lavozim, Tashkilot Xodimlari. Tashkilot Bo'limi Ro'yxatga olish Ma'lumotlaridan. Tashkilot Xodimlari Tashkilot Xodimlari QAYERDA.

  • DAVRAN BOSHLANISHI

    Uchun belgilangan sana kirgan davrning boshini qaytaradi.
    Sintaksis:
    DAVR BOSHI(Sana, davr turi)
    PeriodType quyidagi qiymatlarni qabul qilishi mumkin: MINUT, SOAT, KUN, HAFTA, OY, CHORAK, YIL, O'NLIK, YARIM YIL
    Query Console-ga kiriting:

    DAVRAN BOSHLANISHNI TANLASH(DATETIME(2016, 1, 15), MONTH)

    So'rov qaytariladi - 01/01/2016
    Va endi bir misol. Ma'lumki, reestrning davriyligi Xodimlar tashkilotlari bir kun. Haqiqiy qayd davri o‘rniga oyning boshlanish sanasi ko‘rsatiladigan so‘rov yarataylik.

    DAVRAN BOSHINI (Tashkilotlar Xodimlari. Davr, OY) Oy boshi sifatida Tashkilotlar xodimlari. Xodimlar, Tashkilotlar xodimlari. Lavozim, Tashkilotlar xodimlari. Tashkilot bo'linmasi Ro'yxatdan o'tish ma'lumotlari. Tashkilotlar xodimlari.

  • DAVRAN OXIRISHI

    Sintaksis davr boshidagi kabi. Va nomidan ko'rinib turibdiki, sana va davr turi bo'yicha davr oxirini qaytaradi. Biz buni batafsil ko'rib chiqmaymiz. Keling, bir kichik misol bilan cheklanamiz.
    Talab:

    DAVRAN OXIRASINI TANLASH(DATETIME(2016, 1, 15), MONTH)

    Qaytadi 01/31/2016 23:59:59
    Ko'rib turganingizdek, qiymat ikkinchisiga aniq qaytariladi.

  • ADDKDATE

    Belgilangan vaqt oralig'ini sanaga qo'shadi.
    Sintaksis:
    ADDKDATE(Sana, davr turi, miqdori)
    PeriodType funksiya bilan bir xil qiymatlarni oladi DAVRAN BOSHLANISHI
    Masalan, fevral sanasini tanlaymiz:

    QO'SHIMCHI DATE (DATETIME(2016, 2, 15), MONTH, 2)

    Biz sanani olamiz 04/15/2016 0:00:00 Fevral qisqa oy bo'lishiga qaramay, qabul qilingan sana asl sana bilan bir xil. Oylardagi kunlar soni haqida o'ylamaslik juda qulay.
    Miqdor ham salbiy bo'lishi mumkin. Keyin interval teskari yo'nalishda hisoblanadi.

  • DIFFERENCE DATE

    Belgilangan birliklarda ikki sana o'rtasidagi farqni hisoblang.
    Sintaksis:
    SANA FARQI (Boshlanish sanasi, tugash sanasi, davr turi)
    Davr turi quyidagi qiymatlarni olishi mumkin: IKKINCHI, MINUTE, SOAT, KUN, OY, CHORAK, YIL
    Masalan:

    DIFFERENCE DATE (DATETIME(2016, 2, 15), DATETIME(2016, 3, 1), DAY)

    15 qaytaradi

Bu erda biz 1C so'rovlar tilining eng ko'p ishlatiladigan funktsiyalarini ko'rib chiqdik. Qolganlari juda kam qo'llaniladi. Agar kerak bo'lsa, ular bilan ishlash misollarini 1C platformasiga o'rnatilgan yordamda topish mumkin.



xato: Kontent himoyalangan !!