1s sanani bo'sh qiymat uchun tekshirish. Ular qayerdan keladi

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'yxatdan o'tish Ma'lumotlaridan. Tashkilot Xodimlari Tashkilot Xodimlari QAYERDA.

  • DAVRAN BOSHLANISHI

    Belgilangan sana uchun u tegishli bo'lgan 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 bilan bir xil. Va nomidan ko'rinib turibdiki, davrning oxirini sana va davr turi bo'yicha qaytaradi. Biz 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.

Bo'sh havolalar, sanalar yoki satrlarni aniqlash uchun vositalar. Keling, 1C so'rovida bo'sh havola, sana yoki qatorni qanday tekshirishni ko'rib chiqaylik.

Maxsus operatorlar yordamida null ma'lumotlarni belgilashingiz mumkin.

1C ma'lumotlar bazasidan ma'lumot so'rov tili (Query) kabi vosita yordamida so'raladi (va keyin qabul qilinadi). Ular lotin va kirill alifbolarida yozilgan. Axborotni qabul qilishda kalit so'z buyruqlaridan biri (operatorlar) ba'zi konstruktsiyalar bilan birgalikda SELECT (inglizcha) buyruq so'zidir. Mavzu bo'yicha bizni qiziqtiradigan so'ralgan vazifalarni tuzish misollari:

NULL kontent tekshirilmoqda

Bu vazifa SELECT operatori tomonidan “IS NULL” konstruktsiyasi bilan birgalikda bajariladi:

TANLASH
Buyurtmalar qoldi. Buyurtmachi,
Buyurtmalar Qolgan. Miqdor Qolgan
FROM
Ro'yxatdan o'ting. Buyurtmalar. Buyurtmalar Qolganlar
QAYERDA
Qolgan buyurtmalar.Qolgan miqdor NULL

Sana nazorati

1C so'rovidagi bo'sh sana "DATETIME(1, 1, 1, 0, 0, 0)" konstruktsiyasi yordamida kiritiladi:

TANLASH
InvoiceIncomingSupplier.Link,
Invoys Kiruvchi yetkazib beruvchi. Kelish sanasi
FROM
Hujjat. Yetkazib beruvchi hisob-fakturasi AS Yetkazib beruvchi fakturasi
QAYERDA
InvoiceIncomingSupplier.IncomingDate = DATETIME(1, 1, 1, 0, 0, 0)

Malumotni tekshirish

Mavjud bo'lmagan ichki mos yozuvlar qiymatlari (hisoblar jadvallari, kataloglar va boshqalar uchun) "VALUE(Directory.Name...EmptyLink)" konstruktsiyasi yordamida tekshiriladi:

String tekshiruvi

Bo'sh satrlar "" qo'shtirnoq ichidagi bo'sh joy yordamida aniqlanadi:

TANLASH
Buyers.Link
FROM
Katalog. Buyers AS Buyers
QAYERDA
Buyers.Code = ""

Buzilgan va muntazam havolalar haqida ko'proq

"Ko'rshapalaklar" - mavjud bo'lmagan elementga olib boradigan (ko'rsatuvchi) bog'lanish. Mavjud bo'lmagan deganda biz ma'lumotlar bazasida bo'lmagan narsani tushunamiz. Hech bo'lmaganda tizimdan bildirishnomalarni tushunarli shaklda olish uchun bunday havolalar haqida bilish foydalidir. Va haqiqiy bo'lmagan ob'ektlarni yozib olish, o'chirish va ochish mantiqiy emas.

1C platformalarida ularni kesish uchun ichki vositalar mavjud emas. Bundan tashqari, "buzilgan"lardan tashqari, tizimda bir-biridan ajralib turishi kerak bo'lgan maxsus "bo'sh havolalar" mavjudligini tushunishingiz kerak.
Buni ma'lumotlar bazasini so'ramasdan topish mumkin:

1C-7.7 tizimida

“Bit” uchun Link.Selected() usuli va EmptyValue() funksiyasi nolni qaytaradi. "Bo'sh" uchun - birinchi holatda u nolga teng, ikkinchi holatda esa bitta. "Oddiy" uchun - bitta va nol. Ma'lum bo'lishicha, 1C-7.7 da "buzilgan" tanlangan deb hisoblanmaydigan mavjud bo'lmagan qiymat emas.

1C-8.x tizimida

Hammasi boshqacha - ikkala holatda ham ("buzilgan" va "normal" uchun) usul "False" ni qaytaradi va funktsiya "True" ni qaytaradi. Yechim quyidagicha: “Buzilgan” usul uchun Link.GetObject() usuli “Aniqlanmagan” funksiyasini qaytaradi. "Bo'sh" uchun - "Kontekst usuli xatosi" tashlanadi. "Oddiy" uchun - qiymat hujjatlarga muvofiq qaytariladi; Ma'lum bo'lishicha, 1C-8.x da "buzilgan" Aniqlanmagan ob'ekt qiymatini qaytaradigan mos yozuvlar turining mavjud bo'lmagan funksiyasi bo'lmaydi.

Ular qayerdan keladi

Buzilgan havolaning mavjud bo'lmagan manziliga o'tishda foydalanuvchi, eng yaxshi holatda, ob'ekt topilmaganligi haqida xabarnoma, eng yomoni, server sahifasining tasvirini ko'rsatadi. Ularning eng yomon xislati bu maxfiylikdir. Shuning uchun ularning to'g'riligini tekshirish qiyin. Konfiguratsiya bilan ishlashda u doimo takomillashtiriladi va yangilanadi. Ba'zi ob'ektlar o'chirilishi kerak, struktura o'zgaradi. Va o'chirilgan elementga havola tuzilmalar va algoritmlarda qoladi. Shunday qilib, elementning o'zi (manzil bilan birga) o'chirilgandan so'ng tizimda mavjud bo'lmagan manzillar qoladi.

Bugungi nashr maxsus so'rovlar qurilishini ko'rib chiqdi. Dizayn namunalari keltirilgan. Bu bo'sh qiymatlarni qidirishda foydali bo'ladi.

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 sizga aniqlash imkonini beradi joriy vaqt va kompyuterdagi sana. 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 = "
|TANLASH
| 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.

Doirasida bu misol O'tgan 2016 yil oxirigacha xarajatlar hisobotiga ilova qilingan barcha fayllar qabul qilinadi. 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 biz barcha tushumlarni tanlash uchun so'rovdan foydalanamiz Pul kirish sanasi to'ldirilmagan hisobvaraqlarga.

1C sanalari bilan ishlashda sana qismlarining odatiy tartibi yil, oy, kun, soat, daqiqalar, soniyalardir. Bunday holda, soatlar, daqiqalar, soniyalar o'tkazib yuborilishi mumkin.

Satrdan sanani yaratishda (“shu kungacha”) uni mahalliylashtirilgan formatda (kun.oy.yil soat:daqiqa:sekundlar) belgilashingiz mumkin, lekin faqat toʻliq hajmda.

Masalan:
//1C sanalari bilan ishlash - sanani qismlardan 1C ga aylantirish - yil, oy, kun (plyus ixtiyoriy vaqt)
Sana = Sana (2012,10,30); //Vaqt yo'q
Sana = Sana (2012,10,30,12,00,00); // vaqt bilan

//1C sanalari bilan ishlash - sanani qatordan 1C ga aylantirish, turli usullar
Sana = Sana ("20121030"); //yil, oy, kun
Sana = Sana("30.10.2012 12:00:00"); //lokallashtirilgan format, faqat to'liq hajmda

//1C sanalari bilan ishlash - sana qiymatini to'g'ridan-to'g'ri kastingsiz belgilash
Sana = "20121030"; //Vaqt yo'q
Sana = "20121030120000"; // vaqt bilan

1C sanalari bilan ishlash - bo'sh sana 1C

1C sanasining to'liqligini tekshirish uchun u "bo'sh sana" bilan taqqoslanadi. Agar ma'lumotnomada/hujjatda sana turiga ega atribut mavjud bo'lsa, foydalanuvchi ushbu maydonni to'ldirmasa, uning qiymati ham "bo'sh sana" bo'ladi.

"Bo'sh sana" 01/01/0001 00:00:00.

Masalan:
EmptyDate = "00010101000000";
Agar RequiredDate = "00010101000000" Keyin
Hisobot ("Siz juda kerakli sanani kiritmadingiz");
endIf;

Sanalar bilan ishlash 1C - Sana tafsilotlari (ma'lumotnomalar, hujjatlar va boshqalar)

Atribut turini belgilashda siz foydalanishni belgilashingiz mumkin:

  • Faqat sana (vaqt har doim 00:00:00)
  • Faqat vaqt (sana har doim 01/01/0001)
  • Sana va vaqt

Sana olish

Sana va vaqtni olish uchun 1C CurrentDate() funksiyasidan foydalaning.

Ushbu funktsiya chaqirilgan joy juda muhim - mijozda yoki serverda. Qo'shimcha ma'lumot olish uchun "Ishlash rejimi/ishlash" mavzusiga qarang. Ko'pincha mijoz mashinalarida vaqt biroz farq qiladi, shuning uchun ular server vaqtidan hamma joyda foydalanishga harakat qilishadi - hatto serverda noto'g'ri o'rnatilgan bo'lsa ham, hech bo'lmaganda barcha mijozlar bir xil noto'g'ri vaqtga ega bo'ladilar.

Server sanasini (server kompyuterining operatsion tizimida o'rnatilgan sana) olish uchun odatda konfiguratsiyada umumiy modul yaratiladi va xususiyatlarda "Server" katagiga belgi qo'yiladi va unda funksiya yaratiladi.
//funksiya umumiy modulda joylashgan, masalan Server Functions nomi bilan
//umumiy modulning xususiyatlarida "Server" katagiga belgi qo'yilgan va "Mijoz" katakchasi belgilanmagan.
GetServerDate() funksiyasini eksport qilish
CurrentDate();
EndFunction

//bu funksiyani boshqa moduldan ishlatish uchun chaqirish shunday ko'rinadi
DocumentObject.Date = ServerFunctions.GetServerDate(); //ModuleName.FunctionName()

Yupqa mijozda, modul funktsiyalarining to'g'ridan-to'g'ri yonida, u qaerda bajarilishi ko'rsatilgan:

Kunning boshlanishi va oxiri

“30.10.2012” sanasi uchun:

  • kunning boshlanish sanasi “30.10.2012 00:00:00”ga o'xshaydi
  • kunning tugash sanasi quyidagicha ko'rinadi: "30.10.2012 23:59:59"

Muayyan davr - kun, oy, yil uchun ma'lumotlarni olishni talab qiladigan hisobotlar va so'rovlarda qo'llaniladi.

Masalan, “01/01/2012 00:00:00” dan “31/01/2012 00:00:00” oralig'i noto'g'ri, chunki u oyning bir kunini o'z ichiga olmaydi (lekin bir soniyani o'z ichiga oladi). oyning oxirgi kuni).

1C sanalari bilan ishlash - Sanalarni solishtirish

Sana sana va vaqtni o'z ichiga oladi. Sanalarni solishtirganda (vaqtni hisobga olmagan holda) ular odatda kunning boshiga (oy, yil) qisqartiriladi.

Masalan:
Sana1 = Sana("30.10.2012 12:00:00");
Agar StartDay(Sana1) = StartDay(DocumentLink.Date) keyin
Xabar berish("Hujjat belgilangan sanada kiritilgan");
endIf;

Har holda, davrdagi sanalarni solishtirish misoli:
Agar DocumentLink.Date >= Oyning boshi(CurrentDate()) va
DocumentLink.Sana

Sanalar bilan ishlash 1C - Sanani o'zgartirish

Sana - soniyalar soni. Agar biz nafaqat bir sana boshqasidan kattaroq yoki yo'qligini, balki qanchalik katta ekanligini ham bilmoqchi bo'lsak, farqni soniyalarda olamiz.

Masalan:
From Beginning Of Day = CurrentDate() – Beginning of Day (CurrentDate());
Hisobot("Kun boshidan beri" + Satr(Kun boshidan) + " soniyalar o'tdi");
Hisobot("Kun boshidan beri" + Satr(Kun boshidan/60) + "daqiqalar o'tdi");
Hisobot("Kun boshidan beri" + Satr(Kun boshidan/60/60) + "soatlar o'tdi");

Biz sanani ham o'zgartirishimiz mumkin; o'zgartirganda soniyalar sonini qo'shamiz yoki ayitamiz:
StartThisDay = StartDay(CurrentDate());

Oldingi kunning boshlanishi = Kunning boshlanishi (StartofThisDay – 1); // ikkinchisini olib tashlang - "kecha" qilish va kunning boshini "kecha" dan oling

Oldingi kunning boshlanishi = Shu kunning boshlanishi - 24*60*60; //boshqa usul - 24 soatni ayirish - 24 (soat) * 60 (daqiqa) * 60 (soniya)

Sanalar bilan ishlash 1C - Vaqt momenti

Vaqt nuqtasi - bu hujjatlarga (va shuning uchun registrlarga) taalluqli sananing kengaytirilgan ko'rinishi.

Hujjatlarning sanasi va vaqti bir xil bo'lsa, hujjatlar vaqtini solishtirish talab qilinadi. Shunga ko'ra, u so'rovlarda tanlash uchun ishlatilishi mumkin.

Hujjatdan vaqt nuqtasini quyidagi yo'llar bilan olish mumkin:
// 1-usul
DocumentTimePoint = DocumentLink.TimeTime();

Shuningdek, vaqtni sana/vaqt bilan solishtirishingiz mumkin:
TimePointReference = Yangi Vaqt Nuqtasi(Kunning boshi(CurrentSana()));
Agar DocumentRef.TimePoint().Solishtiring(TimeTimeReference) = -1 bo'lsa
Xabar berish("Hujjat bugundan oldinroq kiritilgan");
endIf;
//Agar hujjat bugungi sana bilan soat 00:00:00 da kiritilgan bo'lsa, u hali ham kiritiladi - bugun

Sanalar bilan ishlash 1C - Sana formatlash

Ushbu maqola tekshirilayotgan atribut turiga, jumladan, bo'sh havolaga qarab bo'sh qiymatni tekshirish usullarini ko'rib chiqadi.

Atribut oddiygina mavjud bo'lmaganda NULL qiymati qaytariladi. Bu holatda tur ham NULL bo'ladi. Misol uchun, siz ikkita jadvalni chap qo'shilish yordamida birlashtirasiz. Chap jadval uchun o'ng jadvalda hech qanday qiymat topilmasa, NULL qaytariladi.

Tekshiring berilgan qiymat“IS NULL” va “ ” konstruktsiyasi yordamida amalga oshirilishi mumkin. Birinchi holda, True yoki False qaytariladi. Ikkinchi holda, NULL qaytarilganda darhol boshqa qiymatni o'rnatishingiz mumkin.

Quyidagi 1C 8.3 so'rovi segmenti ko'rsatilmagan hamkorlar uchun aloqa shaxslar ro'yxatini qaytaradi.

TANLANG
Aloqa uchun shaxslarPartners.Link
FROM
Ma'lumotnoma. Hamkorlarning aloqa shaxslari AS Hamkorlarning aloqa shaxslari
ICHKI JOIN Directory.Partner Segments AS Partner Segments
Hamkorlarning dasturiy ta'minot bilan bog'liq shaxslari.Owner = Partners.Parent segmentlari
QAYERDA
Hamkor segmentlari. Havola NULL

bo'sh sana

Qiymat bo'sh sana uchun uni DATETIME(1, 1, 1, 0, 0, 0) konstruktsiyasi bilan taqqoslash orqali tekshiriladi. Foydalanish misoli quyida keltirilgan:

1C so'rovida bo'sh havola

Qaytarilgan atribut mos yozuvlar turi bo'lsa, masalan, katalog, hujjat va hokazo elementi bo'lsa, quyidagi konstruktsiyadan foydalaniladi: VALUE(Directory.DirectoryName.EmptyLink).

Quyidagi misolda so'rov biznes hududi ko'rsatilmagan barcha hamkorlarni tanlaydi.

"ValueFilled" ni tekshirish uchun siz teskari shartni bajarishingiz kerak:

Hamkorlar.BusinessRegion<>VALUE(Directory.BusinessRegions.EmptyLink)

Bo'sh qator

Satr turlarini tekshirish uchun boshqa namuna bilan taqqoslash amalga oshiriladi. Ushbu holatda - "".

Quyidagi so'rov bo'sh nomli barcha hamkorlarni tanlaydi.