Az 1C kérésekben, valamint az 1C: Enterprise platform beépített nyelvében vannak funkciók a dátumokkal való munkavégzéshez. Segítenek leegyszerűsíteni a dátumkonverziókat a lekérdezésekben, elkerülni a használatot egy nagy szám paramétereket. Nézzük meg ezeket a funkciókat.

Hogyan állítsuk be a dátumot állandóként az 1C kérésekben

DÁTUM, IDŐ (év, hónap, nap, óra, perc, másodperc)... Paraméterek É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.

Vizsgálat. Szöveg = "VÁLASZTÁS
DÁTUM IDŐ (2016,09,28,12,22,00) "
; // Eredmény: 2016. szeptember 28. 12:22:00

Ezen kívül csak explicit számok adhatók meg paraméterként ehhez a függvényhez. Más függvények értékeit nem adhatja meg paraméterként. Például egy ilyen konstrukció nem fog működni:

Vizsgálat. Szöveg = "VÁLASZTÁS
DATE TIME (Év (Forrás.Dátum), 09,28,12,22,00)
Referenciából. Forrás AS Forrás "
;

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:

  • Időszak kezdete (dátum, időszak)
  • Időszak vége (dátum, időszak)

Paraméterként dátum típusú értéket adunk át Dátum. Paraméter Időszak .

Vizsgálat. Szöveg = "VÁLASZTÁS
Az időszak eleje (DÁTUM, IDŐ (2016,09,28,12,22,00), ÉVTized) "
; // Eredmény: 2016. szeptember 21. 0:00:00

Vizsgálat. Szöveg = "VÁLASZTÁS
Időszak vége (DÁTUM IDŐ (2016,09,28,12,22,00), NEGYEDÉV) "
; // Eredmény: 2016. szeptember 30. 23:59:59

Amint a példákból látható, más, egymásba ágyazott függvények is használhatók ezekben a függvényekben.

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 a dátumból az 1C kéré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ó AZ ÉV (Dátum)- növekszik az év napjának száma;
  • 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.

Vizsgálat. Szöveg = "VÁLASZTÁS
ÉV (DÁTUM IDŐ (2016,09,28,12,22,00)) "
; // Eredmény: 2016

Vizsgálat. Szöveg = "VÁLASZTÁS
HÉT (DÁTUM (2016.09.28,12,22,00)) "
; // Eredmény: 40

Vizsgálat. Szöveg = "VÁLASZTÁS
A HÉT NAPJA (DÁTUM IDŐ (2016,09,28,12,22,00)) "
; // Eredmény: 3

Vizsgálat. Szöveg = "VÁLASZTÁS
AZ ÉV NAPJA (DÁTUM IDŐ (2016,09,28,12,22,00)) "
; // Eredmény: 272

Vizsgálat. Szöveg = "VÁLASZTÁS
NAP (DÁTUM (2016,09,28,12,22,00)) "
; // Eredmény: 28

Hogyan adjunk hozzá vagy vonjunk ki a dátumhoz egy évet, fél évet, negyedet, egy hónapot, egy évtizedet, egy hetet, egy napot, egy órát, egy percet, másodpercet 1C lekérdezésekben

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

Paraméterként dátum típusú értéket adunk át Dátum. 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ÉVES, ÉV.

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

Vizsgálat. Szöveg = "VÁLASZTÁS
Hozzáadás a dátumhoz (DÁTUM IDŐ (2016, 9, 28, 12, 22, 0), FÉLÉVES, 1) "
; // Eredmény: 2017. március 28. 12:22:00

Vizsgálat. Szöveg = "VÁLASZTÁS
AddKDate (DATETIME (2016, 9, 28, 12, 22, 0), DECAD, -1) "
; // Eredmény: 2016. szeptember 18. 12:22:00

Hogyan lehet kiszámítani a dátumok különbségét az 1C kérésekben

Ehhez használja a függvényt DifferenceDates (Dátum1, Dátum2, Időszak).

Paraméter Dátum1 A dátumot le kell vonni.

Paraméter Dátum2 - a 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.

Vizsgálat. Szöveg = "VÁLASZTÁS
DifferenceDates (DÁTUM IDŐ (2016, 9, 28, 12, 22, 0), DÁTUM IDŐ (2017, 9, 28, 12, 22, 0), NEGYEDÉV) "
; // Eredmény: 4

Vizsgálat. Szöveg = "VÁLASZTÁS
DifferenceDates (DÁTUM IDŐ (2016, 9, 28, 12, 22, 0), DÁTUM IDŐ (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 a konkrét dátumérték (konstans vagy lekérdezési paraméter) használható, hanem a forrástábla mezői is.

Az 1C konfigurációkban létező összes dokumentumnak, és ezért szinte minden regiszternek rendelkeznie kell legalább egy Dátum típusú változóval, 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ő határa között.

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

Mi az a dátum és hogyan határozzuk meg

Mivel a többség elfogadására vezetői döntéseké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 a maximális minimum a dátumformátumban. Így a programban egy esemény időpontját leíró minden változónak tartalmaznia kell:

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

Választható: óra, perc és másodperc. Ha ezt a három paramétert kihagyjuk és nem további feltételek, a program automatikusan a nap elejére állítja az időt.

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

  1. Oroszországban megszoktuk, hogy a napot az első helyre tegyük, majd jön az esemény hónapja, és a végén - az év;
  2. Az Egyesült Államok lakosai egy hónappal kezdik a dátumot;
  3. A csehek, lengyelek és szlovének az időszakot „Év – Hónap – Nap” formátumban írják.

Ez az utolsó formátum, amelyet az 1C platform használ.

Átalakítás dátumra

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

Amint a fenti ábrán látható, a dátumot egy sor segítségével is meghatározhatja, és ennek a sornak a vesszővel részekre osztása esetén 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, hónapot, napot, órákat és másodperceket – két karakter hosszúságúnak kell lennie, beleértve a kezdő nullákat is.

A programban a visszaszámlálás 0001. január 1-jén a nap elejétől indul. A fenti kódnál 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 semmilyen módon nem befolyásolta kódunk teljesítményét.

A dátum használatának jellemzői az 1C kérésekben

Az 1C platform által használt legtöbb adattípushoz vannak előre meghatározott üres értékek. Számoknál ez 0, linkeknél az EmptyReference () értéket adhatjuk meg, egy dátumnál a kezdő dátumot szokás üres értéknek tekinteni, ezzel kell összehasonlítani a megfelelő adatait. írja be a lekérdezési paraméterek beállításakor.

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

Rizs. 3

Üres dátum érkezésekor megadhatjuk kérésünk paramétereként, vagyis 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és funkciót ().

Rizs. 5

Az adott lekérdezési szövegben kihagytuk az év, hónap és nap bevezető nulláit, és nem tüntettük fel az órát, percet és másodpercet sem, és a program, ahogy mondani szokás, megette ezt a feltevést.

Dátum és idő határ

Egy másik Érdekes tény a lekérdezések és a dátumok közötti kapcsolat tekintetében - ez az "időpont" fogalmának használata, amikor az adatbázis különböző tábláira hivatkozunk.

A műszaki dokumentációban a primitív Dátum típus leírásánál feltüntetett "ezredmásodpercig terjedő" 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 Maradványok és Maradványok táblák is találhatók. és a Forgások, majd az ezekre történő, meghatározott ideig végzett kiválasztás 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 eladá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 jelzett időpontban a dokumentum 10 kg-ot írt le;
  3. Az Egyenlegek táblázat szerint a dokumentum keltének 12 óra 31 perc 36 másodperckor generált jelentés a fennmaradó 30 kg-ot mutatja;
  4. Ugyanaz a jelentés a Maradékok és Forgások táblázatban egyidejűleg 20 kg maradékot mutat.

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

A probléma az, hogy a Remains táblában az időszakot egy nyitott szegmens állítja be, vagyis a jelentéskészítéskor végrehajtott mozgásokat nem veszik figyelembe, vagyis az időt a második megadott kezdetén veszik. a paraméterben. Ugyanakkor a Fordulatok táblánál és a Fennmaradó ÉS Forgalom táblánál az időhatárokat veszik figyelembe, vagyis az időt a megadott másodperc végén veszik figyelembe.

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

  1. A maradék táblázat használatakor a megadottnál 1 másodperccel nagyobb időpontot jelöljön meg;
  2. Csak a Maradékok és Forgások táblázatot használja (nem a legoptimálisabb lehetőség a teljesítmény szempontjából);
  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, amikor szükséges a jelentés elkészítése, a második paraméter a szegély típusát határozza meg. Mivel számunkra fontos, hogy az adott dátumra vonatkozó mozgások szerepeljenek a mintában, ezért ezt a paramétert "Beleértve" pozícióba kell állítanunk.

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 megtalálhatók a konfigurációkban – lehetetlen elkerülni, hogy ezzel az adattípussal dolgozzunk a fejlesztés során. Ezért jobb, ha elkezdi a lekérdezéseket írni, már megértve, hogyan kell kezelni a dátumokat, milyen lehetőségek vannak a velük való munkavégzésre, hogyan tárolódnak. Nézzünk példákat a különböző dátumú kérelmek írási árnyalataira.

Példák a dátumokkal való munkavégzésre az 1C kéré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. Menjen át egy paraméteren. Csak ezzel a módszerrel kaphatja meg a munkamenet aktuális dátumát;
  2. Szerezze meg a dátumot a kérésben a kiválasztási mezőből;
  3. Számértékek konvertálása a DÁTUM IDŐ () funkcióval.

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, ha összehasonlítunk egy változót vagy mezőt egy üres dátummal, amelyet a DATE TIME (1,1,1) függvény segítségével kapunk meg:

DÁTUM IDŐ (1, 1, 1)

Egy hasonló parancs tetszőleges dátumot és időt kaphat egy kérésben. Ugyanakkor 6 szám paraméterként történő beállításával másodperc pontossággal adhatók meg. Ha csak 3 számot használ, akkor az órák, percek és másodpercek 0-ra állnak (a nap eleje). Például 2018. január első 10 napjára vonatkozó dokumentumokat kell kiválasztanunk a kérelemben:

SELECT Elszámolási számla nyugta.Ref AS Link FROM Dokumentum.Válassza az Elszámolási számla AS Nyugtát Elszámolási Számlára lehetőséget WHERE Nyugta az elszámolási számlára.Dátum DÁTUM IDŐ (2018, 1, 1, 0, 0, 0) ÉS DÁTUM, 1, 23 , 10

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 egy adott feladat dátumának formázását. Ha gyakran dolgozik dátumokkal egy lekérdezésben, akkor ismernie kell ezeket a parancsokat:

  • IDŐSZAK KEZDETE. Paraméterként a dátum és az időintervallum szerepel, amivel összefüggésben meg kell kapni a dátum elejét. A dátum időtlen formátummá alakítására szolgál. Ehhez be kell állítani a második paramétert - "DAY";
IDŐSZAK KEZDÉSE (,) IDŐSZAK KEZDÉSE (& 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;
  • ADDEDDATE. Lehetővé teszi, hogy nagyobb dátumot kapjon, mint előre meghatározott összeg meghatározott időegységek. A függvény paraméterei a dátum, az időegység és a szám;
ADDEDDATE (,) ADDEDATE (& Dátum, DAY, 10) count> type> date>
  • KÜLÖNBSÉG Lekérdezi a dátumok közötti különbséget a megadott egységekben;
KÜLÖNBSÉG DÁTUMA (,) KÜLÖNBSÉG DÁTUMA (& Date1, & Date2, DAY) type> date2> date1>
  • A HÉT NAPJA. A hét egyik napjának sorszámát adja vissza.

E függvények helyes alkalmazásával a fejlesztő meglehetősen nem triviális feladatokat tud megoldani. Például az aktuális dátum hét napjának nevének lekérdezése karakterláncként:

SELECT WHEN DAY WEEK (& CurrentDate) = 1 MAJD "Hétfő" WHEN DAY WEEK (& CurrentDate) = 2 THEN "Kedd" WHEN DAY WEEK (& CurrentDate) = 3 MAJD "Szerda" WHEN DAY WEEK Aktuális (és CurrentDate) = 4 THEN "DAY" = 5 MAJD "Péntek" WHEN DAY WEEK (& CurrentDate) = 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 fáradságos feladat. Számokból a DATE TIME függvény használatával kaphat dátumot, karakterláncból - az 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 az 1C kérésben paraméterként a virtuális regisztertáblákból való adatok lekéréséhez. A fenti funkciók mindegyike használható ebben a szerepkörben is. De itt fontos, hogy az 1C kérés üres dátuma ne befolyásolja végeredmény a kód végrehajtását, ezért feltétlenül ellenőrizze.

Egy bizonyos ponton szükség van a "Dátum" típusú változókkal való munkavégzésre. Ebben a cikkben az alapvető technikákat tekintjük át - az aktuális dátum átadása, üres érték ellenőrzése, tetszőleges dátum.

Lekérdezések írásakor gyakran szükséges az adatok összehasonlítása az aktuális dátummal. A beépített 1C nyelv rendelkezik CurrentDate () funkcióval. 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 átadni a kérésnek.

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

ExampleRequest = Új kérés;
PéldaRequest.Text = "
| VÁLASSZ
| Advance Report Attached Files.Link
| FROM
| Reference.AvailableReportAttachedFilesASA AdvanceReportAttachedFiles
| HOL
| Advance Report Attached Files.Date< &ТекДата»;
ExampleRequest.SetParameter ("CurrentDate", CurrentDate ());

Egyedi dátum

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

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.

Keretében ezt a példát 2016 végéig a költségelszámolásokhoz csatolt összes fájl megérkezik. Ebben a tekintetben feltüntetjük az órát, percet és másodpercet, hogy összehasonlíthassuk az időpillanattal „2016. december 31. 23:59:59”.

KIVÁLASZTÁS
Advance Report Attached Files.Link
TÓL TŐL
Directory.AvailableReportAttachedFiles AS AdvanceReportAttachedFiles
AHOL
Advance Report Attached Files.Date< ДАТАВРЕМЯ(2016, 12, 31, 23, 59, 59)

Üres dátum

A legegyszerűbb egyszerű összehasonlítással ellenőrizni, hogy egy változó tartalmaz-e üres dátumot. Ebben a példában egy lekérdezést fogunk használni az összes érkezés kiválasztásához Pénz olyan bankszámlákra, amelyeken még nem töltötték be a beérkezési dátumot.