Hogyan adjunk meg üres dátumot a kérelemben? 1s alkalommal kérésre.

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 erre az 1C nyelvre üres dátum formátuma - 0001.01.01. 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.

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...

Minden 1C konfigurációban létező dokumentumnak, következésképpen szinte minden regiszternek rendelkeznie kell legalább egy Date típusú attribútummal, ezért minden fejlesztőnek tudnia kell és értenie kell:

  • Más típusú paraméterek konvertálása a kérdéses típusra;
  • Hogyan lehet meghatározni egy üres dátumot egy 1C kérésben;
  • Mi a különbség a dátum és az időkorlát között?

Ezekre a kérdésekre próbálunk választ adni cikkünkben.

Mi az a dátum és hogyan kell meghatározni

Mivel a legtöbb menedzsment döntés meghozatala és a nyilvántartások vezetése nem igényel 1 másodpercnél nagyobb pontosságot, az 1C platform fejlesztői úgy döntöttek, hogy ez az érték lesz az abszolút minimum a dátumformátumban. Így a programban egy esemény időpontját leíró minden attribútumnak tartalmaznia kell:

  • Az esemény bekövetkezésének éve;
  • Az esemény hónapja;
  • Nap.

Nem szükséges feltüntetni: órát, percet és másodpercet. Ha ezt a három paramétert kihagyjuk, és nincs további feltétel, akkor a program automatikusan a nap elejére állítja az időt.

A világon létező dátumformátumok jelentős eltéréseket mutatnak:

  1. Oroszországban megszoktuk, hogy a napot, majd az esemény hónapját, a végére pedig az évet tesszük;
  2. Az Egyesült Államok lakosai a dátumot a hónappal kezdik;
  3. A csehek, a lengyelek és a szlovének az év – hónap – nap formátumban rekord periódusokat.

Ez utóbbi formátumot használja az 1C platform.

Konvertálás dátumra

Ahhoz, hogy több értékből vagy egy karakterláncból Dátum típusú paramétert kaphasson, a 2. ábrán látható kódot kell használnia. 1

Amint a fenti ábrán látható, a dátumot vagy egy sor használatával határozhatja meg, vagy ha ezt a sort vesszővel részekre bontja, az eredmény nem változik.

Fontos megérteni, hogy a dátum évének négy számjegyből kell állnia, beleértve az esemény évezredét és századát, a hónapnak, napnak, óráknak és másodperceknek két karakter hosszúságúnak kell lenniük, beleértve a kezdő nullákat is.

A programban az idő visszaszámlálása 0001. január 1-jén a nap elejétől indul. A fenti kód esetében ez az érték kétféleképpen határozható meg (2. ábra).

Rizs. 2

A második sorban kihagytuk az esemény óráit, perceit és másodperceit, ami egyáltalán nem befolyásolta kódunk teljesítményét.

A dátum használatának jellemzői az 1C lekérdezésekben

Az 1C platform által használt legtöbb adattípushoz vannak előre meghatározott érvénytelen értékek. Számoknál ez 0, hivatkozásoknál megadható az EmptyLink() dátum esetén általában az üres értéket tekintjük a kezdő dátumnak, ezzel kell összehasonlítani a megfelelő típus adatait, amikor a kérés paramétereinek beállítása.

Fontos megérteni, hogy még ha nincs is megadva szám egy olyan form attribútum értékében, amelyik rendelkezik a kérdéses típussal, vagyis az ablak így néz ki (3. ábra), ez nem jelenti azt, hogy nincs megadva benne semmi; ennek a paraméternek az üres karakterlánccal való összehasonlítása nem működik.

Rizs. 3

Üres dátum érkezésekor megadhatjuk kérésünk paramétereként, azaz használhatjuk a konstrukciót (4. ábra)

Vannak azonban olyan esetek, amikor jobb a kérés törzsében ellenőrizni, anélkül, hogy paraméterként üres dátumot adnánk meg. Ehhez megadhatja a megfelelő feltételt a kérési kódban (5. ábra), és használhatja a DateTime() kérésfüggvényt.

Rizs. 5

A fenti kérésszövegből kihagytuk az év, hónap és nap kezdő nulláit, és nem tüntettük fel az órát, percet és másodpercet sem, és a program, ahogy mondani szokták, ezt a feltételezést megette.

Dátum és idő határ

Egy másik Érdekes tény a lekérdezések és a dátumok kapcsolatához kapcsolódik az „időpont” fogalmának használata a különböző adatbázistáblák elérésekor.

A primitív Dátum típus leírásánál a műszaki dokumentációban megadott „maximum ezredmásodperces” pontosság a legvilágosabban a felhalmozási regiszter virtuális tábláiból történő rekordok kiválasztásánál nyilvánul meg: ha a felhalmozási regiszterben a Forgalom táblán kívül a Maradék valamint a Fennmaradó és Forgalom táblák, majd az ezekből történő kiválasztás tovább pontos idő, eltérő eredményeket adhat.

Hogy megértsük, hogyan és miért történik ez, vegyünk egy egyszerű példát:

  1. Az értékesítési okmány elkészítése előtt 12 óra 31 perc 36 másodperckor a cukornómenklatúra szerinti mérlegek 30 kg-ot tettek ki;
  2. A dokumentum 10 kg-ot írt le a megadott időpontban;
  3. A dokumentum dátumán 12 óra 31 perc 36 másodperckor generált jelentés a Fennmaradó táblázat szerint 30 kg mérleget mutat;
  4. Ugyanaz a jelentés a Maradékok és Forgások táblázaton ugyanabban az időben 20 kg mérleget mutat.

Mi az oka ennek a viselkedésnek, és hogyan lehet elkerülni?

A probléma az, hogy a hátralévő táblában az időszak nyitott szegmensként van megadva, vagyis a jelentéskészítéskor végrehajtott mozgások nem kerülnek figyelembevételre, vagyis a második megadott kezdet kezdetén. a paraméterben. Ugyanakkor a Forgalom és a Maradványok és Forgások táblázatnál az időhatárokat veszik figyelembe, vagyis az időt a megadott másodperc végén veszik.

Ebből a helyzetből több kiút van:

  1. A Maradékok táblázat használatakor a megadottnál 1 másodperccel nagyobb időpontot adjon meg;
  2. Csak a Maradékok és forgalom táblát használja (teljesítmény szempontjából nem a legoptimálisabb lehetőség);
  3. Használja a határ fogalmát.

Az utolsó opciót az ábrán látható kóddal ábrázolhatjuk. 6.

Objektumunk első paraméterében azt a dátumot jelöljük meg, amelyre a jelentést készíteni kell, a második paraméter a szegély típusát határozza meg. Mivel számunkra fontos, hogy az adott időpontban végrehajtott mozgások is szerepeljenek a kiválasztásban, ezért ezt a paramétert „Beleértve” pozícióba kell állítani.

Az 1C lekérdezések, valamint az 1C:Enterprise platform beépített nyelve rendelkezik funkciókkal a dátumokkal való munkavégzéshez. Segítenek egyszerűsíteni a dátumkonverziókat a lekérdezésekben, és elkerülik a nagyszámú paraméter használatát. Nézzük meg ezeket a funkciókat.

Hogyan állíthatunk be egy dátumot állandóként az 1C lekérdezésekben

DATETIME (év, hónap, nap, óra, perc, másodperc). Lehetőségek Év, hónapÉs Nap kötelezőek, mások nem. Ha nem adja meg az időt, a rendszer beállítja a nap kezdetét.

Kérés. Szöveg= "VÁLASZT
DATETIME (2016,09,28,12,22,00)"
; // Eredmény: 2016. szeptember 28. 12:22:00

Ezen kívül csak számok adhatók meg kifejezetten ennek a függvénynek a paramétereiként. Más függvények értékeit nem adhatja meg paraméterként. Például ez a konstrukció nem fog működni:

Kérés. Szöveg= "VÁLASZT
DATETIME (Év (Forrás.Dátum),09,28,12,22,00)
A Directory.Source AS Forrásból"
;

Hogyan kaphatja meg az év, fél év, negyedév, hónap, évtized, hét, nap, óra, perc elejét vagy végét az 1C lekérdezésekben

Ehhez a következő funkciókat kell használni:

  • Kezdési időszak (dátum, időszak)
  • EndPeriod(dátum, időszak)

Paraméterként dátum típussal rendelkező érték kerül átadásra Időpontja. Paraméter Időszak .

Kérés. Szöveg= "VÁLASZT
Kezdési időszak(DÁTUMIDŐ (2016,09,28,12,22,00), ÉVTized)"
; // Eredmény: 2016. szeptember 21. 0:00:00

Kérés. Szöveg= "VÁLASZT
Befejezési időszak(DATETIME (2016,09,28,12,22,00), NEGYEDÉV)"
; // Eredmény: 2016. szeptember 30. 23:59:59

Amint a példákból látható, ezekben a függvényekben más beágyazott függvényeket is használhat.

Hogyan kaphatja meg az évet, az év napját, a negyedévet, a hónapot, a hetet, a hét napját, a napot, az órát, a percet, a másodpercet egy dátumból az 1C lekérdezésekben

Ehhez vannak megfelelő függvények, amelyekhez paraméterként át kell adni a dátumot.

  • Funkció YEAR (dátum)— visszaadja az évszámot;
  • Funkció DAYYEAR (dátum)— növeli a napok számát az évben;
  • Funkció NEGYEDÉV (dátum)— visszaadja a negyed számot;
  • Funkció HÓNAP (dátum)— visszaadja a hónap számát;
  • Funkció HÉT (dátum)— visszaadja az év hét számát;
  • Funkció A HÉT NAPJA (dátum)— visszaadja a hét napjának számát (hétfő — 1, vasárnap — 7);
  • Funkció DAY (dátum)— visszaadja a hónap napjának számát;
  • Funkció ÓRA (dátum)— visszaadja az órát;
  • Funkció PERC (dátum)— perceket ad vissza;
  • Funkció MÁSODIK (dátum)— másodperceket ad vissza.

Kérés. Szöveg= "VÁLASZT
ÉV(DATETIME (2016,09,28,12,22,00))"
; // Eredmény: 2016

Kérés. Szöveg= "VÁLASZT
HÉT(DATETIME (2016,09,28,12,22,00))"
; // Eredmény: 40

Kérés. Szöveg= "VÁLASZT
WEEKDAY(DATETIME (2016,09,28,12,22,00))"
; // Eredmény: 3

Kérés. Szöveg= "VÁLASZT
NAP (DÁTUM IDŐ (2016,09,28,12,22,00))"
; // Eredmény: 272

Kérés. Szöveg= "VÁLASZT
DAY(DATETIME (2016,09,28,12,22,00))"
; // Eredmény: 28

Év, félév, negyedév, hónap, évtized, hét, nap, óra, perc, másodperc hozzáadása vagy kivonása egy dátumból az 1C lekérdezésekben

Ehhez használja a függvényt AddToDate(dátum, időszak, érték).

Paraméterként dátum típussal rendelkező érték kerül átadásra Időpontja. Paraméter Időszak a következő értékek egyikét veheti fel: MÁSODIK, PERC, ÓRA, NAP, HÉT, VIZETZET, HÓNAP, NEGYEDÉV, FÉLÉV, ÉV.

Paraméter Jelentése a hozzáadandó időszakok számát mutatja. Ha a periódust ki kell vonni, akkor a paramétert Jelentése negatívnak kell lennie.

Kérés. Szöveg= "VÁLASZT
AddToDate(DATETIME(2016, 9, 28, 12, 22, 0), FÉLÉV, 1)"
; // Eredmény: 2017. március 28. 12:22:00

Kérés. Szöveg= "VÁLASZT
AddKDate(DATETIME(2016; 9; 28; 12; 22; 0), DECADE; -1)"
; // Eredmény: 2016. szeptember 18. 12:22:00

Hogyan lehet kiszámítani a dátumkülönbséget az 1C lekérdezésekben

Ehhez használja a függvényt KülönbségDátum (Dátum1, Dátum2, Időszak).

Paraméter Dátum1- a levonandó dátum.

Paraméter Dátum2 — dátum, amelyből le kell vonni.

Paraméter Időszak a következő értékek egyikét veheti fel: MÁSODIK, PERC, ÓRA, NAP, HÓNAP, NEGYEDÉV, ÉV. Megmutatja, hogy milyen mértékegységekben akarjuk elérni az eredményt

Kérés. Szöveg= "VÁLASZT
KülönbségDátum(DATETIME(2016, 9, 28, 12, 22, 0), DÁTUMIDŐ(2017, 9, 28, 12, 22, 0), NEGYEDÉV)"
; // Eredmény: 4

Kérés. Szöveg= "VÁLASZT
KülönbségDátum(DATETIME(2016, 9, 28, 12, 22, 0), DATETIME(2017, 9, 28, 12, 22, 0), másodperc)"
; // Eredmény: 31 536 000

A funkció kivételével minden funkcióban DÁTUM IDŐ, paraméterként dátum nem csak egy adott dátumérték (konstans vagy lekérdezési paraméter), hanem forrástábla mezői is lehetnek.



hiba: A tartalom védett!!