Beágyazott lekérdezések a konstruktorban. Konstruktorok lekérdezése 1c konstruktorfeltételek lekérdezése

Tehát kezdjük valami egyszerűvel: hozzon létre egy Új feldolgozást a konfigurátorban, nevezze el Lekérdezéskonzolnak vagy Lekérdezéskészítőnek, ahogy tetszik.

Azonnal hozzáadhatunk egy táblát az „Adatok”-ba a jövőbeni paraméterekhez, amelyekre szükségünk van, így a konzolunkban nem a legprimitívebb kérést futtatjuk, hanem paraméterekkel és hivatkozásokkal, például a munkánkhoz kérést hozunk létre a periodikus regiszterekhez. , de itt Paraméter utasítások nélkül=&Dátum sehol.

A Paraméterek táblánk elkészítéséhez a „Tabuláris rész” „Adatok” lapján egy új táblát adunk hozzá, nevezzük Query Parameters-nek, ide adjuk hozzá ennek a táblának az oszlopait: 1) ParameterName, string = 25 karakter ; ParameterValue, itt egy összetett adattípus, lásd az ábrát:

Ezért a képen látható módon a Paraméterérték oszlophoz egy összetett típust választunk: a megnyíló típus menüben jelölje be az „Összetett típus” jelölőnégyzetet, válassza ki a számot, a karakterláncot (adjon meg 20 karaktert), a dátumot, a logikai értéket, és jelölje be. az alsó jelölőnégyzet – AnyLink – azt jelenti, hogy kérésünk Paramétereinek megadásakor a konfigurációnk bármely objektumára hivatkozhatunk, például könyvtárakra vagy dokumentumokra.

Most létre kell hoznunk jövőbeli Query Console-unk formáját. A feldolgozás során menjünk a „Űrlapok” fülre és adjunk hozzá egy újat.. Belépünk ebbe az űrlapba és máris korlátlan a kreativitás mezője - a most elkészített két részletet és egy tányért paraméterekkel tetszés szerint elrendezheti! Ehhez használhat szabványos űrlapelemeket, például csoportot vagy oldalakat tartalmazó oldalt (ha inkább lapozgat.

A lényeg itt egy dolog: miután áthúzta a „TextValues” attribútumot az űrlap bal oldali szerkesztési mezőjébe, ne felejtse el beállítani a „View”=Text Document Field beállítást a tulajdonságainál. Lásd az ábrát:

A „Query Table” attribútum tulajdonságainál opcionálisan megadhatja a „Megjelenítési rácsot” és a „Fejlécek megjelenítését”.

Ezután a jobb oldali űrlap szerkesztési ablakában lépjen a „Parancsok” fülre, és adjon hozzá egy új gombot, amikor rákattint, a konzolunk végrehajt egy bizonyos műveletet. Készítsünk egy „Lekérdezéstervező” gombot, ha akarod, a gombhoz egy ikont is csatolhatsz, a lényeg, hogy magát a gombot helyezzük a bal oldali űrlapszerkesztő ablakba - hogy lássuk. Majd a megfelelő formában szerkesztő ablak, kattintson a jobb gombbal a gombunkra, és válassza ki a tulajdonságokat – a tulajdonságok között kattintson a „Művelet” elemre, megjelenik egy modális ablak, amely megkérdezi, hogy pontosan hol fog lefutni a programkódunk, amelyet a gombhoz rendelünk – válassza a „ Az ügyfélen”.

Az űrlapmodul megnyílik egy kész üres eljárással: „Eljáráslekérdezés konstruktor (parancs)”. Ezen az eljáráson belül leírjuk a szabványos 1c8 Query Builder hívását. Nagyon könnyű: Constructor = New Request Constructor; De vannak itt buktatók - a platformba épített Query Constructor CSAK vastag kliens alatt működik felhasználói módban! Ezért beszúrjuk a #If előfeldolgozó utasítás feltételét, de itt Ön dönti el saját maga, a platformja alapján, vagy szokásos űrlapja van, majd válassza a „ FatClientRegularApp" vagy kezelt űrlapokon alapuló platformja van, akkor a " ThickClientManagedApplication“.lásd az ábrát.

Most már csak hozzá kell adni ehhez az eljáráshoz a kérésszöveg rögzítésének feltételét, amelyet a Lekérdezéskészítő generál nekünk a „Kérés szövege” űrlapunk részleteiben:

Ha Constructor.OpenModal()=True, akkor Object.RequestText=Constructor.Text; endIf;

De manuálisan is módosíthatunk valamit a kérés szövegében (felhasználói módban - a „Request Text” attribútum ablakában), hogy a változtatásaink a Query Constructorba kerüljenek, amikor újra meghívják - itt egy egyszerű feltételt adunk hozzá:

Ha nem EmptyString(Object.QueryText), akkor Constructor.Text = Object.QueryText; endIf;

Ennyi, az 1c8 platformba épített Query Constructort csatlakoztattuk, nézzük a munkánkat. Ehhez indítsa el az 1C:Enterprise alkalmazást vastag kliens módban az alábbi módszerek egyikével: 1) a Konfigurátor főmenüje – Hibakeresés – Hibakeresés indítása – Thick Client; 2) vagy ha ezek a billentyűk vannak a vezérlőpulton a konfigurátorban - csak nyomja meg a sárga kört egy vastag ponttal, lásd az ábrát:

Elindul az 1cEnterprise8 felhasználói módja, megtaláljuk a feldolgozásunkat, elindítjuk, rákattintunk a „Query Designer” gombra, és megnézzük, hogyan nyílik meg a platformba épített designer. lásd az ábrát.

Tehát fut a Query Constructor, elkezdhetjük benne összerakni a jövőbeli lekérdezésünket, de kíváncsiak vagyunk, hogyan fog működni az általunk készített lekérdezés! Ehhez pedig egy másik gombot kell létrehoznunk a konfigurátorban, amikor a konzolunk formáját szerkesztjük, nevezzük ezt „Run Query”-nek. A „Lekérdezés futtatása” gomb tulajdonságainál kattintson a „Művelet” gombra, ismét megjelenik egy menü, amelyben megkérdezzük, hogy a programkódunk hol lesz feldolgozva, ebben az esetben a „kliensen és a szerveren egyaránt” lehetőséget választjuk. ismét az Űrlapok modulban találjuk magunkat.

Az Execute Query() eljárásban, ami a kliensünkön van, akkor írunk egy feltételt, ha a felhasználó nem írta be a lekérdezés szövegét, de kéri annak végrehajtását:

If EmptyString(Object.QueryText) Then report("Írja be a lekérdezés szövegét!"); endIf;

A rendszer már automatikusan generált egy hivatkozást az Execute RequestOnServer() eljáráshoz; – ez jó, menjünk erre az eljárásra, ami a szerveren lefut, és írjuk ide a beírt kérésünk végrehajtásának kódját.

Itt vannak lehetőségek: A lekérdezések felépítéséhez kapcsolódó összes kifejezést saját maga is megírhatja, pl. manuálisan, de van egy még egyszerűbb lehetőség - az eljáráson belül kattintson a jobb gombbal, és a legördülő menüben válassza a „Lekérdezéskészítő az eredmények feldolgozásával, lásd az ábrát” lehetőséget:

Ha a „Lekérdezéskészítő eredményfeldolgozással” elemre kattintott, megjelenik egy modális ablak „A lekérdezés szövege nem található. Újat hoz létre?”, kattintson az igen gombra. Megnyílik a beépített lekérdezéstervező, amelynek első lapján "Eredményfeldolgozás" - válassza ki az első elemet "Az eredmény megkerülése". Ez az, nincs szükségünk másra ettől a konstruktortól, kattintson az „Ok” gombra - megjelenik egy modális ablak: „Nincs mező a kérelemben, kattintson az „Ok” gombra.

Ezt követően a következő kész sablon jelenik meg az ExecuteRequestOnServer() eljárásunkban:

Térjünk át a konstruktor által összeállított kifejezésre:

Request.Text = "";

Request.Text = Object.RequestText;

Ennyire egyszerű, a feldolgozási űrlapon lévő „Kérés végrehajtása” gombunk már gyakorlatilag működik, eddig csak egyszerű, paraméterek nélküli kéréseket tud feldolgozni, de a lényeg, hogy működik! Nincs más hátra, mint vizuálisan megjeleníteni kérésünk eredményét a feldolgozási űrlap „Értéktábla” attribútuma alatt. Hadd emlékeztesselek arra, hogy az „Értéktáblázat” attribútumunk „Táblázatos dokumentum” típusú, mert különben felhasználói módban nem látjuk az eredményeinket. A táblázatos adatok megjelenítése a felhasználó számára mindig vagy táblázatos dokumentummal vagy elrendezéssel történik. Nagyon szeretném, ha lehetőség lenne értéktáblázaton keresztül megjeleníteni az adatokat - mivel nagyon könnyen használható és ismerős, de Sajnos az értéktáblázat csak egy olyan eszköz, amelyre a fejlesztőnek szüksége van, ezzel nem lehet adatokat megjeleníteni a képernyőn...

Nézzük meg közelebbről, mi is az a táblázatos dokumentum - olyan, mint egy Excel munkalap - egy adott cellában lévő rekordhoz csak a Táblázatcellák segítségével juthatunk el, itt területnek nevezzük őket, de mi magunk választhatjuk ki ennek a területnek a tartományát. egy adott cellába:

Tehát kitaláltuk, mi az a táblázatos dokumentum, és magunk határoztuk meg, hogy a lekérdezésünk adatait ennek a táblázatos dokumentumnak egy adott cellájában kell meghatároznunk. De gondoljuk át: mi az a „lekérdezés eredménye”, amit a tervező olyan gyorsan generált nekünk? Nyissa meg a súgót - A lekérdezés eredménye egy táblázat, amely rendelkezik a megfelelő tulajdonságokkal! lásd az ábrát.

És ha most a Query Result = Query.Execute(); (a konstruktor által létrehozott) kifejezés után írunk, akkor itt van egy ilyen egyszerű ciklus a gyűjteményekhez:

Minden ColumnName From Query Result.Columns ciklus jelentés(Oszlopnév.Név); EndCycle;

E ciklus után jegyezze fel most a konstruktor által automatikusan létrehozott összes kifejezést. És futtasd az 1C:Enterprise8-at a vastag kliens alatt. Készíts tetszőleges egyszerű lekérdezést (Használhatod a Query Builder-t - nálunk már működik) és kattints a „Lekérdezés futtatása” gombra:

Az üzenetablak alján látni fogja, hogy a Lekérdezés eredménye tábla tárolja azoknak a mezőknek a nevét, amelyeket egy egyszerű lekérdezés létrehozásával választottunk ki.

Most jelenítsük meg szenvedésünk területeinek ezeket a neveit egy táblázatkezelő dokumentumban:

Minden ColumnName From Query Result.Columns Loop Cell=Object.QueryTable.Area(1,QueryResult.Columns.Index(Oszlopnév)+1); Cell.Text=Oszlopnév.Név; EndCycle;

A lekérdezés adatainak megjelenítéséhez elemezzük a tervező által automatikusan létrehozott kifejezéseket, és illesszük be magának a lekérdezésnek a „SelectionDetailedRecords” rendezési ciklusába pontosan ugyanazt a ciklust, amelyet az oszlopnevek megjelenítésére használtunk, csak most át kell vinnünk nem a „Lekérdezés eredménye” tábla adatait a Cellaszövegbe. és magának a Kijelölésnek az adatait, nézzük meg a súgóban, hogyan érheti el a kérés Részletes kijelölés mezőjét:

SelectionDetailRecords = QueryResult.Select(); Míg SelectionDetailedRecords.Next() Loop //az első sorban már fel van írva a táblázat oszlopainak neve, így az első sor alá töltjük be az adatokatDocRowNumber=Object.QueryTable.TableHeight+1; Minden ColumnName From Query Result.Columns Cycle Cell=Object.QueryTable.Area(DocSorNumber,QueryResult.Columns.Index(Oszlopnév)+1); Cell.Text = SelectionDetailedRecords[OszlopNév.Név]; EndCycle; EndCycle;

Ennyi, ellenőrizhetjük, betölthetjük a vállalkozást egy vastag kliens alá, beírhatunk egy egyszerű kérést paraméterek nélkül, rákattintunk a „Lekérdezés futtatása” gombra, lásd az ábrát:

Hurrá, minden működik!!!

Nagyon kényelmes, amikor a Query Console megnyitásakor/bezárásakor ismét a „Lekérdezés szövege” mezőbe kerül a lekérdezési szövegünk, amellyel a konzol bezárása előtt dolgoztunk. Ehhez csak engedélyeznie kell az űrlap tulajdonságot = Autosave, lásd az ábrát:

Ez az, a konzolunk működik. Ahhoz, hogy bonyolultabb lekérdezéseket írhassunk a bennük megadott paraméterekkel, létre kell hoznunk egy másik „Paraméterek keresése” gombot, valamint a „Lekérdezés futtatása” gomb kódját - a „Paraméterek keresése” gomb kódja végrehajtásra kerül. a kliensen és a szerveren. Ezután a szerver eljárásban ugyanúgy elindítjuk a kérést a „Request Text” ablakból átadott szöveggel, a „Request.FindParameters()” kifejezéssel megkeressük az átadott paramétereket, és egyszerűen beírjuk őket egy hurok a „Paraméterek kérése” űrlap táblázatos részébe. Ne felejtse el átvinni őket a kitöltött paramétertáblázatból a „Lekérdezés futtatása” eljárásba.

Néhány gombot is hozzáadhat a konzolunkhoz, amelyek felhasználói módban kiürítik a Paraméterek ablakot és a Szöveg kérése ablakot.

A Query Console használatra kész, sikeres kreatív megoldásokat kívánok egy olyan egyszerű és hatékony eszközzel, mint a Query Console!

Ez a feldolgozás az 1c8.3 platformra íródott (felügyelt űrlapok), és vastag kliens alatt fut. Az 1c8.2 platformon is írható, mind normál, mind menedzselt űrlapok alá.

A letöltés az általunk most létrehozott Query Console mintáját tartalmazza.

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

A Query Console frissítése:

1) Mostantól a beépített Query Builderrel rendelkező, házi készítésű Query Console bármelyik kliens alatt futni fog: normál és kezelt űrlapokból álló vastag kliens alatt, valamint vékony és webes kliens alatt.

p.s. A beépített Query Builder formája és megjelenése eltérő - attól függően, hogy melyik kliens alatt indítottuk el a konzolunkat. (Én személy szerint jobban ismerem és kényelmesebb a Query Builder formája vastag kliens alatt)

&A Client Procedor Query Constructoron (parancs) //A szabványos Query Constructor meghívása csak vastag kliens esetén lehetséges. #If ThickClientManagedApplication vagy ThickClientNormalApplication Then Constructor=New Query Constructor; Ha nem EmptyString(Object.QueryText), akkor Constructor.Text = Object.QueryText; endIf; Ha Constructor.OpenModal()=True, akkor Object.RequestText=Constructor.Text; endIf; // #Else // Jelentés("A Query Builder meghívása csak vastag kliens esetén lehetséges"); // Visszatérés; //# EndIf #Else Report("Ön vékony kliens alatt futtatja a Query Builder-t – kissé eltér a formája és a teljesítménye!"); Constructor = New QueryConstructor(); Ha nem EmptyString(Object.QueryText), akkor Constructor.Text = Object.QueryText; endIf; Constructor Alert = New AlertDescription("RunAfterClosingConstructor", ThisForm); Constructor.Show(Constructor Alert); # EndIf Eljárás vége &A kliens eljáráson ExecuteAfterClosingConstructor(Result, ConstructorParameters) Export //Result=text, ha a Constructort az ok gombbal zárták be Object.RequestText = RövidítettLP(Eredmény); //művek!!! Az eljárás vége

2) Hozzáadtuk az egyszerű Query Console-unkhoz, hogy összetett lekérdezéseket vigyünk be a paraméterekhez átadott ideiglenes táblával!!! A mechanizmus nagyon egyszerűnek és elegánsnak bizonyult - XML-kód használata nélkül, mint a professzionális konzolokon.

Magát a kódot és az ideiglenes táblák paramétereihez való átviteli mechanizmust a második csatolt fájlban láthatja. Hogy hogyan kezdtem el fejleszteni az ideiglenes táblázatok saját verzióját a paraméterekben, az ezen a linken található: https://forum.infostart.ru/forum9/topic183700/

Most hogyan kell használni a konzolt egy összetett lekérdezéshez, amikor egy ideiglenes tábla átadásra kerül a paramétereihez. Például felveheti ennek a kérésnek a kódját;

SELECT ExternalData.Product, ExternalData.Quantity PLACE ExternalData FROM &ExternalData AS ExternalData; //////////////////////////////////////////////// /////////////////////////// SELECT ExternalData.Product, ExternalData.Quantity, ISNULL(RemainingProductRemaining.QuantityRemaining, 0) AS Field1, ISNULL(Remaining ProductsReMainings.QuantityRemaining, 0) - Externaldata.Quantity As az ExterpeData -tól, mint az Externaldata -tól, a Bal Csatlakozzon regisztrációs akkumulációk. Termék

A fenti lekérdezési kód példája és hasonlósága alapján elkészítheti saját komplex lekérdezését, figyelembe véve adatobjektumait.

Tehát a lekérdezéstervezőben elkészítettük a fenti lekérdezést, a Constructor bezárásával - a lekérdezés szövege a konzolunk „Lekérdezés szövege” mezőjébe kerül, kattintson a „Paraméterek keresése” gombra, látjuk, hogy a Paraméterek táblában megjelent egy sor. = „Külső adatok”, Érték típusa = „Értéktábla”, lásd az ábrát.

Ebben a paramétertáblázatban - írja be a Dátum paramétert, például a mai dátumot, majd kattintson az ideiglenes táblaparaméterünk „Külső adatok” szerkesztéséhez, kattintson az „Értéktáblázat” mezőbe három ponton - a típusok kiválasztása megjelenik. megjelennek, kattintsunk a Sor gombra, a mechanizmusunk az űrlap oldalát forgatja, ahol manuálisan kell megadnunk ezt a nagyon ideiglenes táblát.

Itt jegyezzük meg, hogy ebben az esetben az „Időtáblák” oldalon alul az „Ideiglenes táblanév a paraméterekben” mezőben megjelenik az ideiglenes táblánk neve (a Paraméterek táblából másolva).

Az „Időtáblák” oldalon eddig csak egy üres táblát látunk – ez a leendő ideiglenes táblánk Típusainak táblázata.A „Hozzáadás” gombbal hozzáadjuk a leendő tábla részleteinek nevét és típusát. . Legyen óvatos – a névnek és típusnak meg kell egyeznie azzal, amit a &ExternalData kérésben adtunk meg:

Most megnyomjuk az „Ideiglenes tábla frissítése” gombot – és itt lesz egy második táblázatunk is – a „Hozzáadás” gombon keresztül közvetlenül feltöltjük ideiglenes táblaadatokkal.

Ennyi, még egyszer ellenőrizhetjük magunkat, hogy a feldolgozás 1. oldalán lévő paramétertáblázatba beírtuk-e a lekérdezési paraméterek primitív adatait, majd rákattintunk a „Lekérdezés futtatása” gombra – minden kiszámításra és kijelölésre kerül a az ideiglenes táblánk paraméterében átadott adatok korlátozása

Ui.: Ha hibát követett el az adatok és típusaik nevének begépelésekor (az első táblázatban) - csak zárja be a konzolt és nyissa meg újra - az ideiglenes adattábla törlődik - és a Típusok tábla ismét szerkeszthető és új adattábla újra létrehozható.

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Ennyi, saját kezűleg egy nagyon erős munkaeszközt készíthetünk, ráadásul a konzolunk még mindig nagyon gyors a professzionálisakhoz képest - és ez nagyon nagy plusz a fejlesztőknek! És természetesen most a konzolunk bármelyik kliens alatt működik! Sok sikert a kreatív fejlesztésekhez!!!

Nézzük meg, hogyan kapcsolhatjuk össze mezőnként ezt a két táblát Termékkód segítségével
lekérdezés konstruktor (példaként az ideiglenes táblák létrehozásának kódja látható
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 terepen Asztal 1
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 asztal
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.
Az új sorban pedig 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ó.

A lekérdezéstervező a következő lapokból áll:

1. „Táblázatok és mezők” – három hierarchikus lista található a lapon:
a. „Adatbázis” – felsorolja az összes elérhető objektumot, amelyhez lekérdezhető. Szintén gomb "Változóasztalok megjelenítése", amellyel elérheti az információbiztonsági objektumok változástáblázatait, ha azok bármely cseretervhez regisztrálva vannak.
b. „Táblázatok” - azon kiválasztott táblák listája, amelyekre a lekérdezés végrehajtásra kerül. Szintén ebben az ablakban törölhet táblát, átnevezhet vagy lecserélhet egy táblát, és hozzáadhat belső lekérdezést.

A virtuális táblákhoz paramétereket rendelhet a „Virtuális táblák paraméterei” gombra kattintva:

Ajánlott a virtuális táblák paramétereinek aktív használata bizonyos dimenziók szerinti kijelöléshez, mivel ez megnöveli a lekérdezés végrehajtásának sebességét. A paraméterekben külső változókat használhatunk, amelyek neve előtt az „&” jel szerepel.
c. „Mezők” – a táblázatokból kiválasztott mezők listája. Számított mezőket is hozzáadhat, ehhez a „Hozzáadás” gombra kattintva megnyílik az egyéni kifejezéskonstruktor:

A bal oldalon van egy ablak a kifejezésben elérhető mezőkkel. A jobb oldalon található egy tipp a használt funkciókra. Az alábbiakban egy tetszőleges szerkeszthető kifejezés látható. Használhat külső paramétereket a kifejezésekben; ezeket „&” jellel jelöljük, például: &Period, &StartDate
Vigyázni kell, ha az ablakba egy hosszú és összetett kifejezést írunk be, amely kis szintaktikai hibát tartalmaz, akkor az „OK” gomb megnyomása után a rendszer figyelmeztetést ad és bezárja az ablakot. Minden beírt kód elvész, ezért azt javaslom, hogy ha nem biztos a kifejezés helyességében, akkor a konstruktor bezárása előtt mindig mentse a tartalmat a vágólapra (Ctrl-C).

2. „Kapcsolatok” - a fülön a táblázatok közötti kapcsolatok láthatók.

A táblázat jelzi a csatolandó táblákat, a csatolandó táblák közötti kapcsolatot és a kapcsolódási feltételt. Ha a kapcsolódási feltétel összetett, akkor megadhat egy bizonyos számított kifejezést, és megnyílik az egyéni mező konstruktor.

3. „Csoportosítás” - a fül jelzi, hogy mely mezők vannak csoportosítva, és melyek vannak összesítve (összesítve).

4. A „Feltételek” fül – felsorolja a kéréssel kapcsolatos feltételeket.
Feltételekben összetett kifejezéseket is írhat az egyszerű kifejezéskonstruktor segítségével és külső változók használatával:

5. "Speciális"
További paraméterek a kérelemhez

6. „Társítások és álnevek”
Ezen a lapon álneveket rendelhet a mezőkhöz, valamint kezelheti az „UNITE” vagy „UNITE ALL” konstrukciókon keresztül kapcsolódó lekérdezéseket.

7. "Megrendelés"
Milyen sorrendben jelennek meg a lekérdezés eredményei?

Figyelem! A könyvjelző alján egy pipa látható "Automatikus rendelés"- az 1C 8.1 jelenlegi verziójában az ACS-ben használhatatlan, sőt, ha a jelölőnégyzet be van jelölve, rögzítéskor az ACS hibát ad, ezért nem szabad használni.

8. „Adatösszetétel”
Az a lap, amelyen a hozzáférés-vezérlő rendszer szolgáltatásmezői vannak meghatározva. Megközelítőleg ugyanazt a szerepet tölti be, mint a „Jelentéskészítő” lap egy normál jelentéstervezőben.

V. A „Táblázatok” fülön - a lekérdezésben használt táblák listája látható, a „Kötelező” jelölőnégyzet bejelölésével jelezheti, hogy a táblának szerepelnie kell-e a lekérdezésben. Azok. ha nincs mező a kijelölésben, akkor ez a tábla egyáltalán nem vesz részt a lekérdezésben. A táblákhoz paramétereket is megadhat.

A beléptető rendszer beállítása során megadjuk az esetleges kijelöléseket, majd az összes kiválasztási értéket behelyettesítjük a virtuális táblák paramétereibe, ami ismét segít optimalizálni és felgyorsítani a lekérdezést.
b. A „Mezők” lapon megjelennek azok a mezők és álneveik, amelyek hozzáadódnak az ACS mezők listájához.
c. „Feltételek” - ha az ACS beállításaiban kijelölések vannak megadva, az összes kiválasztási érték hozzáadódik további feltételként; összetett kifejezések is hozzáadhatók a feltételekhez.

9. "Jellemzők"
Egy könyvjelző, amelynek nincs analógja a szokásos kimeneti forma konstruktorában.

Ez a lap lehetővé teszi a lekérdezések munkájának jellemzőkkel való bővítését. A lapon lévő táblázat több mezőből áll:
a. „Érték típusa” – az a típus, amelyhez a jellemzőket kiválasztják. Ha például a „Könyvtárhivatkozás.Nómenklatúra” értéket adja meg, akkor a nómenklatúra összes jellemzője kiválasztásra kerül a lekérdezésben.
b. „Forrás” – a jellemző típusok tulajdonságainak forrása, lehet lekérdezés vagy táblázat. Ebbe a mezőbe írhatunk egy kérést, hogy csak azokat a tulajdonságokat válasszuk ki, amelyekre szükségünk van.
c. „Tulajdonságok listája” - egy mező, amelyben fel van tüntetve a jellemzők tulajdonságainak forrása. Leggyakrabban ez egy jellemző típusú terv vagy egy kérés. Ezenkívül meg kell adnia azokat a mezőket, amelyek felelősek az ingatlan „Azonosítójáért”, „Névéért” és „Típusáért”.
d. A „Forrás” a következő mező, amelyben megadjuk a jellemző értékek forrását, amely lehet egy táblázat vagy egy lekérdezés is.
e. A „karakterisztikus érték” olyan táblázat vagy lekérdezés, amely jellemző értékeket kap. Például az „ObjectPropertyValues” információs regiszter jellemző értékek táblázataként szolgálhat. A táblából (vagy lekérdezésből) meg kell jelölnünk azokat a mezőket is, amelyek a jellemző „Objektumáért”, „Tulajdonságáért” és „Értékéért” felelősek.
A kérelem szerkesztése után a kérés szövege a mezők listája alatti ablakban látható. Az alábbiakban az „Autofill” jelölőnégyzet segítségével szabályozhatjuk a kérésben megadott mezők további paramétereinek kitöltését. Kérjük, vegye figyelembe, hogy a mezők összetétele csak magában a kérelemben van meghatározva.

Az oldalról vett információ

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:

Szeretnénk minden olyan terméket átvenni, 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és A bal alsó sarokban az allekérdezés szövegét láthatjuk:


A segédkonstruktorban az OK gombra kattintva 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 KörülményekÍrjuk fel a szükséges feltételt:




És mindezen manipulációk után megkapjuk a kívánt kérést. Ha szükséges, 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 vannak sokkal összetettebb példák is, például több szintű beágyazás esetén, amikor több órát töltöttek a kéréssel. És ebben az esetben van egy meglehetősen egyszerű kiút. Használhatja a tervezőbe épített lekérdező szövegszerkesztőt. Gombot kell használni Kérés 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és, illessze be a szöveget a pufferből, majd kattintson az OK gombra. Ennek megfelelően a legfelső szinten töröljük a régi kérést. Így szükség esetén menet közben is könnyedén létrehozhatunk többszintű egymásba ágyazott lekérdezéseket.

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 egy felügyelt alkalmazásban nem használhatja a lekérdezéstervezőt az „Ismerd meg a lekérdezést” feldolgozásban. 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 „Reports and Processing” 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();

Az eljárás vége

&A szerveren

Az eljárás vége

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

Azok a táblák, amelyekből a lekérdezés adatokat kap, a „Táblázatok” területre, a lekérdezéshez szükséges mezők pedig a „Mezők” területre kerülnek. Tegyük meg a 2.68. ábrán látható módon.

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ön be, akkor bármilyen „Áruátvétel” bizonylatot kimá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).

2.73. ábra Lekérdezés szerkesztése

A „Speciális” lapon számos (a lekérdezési nyelv „Select” kulcsszóhoz kapcsolódó) jelzőt ellenőrizhet, és meghatározhatja a lekérdezés megváltoztatására szolgáló táblák összetételét (2.74. ábra).

2.74. ábra További lekérdezési funkciók

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 meghatározható a 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ési eredmények kiválasztásában általában vannak hierarchiánkénti összesítő rekordok).

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:

&A szerveren

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 Áruk. Nómenklatúra AS Nómenklatúra,

| 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