Automatikus rendelés 1 másodperc alatt. Kis trükkök nagy kérésekhez
Figyelem! Ez a lecke bevezető változata, melynek anyagai hiányosak lehetnek.
Jelentkezzen be diákként az oldalra
Jelentkezzen be tanulóként az iskolai anyagok eléréséhez
Lekérdezési nyelv 1C 8.3 kezdő programozóknak: rendelés
Írjunk egy lekérdezést, amely a táblából származik Címtár.Ételélelmiszer kódja és neve:
SELECT Code, Name FROM Directory. Étel |
Mint mindig, futtassa ezt a kérést a számítógépén.
Valószínűleg a következő eredményt kapja:
Meglepődhet, de amikor így írunk le egy lekérdezést, senki sem garantálja, hogy pontosan ezt a sorrendet adjuk ki a táblázatban. Ha a kliens-szerver üzemmódot használjuk különböző DBMS-eken, az eredmény a következő lehet:
És... nos, általánosságban megérted, hogy ha nem adjuk meg a lekérdezés eredményének rendezési (sorrendi) sorrendjét, akkor ez a sorrend teljesen bármi lehet.
Ezért a lekérdezések írásakor jó ökölszabály, hogy a lekérdezés eredményeit akkor is sorrendbe állítsuk, ha ezt kifejezetten nem követeljük meg.
RENDELÉS szakaszonként
A mezők, amelyekben a kérést rendszerezni kell, szakaszokban vannak felsorolva RENDEZÉS vesszővel elválasztva:
A rendelési mező nevét két kulcsszó egyike követheti:
- WHO - növekvő sorrendbe rendezve.
- CSÖKKEN - rendezés csökkenő sorrendben.
Ha nem adja meg e szavak egyikét sem, a rendezés növekvő sorrendben történik.
Ismerettel felvértezve rendezzük lekérdezésünk eredményét csökkenő mezősorrendbe Kód:
Most rendezzük a következő táblázatot
hogy a rendezés először mező szerint történjen Íz növekvő, majd (az azonos mezőértékű sorok között Íz) mező szerinti rendezés folyamatban volt Szín Csökkenő:
SELECT Íz, színek a könyvtárból. Étel RENDELÉS ÍZLÉSRE. Név WHO, Szín. Név CSÖKKENTÉS |
Külön szeretném felhívni a figyelmet arra, hogy a rendezést nem a mezők szerint határoztuk meg ÍzÉs Szín,és húrrészleteik szerint Név. Ön a lecke próbaverzióját olvassa, a teljes leckék elérhetők.
Ez annak a ténynek köszönhető, hogy a rendezés csak az alábbi típusú mezők szerint lehetséges: Vonal, Szám, dátum.
És a mezők ÍzÉs Szín címtárelemekre mutató hivatkozások ÍzÉs Szín, a rendezésnek nincs értelme (ebben az esetben a rendezést a belső linkazonosító végzi). De rendezheti ezeknek az elemeknek az egyik részlete szerint. Esetünkben a legmegfelelőbb a string attribútum Név.
Automatikus rendezés lehetősége
Az AUTO ORDER kulcsszó lehetővé teszi a mezők automatikus generálását a lekérdezés eredményeinek rendszerezéséhez.
Most részletesen megismerkedünk ezzel a lehetőséggel, de azonnal szeretném megjegyezni, hogy az 1C cég módszertani ajánlásaiban nem javasolja ennek használatát, hacsak nem szükséges (ennek okairól beszélünk).
Akkor gyerünk.
Először is, az AUTO ORDER kulcsszó közvetlenül az ORDER BY rész után vagy helyett helyezhető el a lekérdezésben:
Az automatikus rendelés a következő elvek szerint működik:
1. eset
Ha a kérésben:
- van egy rész RENDELÉS
A címtártáblázatoknál az alapértelmezett rendezési mezők a kód és a név, amelyek közül a kiválasztás a konfigurátorban megadott címtárbeállításoknak megfelelően történik:
A bizonylattáblázatok esetében az alapértelmezett rendezési mező a bizonylat dátuma.
Nézzünk egy példát:
A rendezési mező óta Kedvenc szín típusa van Directory.Colors Név
2. eset
Ha a kérésben:
- de van egy EREDMÉNYRŐL SZÓLÓ rész (ezt végigmegyünk)
Ebben az esetben a lekérdezés eredménye az összes mező szerint lesz rendezve (ugyanabban a sorrendben).
3. eset
Ha a kérésben:
- hiányzik az ORDER BY szakasz
- hiányzik a SZOFTVEREREDMÉNYEK szakasz
- de van egy szakasz GROUP BY (átmentünk a csoportosításon)
Ebben az esetben a lekérdezés eredménye mezők csoportosítása szerint lesz rendezve (ugyanabban a sorrendben).
Nézzünk egy példát:
Mivel a csoportosítási mező Város típusa van Directory.Cities, amelynek beállításaiban a mező főnézetként van kiválasztva Név, akkor ez a lekérdezés egyenértékű a következővel:
4. eset
Végül, ha a kérésben:
- hiányzik az ORDER BY szakasz
- hiányzik a SZOFTVEREREDMÉNYEK szakasz
- hiányzik a GROUP BY szakasz
Ebben az esetben a lekérdezés eredménye a lekérdezésben megjelenő táblák alapértelmezett rendezési mezői szerint lesz rendezve, ahonnan az adatokat lekérjük.
Nézzünk egy példát:
Miért nem tanácsos az automatikus rendelés használata
Az automatikus rendelés alkalmas:
- univerzális lekérdezések esetén, amikor a fejlesztő nem tudja megjósolni, hogy mely táblákból fogják lekérdezni az adatokat
- azokra az esetekre, amikor a rekordok eredő sorrendje nem fontos, de a használt DBMS-től függetlenül azonosnak kell lennie
Minden más esetben nem célszerű az automatikus rendezés funkciót használni, mivel azok a mezők, amelyek ma rendezési mezők, holnap nem biztos, hogy azok lesznek.
Például ma már írhatunk olyan kódot, amely érzékeny arra, hogy egy lekérdezés eredménye a könyvtárból Étel mezők szerint rendezték Név.
És holnap az 1C cég (vagy egy másik fejlesztő) megváltoztatja az adatbázis beállításait a konfigurátorban úgy, hogy a címtár alapértelmezett rendezési mezője legyen Étel lesz például egy mező Kód. És ha a lekérdezésben automatikus rendezést használtunk, akkor a jelentésünk megszakad, mert más lesz a rendezési sorrend. Ön a lecke próbaverzióját olvassa, a teljes leckék elérhetők.
Ezért mindig próbáljon meg konkrét mezőket és azok meghatározott rendezési sorrendjét feltüntetni a részben RENDEZÉS, egy ilyen kérést már nem lehet megszegni egyszerűen így:
SELECT Code, Name FROM Directory. Ételek RENDELÉSE Név KOR SZERINT |
Csináld meg a tesztet
Indítsa el a tesztet
1. Alapértelmezés szerint a lekérdezések eredményei sorrendben vannak
2. A lekérdezések eredményei a szerint rendezhetők
3. "ORDER BY FIELD_NAME" rendelések szerint
4. A ORDER BY részben növekvő sorrendben történő rendezéshez meg kell adni a mező nevét és a kulcsszót
5. Ha csökkenő sorrendbe szeretne rendezni a ORDER BY részben, meg kell adnia a mező nevét és a kulcsszót
6. Lekérdezésekben lehetséges az automatikus rendelés
A lekérdezési nyelv az 1C 8.3 egyik alapvető mechanizmusa a fejlesztők számára. Lekérdezések segítségével gyorsan lekérheti az adatbázisban tárolt adatokat. Szintaxisa nagyon hasonlít az SQL-hez, de vannak eltérések.
Az 1C 8.3 (8.2) lekérdező nyelv fő előnyei az SQL-lel szemben:
- hivatkozási mezők hivatkozásának megszüntetése (egy vagy több pont hivatkozása az objektum részleteire);
- az eredményekkel dolgozni nagyon kényelmes;
- virtuális táblák létrehozásának képessége;
- a kérelmet angolul és oroszul is meg lehet írni;
- az adatok blokkolásának képessége a holtpontok elkerülése érdekében.
A lekérdezési nyelv hátrányai az 1C-ben:
- az SQL-től eltérően az 1C lekérdezések nem teszik lehetővé az adatok megváltoztatását;
- a tárolt eljárások hiánya;
- egy karakterlánc számmá alakításának lehetetlensége.
Vessünk egy pillantást az 1C lekérdezési nyelv alapvető konstrukcióiról szóló mini oktatóanyagunkra.
Tekintettel arra, hogy az 1C-ben a lekérdezések csak adatok fogadását teszik lehetővé, minden lekérdezésnek a „SELECT” szóval kell kezdődnie. A parancs után megjelennek azok a mezők, amelyekből adatokat kell beszerezni. Ha „*”-t ad meg, az összes elérhető mező ki lesz jelölve. A „FROM” szó után megjelenik az a hely, ahonnan az adatok kiválasztásra kerülnek (dokumentumok, nyilvántartások, címtárak stb.).
Az alábbiakban tárgyalt példában a teljes nómenklatúra nevei a „Nómenklatúra” könyvtárból vannak kiválasztva. A „HOGYAN” szó után a táblázatok és mezők álnevei (nevei) láthatók.
VÁLASZT
Nómenklatúra Név AS A nómenklatúra neve
TÓL TŐL
Directory.Nomenclature AS Nómenklatúra
A „SELECT” parancs mellett kulcsszavakat adhat meg:
- KÜLÖNFÉLE. A lekérdezés csak azokat a sorokat jelöli ki, amelyek legalább egy mezőben különböznek egymástól (ismétlődések nélkül).
- ELSŐ n, Ahol n– az eredmény elejétől a kiválasztandó sorok száma. Leggyakrabban ezt a konstrukciót a válogatással együtt használják (ORDER BY). Például, ha bizonyos számú, dátum szerint friss dokumentumot kell kiválasztania.
- ENGEDÉLYEZVE. Ez a kialakítás lehetővé teszi, hogy az adatbázisból csak azokat a rekordokat válasszuk ki, amelyek az aktuális felhasználó számára elérhetőek. A kulcsszó használata alapján a felhasználó hibaüzenetet kap, amikor olyan rekordokat próbál lekérdezni, amelyekhez nem fér hozzá.
Ezek a kulcsszavak együtt vagy külön-külön is használhatók.
VÁLTOZÁSRA
Ez a javaslat blokkolja az adatokat a kölcsönös konfliktusok elkerülése érdekében. A zárolt adatok nem kerülnek beolvasásra másik kapcsolatból a tranzakció befejezéséig. Ebben a záradékban megadhat bizonyos táblákat, amelyeket zárolni kell. Ellenkező esetben mindenki blokkolva lesz. A kialakítás csak az automatikus zárolási módra vonatkozik.
Leggyakrabban a „FOR CHANGE” záradékot használják egyenlegek fogadásakor. Hiszen ha több felhasználó dolgozik egyidejűleg a programban, miközben az egyik egyenleget kap, egy másik módosíthatja azokat. Ebben az esetben a kapott maradék már nem lesz helyes. Ha ezzel a javaslattal blokkolja az adatokat, addig amíg az első alkalmazott meg nem kapja a megfelelő egyenleget és el nem végez vele minden szükséges manipulációt, addig a második dolgozó kénytelen várakozni.
VÁLASZT
Kölcsönös elszámolások. Munkavállaló,
Kölcsönös elszámolások Kölcsönös elszámolások összege Egyenleg
TÓL TŐL
Felhalmozási nyilvántartás Kölcsönös elszámolások alkalmazottakkal Egyenlegek AS Kölcsönös elszámolások
VÁLTOZÁSRA
AHOL
A tervezésre azért van szükség, hogy valamilyen szelekciót kényszerítsünk a feltöltött adatokra. A regiszterekből történő adatok beszerzésének egyes esetekben ésszerűbb kiválasztási feltételeket megadni a virtuális táblák paramétereiben. A "WHERE" használatakor először minden rekord lekérésre kerül, és csak ezután történik a kijelölés, ami jelentősen lelassítja a lekérdezést.
Az alábbiakban egy példa látható egy kapcsolattartó személy megszerzésére irányuló kérelemre egy adott pozícióhoz. A kiválasztási paraméter formátuma: &ParameterName (a paraméter neve tetszőleges).
KIVÁLASZTÁS (CASE)
A kialakítás lehetővé teszi, hogy a feltételeket közvetlenül a kérelem törzsében adjon meg.
Az alábbi példában a „További mező” szöveget tartalmaz attól függően, hogy a dokumentum fel van-e küldve vagy sem:
VÁLASZT
BelépőT&U.Link,
VÁLASZTÁS
MIKOR a felvételiT&U.Végzett
AKKOR „A dokumentumot elfogadták!”
EGYÉB „A dokumentum nem került feladásra...”
VÉGE MINT Kiegészítő mező
TÓL TŐL
Dokumentum Áruk és szolgáltatások átvétele HOGYAN Átvételi feltételek
CSATLAKOZIK
A csatlakozások két asztalt kötnek össze bizonyos feltétel kommunikáció.
BAL/JOBB CSATLAKOZTATÁS
A LEFT join lényege, hogy az első megadott táblát teljes egészében felvesszük, a másodikat pedig a kapcsolódási feltételnek megfelelően csatoljuk hozzá. Ha a másodikban nincsenek az első táblának megfelelő rekordok, akkor ezek értéke NULL lesz. Egyszerűen fogalmazva, a fő tábla az első megadott tábla, és a második tábla adatai (ha vannak ilyenek) már ki vannak cserélve annak adataira.
Például az árucikkeket az „Áruk és szolgáltatások átvétele” bizonylatokból, az árakat pedig a „Cikkárak” információs nyilvántartásból kell beszerezni. Ebben az esetben, ha valamelyik pozíció ára nem található, cserélje ki helyette a NULL értéket. A dokumentum összes eleme ki lesz választva, függetlenül attól, hogy van-e ára vagy sem.
VÁLASZT
Nyugta és U. Nómenklatúra,
Árak. Ár
TÓL TŐL
Dokumentum Áruk és szolgáltatások átvétele Áruk HOGYAN Átvétel és specifikációk
BELSŐ CSATLAKOZÁS RegisztrációInformation.PricesNomenclature.SliceLast AS Árak
Software Receipt&U.Nomenclature = Prices.Nomenclature
JOBBAN minden pontosan az ellenkezője.
TELJES KAPCSOLAT
Ez a kapcsolattípus abban különbözik a korábbiaktól, hogy ennek eredményeként mind az első, mind a második tábla összes rekordja visszakerül. Ha a megadott hivatkozási feltétel alapján nem található rekord az első vagy a második táblában, akkor a rendszer NULL értéket ad vissza.
Amikor az előző példában használjuk teljes kapcsolat Az „Áruk és szolgáltatások átvétele” bizonylatban szereplő összes tétel, valamint a „Cikkárak” nyilvántartásból a legfrissebb árak kerülnek kiválasztásra. A nem található rekordok értéke mind az első, mind a második táblában NULL lesz.
BELSŐ ÖSSZEKAPCSOLÁS
Az INNER JOIN és a FULL JOIN között az a különbség, hogy ha egy rekord nem található legalább az egyik táblában, akkor a lekérdezés egyáltalán nem jeleníti meg. Ennek eredményeként az „Áru és szolgáltatás átvétele” bizonylatból csak azok a tételek kerülnek kiválasztásra, amelyekre a „Cikkárak” információs nyilvántartásban vannak bejegyzések, ha az előző példában a „TELJES” szót „BELSŐ”-re cseréljük.
CSOPORTOSÍT
Az 1C lekérdezésekben történő csoportosítás lehetővé teszi a táblasorok összecsukását (mezők csoportosítását) egy adott meghatározottság szerint. közös tulajdonság(csoportosított mezők). A csoportosító mezők csak összesítő függvényekkel jeleníthetők meg.
A következő lekérdezés eredménye a terméktípusok listája lesz, a hozzájuk tartozó maximális árakkal.
VÁLASZT
,
MAX(Ár.Ár) AS Ár
TÓL TŐL
CSOPORTOSÍT
Árak.Nómenklatúra.Nómenklatúra típusa
EREDMÉNYEK
A csoportosítással ellentétben az összegek használatakor az összes rekord megjelenik, és az összesített sorok hozzáadódnak hozzájuk. A csoportosítás csak az általánosított rekordokat jeleníti meg.
Az eredmények összegezhetők a teljes táblázatra (az „Általános” kulcsszó használatával), több mezőre, hierarchikus felépítésű mezőkre (kulcsszavak „HIERARCHIA”, „CSAK HIERARCHIA”). Az eredmények összegzésekor nem szükséges aggregált függvényeket használni.
Nézzünk egy, a fenti példához hasonló példát csoportosítással. Ebben az esetben a lekérdezés eredménye nem csak csoportosított mezőket ad vissza, hanem részletes rekordokat is.
VÁLASZT
Prices.Nomenclature.Type of Nomenclature AS A nómenklatúra típusa,
Árak.Ár AS ár
TÓL TŐL
Információk nyilvántartása. Nómenklatúra árai. Pillanatkép a legújabb AS árakról
EREDMÉNYEK
MAXIMUM (ár)
ÁLTAL
TípusNómenklatúra
HAVING
Ez az operátor hasonló a WHERE operátorhoz, de csak összesített függvényekhez használatos. A többi mezőt, kivéve azokat, amelyeket ez az operátor használ, csoportosítani kell. A WHERE operátor nem alkalmazható az összesített függvényekre.
Az alábbi példában egy cikk maximális árai vannak kiválasztva, ha azok meghaladják az 1000-et, cikktípus szerint csoportosítva.
VÁLASZT
MAX(Ár.Ár) AS Ár
TÓL TŐL
Információk nyilvántartása. Nómenklatúra árai. Pillanatkép a legújabb AS árakról
CSOPORTOSÍT
Árak.Nómenklatúra.Nómenklatúra típusa
HAVING
MAXIMUM(Árak.Ár) > 1000
RENDEZÉS
Az ORDER BY operátor rendezi a lekérdezés eredményét. Annak biztosítására, hogy a rekordok következetes sorrendben jelenjenek meg, az AUTO ORDER használatos. A primitív típusokat a szokásos szabályok szerint rendezzük. A referenciatípusok GUID szerint vannak rendezve.
Példa az alkalmazottak név szerint rendezett listájára:
VÁLASZT
Alkalmazottak.Name AS Név
TÓL TŐL
Directory.Employees HOGYAN Alkalmazottak
RENDEZÉS
Név
AUTOMATIKUS RENDELÉS
Egyéb 1C lekérdezési nyelvi konstrukciók
- KOMBÁJN– két lekérdezés eredménye egybe.
- ÖSSZE MINDENT– hasonló a COMBINE-hoz, de az azonos sorok csoportosítása nélkül.
- ÜRES ASZTAL– néha használják lekérdezések összekapcsolásakor egy üres beágyazott tábla megadására.
- HELY– ideiglenes táblát hoz létre az összetett 1C lekérdezések optimalizálásához. Az ilyen kéréseket kötegelt kéréseknek nevezzük.
Lekérdezési nyelv jellemzői
- SUBSTRING egy karakterláncot adott pozícióból meghatározott számú karakterre csonkol.
- ÉV...MÁSODIK lehetővé teszi egy numerikus típus kiválasztott értékének lekérését. A beviteli paraméter a dátum.
- IDŐSZAK KEZDETE és IDŐSZAK VÉGE dátumokkal való munka során használják. Az időszak típusa (NAP, HÓNAP, ÉV stb.) kiegészítő paraméterként van feltüntetve.
- ADDKDATE lehetővé teszi egy bizonyos típusú meghatározott időpont hozzáadását vagy kivonását egy dátumból (MÁSODPERC, PERC, NAP stb.).
- KÜLÖNBSÉG meghatározza két dátum közötti különbséget, jelezve a kimeneti érték típusát (NAP, ÉV, HÓNAP stb.).
- NULLA lecseréli a hiányzó értéket a megadott kifejezésre.
- KÉPVISELÉS és KÉPVISELŐLINKEK megkapja a megadott mező karakterlánc-ábrázolását. Alkalmazzon bármilyen értékre és csak referenciaértékre.
- TÍPUS, TÍPUS ÉRTÉKEK a bemeneti paraméter típusának meghatározására szolgálnak.
- LINK egy logikai összehasonlító operátor az attribútum érték típusához.
- EXPRESSZérték konvertálására szolgál a kívánt típusra.
- DÁTUM IDŐ„Dátum” típusú értéket kap numerikus értékekből (év, hónap, nap, óra, perc, másodperc).
- JELENTÉS az 1C kérésben előre meghatározott értékek jelzésére szolgál - könyvtárak, felsorolások, a jellemzők típusaira vonatkozó tervek. Használati példa: " Ahol jogi személy = érték (felsorolás. Jogi személy. Magánszemély)«.
Lekérdezéskészítő
Az 1C segítségével lekérdezések létrehozásához van egy nagyon kényelmes beépített mechanizmus - a lekérdezéstervező. A következő fő lapokat tartalmazza:
- „Táblázatok és mezők” – tartalmazza a kiválasztandó mezőket és azok forrásait.
- „Kapcsolatok” – a CONNECTION struktúra feltételeit írja le.
- „Csoportosítás” – a csoportosítási struktúrák leírását és az ezek alapján összegzett mezőket tartalmazza.
- „Feltételek” - felelős a kérelemben szereplő adatok kiválasztásáért.
- „Speciális” – további lekérdezési paraméterek, például kulcsszavak a „SELECT” parancshoz stb.
- „Joins/Aliases” – a táblák összekapcsolásának lehetőségei meg vannak jelölve és az álnevek megadva (a „HOGYAN” konstrukció).
- A „Rendelés” felelős a lekérdezések eredményének rendezéséért.
- „Összesen” – hasonló a „Csoportosítás” laphoz, de a „TOTALS” konstrukcióhoz használatos.
Maga a kérelem szövege a bal alsó sarokban található „Kérés” gombra kattintva tekinthető meg. Ebben a formában manuálisan javítható vagy másolható.
Konzol kérése
Egy lekérdezés eredményének Vállalati módban gyors megtekintéséhez vagy az összetett lekérdezések hibakereséséhez használja a . Tartalmazza a kérés szövegét, beállítja a paramétereket és megjeleníti az eredményt.
A lekérdezési konzolt letöltheti az ITS lemezről, vagy a webhelyről.
Az 1C 8 lekérdezési nyelve a jól ismert „strukturált programozási nyelv” (ahogyan gyakrabban nevezik, SQL) egyszerűsített analógja. De az 1C-ben csak adatok olvasására használják; egy objektum adatmodellt használnak az adatok megváltoztatására.
Egy másik érdekes különbség az orosz szintaxis. Bár valójában használhat angol nyelvű konstrukciókat.
Példa kérés:
VÁLASZT
Banks.Name,
Bankok.CorrSzámla
TÓL TŐL
Directory.Banks HOGYAN Bankok
Ez a kérés lehetővé teszi számunkra, hogy információkat lássunk az adatbázisban szereplő összes bank nevéről és levelező számlájáról.
A lekérdező nyelv a legegyszerűbb és hatékony módszer információszerzés. Ahogy a fenti példából is látható, a lekérdezési nyelvben metaadatneveket kell használni (ez a konfigurációt alkotó rendszerobjektumok listája, azaz könyvtárak, dokumentumok, regiszterek stb.).
A lekérdező nyelvi konstrukciók leírása
Lekérdezés szerkezete
Az adatok megszerzéséhez elegendő a „SELECT” és „FROM” konstrukciók használata. A legegyszerűbb kérés így néz ki:
SELECT * FROM Könyvtárak.Nómenklatúra
Ahol a „*” a tábla összes mezőjének kijelölését jelenti, a Directories.Nomenclature pedig a tábla neve az adatbázisban.
Nézzünk egy összetettebb és általánosabb példát:
VÁLASZT
<ИмяПоля1>HOGYAN<ПредставлениеПоля1>,
Összeg(<ИмяПоля2>) HOGYAN<ПредставлениеПоля2>
TÓL TŐL
<ИмяТаблицы1>HOGYAN<ПредставлениеТаблицы1>
<ТипСоединения>ÖSSZETETT<ИмяТаблицы2>HOGYAN<ПредставлениеТаблицы2>
ÁLTAL<УсловиеСоединениеТаблиц>AHOL
<УсловиеОтбораДанных>CSOPORTOSÍT
<ИмяПоля1>RENDEZÉS
<ИмяПоля1>EREDMÉNYEK
<ИмяПоля2>
ÁLTAL
<ИмяПоля1>
Ebben a lekérdezésben kiválasztjuk a „Táblázatnév1” és a „Táblázatnév1” mezők adatait, a „HOGYAN” operátor segítségével szinonimákat rendelünk a mezőkhöz, és egy bizonyos „TáblázatKapcsolódási Feltétel” feltétellel összekapcsoljuk őket. ”.
A beérkezett adatok közül csak azokat az adatokat választjuk ki, amelyek megfelelnek a „HOL” „Adatkiválasztási feltétel” feltételnek, majd a „Mezőnév1” mezőben csoportosítjuk a kérelmet, miközben összegezzük a „Mezőnév2” mezőt. „Mezőnév1” és az utolsó mező „Mezőnév2”.
Az utolsó lépés a kérés rendezése az ORDER BY konstrukcióval.
Általános tervek
Mérlegeljük általános tervek Lekérdezési nyelv 1C 8.2.
ELSŐn
Ezzel az operátorral n számú első rekordot kaphat. A rekordok sorrendjét a lekérdezés sorrendje határozza meg.
ELSŐ 100 KIVÁLASZTÁSA
Banks.Name,
Bankok. Kód AS BIC
TÓL TŐL
Directory.Banks HOGYAN Bankok
RENDEZÉS
Bankok.Név
A kérelem megkapja a „Bankok” könyvtár első 100 bejegyzését, ábécé sorrendben.
ENGEDÉLYEZVE
Ez a kialakítás releváns a mechanizmussal való munka során. A mechanizmus lényege, hogy az adatbázistábla egyes rekordjainak olvasását (és egyéb műveleteit) a felhasználókra korlátozza, nem pedig a tábla egészét.
Ha a felhasználó egy lekérdezéssel próbálja beolvasni a számára elérhetetlen rekordokat, hibaüzenetet kap. Ennek elkerülése érdekében használja az „ALOWED” konstrukciót, azaz a kérés csak azokat a rekordokat olvassa be, amelyek számára engedélyezett.
ENGEDÉLYEZETT KIVÁLASZTÁS
További információk tárháza Link
TÓL TŐL
Directory.Repository of Kiegészítő információk
KÜLÖNFÉLE
A „DIFFERENT” használata megakadályozza, hogy ismétlődő sorok kerüljenek be az 1C lekérdezés eredményébe. A duplikáció azt jelenti, hogy minden kérésmező egyezik.
ELSŐ 100 KIVÁLASZTÁSA
Banks.Name,
Bankok. Kód AS BIC
TÓL TŐL
Directory.Banks HOGYAN Bankok
EmptyTable
Ezt a konstrukciót nagyon ritkán használják a lekérdezések kombinálására. Csatlakozáskor előfordulhat, hogy meg kell adnia egy üres beágyazott táblát az egyik táblában. Az „EmptyTable” operátor erre pont megfelelő.
Példa az 1C 8 súgóból:
KIVÁLASZTÁS Link.Szám, ÜRES TÁBLÁZAT.(szám, cikk, mennyiség) AS Összetétel
FROM Dokumentum.Költségszámla
ÖSSZE MINDENT
SELECT Link.Number, Contents. (sorszám, termék, mennyiség)
FROM Dokumentum.Számla bizonylat.Számla.Összetétel.*
NULLA
Nagyon hasznos funkció, amellyel sok hibát elkerülhet. A YesNULL() lehetővé teszi a NULL érték lecserélését a kívánt értékre. Nagyon gyakran használják egy érték jelenlétének ellenőrzésére az egyesített táblákban, például:
VÁLASZT
Nómenklatúra hivatkozási hivatkozása,
IsNULL(Fennmaradó tétel.Fennmaradó mennyiség,0) AS Maradék mennyiség
TÓL TŐL
Más módon is használható. Például, ha az egyes soroknál nem ismert, hogy melyik táblában található az érték:
ISNULL(Számlabevétel dátuma, Számlakiállítás dátuma)
A HOW egy operátor, amely lehetővé teszi, hogy nevet (szinonimát) rendeljünk egy táblához vagy mezőhöz. A fenti felhasználási példát láttuk.
Ezek a konstrukciók nagyon hasonlóak – lehetővé teszik karakterlánc-ábrázolás elérését kívánt értéket. Az egyetlen különbség az, hogy a REPRESENTATION bármilyen értéket karakterlánctípussá alakít, míg a REPRESENTATIONREF csak referenciaértékeket. A REFERENCIA ÁBRÁZOLÁS használata javasolt az adatösszetétel rendszerlekérdezéseknél optimalizálás céljából, kivéve, ha természetesen a referencia adatmezőt tervezik használni a kijelöléseknél.
VÁLASZT
View(Link), //karakterlánc, például „123. számú előzetes jelentés, 2015.10.10.
View(DeletionMark) AS DeleteMarkText, //string, "Yes" vagy "No"
ViewReferences(DeletionMark) AS DeleteMarkBoolean //boolean, igaz vagy hamis
TÓL TŐL
Document.Advance Report
EXPRESSZ
Az Express lehetővé teszi a mezőértékek konvertálását a kívánt adattípusra. Egy értéket primitív típusra vagy referenciatípusra konvertálhat.
Az Express egy referenciatípushoz a kért adattípusok korlátozására szolgál összetett típusú mezőkben, gyakran a rendszer teljesítményének optimalizálására. Példa:
EXPRESS(TableCost.Subconto1 AS Directory.Cost Items).Tevékenység típusa Adókönyvelési költségekhez
Primitív típusoknál ezt a függvényt gyakran használják a karakterek számának korlátozására a korlátlan hosszúságú mezőkben (az ilyen mezőket nem lehet összehasonlítani). A hiba elkerülése érdekében" Érvénytelen paraméterek az összehasonlítási műveletben. A mezőket nem lehet összehasonlítani
korlátlan hosszúság és nem kompatibilis típusú mezők", az ilyen mezőket a következőképpen kell kifejeznie:
EXPRESS (Megjegyzés AS sor (150))
KÜLÖNBSÉG
Szerezzen ingyen 267 videóleckét 1C-n:
Példa az IS NULL használatára egy 1C kérésben:
VÁLASSZ
Ref
BAL KAPCSOLAT Regisztráció Accumulations.ProductsInWarehouses.Remaining AS Product Remaining
Software NomenclatureRef.Link = Eladott áruk bizottságaiRemains.Nomenclature
AHOL NINCS A FELÉPÍTETT termékek. A fennmaradó mennyiség NULL
A lekérdezésben lévő adattípust a TYPE() és VALUETYPE() függvényekkel, vagy a logikai REFERENCE operátorral határozhatjuk meg. A két funkció hasonló.
Előre meghatározott értékek
Amellett, hogy az 1C lekérdezési nyelven az átadott paramétereket használja a lekérdezésekben, használhat előre meghatározott értékeket vagy . Például átutalások, előre definiált könyvtárak, számlatáblázatok stb. Ehhez a „Value()” konstrukciót használjuk.
Használati példa:
WHERE Nómenklatúra.Nómenklatúra típusa = Érték(Könyvtár.Nómenklatúra típusai.Termék)
WHERE Partnerek. Kapcsolatfelvételi adatok típusa = Érték (Felsorolás. Kapcsolatfelvételi adatok típusai. Telefon)
WHERE Számlaegyenlegek.Számviteli számla = Érték (Számladiagram.Nyereség.Veszteség)
Kapcsolatok
4 típusú kapcsolat létezik: BAL, JOBB, TELJES, BELSŐ.
BAL és JOBB CSATLAKOZTATÁS
Az összekapcsolások két tábla összekapcsolására szolgálnak egy adott feltétel alapján. Jellemző: mikor BAL CSATLAKOZÁS az, hogy az első megadott táblát teljes egészében vesszük, és feltételesen kötjük a második táblát. A második tábla mezői, amelyeket nem lehetett feltételhez kötni, az értékkel kitöltésre kerülnek NULLA.
Például:
A Partnerek teljes táblázatát visszaadja, és a „Bank” mezőt csak azokon a helyeken tölti ki, ahol a „Counterparts.Name = Banks.Name” feltétel teljesül. Ha a feltétel nem teljesül, a Bank mező értéke lesz NULLA.
JOBB CSATLAKOZÁS 1C nyelven abszolút hasonló BAL kapcsolat, egy különbség kivételével - in CSATLAKOZÁSI JOGA A „fő” táblázat a második, nem az első.
TELJES KAPCSOLAT
TELJES KAPCSOLAT abban különbözik a balról és a jobbról, hogy két táblából jeleníti meg az összes rekordot, és csak azokat kapcsolja össze, amelyeket feltétel szerint össze tud kötni.
Például:
TÓL TŐL
TELJES KAPCSOLAT
Directory.Banks HOGYAN BankokÁLTAL
A lekérdezési nyelv csak akkor adja vissza mindkét táblát teljesen, ha a rekordok összekapcsolásának feltétele teljesül. A bal/jobb összekapcsolással ellentétben a NULL két mezőben is megjelenhet.
BELSŐ ÖSSZEKAPCSOLÁS
BELSŐ ÖSSZEKAPCSOLÁS abban különbözik a teljestől, hogy csak azokat a rekordokat jeleníti meg, amelyeket adott feltétel szerint össze lehetett kapcsolni.
Például:
TÓL TŐL
Címtár. Partnerek AS ügyfelekBELSŐ ÖSSZEKAPCSOLÁS
Directory.Banks HOGYAN BankokÁLTAL
Clients.Name = Banks.Name
Ez a lekérdezés csak azokat a sorokat adja vissza, amelyekben a bank és a partner neve megegyezik.
Egyesületek
A JOIN és JOIN ALL konstrukciók két eredményt egyesítenek eggyé. Azok. a kettő előadásának eredménye „összeolvad” egy, közösbe.
Vagyis a rendszer pontosan ugyanúgy működik, mint a hagyományosak, csak ideiglenes tábla esetén.
Az INDEX BY használata
Egy szempontot azonban figyelembe kell venni. Az index felépítése egy ideiglenes táblán szintén időt vesz igénybe. Ezért csak akkor célszerű a „ ” konstrukciót használni, ha biztosan tudjuk, hogy az ideiglenes táblában 1-2 rekordnál több lesz. Ellenkező esetben a hatás ellentétes lehet – az indexelt mezők teljesítménye nem kompenzálja az index felépítéséhez szükséges időt.
VÁLASZT
Valuta árfolyamok Legújabb keresztmetszet. Currency AS valuta,
Valuta árfolyamok Legújabb keresztmetszet.
PUT valutaárfolyamok
TÓL TŐL
Információk nyilvántartása.Devizaárfolyamok.Utolsó szelet(&időszak,) AS valutaárfolyamokUtolsó szelet
INDEX BY
Valuta
;
VÁLASZT
ÁrakNómenklatúra.Nómenklatúra,
ÁrakNómenklatúrák. Ár,
ÁrakNómenklatúrák. Pénznem,
Valuta árfolyamok. Árfolyam
TÓL TŐL
Információk nyilvántartás.Nómenklatúra Árak.Utolsó szelet(&időszak,
B nómenklatúra (&Nómenklatúra) ÉS PriceType = &PriceType) AS árnómenklatúra
BAL CSATLAKOZÁS A valutaárfolyamok AS valutaárfolyamok
SzoftverárakNomenclatures.Currency = Valuta árfolyamok.Pénznem
Csoportosítás
Az 1C lekérdezési nyelv lehetővé teszi speciális összesítő függvények használatát a lekérdezési eredmények csoportosítása során. A csoportosítás összesítő függvények nélkül is használható a duplikációk „kiküszöbölésére”.
A következő funkciók léteznek:
Összeg, Mennyiség, Különböző darabok száma, Maximum, Minimum, Átlag.
1. példa:
VÁLASZT
Áruk és szolgáltatások értékesítése. Nómenklatúra,
SUM (Sales of GoodsServicesGoods. Quantity) AS Mennyiség,
SUM (Sales of Goods ServicesGoods.Amount) AS Amount
TÓL TŐL
CSOPORTOSÍT
Áruk és szolgáltatások értékesítése, áruk. Nómenklatúra
A kérés megkapja az összes árut tartalmazó sort, és mennyiségenként és tételenként összegzi azokat.
2. példa
VÁLASZT
Banks.Code,
MENNYISÉG (KÜLÖNBÖZŐ Bankok.Link) Másodpéldányok számaként
TÓL TŐL
Directory.Banks HOGYAN Bankok
CSOPORTOSÍT
Bankok.Kód
Ez a példa megjeleníti a BIC-ek listáját a „Bankok” könyvtárban, és megmutatja, hogy mindegyikhez hány ismétlődés létezik.
Eredmények
Az eredmények egy hierarchikus felépítésű rendszerből származó adatok beszerzésének módja. Az összesítő függvények az összefoglaló mezőkhöz, akárcsak a csoportosításokhoz használhatók.
Az eredmények gyakorlati felhasználásának egyik legnépszerűbb módja az áruk kötegelt leírása.
VÁLASZT
TÓL TŐL
Dokumentum. Áruk és szolgáltatások értékesítése. Áruk HOGYAN kell árukat és szolgáltatásokat árusítani
RENDEZÉS
EREDMÉNYEK
SZUM (mennyiség),
SUM(összeg)
ÁLTAL
Elnevezéstan
A lekérdezés eredménye a következő hierarchikus sorrendben lesz:
Általános eredmények
Ha az összes „összeg” összegét szeretné lekérni, használja az „Általános” operátort.
VÁLASZT
Áruk és szolgáltatások értékesítése, áruk. Nómenklatúra AS Nómenklatúra,
Áruk és szolgáltatások értékesítése. Link AS dokumentum,
Áruk és szolgáltatások értékesítése. Mennyiség AS Mennyiség,
Áruk és szolgáltatások áruk értékesítése. Összeg
TÓL TŐL
Dokumentum. Áruk és szolgáltatások értékesítése. Áruk HOGYAN kell árukat és szolgáltatásokat árusítani
RENDEZÉS
Áruk és szolgáltatások értékesítése. Link. Dátum
EREDMÉNYEK
SZUM (mennyiség),
SUM(összeg)
ÁLTAL
GYAKORIAK,
Elnevezéstan
A kérés teljesítésének eredményeként a következő eredményt kapjuk:
Amelyben a csoportosítás 1 szintje az összes szükséges mező összesítése.
Elrendezés
Az ORDER BY operátor a lekérdezés eredményének rendezésére szolgál.
A primitív típusok (karakterlánc, szám, logikai érték) rendezése a szokásos szabályok szerint történik. A hivatkozási típusú mezők esetében a rendezés a hivatkozás belső reprezentációja (az egyedi azonosító) alapján történik, nem pedig kód vagy hivatkozási reprezentáció alapján.
VÁLASZT
TÓL TŐL
Directory.Nomenclature AS Nómenklatúra
RENDEZÉS
Név
A kérés megjeleníti a nevek listáját a nómenklatúra könyvtárában, ábécé sorrendben.
Automatikus rendelés
A rendezés nélküli lekérdezés eredménye egy kaotikusan bemutatott sorhalmaz. Az 1C platform fejlesztői nem garantálják, hogy a sorok ugyanabban a sorrendben jelennek meg, amikor azonos lekérdezéseket hajtanak végre.
Ha állandó sorrendben kell megjelenítenie a táblarekordokat, akkor az Auto-Order konstrukciót kell használnia.
VÁLASZT
Nomenklatúra.Név AS Név
TÓL TŐL
Directory.Nomenclature AS Nómenklatúra
AUTOMATIKUS RENDELÉS
Virtuális asztalok
Az 1C virtuális táblái az 1C lekérdezési nyelv olyan egyedi jellemzői, amelyek más hasonló szintaxisokban nem találhatók meg. Virtuális asztal – gyors út profilinformációk beszerzése a nyilvántartásokból.
Minden regisztertípushoz saját virtuális táblakészlet tartozik, amely a regiszterbeállításoktól függően eltérő lehet.
- az első vágása;
- vágás az utóbbiból.
- maradék;
- forradalmak;
- egyenlegek és forgalom.
- mozgások a subconto-ból;
- forradalmak;
- sebesség Dt Kt;
- maradék;
- egyenlegek és forgalom
- subconto.
- bázis;
- grafikon adatok;
- tényleges érvényességi ideje.
A megoldásfejlesztő számára az adatokat egy (virtuális) táblából veszik, de valójában az 1C platform sok táblát vesz át, átalakítva azokat a kívánt formába.
VÁLASZT
A raktárban lévő termékek Maradékok és forgalom. Nómenklatúra,
ProductsInWarehousesRemainingAndTurnover.QuantityInitialRemaining,
ProductsInWarehousesRemainsAndTurnover.QuantityTurnover,
GoodsInWarehousesRemainsAndTurnover.QuantityIncoming,
GoodsInWarehousesRemainsAndTurnover.QuantityConsumption,
TermékekRaktárbanMaradékokÉsForgalom.MennyiségFennalmaradék
TÓL TŐL
Regisztráció Accumulations.GoodsInWerehouses.RemainsAndover AS GoodsInRaktárakMaradékokÉsForgalomEz a lekérdezés lehetővé teszi nagy mennyiségű adat gyors lekérését.
Virtuális asztal opciók
A virtuális táblákkal való munka során nagyon fontos szempont a paraméterek használata. A virtuális tábla paraméterei speciális paraméterek a kiválasztáshoz és a konfigurációhoz.
Az ilyen táblázatok esetében helytelennek tekinthető a „WHERE” konstrukcióban történő kijelölés használata. Amellett, hogy a lekérdezés nem lesz optimális, lehetőség van hibás adatok fogadására.
Példa ezen paraméterek használatára:
Felhalmozási nyilvántartás. Áruk a raktárakban. Egyenlegek és forgalom (& az időszak eleje és az időszak vége, hónap, az időszak mozgásai és határai, nómenklatúra = & kötelező nómenklatúra)
Algoritmus virtuális táblákhoz
Például a leggyakrabban használt „Maradék” típusú virtuális tábla két fizikai tábla – egyenlegek és mozgások – adatait tárolja.
Virtuális tábla használatakor a rendszer a következő műveleteket hajtja végre:
- A dátum és a mérések alapján a legközelebbi számított értéket az összegtáblázatban kapjuk.
- A mozgástáblázatból származó összeget „hozzáadjuk” a végösszegek táblázatának összegéhez.
Az ilyen egyszerű műveletek jelentősen javíthatják a rendszer egészének teljesítményét.
A Lekérdezéskészítő használata
Lekérdezéskészítő– az 1C Enterprise rendszerbe épített eszköz, amely nagyban megkönnyíti az adatbázis-lekérdezések fejlesztését.
A lekérdezéskészítő meglehetősen egyszerű, intuitív felülettel rendelkezik. Ennek ellenére nézzük meg részletesebben a lekérdezéskonstruktor használatát.
A lekérdező szöveg konstruktor a helyi menüből (jobb egérgomb) indul el a programkód kívánt helyén.
Az 1C kérelem konstruktor leírása
Nézzük meg részletesebben a tervező egyes lapjait. A kivétel a Builder lap, amely egy másik beszélgetés témája.
Táblázatok és mezők lap
Ez a lap határozza meg a jelentésben megjelenítendő adatforrást és mezőket. Lényegében a SELECT.. FROM konstrukciókat ismertetjük itt.
A forrás lehet fizikai adatbázistábla, virtuális regisztertábla, ideiglenes táblák, beágyazott lekérdezések stb.
A virtuális táblák helyi menüjében beállíthatja a virtuális tábla paramétereit:
Kapcsolatok fül
A fül több tábla kapcsolatainak leírására szolgál, és konstrukciókat hoz létre a CONNECTION szóval.
Csoportosítás lap
Ezen a lapon a rendszer lehetővé teszi a táblázat eredményének kötelező mezőinek csoportosítását és összesítését. Leírja a GROUP BY, SUM, MINIMUM, AVERAGE, MAXIMUM, MENNYISÉG, KÜLÖNBÖZŐ SZÁMA konstrukciók használatát.
Feltételek fül
Felelős mindazért, ami a WHERE konstrukció után a kérés szövegében szerepel, azaz a kapott adatokkal kapcsolatos minden feltételért.
Speciális lap
Tab Továbbá tele van mindenféle paraméterrel, ami nagyon fontos. Nézzük meg az egyes tulajdonságokat.
Csoportosítás Rekordok kiválasztása:
- Először N– egy paraméter, amely csak N rekordot ad vissza a lekérdezéshez (FIRST operátor)
- Nincsenek ismétlődések– biztosítja a fogadott rekordok egyediségét (MÁS operátor)
- Engedélyezett– lehetővé teszi, hogy csak azokat a rekordokat jelölje ki, amelyeket a rendszer a figyelembevételével lehetővé tesz (ENGEGEDETT konstrukció)
Csoportosítás Kérelem típusa meghatározza, hogy milyen típusú kérés lesz: adatlehívás, ideiglenes tábla létrehozása vagy ideiglenes tábla megsemmisítése.
Alul van egy zászló A fogadott adatok zárolása későbbi módosítás céljából. Lehetővé teszi az adatzár beállításának lehetőségét, amely biztosítja az adatok biztonságát a beolvasás pillanatától a módosításig (csak az Automatikus zárolási módra vonatkozik, VÁLTOZÁSRA tervezet).
Csatlakozások/Álnevek lap
A lekérdezéstervező ezen a lapján beállíthatja a különböző táblák és álnevek összekapcsolásának lehetőségét (a HOGYAN konstrukció). A táblázatok a bal oldalon vannak feltüntetve. Ha a táblával szemben beállítja a zászlókat, akkor a UNITE konstrukció kerül alkalmazásra, ellenkező esetben - UNITE ALL (a két módszer közötti különbségek). A jobb oldalon a különböző táblák mezőinek egyezése látható, ha nincs megadva, a lekérdezés NULL-t ad vissza.
Rendelés fül
Ez adja meg az értékek rendezési sorrendjét (ORDER BY) - csökkenő (DESC) vagy növekvő (ASC).
Van egy érdekes zászló is - Automatikus rendelés(a kérésben - AUTOMATIKUS RENDELÉS). Alapértelmezés szerint az 1C rendszer „kaotikus” sorrendben jeleníti meg az adatokat. Ha beállítja ezt a jelzőt, a rendszer belső adatok szerint rendezi az adatokat.
Lekérdezés Batch lapon
A lekérdezéstervező lapon újakat hozhat létre, és navigációként is használhatja. A kérés szövegében a csomagokat „;” (vessző) szimbólum választja el.
„Lekérdezés” gomb a lekérdezéstervezőben
A kéréstervező bal alsó sarkában található egy Kérelem gomb, amellyel bármikor megtekintheti a kérés szövegét:
Ebben az ablakban módosíthatja a kérést, és végrehajthatja azt.
A Query Console használata
A Query Console egyszerű és kényelmes módjaösszetett lekérdezések hibakereséséhez és gyors információszerzéshez. Ebben a cikkben megpróbálom leírni, hogyan kell használni a Query Console-t, és megadom a Lekérdezőkonzol letöltéséhez szükséges hivatkozást.
Nézzük meg közelebbről ezt az eszközt.
Töltse le az 1C lekérdező konzolt
Először is, a lekérdezőkonzollal való munka megkezdéséhez le kell töltenie valahonnan. A kezeléseket általában két típusra osztják - kontrollált és hagyományos (vagy néha 8.1-nek és 8.2/8.3-nak nevezik).
Ezt a két nézetet megpróbáltam kombinálni egy feldolgozásban - a kívánt űrlap a kívánt üzemmódban nyílik meg (felügyelt módban a konzol csak vastag módban működik).
Az 1C lekérdező konzol leírása
Kezdjük a lekérdezési konzol áttekintésével a fő feldolgozó panel leírásával:
A lekérdezési konzol fejlécében ezredmásodperces pontossággal láthatja az utolsó lekérdezés végrehajtási idejét, ez lehetővé teszi a különböző tervek összehasonlítását teljesítmény szempontjából.
A parancssor gombjainak első csoportja az aktuális lekérdezések külső fájlba mentéséért felelős. Ez nagyon kényelmes, mindig visszatérhet egy összetett kérés írásához. Vagy például tároljon egy listát bizonyos minták tipikus példáiról.
A bal oldalon, a „Kérés” mezőben új kéréseket hozhat létre, és elmentheti őket egy fastruktúrába. A gombok második csoportja a kérések listájának kezeléséért felelős. Segítségével létrehozhat, másolhat, törölhet, áthelyezhet kérelmet.
- Végrehajtáskérés– egyszerű végrehajtás és eredmények
- Csomag végrehajtása– lehetővé teszi az összes köztes lekérdezés megtekintését lekérdezések kötegében
- Ideiglenes táblázatok megtekintése– lehetővé teszi az ideiglenes lekérdezések által visszaadott eredmények megtekintését egy táblán
Kérelem paraméterei:
Lehetővé teszi a kérés aktuális paramétereinek beállítását.
A lekérdezési paraméterek ablakában a következők érdekesek:
- Gomb Kérésre automatikusan megtalálja az összes paramétert a kérésben a fejlesztő kényelme érdekében.
- Zászló Közös paraméterek minden kérelemhez– telepítéskor a feldolgozása nem törli a paramétereket, amikor kérésről kérésre lép az általános kérések listájában.
Állítson be egy paramétert egy értéklistával Nagyon egyszerű, csak a paraméter értékének kiválasztásakor kattintson az érték törlése gombra (kereszt), a rendszer felszólítja az adattípus kiválasztására, ahol ki kell választania az „Értéklista” lehetőséget:
Szintén a felső panelen található egy gomb a lekérdezési konzol beállításainak előhívására:
Itt adhatja meg a lekérdezések automatikus mentésének és a lekérdezés végrehajtásának paramétereit.
A kérés szövege a konzol kérés mezőjébe kerül. Ezt megteheti egyszerűen egy lekérdezési teszt beírásával vagy egy speciális eszköz - a lekérdezéstervező - meghívásával.
Az 1C 8 lekérdezéstervező a helyi menüből (jobb egérgombbal) hívható meg, amikor a beviteli mezőre kattint:
Ebben a menüben olyan hasznos funkciók is találhatók, mint a sortörések törlése vagy hozzáadása ("|") a kéréshez, vagy a kéréskód fogadása ebben a kényelmes formában:
Request = Új kérés;
Request.Text = ”
|KIVÁLASZTÁS
| Pénznemek.Link
|FROM
| Directory.Currencies AS Currencies”;
RequestResult = Request.Execute();
A lekérdezési konzol alsó mezője a lekérdezés eredménymezőjét jeleníti meg, ezért jött létre ez a feldolgozás:
Ezenkívül a lekérdezési konzol a listán kívül adatokat is tud megjeleníteni fa formájában - az összegeket tartalmazó lekérdezésekhez.
Lekérdezés optimalizálás
Az 1C enterprise 8.3 termelékenységének növelésének egyik legfontosabb pontja az optimalizáláskéréseket. Ez a pont akkor is nagyon fontos, amikor átadja a minősítést. Az alábbiakban a nem optimális lekérdezési teljesítmény tipikus okairól és az optimalizálási módszerekről lesz szó.
Kijelölések egy virtuális táblában a WHERE konstrukcióval
A virtuális tábla részleteire csak a VT paramétereken keresztül kell szűrőket alkalmazni. Semmilyen körülmények között ne használja a WHERE konstrukciót virtuális táblában történő kijelöléshez, ez optimalizálási szempontból súlyos hiba. A WHERE használatával történő kiválasztás esetén valójában MINDEN rekordot fogad a rendszer, és csak ezután választja ki a szükségeseket.
JOBB:
VÁLASZT
TÓL TŐL
Felhalmozási nyilvántartás. Kölcsönös elszámolások a szervezetek résztvevőivel. Egyenlegek (
,
Szervezet = &Organization
ÉS Egyén = &Egyén) HOGYAN egyensúlyoznak a szervezetek résztvevőivel való kölcsönös elszámolások
ROSSZ:
VÁLASZT
Kölcsönös elszámolások a Szervezetek Résztvevőivel Egyenlegek Összeg Egyenleg
TÓL TŐL
Felhalmozási nyilvántartás. Kölcsönös elszámolások szervezetek résztvevőivel Egyenlegek (,) HOGYAN Kölcsönös elszámolások szervezetek résztvevőivel Egyenlegek
AHOL
Kölcsönös elszámolások a Szervezetek Résztvevőivel Egyenlegek Szervezet = & Szervezet
ÉS Kölcsönös elszámolások a Szervezetek Résztvevőivel Egyenlegek Egyéni = &Egyéni
Egy összetett típusú mező értékének meghatározása pont segítségével
Ha egy lekérdezésben összetett típusú adatokat kapunk ponton keresztül, akkor a rendszer bal oldali csatlakozással pontosan annyi táblát kapcsol össze, ahány típus lehetséges a komplex típus mezőjében.
Például nagyon nem kívánatos, hogy az optimalizálás elérje a regiszter rekordmezőjét – regisztrátor. Az anyakönyvvezető rendelkezik egy összetett adattípussal, amelyek között megtalálható az összes lehetséges dokumentumtípus, amely adatokat írhat a nyilvántartásba.
ROSSZ:
VÁLASZT
Record Set.Recorder.Date,
RecordSet.Quantity
TÓL TŐL
RegisterAccumulations.ProductsOrganizations AS SetRecords
Azaz valójában egy ilyen lekérdezés nem egy táblához, hanem 22 adatbázistáblához fog hozzáférni (ennek a regiszternek 21 regisztrátortípusa van).
JOBB:
VÁLASZT
VÁLASZTÁS
WHEN ProductsOrg.Registrar LINK Document.Sales of Products and Services
THEN Express
WHEN GoodsOrg.Registrar LINK Dokumentum.Szolgáltatások átvétele
THEN EXPRESS(GoodsOrg.Registrar AS Document.Receipt of GoodsServices).Dátum
VÉGE DÁTUMNAK,
ProductsOrg.Quantity
TÓL TŐL
RegisterAccumulations.ProductsOrganizations AS ProductsOrganization
Vagy a második lehetőség az ilyen információk hozzáadása a részletekhez, például esetünkben dátum hozzáadásával.
JOBB:
VÁLASZT
ProductsOrganizations.Date,
Termékek Szervezetek.Mennyiség
TÓL TŐL
Szervezetek árui AS Szervezetek árui
Allekérdezések csatlakozási állapotban
Optimalizálás céljából elfogadhatatlan az allekérdezések használata összekapcsolási feltételek mellett, ami jelentősen lelassítja a lekérdezést. Ilyen esetekben célszerű a VT-t használni. A csatlakozáshoz csak metaadatokat és VT-objektumokat kell használnia, miután azokat korábban kapcsolódási mezők szerint indexelte.
ROSSZ:
VÁLASZT …
BAL CSATLAKOZÁS (
SELECT FROM RegisterInformation.Limits
AHOL …
CSOPORTOSÍT...
) ÁLTAL
JOBB:
VÁLASZT …
PUT Limits
FROM Információk Nyilvántartás.Limits
AHOL …
CSOPORTOSÍT...
INDEX...;VÁLASZT …
FROM Dokumentum Áruk és szolgáltatások értékesítése
LEFT JOIN Limits
ÁLTAL…;
Rekordok összekapcsolása virtuális táblákkal
Vannak helyzetek, amikor egy virtuális tábla másokhoz való csatlakoztatásakor a rendszer nem működik optimálisan. Ebben az esetben a lekérdezés teljesítményének optimalizálása érdekében megpróbálhatja elhelyezni a virtuális táblát egy ideiglenes táblában, ne felejtse el indexelni az összekapcsolt mezőket az ideiglenes táblalekérdezésben. Ennek oka az a tény, hogy a VT-ket gyakran több fizikai DBMS-tábla is tartalmazza, ennek eredményeként a program lekérdezést fordít le a kijelölésükre, és a probléma az előző ponthoz hasonló.
Nem indexelt mezőkön alapuló kijelölések használata
Az egyik leggyakoribb hiba a lekérdezések írásakor a feltételek használata nem indexelt mezőkre, ennek ellentmond lekérdezés optimalizálási szabályokat. A DBMS nem tud optimálisan végrehajtani egy lekérdezést, ha a lekérdezés nem indexelhető mezőket tartalmaz. Ha ideiglenes táblát veszünk, akkor a kapcsolati mezőket is indexelni kell.
Minden feltételhez megfelelő indexnek kell lennie. A megfelelő index az, amely megfelel a következő követelményeknek:
- Az index a feltételben felsorolt összes mezőt tartalmazza.
- Ezek a mezők az index legelején találhatók.
- Ezek a kijelölések egymást követőek, vagyis a lekérdezési feltételben nem szereplő értékek nincsenek „beékelve” közéjük.
Ha a DBMS nem választja ki a megfelelő indexeket, a teljes tábla vizsgálata megtörténik – ez nagyon negatív hatással lesz a teljesítményre, és a teljes rekordkészlet hosszan tartó blokkolásához vezethet.
Logikai VAGY használata feltételekben
Ez minden, ez a cikk a lekérdezés optimalizálás alapvető szempontjait fedte le, amelyeket minden 1C szakértőnek tudnia kell.
Nagyon hasznos ingyenes videotanfolyam a lekérdezésfejlesztésről és -optimalizálásról, Erősen ajánlom kezdőknek és még sok másnak!
/
Adatfeldolgozás megvalósítása
Lekérdezési eredmények rendelése
1.1. Ha a lekérdezési eredmények feldolgozásának algoritmusa a lekérdezésben lévő rekordok sorrendjétől függ, vagy ha a lekérdezés feldolgozás eredménye ilyen vagy olyan formában kerül a felhasználó elé, akkor a mondatot kell használni a lekérdezés szövegében RENDEZÉS. Kifejezés hiányában RENDEZÉS nem lehet feltételezni, hogy a rekordok milyen sorrendben jelennek meg a lekérdezés eredményei között.
Tipikus példák az előforduló problémákra:
- eltérő sorsorrend a táblázatos részben a lekérdezési eredmények szerinti kitöltéskor;
- eltérő adatkiadási sorrend (sorok, oszlopok) a jelentésekben;
- bizonylatmozgások különböző kitöltése a lekérdezési eredmények alapján (*).
Növekszik annak a valószínűsége, hogy ugyanazon műveletek végrehajtása során eltérő eredmények születnek
- amikor egy információs bázist egy másik DBMS-be viszünk át
- a DBMS verzió megváltoztatásakor
- a DBMS paraméterek megváltoztatásakor
* Megjegyzés: a mozgásokat generáló lekérdezések eredményeinek rendelése csak akkor indokolt, ha a rendelés a mozgásgeneráló algoritmus részét képezi (pl. árutételek egyenlegeinek leírása FIFO segítségével). Más esetekben a rekordokat nem szabad rendezni, mivel a további rendezés túlzottan megterheli a DBMS-t.
1.2. Ha egy lekérdezés eredményét valamilyen módon meg kell jeleníteni a felhasználó számára, akkor
- az ilyen lekérdezések eredményeit primitív típusú mezők szerint kell rendezni;
- A referenciatípusok mezői szerinti rendezést fel kell cserélni e mezők karakterlánc-reprezentációira.
Ellenkező esetben a sorok sorrendje véletlenszerűnek (megmagyarázhatatlannak) tűnik a felhasználó számára.
Lásd még: Értéktábla sorainak rendezése
1.3. Nincs ajánlat RENDEZÉS csak olyan esetekben indokolt
- a lekérdezések eredményeit feldolgozó algoritmus nem támaszkodik a rekordok meghatározott sorrendjére
- a végrehajtott kérés feldolgozásának eredménye nem jelenik meg a felhasználó számára
- a lekérdezés eredménye nyilván egy rekord
Közös használat KÜLÖNBÖZŐ kialakítással
2. Ha a kérés a konstrukciót használja KÜLÖNFÉLE, a rendelést csak a kiválasztásban szereplő mezők szerint szabad végrehajtani (a rovatban VÁLASZT).
Ez a követelmény a lekérdezés végrehajtásának következő jellemzőjéhez kapcsolódik: a rendezési mezők implicit módon szerepelnek a kiválasztási mezőkben, ami viszont a lekérdezés eredményeként több olyan sor megjelenéséhez vezethet, amelyekben a kiválasztási mezők azonos értékei vannak.
Az AUTO ORDER konstrukció használatának korlátozása
3. A design használata ELSŐ a szerkezettel együtt AUTOMATIKUS RENDELÉS tiltott.
Más esetekben a tervezés AUTOMATIKUS RENDELÉS Használata sem javasolt, mivel a fejlesztő nem szabályozza, hogy mely mezőket használja a rendelés. Egy ilyen kialakítás alkalmazása csak olyan esetekben indokolt, amikor a rekordok eredő sorrendje nem fontos, de annak az alkalmazott DBMS-től függetlenül meg kell egyeznie.