Kapcsolatok

Kérelmek létrehozása és kezelése (kezdőknek). Lekérdezések létrehozása és kezelése (kezdőknek) Feltétel a lekérdezésben 1C 8.3 példák

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 az objektum adatmodelljét 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.LevelezőSzá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 az információszerzés legegyszerűbb és leghatékonyabb módja. 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 a „Táblázatnév1” és „Táblázatnév” táblákból kiválasztjuk a „Mezőnév1” és „Mezőné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 a „WHERE” „Adatkiválasztási feltétel” feltételnek megfelelő adatokat választjuk ki. Ezután a „Mezőnév1” mező alapján csoportosítjuk a kérést, a „Mezőnév2” összegzés során „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

Nézzük meg az 1C 8.2 lekérdező nyelv általános struktúráit.

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

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
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ás,
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 olyan 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 a kívánt érték karakterlánc-ábrázolását. 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 az optimalizálás érdekében, 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 267 videóleckét 1C-n ingyen:

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 NEM A FELÉPÍTETT áruk mennyisége NULL

A lekérdezés adattípusa a TYPE() és VALUETYPE() függvényekkel, vagy a logikai REFERENCE operátorral határozható meg. A két funkció hasonló.

Előre meghatározott értékek

Amellett, hogy az 1C lekérdezési nyelven átadott paramétereket használ a lekérdezésekben, használhat előre meghatározott értékeket vagy . Például átutalások, előre meghatározott könyvtárak, számlatáblázatok stb. Ehhez a „Value()” konstrukciót használják.

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 megtelnek 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 Ügyfelek AS ügyfelek

BELSŐ Ö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 áruk nómenklatúrája,
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 áruk nómenklatúrája

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
Az áruk és szolgáltatások értékesítésének módja
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úrája,
Termékek é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 értékesítése Áruk összege
TÓL TŐL
Az áruk és szolgáltatások értékesítésének módja
RENDEZÉS
Az áruk és szolgáltatások értékesítésének dátuma
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. A virtuális tábla egy gyors módja annak, hogy profilinformációkat szerezzen be a nyilvántartásokból.

Minden regisztertípusnak saját virtuális táblakészlete van, amelyek a regiszterbeállításoktól függően eltérőek lehetnek.

  • 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,
ProductsInWarehousesRemainingAndTurnover.QuantityInitialRemaining,
ProductsInWarehousesRemainsAndTurnover.QuantityTurnover,
GoodsInWarehousesRemainsAndTurnover.QuantityIncoming,
Termékek Raktárban Maradványok És Forgalom. Mennyiségi fogyasztás,
TermékekRaktárbanMaradékokÉsForgalom.MennyiségFennalmaradék
TÓL TŐL
Regisztráció Accumulations.GoodsInWerehouses.RemainsAndover AS GoodsInRaktárakMaradékokÉsForgalom

Ez 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:

A raktárban lévő áruk nyilvántartása (& az időszak eleje, az időszak vége, a 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:

  1. A dátum és a mérések szerint legközelebb eső számított értéket kapjuk meg az összegtáblázatban.
  2. 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– olyan 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ú lesz a lekérdezés: adatok lekérése, 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 való kialakítás).

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 a megfelelés 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ő) jel 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 az összetett lekérdezések hibakeresésének és gyors információszerzésnek. 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 és 8.2/8.3).

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ő konzol fejlécében ezredmásodperces pontossággal látható az utolsó lekérdezés végrehajtási ideje, 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, bármikor 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 é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 kéri az adattípus kiválasztását, ahol ki kell választani 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:

Ez a menü olyan hasznos funkciókkal is rendelkezik, mint a kérés törlése vagy sortörések ("|" hozzáadása), vagy a kérés kódjának 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

Szűrőket csak a VT paramétereken keresztül kell alkalmazni a virtuális tábla részleteire. Semmilyen körülmények között ne használja a WHERE konstrukciót a virtuális táblázatban való 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ások nyilvántartása Szervezetek Résztvevőivel (.
,
Szervezet = &Organization
És egyén = &Egyén) HOGYAN Egyensúlyozzák a kölcsönös elszámolásokat a szervezetek résztvevőivel

ROSSZ:

VÁLASZT
Kölcsönös elszámolások a Szervezetek Résztvevőivel Összeg Egyenleg
TÓL TŐL
Felhalmozások nyilvántartása Szervezetek Résztvevőivel (,) HOGYAN Kölcsönös elszámolások Szervezetek Résztvevőivel
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én

Egy összetett típusú mező értékének meghatározása pont segítségével

Ha egy lekérdezésben egy ponton keresztül összetett típusú adatokat kapunk, 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(Termékek Szervezete.Regisztrátor AS dokumentum.Áruk értékesítéseSzolgáltatások).Dátum
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 áruinak nyilvántartása AS Szervezetek árui

Allekérdezések csatlakozási állapotban

Az optimalizálás érdekében elfogadhatatlan az allekérdezések használata összekapcsolási feltételek mellett, ez 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 Az á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 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. Ez annak köszönhető, hogy a VT-k gyakran több fizikai DBMS-táblában is megtalálhatók, ezek kiválasztásához egy segédlekérdezés készül, é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ályok. 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:

  1. Az index a feltételben felsorolt ​​összes mezőt tartalmazza.
  2. Ezek a mezők az index legelején találhatók.
  3. 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!

Ebben a cikkben megvizsgáljuk a beágyazott táblák témáját az 1C lekérdezési nyelven.

Használhat beágyazott lekérdezési forrástáblázatot a lekérdezéskiválasztó mezőkben. Például a „Szolgáltatásnyújtás” dokumentumnak van egy táblázatos része a Szolgáltatásoknak, így ez a táblázatos rész is megjeleníthető a kiválasztási mezőben. Most látni fogja, hogyan lehet ezt megvalósítani.

A képzési adatbázisomban elindítom a lekérdező konzolt, megnyitom a lekérdezéstervezőt és kiválasztom a „Szolgáltatásnyújtás” táblát.

Bővítsük ki ezt a táblázatot

És ebben látjuk a „Szolgáltatások” táblázatos részt.

Jelöljük ki ezt a teljes táblázatrészt.

Mint látható, a szolgáltatás teljes táblázatos része teljesen a mezőkbe került.

Kérjük, vegye figyelembe, hogy a táblázatos rész valójában egy külön „Szolgáltatások” nevű mezőként jelenik meg, amelynek típusa „Request Result” lesz. Tanuljuk meg, hogyan lehet beágyazott táblát használni egy lekérdezésben.

Hagyjunk meg három mezőt a beágyazott táblázatból, és adjunk hozzá néhány mezőt a dokumentum fejlécéből.

Kattintson az OK gombra a tervezőben, és nézze meg, hogyan fog kinézni a kérésünk.

Mint látható, a kérésben a „Szolgáltatások” mező után egy pont található, utána pedig zárójelben szerepelnek a kiválasztott mezők.

Teljesítsük a kérést.

Az ábrán azt látjuk, hogy a dokumentum táblázatos részének összes kijelölt mezője vesszővel elválasztva szerepel a „Szolgáltatások” mezőben. Nem minden lekérdező konzolnak van olyan kijelzője, mint a fenti ábrán.

Még egy érdekesség: egy beágyazott táblázatban a mezők helyett csillagot is tehet, ekkor megjelenik a táblázatos rész összes mezője. Ezt a konstruktorban nem lehet megtenni, csak manuálisan a kérésben. A kérelem a következő formában történik:

Nézzük meg, hogyan valósul meg egy ilyen kérés.

Az egyetlen dolog, hogy ez a csillag nem kerül mentésre, ha megnyitjuk a lekérdezés konstruktorát.

Megtanultuk, hogyan kell lekérdezést készíteni beágyazott táblával a konzolban, most megtanuljuk, hogyan kell beágyazott táblát használni egy kijelölésben

Valójában nem olyan nehéz hozzáférni egy beágyazott táblához egy lekérdezés feldolgozása során. Egyszerűen csak a táblázat nevével érheti el a kijelölést, és kap egy „Lekérdezés eredménye” típusú változót. Utána pedig normál kérés eredményeként dolgozza fel: ha akar, kérjen mintát, ha akar, csináljon feltöltést.

Az alábbiakban egy kis példa a beágyazott táblával működő kódra:


&A szerveren
Eljárás FillOnServer()
Request = Új kérés;
Kérés. Szöveg = "VÁLASZT
| Termék eladása, link.
| Termék értékesítése.Termékek.(
| Termék,
| Mennyiség
|FROM
| Termékértékesítési Útmutató A termékek értékesítése"
;
Fetch = Lekérdezés. Fuss(). Választ();
Viszlát választás. Következő() Cikk
TopLine of the Tree = Termékek értékesítése. GetItems();
NewRow = TopRowTree. Add();
Új sor. Link = Kiválasztás. Link;
TableProducts = Kiválasztás. Áruk;
SelectionProducts = TableProducts. Választ();
Míg a termékek kiválasztása. Következő() Cikk
TreeChildRow = Új sor. GetItems();
ProductRow = ChildTreeRow. Add();
ProductString. Link = Termékválasztás. Termék;
ProductString. Mennyiség = Sample Items. Mennyiség ;
EndCycle;
EndCycle;
Az eljárás vége

Hadd magyarázzam el a fenti kódot.

Először is kaptunk egy lineáris kijelölést, és ezt a kijelölést egy ciklusban megyünk végig, amiben létrehozzuk az értékfa legfelső sorát (az űrlapon van), és beleírunk egy hivatkozást a dokumentumunkra.

És akkor a legérdekesebb, hogy később akár saját maga is megnézheti a hibakeresőben, rátérünk a Termékek kiválasztása mezőre, és a kényelem kedvéért írjuk be ezt a mezőt egy külön változóba a TableProducts-ban. Ez a változó „Lekérdezés eredménye” típusú. És könnyen kaphat mintát ebből az eredményből. Ezt tesszük. Marad hátra, hogy megkerüljük ezt a kijelölést a következő függvény és a while ciklus használatával.

És ezen a cikluson belül a kiválasztási mezőkre egy beágyazott tábla mezőiként fogunk hivatkozni, és az űrlapból a fa gyermeksoraiba írjuk őket.

Ez az eredmény, amit ez a kód visszaad

Van még kérdése?

Ön saját maga fog válaszolni rájuk, amikor tanulmányozza a „Lekérdezések az 1C-ben kezdőknek” kurzusomat. Ahol ezekről és sok más kérdésről részletesebben is szó esik. Minden információ egyszerű és hozzáférhető formában van megadva, és még azok számára is érthető, akik nem ismerik különösebben az 1C programozást.

Promóciós kód 20% kedvezményért: hrW0rl9Nnx

Támogassa projektemet bármilyen összeggel

Csatlakozz a csoportjaimhoz.

Az 1C 8.3 és 8.2 lekérdezéstervezője hatékony fejlesztőeszköz. Lehetővé teszi kérésszöveg összeállítását egy speciális vizuális környezet segítségével. Így az 1C kérés létrehozásához nem szükséges ismerni a beépített lekérdezési nyelvet, elég a tervező egyszerű és intuitív felületén navigálni.

A lekérdezéskészítő lapok halmaza, amelyek mindegyike felelős a lekérdezés saját részéért. Tehát töltse ki a lapot Táblázatok és mezők Kiválasztjuk azokat a táblákat, amelyekből az 1C lekérdezés megkapja ezen táblák adatait és mezőit, amelyek egy adott probléma megoldásához szükségesek. Betöltés a falazatba Körülmények feltételeket szabunk a kiválasztott táblákra, hogy csak a számunkra szükséges adatokat válasszuk ki belőlük stb.

A lekérdezéstervező leírása a hivatalos 1C 8 webhelyen: v8.1c.ru

Asztalok és mezők; ; ; ; ; ; Beágyazott lekérdezések (fejlesztés alatt).

Az 1s 8 lekérdezéstervező meghívásához a programkódban a következőket kell tennie:

  • Hozzon létre egy új kérést
Request = Új kérés;
  • Állítson be egy üres kérés szövegsort
Request.Text = "";
  • Helyezze az egérmutatót az idézőjelek közé, és nyomja meg a jobb egérgombot. A megnyíló helyi menüben válassza ki az elemet Lekérdezés konstruktorés válaszolj Igen az új kérelem létrehozásával kapcsolatos kérdésre. Ha a kérés szövege már le van írva, akkor kattintson bárhová a belsejében, és hívja a konstruktort ;

Nézzük meg a lekérdezéskészítő összes fő lapját a növekvő bonyolultságú kis példák segítségével. Ez a megközelítés lehetővé teszi a kezdő 1C programozó számára, hogy hatékonyabban tanulmányozza a konstruktort és annak összes képességét. Példákhoz a konfigurációt fogjuk használni Számvitel 3.0.

1. lecke. A lekérdezéskészítő a legegyszerűbb használati eset.

Feladat: írjon kérést a nómenklatúra könyvtárba, válassza ki a címtár teljes nómenklatúráját.

Új lapok: Táblázatok és mezők.

Új mechanizmusok: a kérés szövegének megtekintése és szerkesztése a „Kérés” gombbal.

A kérés létrehozásának megkezdéséhez hozzunk létre egy új kérést, és hívjuk meg a konstruktort (ahogyan néhány bekezdéssel fentebb írtuk). Ezt követően megnyílik a tervezőablak a lapon Táblázatok és mezők.

1. lecke elméleti része

Tab Táblázatok és mezők három részből áll:

Adatbázis. Ez a rész bemutatja az összes adatbázistáblát, amely lekérdezés készítéséhez használható;

Táblázatok. Ebben a részben a lekérdezéshez szükséges táblák kerülnek kiválasztásra. Ezután áthelyezheti őket a szakaszból adatbázis kell:

  • Vagy kattintson duplán az asztalra;
  • Vagy használja a „>” vagy a „>>” gombot.

Fenti szakasz Táblázatok Számos gomb található. Legtöbbjüket részletesebben tárgyaljuk a következő leckékben. Egyelőre csak rövid magyarázatokat adok.

  • Hozzon létre egy részlekérdezést(Piros vonal). Új részlekérdezés létrehozására tervezték;
  • Hozzon létre egy ideiglenes táblázatleírást(sárga vonal). Lehetővé teszi egy ideiglenes tábla nevének megadását, amely a lekérdezésen kívül található, és értéktáblázatot is átadhat a lekérdezésnek;
  • Az aktuális elem módosítása(zöld vonal). Lehetővé teszi, hogy a kiválasztott részlekérdezéshez, ideiglenes táblához vagy ideiglenes táblaleíráshoz ugorjon;
  • Az aktuális elem eltávolítása(kék vonal). Eltávolítja a kiválasztott táblát a kijelölt táblák közül;
  • Cserélje ki az asztalt(kék vonal). Megnyitja a párbeszédpanelt a kiválasztott táblázat lecseréléséhez. Hasznos, ha rossz regiszter virtuális táblát választott, mivel a pozicionálás a listában az aktuálisan kiválasztott táblán történik.
  • Virtuális asztal opciók(lila vonal). Megnyitja a virtuális regisztertábla paramétereit.

Mezők. Ez a szakasz az előző szakasz táblázatmezőit választja ki. Ezek a mezők lesznek a lekérdezés eredményeként kapott táblázat vagy kijelölés oszlopai. Ezekre elsősorban azért van szükség, hogy a kiválasztott táblázatokból csak az adott esetben szükséges információkat nyerjük ki. Annak érdekében, hogy áthelyezze őket a szakaszból Szükséges táblázatok:

  • Vagy kattintson duplán a mezőre;
  • Vagy használja a „>” vagy a „>>” gombot;
  • Ön is hozzáadhat egy új mezőt a kiválasztott táblák mezőiből és a lekérdező nyelvi függvények közül egy tetszőleges kifejezés használatával.

Fenti szakasz Mezők Számos gomb található. A mezők tetszőleges kifejezésekkel történő létrehozásáról a következő leckékben lesz szó részletesebben. Egyelőre csak rövid magyarázatokat adok.

  • Hozzáadás(zöld vonal). Új mező hozzáadására tervezték a szabad kifejezésszerkesztővel;
  • Az aktuális elem módosítása(Piros vonal). Lehetővé teszi a kiválasztott mező módosítását a szerkesztővel;
  • Az aktuális törlése(kék vonal). Eltávolítja a kiválasztott mezőt a listából.

Az 1. lecke gyakorlati része

Az ebben a leckében szereplő feladat elvégzéséhez szükséges elmélettel foglalkoztunk. Hadd emlékeztessem, hogyan hangzik: írjon egy kérést a nómenklatúra-könyvtárba, válassza ki a könyvtár teljes nómenklatúráját.

Kezdjük el az elemekre vonatkozó kérés létrehozását:

  • Hozzunk létre egy új kérést, és nyissuk meg a konstruktort a lecke elején megadott módszerrel;
  • fejezetben Adatbázis, nyissunk egy szálat Könyvtárakés ott találunk egy útmutatót Elnevezéstan;
  • Válassza ki, és a „>” gombbal helyezze át a szakaszba táblázatok;
  • fejezetben Táblázatok nyissa meg a nómenklatúra könyvtárát a „+” ikon segítségével;
  • A megnyíló mezők listájában keresse meg a mezőt Linkés helyezze át a szakaszba Mezők a ">" gomb segítségével
  • A cikkkérés készen áll, kattintson az „OK” gombra a tervezőablak alján.

A lekérdezési nyelv az 1C 8.3 egyik alapvető mechanizmusa a fejlesztők számára. A 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-lel ellentétben 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. Végül is, 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 az ajánlattal 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 alkalmazottak,
Kölcsönös elszámolások Egyenleg
TÓL TŐL
Felhalmozások nyilvántartása Kölcsönös elszámolások az alkalmazottakkal 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
AdmissionTiU.Link,
VÁLASZTÁS
AMIKOR 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
Az áruk és szolgáltatások átvétele HOGYAN Átvételi feltételek

CSATLAKOZIK

Összekapcsol két táblát egy adott kapcsolati feltétel alapján.

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
Az áruk és szolgáltatások átvétele 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, a rendszer NULL értéket ad vissza.

Az előző példában szereplő teljes kapcsolat használatakor az „Áruk és szolgáltatások átvétele” bizonylatból az összes tétel, valamint a „Cikkárak” nyilvántartásból az összes legfrissebb ár kerül 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ések csoportosítása lehetővé teszi a táblázat sorainak összecsukását (mezők csoportosítását) egy bizonyos közös jellemző szerint (mezők csoportosítása). 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 Type of Nomenclature,
Árak.Ár AS ár
TÓL TŐL
A nómenklatúra adatainak pillanatképe
EREDMÉNYEK
MAXIMUM (ár)
ÁLTAL
A nómenklatúra típusa

HAJNÁL

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 az operátor által használtakat, 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
A nómenklatúra adatainak pillanatképe
CSOPORTOSÍT
Árak.Nómenklatúra.Nómenklatúra típusa
HAJNÁL
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 egy megadott 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, hogy hozzáadjon vagy kivonjon egy bizonyos típusú időpontot 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 a hiányzó értéket a megadott kifejezéssel helyettesíti.
  • 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 é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, jellemzőtípusok tervei. 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” - tartalmazza a csoportosítási struktúrák leírását és az ezek alapján összegzett mezőket.
  • „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.

Úgy döntöttem, hozzájárulok a nyelv azon sajátosságainak leírásához, amelyekről a fenti cikkekben nem volt szó. A cikk kezdő fejlesztőknek szól.

1. „IZ” kialakítás.

Ahhoz, hogy az adatbázisból adatokat nyerjünk, egyáltalán nem szükséges a „FROM” konstrukció használata.
Példa: Ki kell választanunk a bankokkal kapcsolatos összes információt a bankkönyvtárból.
Kérés:

SELECT Directory.Banks.*

Kijelöli az összes mezőt a Banks könyvtárból. És hasonló a kéréshez:

SELECT Banks.* FROM Directory.Banks AS Banks

2. Adatok rendelése referenciamező szerint

Amikor a lekérdezési adatokat primitív típusok szerint kell rendeznünk: "String", "Szám", "Dátum" stb., akkor mindent a "ORDER BY" konstrukcióval oldunk meg, ha az adatokat referenciamező szerint kell rendezni? A hivatkozási mező egy hivatkozás, egy egyedi azonosító, azaz. Nagyjából fogalmazva, néhány tetszőleges karakterkészlet és a szokásos sorrend olyan eredményt hozhat, amely nem teljesen elvárható. A referenciamezők megrendeléséhez az "AUTO RENDELÉS" konstrukciót használjuk. Ehhez először közvetlenül a referenciatípus szerint kell rendeznie az adatokat az "ORDER BY" konstrukcióval, majd az "AUTO ORDER" konstrukcióval.

Ebben az esetben a dokumentumok esetében a rendelés a "Dátum->Szám" sorrendben történik, a kézikönyvek esetében a "Fő nézetben". Ha a rendezés nem referenciamezők alapján történik, akkor az "AUTO RENDELÉS" konstrukció használata nem javasolt.

Egyes esetekben az "AUTO ORDER" konstrukció lelassíthatja a kiválasztási folyamatot. Hasonló módon átírhatja a dokumentumok automatikus rendezése nélkül:

3.Referencia típusú szöveges ábrázolás beszerzése. "BEMUTATÁS" design.

Ha egy referencia típusú mezőt kell megjeleníteni, például a "Bank" mezőt, amely a "Bankok" könyvtár egy elemére mutató hivatkozás, meg kell értenie, hogy ennek a mezőnek a megjelenítésekor egy allekérdezés a " A Banks" könyvtár automatikusan végrehajtásra kerül, hogy megtekinthesse a könyvtárat. Ez lelassítja az adatkimenetet. Ennek elkerülése érdekében a kérésben a „PRRESENTATION” konstrukciót kell használni, hogy azonnal megkapja az objektum reprezentációját, majd megjelenítse azt megtekintésre.

Az adatösszeállítási rendszerben alapértelmezés szerint ez a mechanizmus használatos, de a cellákban történő elrendezések létrehozásakor meg kell adni a referenciamező ábrázolását, és például magát a hivatkozást elhelyezni az átírásban.

4. Az adatok sablon szerinti mintavételének feltétele.

Például be kell szereznie az alkalmazottak mobiltelefonját a (8 -123-456-78-912) űrlapon. Ehhez a következő feltételt kell beállítani a kérésben:

SELECT Employee.Name, Employee.Phone AS Phone FROM Directory.Employees AS Employees WHERE Phone LIKE "_-___-___-__-__"

A „_” karakter egy szervizkarakter, és bármely karaktert helyettesít.

5. Összegek és csoportosítások egyidejű használata.


Az összegeket gyakran a csoportosítással együtt használják, ebben az esetben előfordulhat, hogy az összesített függvények nem adhatók meg az összegekben.

SELECT Szolgáltatásnyújtás.Organization AS Szervezet, Szolgáltatásnyújtás.Nómenklatúra AS Nómenklatúra, SUM(Szolgáltatásnyújtás.Dokumentum összege) AS Dokumentum összege FROM Dokumentum.Szolgáltatásnyújtás AS Szolgáltatásnyújtás CSOPORT Szolgáltatásnyújtás szerint.Szervezet, ellátás. A nómenklatúra ÁLTALÁNOS EREDMÉNYEK, Szervezet, nómenklatúra

Ebben az esetben a lekérdezés majdnem ugyanazt adja vissza, mint a következő:

SELECT Szolgáltatások nyújtása.Szervezet AS Szervezet, Szolgáltatásnyújtás.Nómenklatúra AS Nomenklatúra, Szolgáltatásnyújtás.Dokumentum mennyisége AS Dokumentum mennyisége Dokumentumból.Szolgáltatásnyújtás AS Szolgáltatásnyújtás EREDMÉNYEK ÖSSZEG (Dokumentum mennyisége) ÁLTALÁNOS, Szervezet, Elnevezéstan

Csak az első lekérdezés fogja össze az azonos nómenklatúrával rendelkező rekordokat.

6. Mezők hivatkozásának megszüntetése.

A mezőkre ponton keresztül történő hivatkozást referenciamező dereferencia műveletnek nevezzük. Például Fizetés.Szervezet.Adminisztratív egység. Ebben az esetben a „Befizetés” bizonylat „Szervezet” hivatkozási mezőjében egy másik „Szervezetek” táblára hivatkozik, amelyben az „Adminisztrációs egység” attribútum értéke kerül leolvasásra. Fontos megérteni, hogy amikor egy ponton keresztül éri el a mezőket, a platform implicit módon létrehoz egy segédlekérdezést, és csatlakozik ezekhez a táblákhoz.

Kérés:

Képviselhető:

SELECT Payment.Link, Payment.Organization, Payment.Organization, Organizations. AdministrativeUnit FROM Document.Payment AS Payment LEFT CSATLAKOZÁS Directory.Organizations AS Szervezetek Szoftver Payment.Organization = Organizations.Link

Kompozit típusú referenciamezők hivatkozásának megszüntetésekor a keretrendszer megpróbál implicit összekapcsolást létrehozni az összes olyan táblához, amely a mezőtípus részét képezi. Ebben az esetben a lekérdezés nem lesz optimális EXPRESSZ().

Például létezik egy „Felosztatlan kifizetések” felhalmozási nyilvántartás, ahol több dokumentum is iktatóként működhet. Ebben az esetben helytelen a regisztrátor adatainak értékét így megszerezni:

SELECT UnallocatedPayments.Register.Date, ..... FROM RegisterAccumulation.UnallocatedPayments AS UnallocatedPayments

korlátoznia kell az összetett mező típusát a loggerre:

SELECT EXPRESS(UnalllocatedPayments.Register AS Document.Payment).Dátum, ..... FROM RegisztrációAccumulation.UnalllocatedPayments AS UnalllocatedPayments

7. Építés "HOL"

Két tábla bal oldali összekapcsolása esetén, ha a jobb oldali táblára „WHERE” feltételt szabunk, hasonló eredményt kapunk, mint a táblák belső összekapcsolása esetén.

Példa. Minden Ügyfelet ki kell választani az Ügyféltárból, és azoknak az ügyfeleknek, akiknek van "Szervezet" = &Szervezet attribútum értékű fizetési bizonylata, jelenítse meg a "Befizetés" bizonylatot, akinek nincs, ne jelenítse meg.

A lekérdezés eredménye csak azon ügyfelek rekordjait adja vissza, akiknél a paraméterben szerepelt a szervezet szerinti fizetés, és kiszűri a többi ügyfelet. Ezért először egy ideiglenes táblában kell megkapnia az „ilyen és ehhez hasonló” szervezetre vonatkozó összes kifizetést, majd bal oldali csatlakozással csatlakoztatnia kell az „Ügyfelek” könyvtárhoz.

SELECT Payment.Link AS Fizetés, Fizetés.Részvényes AS Ügyfél HELYE a Kifizetésekhez FROM Dokumentum.Fizetés AS Fizetés WHERE Fizetés.Ág = &Branch; //////////////////////////////////////////////// //////////////////////////////////// SELECT Clients.Link AS Client, ISNULL(tPayment.Payment, "") AS Fizetés FROM Directory .Clients AS Ügyfelek BAL KAPCSOLATBAN fizetések AS topayments SZOFTVER Ügyfelek.Link = topayments.Client

Ezt az állapotot más módon is megkerülheti. Közvetlenül a két tábla kapcsolatára "WHERE" feltételt kell szabni. Példa:

SELECT Clients.Link, Payment.Link FROM Directory.US_Subscribers AS US_Subscribers BAL KAPCSOLAT Document.Payment AS Fizetési szoftver (Clients.Link = Payment.Client AND Payment.Client.Name LIKE "Cukorcsomag") GROUP BY Clients.Link, Payment. Link

8. Csatlakozás beágyazott és virtuális táblákhoz

Beágyazott lekérdezések gyakran szükséges az adatok lekéréséhez valamilyen feltétel alapján. Ha ezután más táblákkal együtt használja őket, ez kritikusan lelassíthatja a lekérdezés végrehajtását.

Például egyes ügyfeleknél meg kell kapnunk az aktuális dátum szerinti Egyenleg összegét.

SELECT UnallocatedPaymentsBalances.Customer, UnallocatedPaymentsBalances.AmountBalance FROM (SELECT Clients.Link AS Link FROM Directory.Clients AS Clients WHERE Clients.Link IN(&Clients)) AS NestedQuery LEFT JOIN RegisterAccumulations.AssociatedPayments.AlocatedPayments = UnallocatedPaymentsBalances. Vevő

Egy ilyen lekérdezés végrehajtásakor a DBMS optimalizáló hibákat követhet el a terv kiválasztásakor, ami a lekérdezés szuboptimális végrehajtásához vezet. Két tábla összekapcsolásakor a DBMS-optimalizáló kiválaszt egy táblaösszekötő algoritmust a mindkét táblában lévő rekordok száma alapján. Ha van beágyazott lekérdezés, rendkívül nehéz meghatározni, hogy a beágyazott lekérdezés hány rekordot fog visszaadni. Ezért a beágyazott lekérdezések helyett mindig ideiglenes táblákat kell használnia. Tehát írjuk át a kérést.

SELECT Clients.Link AS Link PLACE tClients FROM Directory.Clients AS Clients WHERE
Clients.Link B (&kliensek) ; //////////////////////////////////////////////// /////////////////////////// SELECT tClients.Link, UnallocatedPaymentsRemains.AmountRemaining, FROM tClients AS tClients LEFT JOIN RegisterAccumulations.UnallokatedPayments.Balances (, Client IN (SELECT tClients.Link FROM tClients)) AS UnallocatedPaymentsBalances tClients.Link = UnallocatedPaymentsBalances.Clients

Ebben az esetben az optimalizáló képes lesz meghatározni, hogy a tClients ideiglenes tábla hány rekordot használ, és kiválaszthatja az optimális algoritmust a táblák összekapcsolásához.

Virtuális asztalok , gyakorlatilag kész adatok beszerzését teszi lehetővé a legtöbb alkalmazott feladathoz (Az első szelete, az utolsó szelete, Maradványok, Forgások, Maradványok és Forgások) A kulcsszó itt a virtuális. Ezek a táblázatok nem fizikaiak, hanem menet közben állítja össze a rendszer, azaz. A rendszer a virtuális táblákból származó adatok fogadásakor a végső regisztertáblákból összegyűjti az adatokat, összeállítja, csoportosítja és kiadja a felhasználónak.

Azok. Amikor egy virtuális táblához csatlakozik, a kapcsolat egy részlekérdezéssel történik. Ebben az esetben a DBMS-optimalizáló nem optimális csatlakozási tervet is választhat. Ha a lekérdezés nem generálódik elég gyorsan, és a lekérdezés virtuális táblák összekapcsolását használja, akkor javasolt a virtuális táblákhoz való hozzáférést áthelyezni egy ideiglenes táblába, majd két ideiglenes tábla között összekapcsolni. Írjuk át az előző kérést.

SELECT Clients.Link AS Link HELY tClients FROM Directory.Clients AS Clients INDEX BY Link WHERE
Clients.Link B (&kliensek) ; //////////////////////////////////////////////// /////////////////////////// SELECT UnallocatedPayments.AmountBalance, UnalllocatedPayments.Client AS Client PLACE egyenlegek FROM RegisterAccumulations.UnalllocatedPayments.Balances(, Client B () SELECT tClients Link FROM tClients)) AS UnallocatedPaymentsBalances; //////////////////////////////////////////////// tClients.Link, to Remainder = tMaradékok.Client

9.A kérés eredményének ellenőrzése.

A lekérdezés eredménye üres lehet az üres értékek ellenőrzéséhez, használja a következő konstrukciót:

ResRequest = Request.Execute(); Ha resQuery.Empty() akkor Return; endIf;

Módszer Üres() módszerek előtt kell használni Választ() vagy Unload(), mivel a gyűjtemény visszakeresése időt vesz igénybe.

Senkinek sem jelent kinyilatkoztatást, hogy rendkívül nem kívánatos a lekérdezések ciklusban történő használata. Ez kritikusan befolyásolhatja egy adott funkció működési idejét. Nagyon kívánatos, hogy a kérésben szereplő összes adatot megkapja, majd az adatokat hurokban dolgozza fel. De néha vannak olyan esetek, amikor lehetetlenné válik a kérés áthelyezése a hurkon kívülre. Ebben az esetben az optimalizálás érdekében a lekérdezés létrehozását áthelyezheti a cikluson kívülre, és a ciklusban behelyettesítheti a szükséges paramétereket és végrehajthatja a lekérdezést.

Request = Új kérés; Query.Text = "SELECT | Clients.Link, | Clients.Birthdate |FROM | Directory.Clients AS Kliensek |WHERE | Clients.Link = &kliens"; Minden sorhoz FROM TableClients Loop Query.SetParameter("Client", Client); Lekérdezés eredménye = Query.Execute().Select(); EndCycle;

Ez megmenti a rendszert a szintaxis ellenőrzésétől a kérés ciklusban.

11. Építés "HAVING".

A kérésekben meglehetősen ritka kialakítás. Lehetővé teszi, hogy feltételeket szabjon az összesített függvények értékeire (SZUM, MINIMUM, ÁTLAG stb.). Például csak azokat az ügyfeleket kell kiválasztania, akiknek a fizetési összege szeptemberben meghaladta a 13 000 rubelt. Ha a „WHERE” feltételt használja, először létre kell hoznia egy ideiglenes táblát vagy egy beágyazott lekérdezést, ott a rekordokat fizetési összeg szerint csoportosítania, majd alkalmaznia kell a feltételt. A „HAVING” konstrukció segít elkerülni ezt.

KIVÁLASZTÁS Fizetés.Ügyfél, ÖSSZEG(Fizetés.Összeg) MINT ÖSSZEG A Bizonylatból.Fizetés MINT Fizetés WHERE HÓNAP(Fizetés.Dátum) = 9 CSOPORT Fizetés SZERINT.ÜGYFÉL, HOGY ÖSSZEG (Fizetési összeg) > 13000

A konstruktorban ehhez lépjen a „Feltételek” fülre, adjon hozzá egy új feltételt, és jelölje be az „Egyéni” jelölőnégyzetet. Akkor csak írj Összeg(Fizetés.Összeg) > 13000


12. NULL érték

Nem írom le itt a háromértékű logika alapelveit az adatbázisban, sok cikk található ebben a témában. Csak röviden arról, hogyan NULLA befolyásolhatja a lekérdezés eredményét. A NULL érték valójában nem érték, és az a tény, hogy az érték nem definiált, nem ismert. Ezért minden NULL-lal végzett művelet NULL-t ad vissza, legyen az összeadás, kivonás, osztás vagy összehasonlítás. A NULL értéket nem lehet összehasonlítani a NULL értékkel, mert nem tudjuk, mivel hasonlítsuk össze. Azok. mindkét összehasonlítás a következő: NULL = NULL, NULL<>A NULL nem igaz vagy hamis, nem ismert.

Nézzünk egy példát.

Azon ügyfeleknél, akiknek nincs fizetésük, az „Aláírás” mezőt „Nincs befizetés” értékkel kell megjelenítenünk. Sőt, biztosan tudjuk, hogy vannak ilyen ügyfeleink. És hogy tükrözze a fent leírtak lényegét, tegyük ezt így.

KIVÁLASZTÁSA "Nincs kifizetés" AS Attribútum, NULL AS Dokumentum PLACE a kifizetésekhez; //////////////////////////////////////////////// ////////////////////////// SELECT Clients.Link AS Client, Payment.Link HOGYAN Fizetés PUT tClientPayment FROM Directory.Clients AS Clients BAL KAPCSOLAT Dokumentum. Payment AS Payment Software Clients.Link = Payment.Shareholder; //////////////////////////////////////////////// //////////////

Ügyeljen a második ideiglenes táblára, a tClientPayment. A bal oldali csatlakozással kiválasztom az összes ügyfelet és az összes fizetést ezekhez az ügyfelekhez. Azon ügyfelek esetében, akiknek nincs fizetésük, a „Fizetés” mező NULL lesz. A logikát követve az első ideiglenes „tPayments” táblában 2 mezőt jelöltem ki, ezek közül az egyik NULL, a második sor „Nincs befizetés”. A harmadik táblázatban a „tClientPayment” és „tPayment” táblákat a „Fizetés” és „Dokumentum” mezők segítségével kapcsolom össze belső összekapcsolással. Tudjuk, hogy az első táblázatban a „Dokumentum” mező NULL, a másodikban pedig azok, akiknek nincs befizetésük a „Fizetés” mezőben, szintén NULL. Mit fog visszaadni nekünk egy ilyen kapcsolat? De nem ad vissza semmit. Mivel a NULL = NULL összehasonlítás nem igazodik ki.

Annak érdekében, hogy a kérés a várt eredményt adja vissza, írjuk át:

SELECT "No payments" AS Attribútum, VALUE(Document.Payment.EmptyLink) AS dokumentum PLACE to Payments; //////////////////////////////////////////////// /////////////////////////// SELECT Clients.Link AS Client, ISNULL(Fizetés.Link, ÉRTÉK(Dokumentum.Fizetés.EmptyLink )) HOGYAN Fizetés PUT tClientPayment FROM Directory.Clients AS Clients LEFT CONNECTION Document.Payment AS Fizetés BY Clients.Link = Fizetés.Részvényes; //////////////////////////////////////////////// //////////////

Most a második ideiglenes táblázatban jeleztük, hogy ha a „Fizetés” mező NULL, akkor ez a mező = egy üres hivatkozás a fizetési bizonylatra. Az első táblázatban a NULL-t is helyettesítettük egy üres hivatkozással. Most a kapcsolat nem NULL mezőket tartalmaz, és a kérés a várt eredményt adja vissza.

A cikkben szereplő összes kérés azokat a helyzeteket tükrözi, amelyeket figyelembe szeretnék venni, és semmi többet. RÓL RŐL Lehet, hogy nem tévedések vagy szuboptimálisak, a lényeg, hogy a példa lényegét tükrözzék.

13. A "VÁLASZTÁSA, MIKOR...AKKOR...VÉGE" tervezés nem dokumentált jellemzője.

Abban az esetben, ha a kérésben le kell írni a „Feltételek” konstrukciót, a szabványos szintaxist használjuk:

KIVÁLASZTÁS KIVÁLASZTÁSA WHEN Users.Name = "Vasya Pupkin" THEN "Kedvenc alkalmazottunk" EGYÉB "Ezt nem tudjuk" VÉGE AS Mező1 FROM Címtárból.Users AS Users

De mi van akkor, ha például egy kérésben meg kell kapnunk a hónap nevét? Hatalmas konstrukciót írni egy kérésben csúnya és időigényes, ezért a fenti írásforma segíthet nekünk:

SELECT MONTH(US_CalculationConsumption_TurnoverSchedule.CalculationPeriod) WHEN 1 THEN "január" WHEN 2 THEN "Február" WHEN 3 THEN "Március" WHEN 4 THEN "június" WHEN 5 THEN "Június" THEN "WHEN"6 THEN "MÁJUS" THEN"7 8. MAJD "augusztus", MIKOR 9. MAJD "Szeptember" MIKOR 10. MAJD "Október" MIKOR 11. MAJD "November" MIKOR 12. MAJD "December" HÓNAPNAK VÉGE

Most a kialakítás kevésbé nehézkesnek tűnik, és könnyen érthető.

14. Kérelem kötegelt végrehajtása.


Annak érdekében, hogy ne szaporodjanak meg a kérések, létrehozhat egy nagy kérést, feloszthatja csomagokra, és dolgozhat vele.
Például a következő mezőket kell lekérnem a „Felhasználók” könyvtárból: „Születési dátum” és az egyes felhasználók számára elérhető szerepkörök. töltse fel ezt az űrlap különböző táblázatos részeire. Természetesen ezt megteheti egy kéréssel, majd ismételgetnie kell a rekordokat, vagy össze kell csuknia őket, vagy megteheti ezt:

SELECT Users.Link AS Teljes név, Felhasználók.Születési dátum, Felhasználók.Szerep PUT vtUsers FROM Directory.Users AS Users; //////////////////////////////////////////////// /////////////////////////// SELECT tueUsers.Teljes név, tueUsers.Születési dátum FROM tueUsers AS tueUsers GROUP BY tueUsers.full name, tueUsers . Születési dátum; //////////////////////////////////////////////// ////////////////////////// SELECT wUsers.Full Name, wUsers.Role FROM wUsers AS wUsers GROUP BY wUsers.Full Name, wUsers születésének

tPackage = Request.ExecutePackage();

TP_Születési dátum = tCsomag.Feltöltés();
TP_Roles = tPackage.Unload();

Amint látjuk, a lekérdezés kötegben is végrehajtható és az eredmény tömbként feldolgozható. Bizonyos esetekben nagyon kényelmes.

15. A kötegelt kérés feltételei

Például van egy kötegelt kérésünk, ahol először a „Név, születési dátum, kód” mezőket kapjuk meg a „Felhasználók” könyvtárból, és a „Magánszemélyek” könyvtárból szeretnénk lekérni az ezekre a mezőkre vonatkozó feltételeket tartalmazó rekordokat.

SELECT Users.Individual.Name AS Név, Users.Individual.Date of Birth AS Születési dátum, Users.Individual.Code AS Code PLACE vtUsers FROM Directory.Users AS Users; //////////////////////////////////////////////// /////////////////////////////////az egyének válogatása.

Ilyen feltételeket írhat elő:

WHERE Individuals.Code IN (SELECT tueUsers.Code FROM tueUsers) AND Individuals.Name IN (SELECT tueUsers.Code FROM tueUsers) AND Individuals.BirthDate IN (SELECT tueUsers.DateBirth FROM tueUsers)

És megteheted így:

WHERE (Individuals.Code, Individuals.Name, Individuals.Date of Birth) IN (SELECT tueUsers.Code, tueUsers.Name, tueUsers.Date of Birth FROM tueUsers)

Sőt, a rend fenntartása is szükséges.

16. A lekérdezéskészítő meghívása a kötegelt kérés „feltételére”.

Ha feltételt kell előírni, mint a fenti példában, akkor elfelejtheti, hogyan hívják ezt vagy azt a mezőt a virtuális táblában.
Például a "Születési dátum" mezőben feltételt kell szabni, és a virtuális táblázatban ennek a mezőnek a neve "Adós születési dátuma", és ha elfelejti a nevet, akkor ki kell lépnie a feltétel szerkesztéséből anélkül, hogy mentse, és nézze meg a mező nevét. Ennek elkerülése érdekében használhatja a következő technikát.

A „B” konstrukció után zárójeleket kell tenni, és a zárójelek között üres helyet (szóközt) kell hagyni, kiválasztani ezt a szóközt és meghívni a lekérdezés konstruktorát. A tervező hozzáfér a kötegelt lekérdezés összes táblájához. A technika virtuális regisztertáblákon és a „Feltételek” fülön is működik. Ez utóbbi esetben jelölje be a "P (tetszőleges feltétel)" négyzetet, és lépjen be az "F4" szerkesztési módba.

A lekérdezéseket gyakran menet közben találták ki, és egyszerűen csak illusztrálják azokat a „technikákat”, amelyeken gondolkodtam.

Meg akartam nézni az indexek használatát a lekérdezésekben, de ez egy nagyon tág téma. Felteszem egy külön cikkbe, vagy később hozzáadom ide.

upd1. 11,12 pont
upd2. 13,14,15,16 pont

Használt könyvek:
Lekérdezési nyelv "1C:Enterprise 8" - E.Yu. Khrustaleva
Szakmai fejlődés az 1C:Enterprise 8 rendszerben."

Tetszett a cikk? Oszd meg