Jak zadat prázdné datum v požadavku? 1s na vyžádání.

Velmi často v 1C dotazech musíte pracovat s daty. Obzvláště v případě, kdy je požadavek na objekty metadat, které obsahují periodické informace. Zpravidla se jedná o registry (informační, akumulační, kalkulační, účetní). Podívejme se na nejčastěji používané funkce dotazovacího jazyka 1C pro práci s daty. Příklady sestavíme na základě informačního registru Zaměstnanci Organizace Konfigurace ZUP verze 2.5.

  • ČAS SCHŮZKY

    Umožňuje získat v požadavku datum (s časem nebo bez něj) zadáním roku, měsíce, dne, hodiny, minuty, sekundy.
    Syntax:
    DATETIME (rok, měsíc, den, hodina, minuta, sekunda)
    Obvykle se neuvádí hodina, minuta a sekunda. Uveďme si mini příklad. Do Query Console zadejte následující text:

    SELECT DATETIME(2016; 1; 1)

    V důsledku provedení požadavku získáme datum - 01.01.2016
    Ve skutečnosti je těžké si představit situaci, kdy by bylo datum v žádosti uvedeno tímto způsobem. Když totiž potřebujete zadat období, použijí se parametry. Existuje však případ, kdy má tato funkce zvláštní hodnotu. To je, když potřebujeme uvést prázdné datum v polích nebo v podmínkách požadavku. Dovolte mi, abych vám připomněl, že pro jazyk 1C prázdné datum má tvar - 0001.01.01. Chcete-li tedy v požadavku získat prázdné datum, stačí zadat DATETIME(1; 1; 1). Jako příklad si vyberme z informačního rejstříku Zaměstnanci Organizace záznamy, které nejsou vyplněny Dokončovací období:

    VYBERTE Organizační zaměstnance. Období, Organizační zaměstnance. Zaměstnanec, Organizační zaměstnanci. Pozice, Organizační zaměstnanci. Organizační divize OD Registrovat informace. Organizační zaměstnanci JAKO Organizační zaměstnanci KDE Organizační zaměstnanci. Období dokončení = DATETIME(1, 1, 1)

  • ZAČÁTEK OBDOBÍ

    Pro určené datum vrací začátek období, do kterého vstupuje.
    Syntax:
    ZAČÁTEK OBDOBÍ (datum, typ období)
    PeriodType může nabývat následujících hodnot: MINUTA, HODINA, DEN, TÝDEN, MĚSÍC, ČTVRTLETÍ, ROK, DEKÁDA, PŮLLET
    V konzole dotazu zadejte:

    VYBERTE ZAČÁTEK OBDOBÍ (DATUM ČAS (2016, 1, 15), MĚSÍC)

    Žádost se vrátí - 01.01.2016
    A teď příklad. Jak víte, periodicita registru Zaměstnanci Organizace jednoho dne. Vytvořme dotaz, ve kterém se místo skutečného období záznamu zobrazí datum začátku měsíce.

    VYBERTE ZAČÁTEK OBDOBÍ (Zaměstnanci organizací. Období, MĚSÍC) JAKO začátek měsíce, Zaměstnanci organizací. Zaměstnanec, Zaměstnanci organizací. Pozice, Zaměstnanci organizací. Oddělení organizace OD Registr Informace. Zaměstnanci organizací JAKO Zaměstnanci organizací

  • KONEC OBDOBÍ

    Syntaxe je stejná jako pro začátek období. A jak název napovídá, vrací konec období podle data a typu období. Nebudeme se tím podrobně zabývat. Omezme se na mini příklad.
    Žádost:

    VYBERTE KONEC OBDOBÍ (DATUM ČAS (2016, 1, 15), MĚSÍC)

    Návraty 31.01.2016 23:59:59
    Jak vidíte, hodnota se vrací s přesností na sekundu.

  • ADDKDATE

    Přidá k datu zadaný počet časových intervalů.
    Syntax:
    ADDKDATE(datum, typ období, množství)
    PeriodType má stejné hodnoty jako funkce ZAČÁTEK OBDOBÍ
    Zvolme například únorové datum:

    SELECT ADDKDATE(DATETIME(2016, 2; 15); MONTH; 2)

    Dostáváme datum 15.04.2016 0:00:00 Přestože je únor krátký měsíc, den obdrženého data je stejný jako ten původní. Je velmi výhodné, že nemusíte přemýšlet o počtu dní v měsících.
    Množství může být i záporné. Poté se interval počítá v opačném směru.

  • DIFFERENCEDATE

    Vypočítejte rozdíl mezi dvěma daty v zadaných jednotkách.
    Syntax:
    DATOVÝ ROZDÍL (datum zahájení, datum ukončení, typ období)
    Typ období může nabývat následujících hodnot: DRUHÁ, MINUTA, HODINA, DEN, MĚSÍC, ČTVRTLETÍ, ROK
    Například:

    SELECT DIFFERENCEDATE(DATETIME(2016, 2; 15); DATETIME(2016, 3; 1); DAY)

    vrací se 15

Zde jsme zhodnotili nejčastěji používané funkce dotazovacího jazyka 1C. Zbytek se používá poměrně zřídka. V případě potřeby lze příklady práce s nimi nalézt v nápovědě zabudované do platformy 1C.

43
NULL – chybějící hodnoty. Nezaměňovat s nulovou hodnotou! NULL není číslo, nerovná se mezera, prázdný odkaz nebo Nedefinováno. NULL je typotvorná hodnota, tzn. existuje typ NULL a jedna hodnota tohoto typu. NULA... 26
Pro generování a provádění dotazů do databázových tabulek na platformě 1C se používá speciální objekt programovacího jazyka Query. Tento objekt je vytvořen voláním konstrukce New Request. Pohodlná žádost... 18
Článek poskytuje užitečné techniky při práci s dotazy 1C v.8.2 a také informace, které nejsou o dotazovacím jazyce tak známé. Nesnažím se dávat Plný popis dotazovací jazyk, ale chci se zastavit u... 13
LIKE - Operátor pro kontrolu podobnosti řetězce se vzorem. Analog LIKE v SQL. Operátor SIMILAR umožňuje porovnat hodnotu výrazu zadaného vlevo od něj s řetězcem vzoru zadaným vpravo. Význam výrazu...

Všechny dokumenty existující v konfiguracích 1C, a tedy téměř všechny registry, musí mít alespoň jeden atribut s typem Date, proto každý vývojář potřebuje znát a rozumět:

  • Jak převést parametry jiných typů na příslušný typ;
  • Jak určit prázdné datum v požadavku 1C;
  • Jaký je rozdíl mezi datem a časovým limitem?

Právě na tyto otázky se pokusíme odpovědět v našem článku.

Co je to datum a jak ho určit

Protože většina manažerských rozhodnutí a vedení záznamů nevyžaduje přesnost času přesahující 1 sekundu, vývojáři platformy 1C se rozhodli, že tato hodnota bude absolutní minimum ve formátu data. Každý atribut popisující čas události v programu tedy musí obsahovat:

  • Rok, kdy k události došlo;
  • Měsíc této události;
  • Den.

Není nutné uvádět: hodinu, minutu a sekundu. Pokud jsou tyto tři parametry vynechány a neexistují žádné další podmínky, program automaticky nastaví čas na začátek dne.

Formáty data existující ve světě mají významné rozdíly:

  1. V Rusku jsme zvyklí dávat na první místo den, pak měsíc události a na konec rok;
  2. Obyvatelé USA začínají datum měsícem;
  3. Češi, Poláci a Slovinci zaznamenávají období ve formátu Rok – Měsíc – Den.

Právě druhý formát používá platforma 1C.

Převést na datum

Chcete-li získat parametr s typem Date z několika hodnot nebo z řetězce, musíte použít kód uvedený na Obr. 1

Jak je vidět z obrázku výše, datum můžete určit buď pomocí jednoho řádku, nebo rozdělením tohoto řádku na jednotlivé části pomocí čárky, výsledek se nezmění.

Je důležité pochopit, že rok data musí obsahovat čtyři číslice, včetně tisíciletí a století události, měsíc, den, hodiny a sekundy musí mít dva znaky, včetně úvodních nul.

Odpočítávání času v programu začíná od začátku dne 1. ledna 0001. U výše uvedeného kódu lze tuto hodnotu určit jedním ze dvou způsobů (obrázek 2).

Rýže. 2

Ve druhém řádku jsme vynechali hodiny, minuty a sekundy události, což vůbec neovlivnilo výkon našeho kódu.

Funkce použití data v dotazech 1C

Pro většinu datových typů používaných platformou 1C existují předdefinované hodnoty void. Pro čísla je to 0; pro odkazy můžete definovat hodnotu EmptyLink(); pro datum je prázdná hodnota obvykle považována za počáteční datum; s tím je třeba porovnat podrobnosti odpovídajícího typu, když nastavení parametrů požadavku.

Je důležité pochopit, že i když v hodnotě atributu formuláře, který má daný typ, tedy okno vypadá jako (obr. 3), nejsou uvedena žádná čísla, neznamená to, že v něm není nic uvedeno; porovnání tohoto parametru s prázdným řetězcem nebude fungovat.

Rýže. 3

Po obdržení prázdného data jej můžeme specifikovat jako parametr našeho požadavku, tedy použít konstrukci (obr. 4)

Jsou však chvíle, kdy je lepší zkontrolovat uvnitř těla požadavku, aniž byste jako parametr zadali prázdné datum. K tomu můžete zadat příslušnou podmínku do kódu požadavku (obr. 5) a použít funkci požadavku DateTime().

Rýže. 5

Ve výše uvedeném textu požadavku jsme vynechali úvodní nuly roku, měsíce a dne a také jsme neuvedli hodiny, minuty a sekundy a program, jak se říká, tento předpoklad sežral.

Datum a časová hranice

Další zajímavý fakt se vztahem mezi dotazy a daty souvisí použití konceptu „bod v čase“ při přístupu k různým databázovým tabulkám.

Přesnost „až na milisekundu“ uvedená v technické dokumentaci při popisu primitivního typu Datum se nejzřetelněji projeví při výběru záznamů z virtuálních tabulek registru akumulace: pokud má registr akumulace kromě tabulky Obrat i Zbývající a Zbývající a Obratové tabulky, poté se výběr z nich prováděl na určitý čas, může poskytnout různé výsledky.

Abyste pochopili, jak a proč k tomu dochází, zvažte jednoduchý příklad:

  1. Před provedením prodejního dokladu ve 12 hodin 31 minut 36 sekund byly váhy podle nomenklatury cukru 30 kg;
  2. Doklad odepsal 10 kg v určený čas;
  3. Zpráva vygenerovaná k datu dokladu ve 12 hodin 31 minut 36 sekund podle tabulky Zbývající údaje zobrazí zůstatek 30 kg;
  4. Stejná sestava na tabulce Zbytky a obraty za stejnou dobu ukáže zůstatek 20 kg.

Jaký je důvod tohoto chování a jak se mu vyhnout?

Problém je v tom, že v tabulce Zbývající období je období specifikováno jako otevřený segment, to znamená, že se neberou v úvahu pohyby provedené v době generování sestavy, to znamená, že se bere čas na začátku sekundy specifikované v parametr. Zároveň se u tabulky Obraty a u tabulky Zbytky a Obraty zohledňují časové hranice, to znamená, že se bere čas na konci zadané vteřiny.

Existuje několik způsobů, jak z této situace ven:

  1. Při použití tabulky Remains uveďte časový bod o 1 sekundu větší, než je specifikovaný;
  2. Používejte pouze tabulku Zbytky a obraty (není to nejoptimálnější možnost z hlediska výkonu);
  3. Použijte koncept hranice.

Poslední možnost může být reprezentována kódem znázorněným na Obr. 6.

V prvním parametru našeho objektu udáváme datum, ke kterému je potřeba report vygenerovat, druhý parametr určuje typ ohraničení. Protože je pro nás důležité, aby byly do výběru zahrnuty pohyby k danému datu, musíme tento parametr nastavit na pozici „Včetně“.

Dotazy 1C, stejně jako vestavěný jazyk platformy 1C:Enterprise, mají funkce pro práci s daty. Pomáhají zjednodušit převody data v dotazech a vyhýbají se použití velkého množství parametrů. Podívejme se na tyto funkce.

Jak nastavit datum v dotazech 1C jako konstantu

DATETIME (rok, měsíc, den, hodina, minuta, sekunda). Možnosti Rok, Měsíc A Den jsou povinné, jiné nikoli. Pokud nezadáte čas, systém nastaví začátek dne.

Žádost. Text= "VYBRAT
DATETIME (2016,09,28,12,22,00)"
; // Výsledek: 28. září 2016 12:22:00

Kromě toho lze jako parametry této funkce explicitně zadat pouze čísla. Nemůžete zadat hodnoty jiných funkcí jako parametry. Například tato konstrukce nebude fungovat:

Žádost. Text= "VYBRAT
DATETIME (Year (Source.Date),09,28,12,22,00)
Ze zdroje Directory.Source jako zdroj"
;

Jak získat začátek nebo konec roku, půl roku, čtvrtletí, měsíc, dekádu, týden, den, hodinu, minutu v dotazech 1C

K tomu se používají následující funkce:

  • StartPeriod (datum, období)
  • EndPeriod(Datum, Období)

Jako parametr datum je předána hodnota s typem Datum. Parametr Doba .

Žádost. Text= "VYBRAT
StartPeriod(DATETIME (2016,09,28,12,22,00), DECADE)"
; // Výsledek: 21. září 2016 0:00:00

Žádost. Text= "VYBRAT
EndPeriod(DATETIME (2016,09,28,12,22,00), ČTVRTLETÍ)"
; // Výsledek: 30. září 2016 23:59:59

Jak můžete vidět z příkladů, v těchto funkcích můžete použít další vnořené funkce.

Jak získat rok, den v roce, čtvrtletí, měsíc, týden, den v týdnu, den, hodinu, minutu, sekundu z data v dotazech 1C

K tomu existují odpovídající funkce, kterým je třeba předat datum jako parametr.

  • Funkce ROK (datum)— vrátí číslo roku;
  • Funkce DAYYEAR (datum)— zvyšuje počet dnů v roce;
  • Funkce ČTVRTLETÍ (datum)— vrátí číslo čtvrtletí;
  • Funkce MĚSÍC (datum)— vrátí číslo měsíce;
  • Funkce TÝDEN (datum)— vrátí číslo týdne v roce;
  • Funkce DEN V TÝDNU (datum)— vrátí číslo dne v týdnu (pondělí — 1, neděle — 7);
  • Funkce DEN (datum)— vrátí číslo dne v měsíci;
  • Funkce HODINA (datum)— vrátí hodinu;
  • Funkce MINUTA (datum)— vrací minuty;
  • Funkce DRUHÝ (datum)— vrací sekund.

Žádost. Text= "VYBRAT
ROK(DATUM ČAS (2016,09,28,12,22,00))"
; // Výsledek: 2016

Žádost. Text= "VYBRAT
WEEK(DATETIME (2016,09,28,12,22,00))"
; // Výsledek: 40

Žádost. Text= "VYBRAT
WEEKDAY(DATETIME (2016,09,28,12,22,00))"
; // Výsledek: 3

Žádost. Text= "VYBRAT
DAYYEAR(DATETIME (2016,09,28,12,22,00))"
; // Výsledek: 272

Žádost. Text= "VYBRAT
DAY(DATETIME (2016,09,28,12,22,00))"
; // Výsledek: 28

Jak přidat nebo odečíst od data rok, půlrok, ​​čtvrtletí, měsíc, dekáda, týden, den, hodina, minuta, sekunda v dotazech 1C

K tomu použijte funkci AddToDate (Datum, Období, Hodnota).

Jako parametr datum je předána hodnota s typem Datum. Parametr Doba může nabývat jedné z následujících hodnot: DRUHÝ, MINUTA, HODINA, DEN, TÝDEN, DEKÁDA, MĚSÍC, ČTVRTLETÍ, PŮLLET, ROK.

Parametr Význam ukazuje počet období, které mají být přidány. Pokud je třeba odečíst období, pak parametr Význam musí být negativní.

Žádost. Text= "VYBRAT
AddToDate(DATETIME(2016, 9, 28, 12, 22, 0), PŮL ROKU, 1)"
; // Výsledek: 28. března 2017 12:22:00

Žádost. Text= "VYBRAT
AddKDate(DATETIME(2016, 9; 28; 12, 22; 0); DECADE; -1)"
; // Výsledek: 18. září 2016 12:22:00

Jak vypočítat rozdíl v datech v dotazech 1C

K tomu použijte funkci Datum rozdílu (Datum1, Datum2, Období).

Parametr Datum 1- datum, které má být odečteno.

Parametr Datum 2 — datum, od kterého se má odečíst.

Parametr Doba může nabývat jedné z následujících hodnot: DRUHÝ, MINUTA, HODINA, DEN, MĚSÍC, ČTVRTLETÍ, ROK. Ukazuje, v jakých jednotkách chceme získat výsledek

Žádost. Text= "VYBRAT
DifferenceDate(DATETIME(2016, 9, 28, 12, 22; 0), DATETIME(2017, 9, 28, 12, 22, 0), QUARTER)"
; // Výsledek: 4

Žádost. Text= "VYBRAT
Datum rozdílu(DATETIME(2016, 9, 28, 12, 22; 0), DATETIME(2017, 9, 28, 12, 22, 0); Second)"
; // Výsledek: 31 536 000

Ve všech funkcích kromě funkce ČAS SCHŮZKY, jako parametr datum může být nejen konkrétní hodnota data (konstanta nebo parametr dotazu), ale také pole zdrojové tabulky.



chyba: Obsah je chráněn!!