1c porovnání dat v žádosti. Jak zadat prázdné datum v dotazu? Převést na datum

Když je poměrně často potřeba pracovat s proměnnými typu "Datum". V tomto článku se podíváme na hlavní techniky – předání aktuálního data, kontrola prázdné hodnoty, libovolné datum.

Při psaní dotazů je často nutné porovnávat data s aktuálním datem. Vestavěný jazyk 1C má funkci CurrentDate(). Umožňuje vám určit aktuální čas a datum na vašem počítači. Pro provádění operací s aktuálním datem musí být hodnota této funkce předána požadavku jako parametr.

Níže je dotaz, který vybere všechny soubory připojené k předběžným přehledům s datem vytvoření až do současnosti:

RequestExample = Nový požadavek;
ExampleRequest.Text =
| VYBERTE SI
| Advance ReportAttachedFiles.Link
| OD
| Directory.Advance ReportAttachedFilesAS AdvanceReportAttachedFiles
| KDE
| Advance ReportAttachedFiles.Date< &ТекДата»;
Příklad dotazu.SetParameter("AktuálníDatum", AktuálníDatum());

Libovolné datum

Výše popsaná funkce vám umožňuje porovnávat a tedy provádět výběr pro libovolné období. Tato metoda umožňuje zadat v dotazu přísný výběr bez použití dalších parametrů.

Upozorňujeme, že při použití této funkce ve výše uvedeném příkladu jsme jako vstupní parametry předali pouze tři čísla (rok, měsíc, den). Poslední tři (hodina, minuta, sekunda) jsou nepovinné a pokud chybí, jsou nahrazeny "0", to je začátek dne.

V rámci tohoto příkladu budou přijaty všechny soubory připojené k předběžným zprávám do konce loňského roku 2016. V tomto ohledu upřesníme hodinu, minutu a sekundu pro porovnání s časovým okamžikem „31. prosince 2016 23:59:59“.

VYBRAT
Advance ReportAttachedFiles.Link
Z
Directory.Advance Report Attached Files AS Advance Report Attached Files
KDE
Advance ReportAttachedFiles.Date< ДАТАВРЕМЯ(2016, 12, 31, 23, 59, 59)

prázdné datum

Nejjednodušší způsob, jak zkontrolovat proměnnou, zda neobsahuje prázdné datum, je jednoduché porovnání. V tomto příkladu pomocí dotazu vybereme všechny pokladní doklady na účet, které nemají vyplněné datum přijetí.

43
NULL - chybějící hodnoty. Nezaměňovat s null! NULL není číslo, nerovná se mezera, nulový odkaz, nedefinováno. NULL je typotvorná hodnota, tzn. existuje typ NULL a jedna hodnota tohoto typu. NULA... 26
Pro vytváření a provádění dotazů do databázových tabulek na platformě 1C se používá speciální objekt programovacího jazyka Request. Tento objekt je vytvořen voláním konstrukce New Request. Pohodlná žádost... 18
Článek poskytuje užitečné triky 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 zaměřit pouze na ... 13
LIKE - Operátor pro kontrolu, zda je řetězec podobný vzoru. Analog LIKE v SQL. Operátor LIKE umožňuje porovnat hodnotu výrazu zadaného vlevo od něj s řetězcem šablony zadaným vpravo. Hodnota výrazu...

Typ "Datum" v 1C je jedním ze 4 hlavních datových typů spolu s číslem, řetězcem a booleanem. Data jsou v konfiguracích všudypřítomná – práci s tímto datovým typem se při vývoji nelze vyhnout. Proto je lepší začít s psaním dotazů, už s pochopením, jak data zpracovávat, jaké jsou možnosti práce s nimi, jak se ukládají. Podívejme se na příklady všech nuancí psaní dotazů s různými daty.

Příklady práce s daty v dotazech 1C

Nejprve musíte v poptávce získat datum v požadovaném formátu - s časem nebo bez. Tento úkol lze splnit několika způsoby:

  1. Předat přes parametr. Tato metoda je jediný způsob, jak získat aktuální datum relace;
  2. Získejte datum v dotazu z pole výběru;
  3. Převod z číselných hodnot pomocí funkce DATETIME().

Nejčastějším úkolem při práci s dokumenty je kontrola prázdného data v dotazu 1C. V tomto případě je nejjednodušší porovnat proměnnou nebo pole s prázdným datem, které se získá pomocí funkce DATETIME(1,1,1):

DATETIME(1; 1; 1)

S podobným příkazem můžete v požadavku získat libovolné datum a čas. Zároveň je lze specifikovat s přesností až na sekundu zadáním 6 čísel jako parametrů. Pokud jsou použita pouze 3 čísla, hodiny, minuty a sekundy budou nastaveny na 0 (začátek dne). Potřebujeme například vybrat dokumenty za prvních 10 dní ledna 2018 v dotazu:

VYBERTE Příjem do vypořádacího účtu.Odkaz JAKO Reference FROM Document.Příjem do vypořádacího účtu AS Příjem do vypořádacího účtu WHERE Příjem na vypořádací účet.Datum BETWEEN DATETIME(2018, 1, 1, 0, 0, 0) AND DATETIME(2018, 1, 10, 23, 59, 59)

V požadavku ve vestavěném jazyce 1C můžete nejen vybrat různá pole a přijímat parametry. Existuje mnoho funkcí, které usnadňují formátování data pro potřeby konkrétního úkolu. Pokud často pracujete s daty v dotazu, měli byste znát tyto příkazy:

  • ZAČÁTEK OBDOBÍ. Jako parametry zadejte datum a časový interval, v jehož kontextu je nutné získat začátek data. Slouží k převodu data do nadčasového formátu. Chcete-li to provést, musíte nastavit druhý parametr - "DAY";
PERIOD START(,) PERIOD START(&Datum, DAY) období>datum>
  • ENDPERIOD. Podobný příkaz, který vrací poslední datum v kontextu jednotek zadaných v parametrech;
  • PŘIDAT. Umožňuje získat datum větší o daný počet zadaných časových jednotek. Datum, časová jednotka a číslo jsou specifikovány jako funkční parametry;
ADDDATE(,) ADDDATE(&Datum, DEN, 10) počet>typ>datum>
  • DATUM ROZDÍL Získá rozdíl mezi daty v zadaných jednotkách;
DATEDIFF(,) DATEDIFF(&Datum1, &Datum2, DEN) typ>datum2>datum1>
  • DEN V TÝDNU. Vrátí pořadové číslo jednoho ze dnů v týdnu.

Při správné aplikaci těchto funkcí může vývojář řešit docela netriviální úkoly. Například získání názvu dne v týdnu aktuálního data v dotazu jako řetězec:

SELECT WHENWEEKDAY(&CurrentDate) = 1 THEN "pondělí" WHENWEEKDAY(&CurrentDate) = 2 THEN "úterý" WHENWEEKDAY(&CurrentDate) = 3 THEN "středa" WHENWEEKDAY(&CurrentDate) = 4 THEN "čtvrtek" THENCurrentsWHENDWEDAY " WHENWEEKDAY(&CurrentDate) aktuální datum) = 5 POTOM "Pátek" WHEN DAYWEEK(&CurrentDate) = 6 POTOM "Sobota" JINAK "Neděle" KONEC

Převod typů v dotazu 1C z čísla nebo řetězce na datum je pracný úkol. Z čísel lze získat datum pomocí funkce DATETIME, z řetězce - kombinací funkce SUBSTRING a konstrukce SELECT WHEN THEN ELSE. Na základě toho vývojáři preferují získat datum z jiných typů v modulu a předat jej požadavku pomocí parametru. Bohužel to není vždy možné, takže musíte změnit formát data v žádosti.

V požadavku 1C je možné zadat datum jako parametr pro získání dat z tabulek virtuálních registrů. V této roli můžete také využívat všechny výše uvedené funkce. Tady je ale důležité nenechat prázdné datum v požadavku 1C by mohl ovlivnit konečný výsledek spuštění kódu, takže je nutné provést kontrolu.

Velmi často v 1C dotazech musíte pracovat s daty. Zvláště když je požadavek postaven na metadatové objekty, které obsahují periodické informace. Zpravidla se jedná o registry (informační, akumulační, kalkulační, účetní). Zvažte 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 datum v dotazu (s časem nebo bez času) 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. Vezměme si mini příklad. Do konzoly dotazu zadejte následující text:

    SELECT DATETIME(2016; 1; 1)

    Výsledkem dotazu je datum - 1.1.2016
    V podstatě je těžké si představit situaci, kdy bude datum v žádosti uvedeno tímto způsobem. Koneckonců, když potřebujete zadat období, používají se parametry. Existuje však případ, kdy má tato funkce zvláštní hodnotu. To je, když potřebujeme zadat prázdné datum v polích nebo v podmínkách dotazu. Dovolte mi připomenout, že pro jazyk 1C vypadá prázdné datum jako - 0001.01.01. Pro získání prázdného data v požadavku tedy stačí uvést DATETIME(1; 1; 1). Jako příklad vyberme z informačního rejstříku Zaměstnanci Organizace záznamy, které nejsou vyplněny Doba dokončení:

    VYBRAT Zaměstnanci organizací. Období, Zaměstnanci organizací. Zaměstnanci, Zaměstnanci organizací. Pozice, Zaměstnanci organizací. Oddělení organizací Z registru informací. Zaměstnanci organizací JAKO Zaměstnanci organizací KDE Zaměstnanci organizací. Období dokončení = DATETIME(1, 1, 1)

  • ZAČÁTEK OBDOBÍ

    Pro určené datum vrátí začátek období, do kterého patří.
    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ŮL ROKU
    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, frekvence registru Zaměstnanci Organizace jednoho dne. Vytvořme dotaz, ve kterém se místo skutečného období záznamů zobrazí datum začátku měsíce.

    VYBERTE SI 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 Z registru informací. Zaměstnanci organizací AS Zaměstnanci organizací

  • ENDPERIOD

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

    VYBERTE KONCOVÉ 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.

  • PŘIDAT

    Přidá zadaný počet časových úseků k datu.
    Syntax:
    ADDDATE(Datum, Typ období, Počet)
    PeriodType má stejné hodnoty jako funkce ZAČÁTEK OBDOBÍ
    Vezměme si jako příklad únor:

    SELECT ADDDATE(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 myslet na počet dní v měsících.
    Číslo může být i záporné. Poté se interval počítá v opačném směru.

  • DATUM ROZDÍL

    Vypočítá rozdíl mezi dvěma daty v zadaných jednotkách.
    Syntax:
    DATEDIFF(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 DATE DIFFERENCE(DATETIME(2016, 2; 15); DATETIME(2016, 3, 1); DAY)

    vrací se 15

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



chyba: Obsah je chráněn!!