Kako navesti prazan datum u zahtjevu? 1s put na zahtjev.

Vrlo često u 1C upitima morate raditi s datumima. Naročito kada se zahtjev upućuje objektima metapodataka koji sadrže periodične informacije. Po pravilu, to su registri (informacije, akumulacije, obračuni, računovodstvo). Pogledajmo najčešće korištene funkcije 1C jezika upita za rad s datumima. Napravit ćemo primjere na osnovu registra informacija EmployeesOrganizations ZUP konfiguracije verzija 2.5.

  • DATUM VRIJEME

    Omogućava vam da dobijete datum u zahtjevu (sa ili bez vremena) navodeći godinu, mjesec, dan, sat, minut, sekundu.
    sintaksa:
    DATETIME(godina, mjesec, dan, sat, minuta, sekunda)
    Obično sat, minuta i sekunda nisu naznačeni. Dajemo mini primjer. Unesite sljedeći tekst u Query Console:

    ODABIR DATUM VRIJEME(2016, 1, 1)

    Kao rezultat izvršenja zahtjeva dobijamo datum - 01.01.2016.
    Zapravo, teško je zamisliti situaciju u kojoj bi datum bio naveden na ovaj način u zahtjevu. Na kraju krajeva, kada treba da navedete period, koriste se parametri. Ali postoji slučaj kada je ova funkcija od posebne vrijednosti. Ovo je kada treba da navedemo prazan datum u poljima ili u uslovima zahteva. Da vas podsjetim da je za 1C jezik prazan datum ima oblik - 0001.01.01. Dakle, da biste dobili prazan datum u zahtjevu, samo navedite DATETIME(1, 1, 1). Kao primjer, izaberimo iz registra informacija EmployeesOrganizations evidencije koje nisu popunjene Period završetka:

    ODABIR Organizacijski zaposlenici.Period, Organizacijski zaposleni.Zaposleni, Organizacijski zaposlenici.Pozicija, Organizacijski zaposlenici.Organizacijski odjel IZ registra informacija.Organizacijski zaposlenici AS Organizacijski zaposlenici GDJE Organizacijski zaposlenici.Period završetka = DATETIME(1, 1, 1)

  • POČETAK RAZDOBLJA

    Za naveden datum vraća početak perioda u koji ulazi.
    sintaksa:
    POČETAK RAZDOBLJA (Datum, Vrsta perioda)
    PeriodType može imati sljedeće vrijednosti: MINUTA, SAT, DAN, SEDMICA, MJESEC, KVARTAL, GODINA, DECEDA, POLUGODINJE
    U konzoli upita unesite:

    ODABIR POČETAK RAZDOBLJA (DATUM VRIJEME (2016, 1, 15), MJESEC)

    Zahtjev će se vratiti - 01.01.2016
    A sada primjer. Kao što znate, periodičnost registra EmployeesOrganizations jednog dana. Kreirajmo upit u kojem će umjesto stvarnog perioda snimanja biti prikazan početni datum mjeseca.

    IZABERITE POČETAK RAZDOBLJA (Zaposleni u organizacijama. Period, MJESEC) KAO Početak mjeseca, Zaposleni u organizacijama. Zaposleni, Zaposleni u organizacijama. Položaj, Zaposleni u organizacijama. Odjeljenje organizacije IZ Informacija registra. Zaposleni u organizacijama KAO Zaposleni u organizacijama

  • KRAJ PERIOD

    Sintaksa je ista kao i za početak perioda. I kao što naziv implicira, vraća kraj perioda prema datumu i tipu perioda. Nećemo to detaljno razmatrati. Ograničimo se na mini primjer.
    Zahtjev:

    ODABIR KRAJ PERIOD(DATUM VRIJEME(2016, 1, 15), MJESEC)

    Povratak 31.01.2016 23:59:59
    Kao što vidite, vrijednost se vraća točno na sekundu.

  • ADDKDATE

    Dodaje navedeni broj vremenskih intervala datumu.
    sintaksa:
    ADDKDATE(Datum, Vrsta perioda, količina)
    PeriodType uzima iste vrijednosti kao i za funkciju POČETAK RAZDOBLJA
    Na primjer, izaberimo datum u februaru:

    ODABIR DODATAK DATUM(DATETIME(2016, 2, 15), MJESEC, 2)

    Dobijamo datum 15.04.2016 0:00:00 Uprkos činjenici da je februar kratak mjesec, dan primljenog datuma je isti kao i prvobitni. Veoma je zgodno da ne morate razmišljati o broju dana u mjesecima.
    Količina također može biti negativna. Zatim se interval broji u suprotnom smjeru.

  • DIFFERENCEDATE

    Izračunajte razliku između dva datuma u navedenim jedinicama.
    sintaksa:
    DATUM RAZLIKA (datum početka, datum završetka, vrsta perioda)
    Tip perioda može imati sljedeće vrijednosti: DRUGA, MINUT, SAT, DAN, MJESEC, KVARTAL, GODINA
    Na primjer:

    ODABIR DATUM RAZLIKA(DATUM VRIJEME(2016, 2, 15), DATUM VRIJEME(2016, 3, 1), DAN

    vraća 15

Ovdje smo pregledali najčešće korištene funkcije 1C jezika upita. Ostalo se koristi prilično rijetko. Ako je potrebno, primjeri rada s njima mogu se pronaći u pomoći ugrađenoj u 1C platformu.

43
NULL – nedostajuće vrijednosti. Ne treba se brkati sa nultom vrednošću! NULL nije broj, nije jednak razmaku, praznoj referenci ili nedefiniranom. NULL je vrijednost za formiranje tipa, tj. postoji tip NULL i jedna vrijednost ovog tipa. NULL... 26
Za generiranje i izvršavanje upita prema tablicama baze podataka u 1C platformi koristi se poseban objekt programskog jezika Query. Ovaj objekt se kreira pozivanjem konstrukcije New Request. Povoljan zahtjev... 18
Članak daje korisne tehnike za rad sa 1C v.8.2 upitima, kao i informacije koje nisu toliko poznate o jeziku upita. Ne pokušavam da dam Puni opis jezik upita, ali samo želim da se zadržim na... 13
LIKE - Operator za provjeru sličnosti niza sa uzorkom. Analog LIKE-a u SQL-u. Operator SIMILAR vam omogućava da uporedite vrijednost izraza navedenog lijevo od njega sa nizom uzorka koji je specificiran desno. Značenje izraza...

Svi dokumenti koji postoje u 1C konfiguracijama, a samim tim i gotovo svi registri moraju imati barem jedan atribut s tipom datuma, zbog čega svaki programer mora znati i razumjeti:

  • Kako konvertovati parametre drugih tipova u dotični tip;
  • Kako odrediti prazan datum u 1C zahtjevu;
  • Koja je razlika između datuma i vremenskog ograničenja?

Upravo na ova pitanja pokušat ćemo odgovoriti u našem članku.

Šta je datum i kako ga odrediti

Budući da donošenje većine upravljačkih odluka i vođenje evidencije ne zahtijeva vremensku tačnost veću od 1 sekunde, programeri 1C platforme odlučili su da ova vrijednost bude apsolutni minimum u formatu datuma. Dakle, svaki atribut koji opisuje vrijeme događaja u programu mora sadržavati:

  • Godina kada se događaj dogodio;
  • Mjesec ovog događaja;
  • Dan.

Nije potrebno naznačiti: sat, minut i sekund. Ako su ova tri parametra izostavljena i nema dodatnih uslova, program automatski postavlja vrijeme na početak dana.

Formati datuma koji postoje u svijetu imaju značajne razlike:

  1. U Rusiji smo navikli da prvo stavljamo dan, zatim mesec događaja i na kraju godine;
  2. Stanovnici SAD-a počinju datum sa mjesecom;
  3. Česi, Poljaci i Slovenci bilježe periode u formatu Godina – Mjesec – Dan.

To je potonji format koji koristi 1C platforma.

Pretvori u datum

Da biste dobili parametar s tipom datuma iz nekoliko vrijednosti ili iz niza, morate koristiti kod prikazan na sl. 1

Kao što se može vidjeti na gornjoj slici, datum možete odrediti ili koristeći jedan red ili podijelite ovaj red na njegove sastavne dijelove pomoću zareza, rezultat se neće promijeniti.

Važno je shvatiti da godina datuma mora sadržavati četiri cifre, uključujući milenijum i vijek događaja, mjesec, dan, sate i sekunde moraju imati dva znaka, uključujući vodeće nule.

Odbrojavanje vremena u programu počinje od početka dana 1. januara 0001. Za gornji kod, ova vrijednost se može odrediti na jedan od dva načina (slika 2).

Rice. 2

U drugom redu smo izostavili sate, minute i sekunde događaja, što nije nimalo uticalo na performanse našeg koda.

Značajke korištenja datuma u 1C upitima

Za većinu tipova podataka koje koristi 1C platforma, postoje unaprijed definirane void vrijednosti. Za brojeve, ovo je 0; za veze možete definirati vrijednost EmptyLink(); za datum se prazna vrijednost obično smatra početnim datumom; s tim se moraju uporediti detalji odgovarajućeg tipa kada postavljanje parametara zahtjeva.

Važno je shvatiti da čak i ako nisu navedeni brojevi u vrijednosti atributa forme koji ima dotični tip, odnosno prozor izgleda kao (slika 3), to ne znači da u njemu ništa nije navedeno; poređenje ovog parametra sa praznim nizom neće raditi.

Rice. 3

Kada primimo prazan datum, možemo ga navesti kao parametar našeg zahtjeva, odnosno koristiti konstrukciju (slika 4)

Međutim, postoje trenuci kada je bolje provjeriti unutar tijela zahtjeva, bez prolaska praznog datuma kao parametra. Da biste to učinili, možete unijeti odgovarajući uvjet u kodu zahtjeva (slika 5) i koristiti funkciju zahtjeva DateTime().

Rice. 5

U gornjem tekstu zahtjeva izostavili smo vodeće nule godine, mjeseca i dana, a takođe nismo naveli sate, minute i sekunde, a program je, kako kažu, pojeo ovu pretpostavku.

Granica datuma i vremena

Drugi zanimljiva činjenica vezano za odnos između upita i datuma je upotreba koncepta “tačke u vremenu” kada se pristupa različitim tabelama baze podataka.

Tačnost „do milisekundi“ navedena u tehničkoj dokumentaciji pri opisivanju primitivnog tipa datuma najjasnije se manifestuje pri odabiru zapisa iz virtuelnih tabela registra akumulacije: ako registar akumulacije, pored tabele prometa, ima i preostali i tabele ostataka i prometa, zatim se vrši selekcija iz njih određeno vrijeme, može dati različite rezultate.

Da biste razumjeli kako i zašto se to događa, razmotrite jednostavan primjer:

  1. Prije nego što je prodajni dokument izvršen u 12 sati 31 minut 36 sekundi, bilansi prema nomenklaturi šećera su bili 30 kg;
  2. Dokument je otpisao 10 kg u navedeno vrijeme;
  3. Izvještaj generiran na datum dokumenta u 12 sati 31 minut 36 sekundi prema tabeli Preostalo će pokazati stanje od 30 kg;
  4. Isti izvještaj na tabeli Ostaci i Promet za isto vrijeme će pokazati saldo od 20 kg.

Koji je razlog ovakvog ponašanja i kako ga izbjeći?

Problem je u tome što je u tabeli Preostali period naveden kao otvoreni segment, odnosno ne uzimaju se u obzir kretanja u trenutku generisanja izveštaja, odnosno vreme se uzima na početku drugog navedenog. u parametru. Istovremeno, za tabelu Promet i za tabelu Ostaci i Promet uzimaju se u obzir vremenske granice, odnosno vreme se uzima na kraju navedene sekunde.

Postoji nekoliko izlaza iz ove situacije:

  1. Kada koristite tabelu Ostaci, navedite vremensku tačku 1 sekundu veću od navedene;
  2. Koristite samo tabelu ostataka i obrta (nije najoptimalnija opcija sa stanovišta performansi);
  3. Koristite koncept granice.

Posljednja opcija može biti predstavljena kodom prikazanim na Sl. 6.

U prvom parametru našeg objekta označavamo datum za koji izvještaj treba generirati, drugi parametar određuje tip granice. Budući da nam je važno da su kretanja na određeni datum uključena u odabir, ovaj parametar moramo postaviti na poziciju „Uključuje“.

1C upiti, kao i ugrađeni jezik platforme 1C:Enterprise, imaju funkcije za rad s datumima. Oni pomažu u pojednostavljenju konverzije datuma u upitima i izbjegavanju korištenja velikog broja parametara. Pogledajmo ove funkcije.

Kako postaviti datum u 1C upitima kao konstantu

DATETIME (godina, mjesec, dan, sat, minuta, sekunda). Opcije Godina, mjesec I Dan su obavezni, drugi nisu. Ako ne odredite vrijeme, sistem će postaviti početak dana.

Zahtjev. Tekst= „IZABIR
DATUM VRIJEME (2016,09,28,12,22,00)"
; // Rezultat: 28. septembar 2016. 12:22:00

Osim toga, samo brojevi mogu biti eksplicitno specificirani kao parametri za ovu funkciju. Ne možete navesti vrijednosti drugih funkcija kao parametre. Na primjer, ova konstrukcija neće raditi:

Zahtjev. Tekst= „IZABIR
DATETIME (Godina (Izvor.Datum),09,28,12,22,00)
Iz Directory.Source AS Izvor"
;

Kako dobiti početak ili kraj godine, pola godine, kvartal, mjesec, dekada, sedmica, dan, sat, minut u 1C upitima

Za to se koriste sljedeće funkcije:

  • Početni period (datum, period)
  • Kraj Period(Datum, Period)

Kao parametar datum prosljeđuje se vrijednost sa tipom Datum. Parametar Period .

Zahtjev. Tekst= „IZABIR
Početni period (DATETIME (2016,09,28,12,22,00), DECEDA)"
; // Rezultat: 21. septembar 2016. 0:00:00

Zahtjev. Tekst= „IZABIR
Kraj perioda(DATETIME (2016,09,28,12,22,00), KVARTAL)"
; // Rezultat: 30. septembar 2016. 23:59:59

Kao što možete vidjeti iz primjera, možete koristiti druge ugniježđene funkcije u ovim funkcijama.

Kako dobiti godinu, dan u godini, kvartal, mjesec, sedmicu, dan u sedmici, dan, sat, minut, sekundu od datuma u 1C upitima

Da biste to učinili, postoje odgovarajuće funkcije kojima morate proslijediti datum kao parametar.

  • Funkcija GODINA (datum)— vraća broj godine;
  • Funkcija DAYYEAR (datum)— povećava broj dana u godini;
  • Funkcija KVARTAL (datum)— vraća broj kvartala;
  • Funkcija MJESEC (datum)— vraća broj mjeseca;
  • Funkcija SEDMICA (datum)— vraća broj sedmice u godini;
  • Funkcija DAN U SJEDICI (Datum)— vraća broj dana u sedmici (ponedeljak — 1, nedelja — 7);
  • Funkcija DAN (Datum)— vraća broj dana u mjesecu;
  • Funkcija SAT (datum)— vraća sat;
  • Funkcija MINUTE (datum)— vraća minute;
  • Funkcija DRUGO (datum)— vraća sekunde.

Zahtjev. Tekst= „IZABIR
GODINA(DATUM VRIJEME (2016,09,28,12,22,00))"
; // Rezultat: 2016

Zahtjev. Tekst= „IZABIR
SEDMICA(DATUM VRIJEME (2016,09,28,12,22,00))"
; // Rezultat: 40

Zahtjev. Tekst= „IZABIR
WEEKDAY (DATETIME (2016,09,28,12,22,00))"
; // Rezultat: 3

Zahtjev. Tekst= „IZABIR
DAYYEAR(DATETIME (2016,09,28,12,22,00))"
; // Rezultat: 272

Zahtjev. Tekst= „IZABIR
DAN(DATUM VRIJEME (2016,09,28,12,22,00))"
; // Rezultat: 28

Kako dodati ili oduzeti od datuma godinu, polugodište, kvartal, mjesec, dekada, sedmicu, dan, sat, minut, sekundu u 1C upitima

Da biste to učinili, koristite funkciju AddToDate(Datum, Period, Vrijednost).

Kao parametar datum prosljeđuje se vrijednost sa tipom Datum. Parametar Period može uzeti jednu od sljedećih vrijednosti: SEKUNDA, MINUTA, SAT, DAN, SEDMICA, DEKADA, MJESEC, KVARTAL, POLUGODINJE, GODINA.

Parametar Značenje prikazuje broj perioda koje treba dodati. Ako period treba oduzeti, onda parametar Značenje mora biti negativan.

Zahtjev. Tekst= „IZABIR
AddToDate(DATETIME(2016, 9, 28, 12, 22, 0), POLA GODINE, 1)"
; // Rezultat: 28. mart 2017. 12:22:00

Zahtjev. Tekst= „IZABIR
AddKDate(DATETIME(2016, 9, 28, 12, 22, 0), DECADE, -1)"
; // Rezultat: 18. septembar 2016. 12:22:00

Kako izračunati razliku u datumima u 1C upitima

Da biste to učinili, koristite funkciju DifferenceDate(Datum1, Datum2, Period).

Parametar Datum1- datum koji treba oduzeti.

Parametar Datum2 — datum od kojeg treba oduzeti.

Parametar Period može uzeti jednu od sljedećih vrijednosti: SEKUNDA, MINUTA, SAT, DAN, MJESEC, KVARTAL, GODINA. Pokazuje u kojim jedinicama želimo da dobijemo rezultat

Zahtjev. Tekst= „IZABIR
RazlikaDatum(DATETIME(2016, 9, 28, 12, 22, 0), DATETIME(2017, 9, 28, 12, 22, 0), KVARTAL)"
; // Rezultat: 4

Zahtjev. Tekst= „IZABIR
RazlikaDatum(DATETIME(2016, 9, 28, 12, 22, 0), DATETIME(2017, 9, 28, 12, 22, 0), Second)"
; // Rezultat: 31,536,000

U svim funkcijama osim funkcije DATUM VRIJEME, kao parametar datum može biti ne samo određena vrijednost datuma (konstanta ili parametar upita), već i polja izvorne tablice.



greška: Sadržaj je zaštićen!!