1c dátumok összehasonlítása egy kérésben. Hogyan adjunk meg üres dátumot a kérelemben? Konvertálás dátumra

Gyakran előfordul, hogy „Dátum” típusú változókkal kell dolgozni. Ebben a cikkben megvizsgáljuk az alapvető technikákat - az aktuális dátum átadása, üres érték ellenőrzése, tetszőleges dátum.

Lekérdezések írásakor gyakran össze kell hasonlítania az adatokat az aktuális dátummal. A beépített 1C nyelvnek van CurrentDate() függvénye. Lehetővé teszi a pontos idő és dátum meghatározását a számítógépen. Az aktuális dátummal végzett műveletek végrehajtásához a függvény értékét paraméterként kell átadnia a kérésnek.

Az alábbiakban egy lekérdezés található, amely a költségjelentésekhez csatolt összes fájlt kiválasztja a létrehozás dátumáig:

ExampleRequest = Új kérés;
Példa Request.Text = "
|KIVÁLASZTÁS
| AdvanceReportAttachedFiles.Link
|FROM
| Directory.AdvanceReportAttachedFilesAS AdvanceReportAttachedFiles
|HOL
| AdvanceReportAttachedFiles.Date< &ТекДата»;
Példa Request.SetParameter("CurrentDate", CurrentDate());

Egyedi dátum

A fent tárgyalt funkció lehetővé teszi az összehasonlítást, és ezáltal bármely időszakra vonatkozó kiválasztást. Ez a módszer lehetővé teszi, hogy a kérésben szigorú kijelölést adjon meg további paraméterek használata nélkül.

Kérjük, vegye figyelembe, hogy a fenti példában ezt a függvényt használva csak három számot (év, hónap, nap) adtunk meg bemeneti paraméterként. Az utolsó három (óra, perc, másodperc) nem kötelező, és ha hiányzik, akkor „0”-ra, azaz a nap elejét helyettesíti.

Ez a példa lekéri az összes költségjelentéshez csatolt fájlt 2016 végéig. Ebben a tekintetben az órát, percet és másodpercet feltüntetjük az időpont összehasonlításához „2016. december 31. 23:59:59”.

VÁLASZT
AdvanceReportAttachedFiles.Link
TÓL TŐL
Directory.AdvanceReportAttachedFiles AS AdvanceReportAttachedFiles
AHOL
AdvanceReportAttachedFiles.Date< ДАТАВРЕМЯ(2016, 12, 31, 23, 59, 59)

Üres dátum

A legegyszerűbben egyszerű összehasonlítással ellenőrizheti, hogy egy változó tartalmaz-e üres dátumot. Ebben a példában lekérdezéssel kiválasztjuk az összes olyan pénztárbizonylatot a számlára, amelynél nincs kitöltve a beérkezési dátum.

43
NULL – hiányzó értékek. Nem tévesztendő össze a nulla értékkel! A NULL nem szám, nem egyenlő szóközzel, üres hivatkozással vagy Undefined. A NULL típusképző érték, azaz. létezik egy NULL típusú és egyetlen ilyen típusú érték. NULLA... 26
Az 1C platformon az adatbázistáblák lekérdezésének generálásához és végrehajtásához a Query programozási nyelv speciális objektumát használják. Ez az objektum a New Request konstrukció meghívásával jön létre. Kényelmes kérés... 18
A cikk hasznos technikákat kínál az 1C v.8.2 lekérdezésekhez, valamint olyan információkat, amelyek nem annyira ismertek a lekérdezési nyelvről. Nem próbálok adni Teljes leírás lekérdező nyelv, de csak szeretnék időzni... 13
LIKE – Operátor egy karakterlánc mintához való hasonlóságának ellenőrzésére. A LIKE analógja SQL-ben. A HASONLÓ operátor lehetővé teszi a tőle balra megadott kifejezés értékének összehasonlítását a jobb oldalon megadott minta karakterlánccal. A kifejezés jelentése...

A „Dátum” típus az 1C-ben a 4 fő adattípus egyike a szám, karakterlánc és logikai érték mellett. A dátumok mindenütt jelen vannak a konfigurációkban – lehetetlen elkerülni, hogy ezzel az adattípussal dolgozzunk a fejlesztés során. Ezért jobb, ha már elkezdi írni a lekérdezéseket, hogy megértse, hogyan kell feldolgozni a dátumokat, milyen lehetőségek vannak a velük való munkavégzésre és tárolásuk módjára. Nézzünk példákat a különböző dátumú lekérdezések írásának minden árnyalatára.

Példák a dátumokkal való munkavégzésre az 1C lekérdezésekben

Először is meg kell kapnia a dátumot a kérelemben a kívánt formátumban - idővel vagy anélkül. Számos módja van ennek a feladatnak a végrehajtására:

  1. Paraméter átadása. Ezzel a módszerrel csak az aktuális munkamenet dátuma érhető el;
  2. A lekérdezés dátumának lekérése a kiválasztási mezőből;
  3. Konvertálja a numerikus értékeket a DATETIME() függvény segítségével.

A dokumentumokkal való munka során a leggyakoribb feladat az üres dátum ellenőrzése az 1C kérésben. Ebben az esetben a legegyszerűbb egy változót vagy mezőt egy üres dátummal összehasonlítani, amelyet a DATETIME(1,1,1) függvény segítségével kapunk meg:

DATETIME (1, 1, 1)

Hasonló paranccsal tetszőleges dátumot és időpontot kaphat egy kérésben. Sőt, 6 szám paraméterként történő megadásával akár másodperc pontossággal is megadhatók. Ha csak 3 számot használ, akkor az órák, percek és másodpercek 0-ra lesznek állítva (a nap eleje). Például 2018. január első 10 napjára vonatkozó dokumentumokat kell kiválasztanunk a kérelemben:

SELECT Nyugta a folyószámlához. Link AS Link FROM dokumentum. Nyugta folyószámlához AS Nyugta folyószámlához WHERE Nyugta folyószámlához. Dátum BETWEEN DATETIME(2018, 1, 1, 0, 0, 0) AND DATETIME(2018, 1, 10, 23, 59, 59)

A beépített 1C nyelv lekérdezésében nem csak különféle mezőket választhat ki és paramétereket fogadhat. Számos funkció megkönnyíti a dátumok formázását egy adott feladathoz. Ha gyakran dolgozik dátumokkal egy lekérdezésben, akkor ismernie kell ezeket a parancsokat:

  • IDŐSZAK KEZDETE. A paraméterek azt a dátumot és időszakot adják meg, amelynek keretében a dátum kezdetét meg kell kapni. A dátum időtlen formátummá alakítására szolgál. Ehhez be kell állítania a második paramétert - „DAY”;
IDŐSZAK KEZDETE(,) IDŐSZAK KEZDETE(&Dátum, NAP) időszak>dátum>
  • IDŐSZAK VÉGE. Hasonló parancs, amely az utolsó dátumot adja vissza a paraméterekben megadott mértékegységek szerint;
  • ADDKDATE. Lehetővé teszi, hogy olyan dátumot kapjon, amely egy megadott számú meghatározott időegységnél nagyobb. A funkció paraméterei közé tartozik a dátum, az időegység és a szám;
ADDKDATE(,) ADDKDATE(&Date, DAY, 10) mennyiség>típus>dátum>
  • KÜLÖNBSÉG. Lekérdezi a dátumok közötti különbséget a megadott egységekben;
DIFFERENCEDATE(,) DIFFERENCEDATE(&Date1, &Date2, DAY) type>date2>date1>
  • A HÉT NAPJA. A hét egyik napjának sorszámát adja vissza.

E funkciók helyes használatával a fejlesztő egészen nem triviális problémákat tud megoldani. Például az aktuális dátum hét napjának nevének lekérése egy kérésben karakterláncként:

KIVÁLASZTJA A HÉT HÉTNAPJÁT(&JelenlegiDátum) = 1 MAJD "Hétfő" WHENDAYDAY(&CurrentDate) = 2 MAJD "Kedd" A HÉT WHENDAPJA(&JelenlegiDátum) = 3 MAJD "Szerda" WHENDAYDAY(&Aktuális HÉT"HÉD4 (&Aktuális dátum) = 5 MAJD "Péntek" A HÉT WHENDAPJA(&AktuálisDátum) = 6 MAJD "Szombat" EGYÉB "VASÁRNAP" VÉGE

Az 1C lekérdezésben szereplő típusok számból vagy karakterláncból dátummá konvertálása munkaigényes feladat. Dátumot kaphat számokból a DATETIME függvény segítségével, karakterláncból - a SUBSTRING függvény és a SELECT WHEN THEN ELSE konstrukció kombinálásával. Ennek alapján a fejlesztők előszeretettel kérik le a dátumot a modulban lévő más típusoktól, és egy paraméter segítségével adják át a kérésnek. Sajnos ez nem mindig kivitelezhető, ezért meg kell változtatni a dátumformátumot a kérelemben.

Lehetőség van a dátum megadására egy 1C kérésben paraméterként a virtuális regisztertáblákból való adatok lekéréséhez. Ez a szerepkör a fenti funkciók mindegyikét is használhatja. De itt fontos, hogy ne engedjük üres dátum egy 1C kérésben befolyásolhatja a kódvégrehajtás végeredményét, ezért ellenőrizni kell.

Az 1C lekérdezéseknél nagyon gyakran dátumokkal kell dolgozni. Különösen akkor, ha a kérés olyan metaadat objektumokra vonatkozik, amelyek időszakos információkat tartalmaznak. Ezek általában nyilvántartások (információ, felhalmozás, számítás, könyvelés). Nézzük meg az 1C lekérdezési nyelv leggyakrabban használt funkcióit a dátumokkal való munkához. Példákat építünk az információs nyilvántartás alapján Alkalmazottak Szervezetek ZUP konfigurációk 2.5 verzió.

  • DÁTUM IDŐ

    Lehetővé teszi, hogy dátumot kapjon a kérelemben (idővel vagy anélkül), az év, hónap, nap, óra, perc, másodperc megadásával.
    Szintaxis:
    DATETIME (év, hónap, nap, óra, perc, másodperc)
    Általában az óra, perc és másodperc nincs feltüntetve. Mondjunk egy mini példát. Írja be a következő szöveget a Query Console-ba:

    DÁTUM KIVÁLASZTÁSA (2016, 1, 1)

    A kérés teljesítésének eredményeként megkapjuk a dátumot - 2016.01.01
    Valójában nehéz elképzelni egy olyan helyzetet, amelyben a dátumot így jeleznék egy kérelemben. Végül is, amikor meg kell adni egy időszakot, akkor paramétereket használnak. De van olyan eset, amikor ez a funkció különösen értékes. Ilyenkor a mezőkben vagy az igénylési feltételekben üres dátumot kell feltüntetnünk. Hadd emlékeztesselek arra, hogy az 1C nyelv esetében az üres dátum 0001.01.01 formátumú. Ezért, ha egy kérésben üres dátumot szeretne kapni, csak adja meg DATETIME(1; 1; 1). Példaként válasszunk az információs nyilvántartásból Alkalmazottak Szervezetek nem kitöltött nyilvántartások Befejezési időszak:

    SELECT Szervezeti alkalmazottak. Időszak, Szervezeti alkalmazottak. Munkavállaló, Szervezeti alkalmazottak. Beosztás, Szervezeti alkalmazottak. Szervezeti részleg FROM nyilvántartási információk. Szervezeti alkalmazottak AS Szervezeti alkalmazottak WHERE Szervezeti alkalmazottak. Befejezési időszak = DATETIME(1, 1, 1)

  • IDŐSZAK KEZDETE

    Mert meghatározott dátum visszaadja a beírt időszak elejét.
    Szintaxis:
    IDŐSZAK KEZDETE (dátum, időszak típusa)
    A PeriodType a következő értékeket veheti fel: PERC, ÓRA, NAP, HÉT, HÓNAP, NEGYEDÉV, ÉV, ÉVTized, FÉLÉV
    A Query Console-ban írja be:

    IDŐSZAK KEZDÉSÉNEK KIVÁLASZTÁSA (DÁTUM IDŐ (2016, 1, 15), HÓNAP)

    A kérés vissza fog térni - 2016.01.01
    És most egy példa. Mint tudják, a nyilvántartás időszakossága Alkalmazottak Szervezetek egy nap. Készítsünk egy lekérdezést, amelyben a tényleges rögzítési időszak helyett a hónap kezdő dátuma jelenik meg.

    AZ IDŐSZAK KEZDETE KIVÁLASZTÁSA(Szervezetek alkalmazottai.Időszak, HÓNAP) AS Hónap eleje, Szervezetek alkalmazottai.Alkalmazott, Szervezetek alkalmazottai.Beosztás, Szervezetek alkalmazottai.Szervezet felosztása a nyilvántartási adatokból.Szervezetek alkalmazottai, mint szervezetek alkalmazottai

  • IDŐSZAK VÉGE

    A szintaxis ugyanaz, mint az időszak elején. És ahogy a neve is sugallja, az időszak végét adja vissza dátum és időszak típusa szerint. Nem foglalkozunk vele részletesen. Korlátozzuk magunkat egy mini példára.
    Kérés:

    IDŐSZAK VÉGének KIVÁLASZTÁSA (DÁTUM IDŐ (2016, 1, 15), HÓNAP)

    Visszatérés 2016.01.31. 23:59:59
    Amint láthatja, az értéket a másodperc pontossággal adja vissza.

  • ADDKDATE

    A megadott számú időintervallumot hozzáadja a dátumhoz.
    Szintaxis:
    ADDKDATE(dátum, időszak típusa, mennyiség)
    A PeriodType ugyanazokat az értékeket veszi fel, mint a függvénynél IDŐSZAK KEZDETE
    Például válasszuk ki a februári dátumot:

    HOZZÁADÁSI DÁTUM KIVÁLASZTÁSA(DATETIME(2016, 2, 15), HÓNAP, 2)

    Dátumot kapunk 2016.04.15. 0:00:00 Annak ellenére, hogy február rövid hónap, a beérkezett dátum napja megegyezik az eredetivel. Nagyon kényelmes, hogy nem kell a napok számára gondolni hónapokban.
    A mennyiség negatív is lehet. Ezután az intervallumot az ellenkező irányba számolja.

  • KÜLÖNBSÉG

    Számítsa ki két dátum közötti különbséget a megadott mértékegységekben.
    Szintaxis:
    DÁTUM-KÜLÖNBSÉG (Kezdő dátum, Befejezés dátuma, Időszak típusa)
    Az időszak típusa a következő értékeket veheti fel: MÁSODIK, PERC, ÓRA, NAP, HÓNAP, NEGYEDÉV, ÉV
    Például:

    DIFFERENCEDÁTUM KIVÁLASZTÁSA(DÁTUMIDŐ(2016, 2, 15), DÁTUMIDŐ(2016, 3, 1), NAP)

    visszatér 15

Itt áttekintettük az 1C lekérdező nyelv leggyakrabban használt funkcióit. A többit nagyon ritkán használják. Ha szükséges, példákat találhat a velük való munkára az 1C platformba épített súgóban.



hiba: A tartalom védett!!