tévék. Konzolok. Projektorok és tartozékok. Technológiák. Digitális TV

1c lekérdezés tervező. Lekérdezés konstruktorok. Hogyan készítsünk beágyazott lekérdezést egy szokásos lekérdezésből a konstruktorban

Ma arról fogunk beszélni, hogyan kell csinálni beágyazott lekérdezések segítségével lekérdezéskészítő. Menjünk egyenesen egy példára.

Tegyük fel, hogy rendelkezünk ezzel az egyszerű információs nyilvántartással, ahol az árakat áruk és szállítók tárolják:

Minden olyan terméket szeretnénk kérni, amelynek több szállítója is van. Ez a következő lekérdezéssel valósítható meg:

SELECT Szállítók száma.Termék AS Termék FROM (SELECT Ár.Termék AS Termék, MENNYISÉG(KÜLÖNBÖZŐ Ár.Szállító) AS Beszállítók FROM RegisztrációInformáció.Ár AS ár CSOPORT Ár.Termék) AS Szállítók száma WHERE Szállítók száma.Szállítók > 1

Beágyazott lekérdezés létrehozása a konstruktorban

Hozzuk létre a fenti kérést a konstruktor segítségével.

Ehhez a mező feletti parancspanelen Táblázatok nyomja meg a gombot Hozzon létre egy részlekérdezést:


Ezután megnyílik egy ablak a lekérdezéskonstruktor egy másik példányával:


És ebben az új ablakban létrehozunk egy beágyazott lekérdezést:




A gombra kattintva Kér A bal alsó sarokban az allekérdezés szövegét láthatjuk:


A segédkonstruktorban az OK gombra kattintás után a következő képet kapjuk a főablakban:


A kifejezés óta NestedQuery nem túl kényelmes az érzékeléshez, használjuk a jobb egérgombot a táblázat átnevezéséhez Szállítók száma, válasszon ki egy mezőt belőle Termékés a könyvjelzőn FeltételekÍrjuk fel a szükséges feltételt:




És mindezen manipulációk után megkapjuk szükséges kérés. Szükség esetén többféle beágyazási szinttel is létrehozhat lekérdezéseket.

Hogyan készítsünk beágyazott lekérdezést egy szokásos lekérdezésből a konstruktorban

Nagyon gyakran adódik olyan helyzet, amikor elkezd egy kérést benyújtani a konstruktorban, és egy ponton rájön, hogy be kell ágyazni. Természetesen a mi példánkban nincs probléma - egyszerűen törölhet mindent, és újra kiadhatja a kérést. De a gyakorlatban sokkal több van összetett példák például több szintű beágyazással, amikor több órát is eltöltöttek a kérés benyújtásával. És ebben az esetben van egy meglehetősen egyszerű kiút. Használhatja a beépített konstruktort szövegszerkesztő kéréseket. Gombot kell használni Kér kapja meg a kérés szövegét (lásd a fenti képet), és másolja a vágólapra. Ezután hozzon létre egy új beágyazott lekérdezést, és nyomja meg újra a gombot Kér, illessze be a szöveget a pufferből, majd kattintson az OK gombra. Ennek megfelelően a régi kérés a felső szint kitakarítjuk. Így szükség esetén menet közben is könnyedén létrehozhatunk többszintű egymásba ágyazott lekérdezéseket.

A platform kínálja a fejlesztőnek a tényleges Query Buildert és a Query Buildert eredményfeldolgozással. Az első esetben a konstruktor lehetővé teszi, hogy pusztán vizuális eszközöket használjon a rendszertáblázatok adatainak kiválasztásához:

A második esetben bizonyos manipulációkat lehet elvégezni a mintaeredménnyel:

A Query Builder vállalati módban (lekérdezési konzol feldolgozásként) és a konfigurátorban is működik. A Vállalati módban való használat lehetővé teszi a haladó felhasználók számára, hogy önállóan olyan adatmintákat szerezzenek be, amelyekhez nincsenek szabványos jelentések.

A Configuratorból a konstruktor a jobb gombbal közvetlenül a modul szövegéből hívható meg:

vagy a modulban állva a főmenüből Szöveg:

Az 1C vizsga 04.41 kérdése: Platform Professional. A lekérdezéskészítő segítségével a következőket teheti:
  1. Programkód generálása, amely tartalmazza a Request beépített nyelvű objektum létrehozását, a kérés szövegét és a kérelem végrehajtásának eredményét
  2. Az 1. és 3. válasz helyes
  3. A fentiek mindegyike
A negyedik helyes válasz az, hogy egy normál konstruktor nem hoz létre programkódot, azt a Query Constructor hozza létre az eredmény feldolgozásával.

Az 1C vizsga 04.42 kérdése: Platform Professional. A lekérdezéskonstruktor használata eredményfeldolgozással lehetővé teszi a következőket:

  1. Új kérelem szövegének létrehozása
  2. A beépített nyelvű Request objektum létrehozását, a kérés szövegét tartalmazó programkód generálása, a kérés eredményének lekérése és feldolgozása
  3. Szerkessze egy meglévő kérelem szövegét
  4. A fentiek mindegyike
  5. Az 1. és 3. válasz helyes
A helyes válasz a negyedik, lásd fent.
Az 1C vizsga 04.43 kérdése: Platform Professional. Egy olyan lekérdezés szövegének mentésekor, amelyet a lekérdezéstervezővel a szöveg módosítása nélkül újra megnyitnak:
  1. Az eredeti szöveg változatlan marad
  2. Csak a megjegyzések törlődnek az eredeti szövegből
  3. A megjegyzések az eredeti szövegben maradnak, és csak a jelentéskészítő lekérdezési nyelvi konstrukciói kerülnek eltávolításra
  4. A megjegyzések és a jelentéskészítő lekérdezési nyelvi konstrukciói is eltávolítódnak az eredeti szövegből
A helyes válasz a második. Adjunk hozzá egy megjegyzést manuálisan a kérés szövegéhez:

Nyissunk ezt a kérést a Constructor segítségével, és zárja be a konstruktort az OK gombbal. A megjegyzés törlésre kerül:

Az 1C vizsga 04.44 kérdése: Platform Professional. A lekérdezéskészítő nevezhető:
  1. A "Szöveg - Lekérdezéskészítő..." főmenüpont használatával
  2. A "Designers - Query Builder" gomb használatával az "Elrendezések" lapon az objektumszerkesztő ablakban
  3. A felugró elem használata helyi menü"Lekérdezés konstruktor...", amely akkor jelenik meg, ha jobb gombbal kattint a modul szövegére
  4. A fentiek mindegyike igaz
  5. Az 1. és 3. válasz helyes
A helyes válasz az ötödik, a lekérdezéskonstruktor Elrendezések lapján nincs kérés, csak:
Az 1C vizsga 04.45 kérdése: Platform Professional. Ki használhatja a lekérdezéskészítőt?
  1. Fejlesztők, mivel a lekérdező nyelv ismerete szükséges
  2. Képzett felhasználók a konfigurátor használata nélkül
  3. A fentiek mindegyike igaz
  4. Nincs helyes válasz
A helyes válasz a harmadik.

Az 1C vizsga 04.46 kérdése: Platform Professional. A lekérdezéstervező "Táblázatok és mezők" lapján állítsa be:

  1. Adatforrások lekérdezése, amelyek lehetnek valós vagy virtuális táblák
  2. Táblázatok mezőinek halmaza – adatforrások lekérdezése
  3. Szabad kifejezésmezők
  4. Az 1. és 2. válasz helyes
  5. A fentiek mindegyike igaz
A helyes válasz az ötödik – beállíthat valós, virtuális (például egy Slice of the Recent) táblákat és tetszőlegesen számított mezőket:
Az 1C vizsga 04.47 kérdése: Platform Professional. Beágyazott lekérdezés létrehozása a lekérdezéstervezőben:
  1. Nyissa meg a "Táblázatok és mezők" lapot. Az "Adatbázis" fa feletti parancspanelen kattintson a "Hozzáadás" gombra, vagy válassza ki az azonos nevű helyi menüelemet
  2. Nyissa meg a "Táblázatok és mezők" lapot. A "Táblázatok" fa feletti parancspanelen kattintson a "Hozzáadás" gombra, vagy válassza ki az azonos nevű helyi menüelemet
  3. Nyissa meg a "Táblázatok és mezők" lapot. A "Mezők" fa feletti parancspanelen kattintson a "Hozzáadás" gombra, vagy válassza ki az azonos nevű helyi menüelemet
  4. Nem hozható létre beágyazott lekérdezés a lekérdezéstervezőben.
A helyes válasz a második. Kérelem hozzáadása:

Eredmény:

Az 1C vizsga 04.48 kérdése: Platform Professional. Számított mező létrehozása a lekérdezéstervezőben:
  1. Nyissa meg a "Táblázatok és mezők" lapot. A "Táblázatok" fa feletti parancspanelen kattintson az "Aktuális elem szerkesztése" gombra. Adjon hozzá egy új mezőt a megnyíló ablakban
  2. Nyissa meg a "Táblázatok és mezők" lapot. A "Mezők" fa feletti parancspanelen kattintson a "Hozzáadás" gombra, vagy válassza ki az azonos nevű helyi menüelemet
  3. Nyissa meg az „Társítások/Aliasok” lapot. A mezők listája feletti parancspanelen kattintson a "Hozzáadás" gombra, vagy válassza ki az azonos nevű helyi menüelemet
  4. Számított mezőt csak a lekérdezés szövegének "kézi" megváltoztatásával hozhat létre
A helyes válasz a második:
Az 1C vizsga 04.49 kérdése: Platform Professional. Ha a lekérdezésben összesítő függvényekkel csoportosított sorokat szeretne létrehozni, akkor a következőt kell kitölteni a lekérdezéstervező „Csoportosítás” lapján:
  1. Csak a csoportmezők listája. Az összegzendő mezők megadása nem kötelező
  2. Csak az összesítendő mezők listája, míg a fennmaradó mezők automatikusan a GROUP BY részbe kerülnek a kérelem szövegében
  3. A csoportos és az összegezhető mezőket egyaránt kötelező megadni
A helyes válasz a második. Adjunk meg egy összegezhető mezőt a konstruktorban:

A fennmaradó mezők a kérés szövegében lesznek csoportosítva:

Az 1C vizsga 04.50 kérdése: Platform Professional. A lekérdezéstervezőben feltételek szabhatók az összesített függvények értékeire:
  1. A "Csoportosítás" lapon az összesített mezők listájában az összesítő függvény kiválasztásakor
  2. A „Feltételek” lapon
  3. Az "Összesen" lapon, az összesítő mezők listájában, amikor egy összesítő függvényt választ
  4. Nem állíthat be feltételeket az összesített függvények értékére a lekérdezéstervezőben.
A helyes válasz a második - a Feltételek fülre írhatja a Having lekérdezési nyelvi függvényt, amely aggregátumok alapján választ ki:

Nézzük meg, hogyan kapcsolhatjuk össze mezőnként ezt a két táblát Termékkód segítségével
query konstruktor (példaként az ideiglenes táblák létrehozására szolgáló kódot adjuk meg
Nem fogom. A fenti linkről tudod átvenni).

Nyissa meg a tervezőablakot, lépjen a lapra "táblák és mezők", szakaszhoz
"Asztalok" válassza ki mindkét táblázatunkat, és a részben "Mezők" -
mindkét táblából azokat a mezőket, amelyeket a lekérdezés eredményeként szeretnénk látni.

Menjen a könyvjelzőhöz "Kapcsolatok". Új sor hozzáadása. A mezőn 1. táblázat
a legördülő listából válassza ki a termékeket tartalmazó táblázatot, és a mezőben 2. táblázat Táblázat
országokkal.

Mert Táblázatok1 jelölje be a négyzetet Minden. Mert
Táblázatok2 Ezt a négyzetet nem jelöljük be. Ez azt jelenti, hogy től Táblázatok1
minden rekord ki lesz választva, és innen Táblázatok2 csak azokat, amelyekre elvégzik
kapcsolódási feltétel, vagyis ilyen jelzőkombinációval kapunk
BAL KAPCSOLAT. Ezután ki kell töltenie Kommunikációs állapot.
Itt a legördülő listákból kiválasztjuk a táblázat mezőit és a legördülő listából az összehasonlító jelet is
lista.

A kapcsolat eredményeként a következő kérés szövegét kapjuk:

SELECT VT_Product.Product Code, VT_Product.name, VT_Country.Country FROM VT_Product AS VT_Product LEFT CSATLAKOZÁS VT_Country AS VT_Country BY VT_Product.Product Code = VT_Country.Product Code

Most nézzünk meg közelebbről néhány pontot.
Próbáljuk meg kicserélni a jelölőnégyzetet Minden.


Úgy tűnik, a végén sikerülnie kell JOBB CSATLAKOZÁS, de ha mi
Nézzük meg a konstruktor által generált lekérdezési szöveget, látni fogjuk, hogy a táblák
helyet cseréltek, de a kapcsolat továbbra is megmaradt:

SELECT VT_Product.Product Code, VT_Product.Name, VT_Country.Country FROM VT_Country AS VT_Country LEFT CSATLAKOZÁS VT_Product AS VT_Product BY VT_Product.Product Code = VT_Country.Product Code

Lássuk, mi történik, ha mindkét jelölőnégyzetből eltávolítjuk a pipát

Ennek eredményeként belső kapcsolatot kapunk.

SELECT VT_Product.Product Code, VT_Product.name, VT_Country.Country FROM VT_Product AS VT_Product BELSŐ CSATLAKOZÁS VT_Country AS VT_Country BY VT_Product.Product Code = VT_Country.Product Code

Végül, ha mindkét jelölőnégyzet be van jelölve


teljes kapcsolatot kapunk

VÁLASZTÁS VT_Termék.Termékkód, VT_Terméknév, VT_ország.Ország FROM VT_Termék AS VT_Termék TELJES KAPCSOLAT VT_ország AS VT_ország VT_Termék.Termékkód = VT_ország.Termékkód

Egy könyvjelzőn több sort is megadhat Kapcsolatok. Ebben az esetben több
a sorokat feltétel köti össze ÉS. Ráadásul a vonalak nem szükségesek
hajtson be minden alkalommal újra. A kulccsal másolhatók F9.
És be új vonal csak a csatlakozási feltételt módosítsa. Ez jelentősen felgyorsítja a fejlődést.
Ezenkívül a link feltételben nem szükséges csak az előre meghatározott mezőket használni
legördülő listák. Használhat tetszőleges kifejezést, amely kielégíti
1C lekérdezési nyelv. Ehhez be kell jelölnie a négyzetet ingyenes
és írja be a feltételt közvetlenül a mezőbe, vagy nyisson meg egy segédablakot
ahol sablonokat használhatunk lekérdezési nyelvi függvényekkel.


Természetesen a gyakorlatban vannak sokkal összetettebb lekérdezések, ahol
több táblázat, amelyek különböző kapcsolatokkal rendelkeznek egymás között. De a lekérdezéskészítőben
bármilyen bonyolultságú kapcsolat reprodukálható.

Lekérdezés konstruktor az egyik fejlesztési eszköz. Lehetővé teszi a lekérdezési szöveg összeállítását egy lekérdezési nyelven, kizárólag vizuális eszközökkel.

Gombok használata KövetkezőÉs Vissza navigálhat a tervező lapjain, és megadhatja, hogy milyen adatok jelenjenek meg a lekérdezés eredményeként, hogyan kapcsolódnak, csoportosítanak, milyen összegeket kell kiszámítani, dolgozhat ideiglenes táblákkal, szerkesztheti a lekérdezések kötegét:

A konstruktor munkájának eredménye a szintaktikailag helyes kérés szövege lesz. Így a fejlesztő a lekérdezési nyelv szintaxisának ismerete nélkül is létrehozhat működőképes lekérdezést – a konstruktor automatikusan generálja a szükséges szintaktikai struktúrákat. A kész kérés szövege azonnal beilleszthető a modul szövegébe, vagy a vágólapra másolható.

Ezenkívül a lekérdezéstervező lehetővé teszi a már a programban lévő lekérdezés szövegének szerkesztését. Ehhez csak helyezze a kurzort a meglévő kérés szövegébe, és hívja meg a konstruktort. A meglévő kérésszöveg elemzésre kerül és bemutatásra kerül a tervezőben a megfelelő kiválasztott adatbázismezők és meghatározott kapcsolatok, csoportosítások, feltételek stb. formájában.

A lekérdezési szöveg „kézi” írásának lehetősége soha nem volt „felesleges”, de kényelmesebb a lekérdezéstervező használata.

Megjegyzés.

Sajnos be kezelt alkalmazás Az „Ismerkedés a lekérdezéssel” feldolgozása során nem használhatja a lekérdezéskonstruktort.

Normál módra váltva használhatja ebben a feldolgozásban, de ezt nem tesszük meg.

Hozzuk létre a „Request Constructor” feldolgozást, és határozzuk meg a „Jelentések és feldolgozás” alrendszerben.

Hozzunk létre egy feldolgozó űrlapot, és adjuk hozzá a "Tabular Document" típusú "TabDoc" űrlap attribútumait, valamint a "Lekérdezés futtatása" parancsot a "Lekérdezés futtatása" művelettel. Ezután húzza őket az űrlapra.

Az űrlap modulban a parancs működéséhez írunk egy eljárást:

&OnClient

Eljárás lekérdezés végrehajtása (parancs)

ExecuteRequestServer();

Vége eljárás

ExecuteRequestServer();

&OnServer

Bekerülünk a szerveren meghívott eljárásba, és a helyi menüből meghívjuk a „Lekérdezés konstruktort eredményfeldolgozással” (2.65. ábra).

2.65. ábra Lekérdezés konstruktor eredményfeldolgozással

Állítsa a feldolgozás típusát „Kimenet táblázatos dokumentumba” értékre, majd kattintson a „Tovább” gombra vagy a „Táblázatok és mezők” fülre.

A tervező „Táblázatok és mezők” fülén megtekintheti a rendszerben jelenleg meglévő táblákat (a bal oldali rész az „Adatbázis” címet viseli) (2.66. ábra).

2.67. ábra Lekérdezéskonstruktor

2.68. ábra Lekérdezés konstruktor

Itt eltávolítottuk a létrehozott alapértelmezett nézetmezőt – „PREPRESENTATION (Product ReceiptProducts.Nomenclature)”

A tervezővel végzett munka során bármikor megtekintheti a kapott kérés szövegét.

A feladat végrehajtásához a tervezői űrlap bal alsó sarkában található „Kérés” gombra kell kattintani (2.69. ábra).

A kérés szövegét manuálisan szerkesztheti a „Szerkesztés” gombra kattintva.

Gyakorlat. Kattintson az „OK” gombra, és ellenőrizze a feldolgozást felhasználói módban.

Ha elemzi a kérés teljesítésekor kapott adatokat, akkor megtalálhatja a tételek „ismétlését” (ha ez nem jött be, akkor bármilyen „Áruátvétel” bizonylatot lemásolhat és feladhat).

A „Query Constructor” feldolgozásban visszatérünk az ExecuteRequestServer() eljáráshoz, és a helyi menüből ismét meghívjuk a „Query Constructor with result process” (Lekérdezés konstruktor eredményfeldolgozással).

Ha egy lekérdezés eredményét szeretné „összecsukni”, akkor erre a célra használhatja a lekérdezéstervező „Csoportosítás” fülét.

A csoportosítások meghatározásakor be kell tartania a következő szabályt: minden lekérdezési mező fel van osztva mezőkre, amelyekkel csoportosítást (konvolúciót) hajtanak végre, beágyazott táblák mezőire (amelyek a csoportosításhoz képest összegződnek) és összesítésre. funkciókat. Határozzuk meg a csoportosításokat (2.70. ábra).

2.70. ábra Lekérdezéskészítő

Ha a kéréssel kapott adatokat valamilyen feltétel szerint kell kiválasztani, akkor ebben az esetben szükséges lehet a „Feltételek” fül használata.

Válasszuk az ÁrubevételGoods.Quantity=10 értéket (2.71. ábra).

    2.71. ábra Lekérdezés konstruktor feltétele.

    Kérjük, vegye figyelembe, hogy ha a feltételt ugyanúgy definiáljuk, mint az ábrán, akkor a kérés nem kerül végrehajtásra.

A helyzet korrigálásának két módja van:

A feltétel újradefiniálásával a „P...” jelző ellenőrzésével;

A kérés szövegének megváltoztatásának lehetőségét kihasználva (a „Kérés szerkesztése” gombra kattintva érhető el). Maga a kézi változtatás abból áll, hogy el kell távolítani az „&” szimbólumot a „10” szám előtt. Ez a szimbólum a kérés szövegében határozza meg a kérés paramétereit, amelyekbe bizonyos értékeket később (de a kérés végrehajtása előtt) be kell írni. Kattintson a „Lekérdezés szerkesztése” gombra, és szerkessze (2.72. ábra).„Válassza ki” a lekérdezési nyelvet), és határozza meg a lekérdezés megváltoztatására szolgáló táblák összetételét (2.74. ábra).

2.74. ábra További funkciók kér

A „Csatlakozások/Álnevek” fülön az „Aliass” beállítással módosíthatja a mezőneveket, de ezt nem tesszük meg.

A „Rendelés” fülön a lekérdezés eredményeként megadható rekordok rendezési sorrendje (2.75. ábra).

2.75. ábra: Rekordok rendezési sorrendje

Ügyeljen az „Automatikus rendelés” jelzőre, amely referencia típusú mezők szerint rendelhető.

Az „Összesen” rész meghatározásakor fel kell készülni arra, hogy a lekérdezés hatására „további” összesített rekordok jelennek meg. Ezekkel a rekordokkal együtt a lekérdezés eredménye hierarchikussá válik (2.76. ábra).

2.76. ábra: A lekérdezés konstruktor eredményei.

Többféle végösszeg megadható:

    Elemek (a lekérdezés eredménykijelölése csoportosítási összegeket és részletes rekordokat tartalmaz);

    Hierarchia (a lekérdezés eredménykiválasztásánál általános esetben hierarchia szerinti összesítő rekordok, csoportosítás szerinti összesítő rekordok és részletes rekordok vannak);

    Csak hierarchia (a lekérdezés eredményének kiválasztásánál általános eset vannak összefoglaló rekordok a hierarchia szerint).

A konstruktor „Ok” gombjára kattintás után egy „Layout” generálódik, és az ExecuteRequestServer() eljárás kódja beírásra kerül az űrlap modulba:

Vége eljárás

Eljárás ExecuteRequestServer()

//((QUERY_CONSTRUCTOR_WITH_RESULT_PROCESSING

// Ezt a töredéket a konstruktor építette fel.

// A konstruktor újrafelhasználásakor a manuálisan végrehajtott változtatások elvesznek!!!

Layout = Processing.QueryConstructor.GetLayout("Layout");

Request = Új kérés;

Kérelem.Szöveg =

| Áruk átvétele Az áruk nómenklatúrája,

| SUM (Áruk átvétele. Mennyiség) AS Mennyiség,

| SUM(Áru átvétele.Áruk összege) AS Összeg

| Dokumentum.Áru átvétele.Áruk

| A TERMÉKEK ÁTVÉTÉSE

| Áru átvétele Áru mennyiség > 1

|GROUP BY

| Áruk átvétele.Nómenklatúra

|RENDELÉS

| Mennyiség,

| Összeg CSÖKKENTÉS

| SZUM (mennyiség),

| SUM(összeg)

| Nómenklatúra HIERARCHIA";

Eredmény = Query.Run();

HeaderArea = Layout.GetArea("Fejléc");

AreaFooter = Layout.GetArea("Lábléc");

TableHeadArea = Layout.GetArea("Táblázatfejléc");

TableFooterArea = Layout.GetArea("Táblázatláb");

AreaNomenclatureHierarchy = Layout.GetArea("NómenklatúraHierarchia");

AreaNomenclature = Layout.GetArea("Nómenklatúra");

TabDoc.Clear();

TabDoc.Output(AreaHeader);

TabDoc.Output(Table HeadArea);

TabDoc.StartAutoGroupingRows();

SelectionNomenclature = Result.Select(BypassQueryResult.ByGrouping);

Míg SelectionNomenclature.Next() Loop

Ha SelectionNomenclature.RecordType() = RequestRecordType.TotalByHierarchy akkor

Terület = AreaNomenclatureHierarchy;

Régió = RegionNomenclature;

endIf;

Area.Parameters.Fill(SelectionNomenclature);

TabDoc.Output(Area, SelectionNomenclature.Level());

EndCycle;

TabDoc.FinishAutoGroupingRows();

TabDoc.Output(Table FooterArea);

TabDoc.Output(AreaFooter);

//))CONSTRUCTOR_QUERY_WITH_RESULT_PROCESSING



Kapcsolódó kiadványok