Vnorené dotazy v konštruktore. Konštruktory dotazov 1c podmienky konštruktéra dotazov

Začnime teda niečím jednoduchým: vytvorte v konfigurátore Nové spracovanie, pomenujte ho Query Console alebo Query Builder, ako chcete.

Okamžite môžeme pridať tabuľku v „Data“ pre budúce parametre, ktoré potrebujeme, takže v našej konzole nespustíme najprimitívnejšiu požiadavku, ale s parametrami a odkazmi, napríklad pre našu prácu vytvoríme požiadavku na periodické registre , ale tu bez pokynov pre parametre=&Dátum nikde.

Aby sme vytvorili našu tabuľku parametrov, na záložku “Dáta” v jej “Tabuľková časť” pridáme novú tabuľku, nazvime ju Parametre dopytu, sem pridáme stĺpce tejto tabuľky: 1) ParameterName, napíšte string = 25 znakov; ParameterValue, tu je zložený dátový typ, pozri obr.

Preto, ako je znázornené na obrázku, vyberieme pre stĺpec Hodnota parametra zložený typ: v ponuke typu, ktorá sa otvorí, začiarknite políčko „Zložený typ“, vyberte číslo, reťazec (zadajte 20 znakov), dátum, logickú hodnotu a začiarknite políčko spodné zaškrtávacie políčko – AnyLink – znamená to, čo nasleduje, pri zadávaní parametrov našej požiadavky sa môžeme odvolávať na akýkoľvek objekt našej konfigurácie, napríklad adresáre alebo dokumenty.

Teraz musíme vytvoriť formu našej budúcej Query Console. Pri spracovaní prejdeme na kartu „Formuláre“ a pridáme nový. Zadáme tento formulár a už existuje neobmedzené pole pre kreativitu - môžete usporiadať dva detaily, ktoré ste práve vytvorili, a tanier s parametrami, ako chcete! Ak to chcete urobiť, môžete použiť štandardné prvky formulára, ako je skupina alebo stránka so stranami (ak dávate prednosť otáčaniu strán.

Hlavná vec je tu jedna vec: po pretiahnutí atribútu “TextValues” do ľavého poľa na úpravu formulára nezabudnite v jeho vlastnostiach nastaviť “View”=Textové pole dokumentu. Pozri obr.

Vo vlastnostiach atribútu „Tabuľka dotazov“ môžete voliteľne zadať „Zobraziť mriežku“ a „Zobraziť hlavičky“.

Ďalej v pravom okne na úpravu formulára prejdite na kartu „Príkazy“ a pridajte nové tlačidlo, po kliknutí naša konzola vykoná určitú akciu. Vytvorme si tlačidlo „Query Designer“, ak chcete, môžete k tlačidlu pridať ikonu, hlavné je umiestniť samotné tlačidlo do ľavého okna na úpravu formulára - aby sme ho videli. Potom v správnom tvare editačné okno, kliknite pravým tlačidlom myši na naše tlačidlo a vyberte vlastnosti – vo vlastnostiach kliknite na položku „Akcia“, zobrazí sa modálne okno s otázkou, kde presne sa vykoná náš programový kód, ktorý priradíme tlačidlu – vyberte „ Na klientovi“.

Otvorí sa modul formulára s pripravenou prázdnou procedúrou „Konštruktor dotazu procedúry (príkaz)“. V rámci tohto postupu popíšeme volanie štandardného 1c8 Query Builder. Je to veľmi jednoduché: Konštruktor = Konštruktor novej požiadavky; Ale sú tu úskalia - Query Constructor zabudovaný do platformy funguje v užívateľskom režime LEN pod hrubým klientom! Preto vložíme podmienku preprocesorovej inštrukcie #Ak, ale tu sa rozhodnete sami, na základe vašej platformy, alebo máte bežné formuláre, tak zvoľte “ FatClientRegularApp“ alebo máte platformu založenú na spravovaných formulároch, potom „ ThickClientManagedApplication“.pozri obr.

Teraz zostáva pridať k tomuto postupu podmienku pre zaznamenanie textu požiadavky, ktorý nám Query Builder vygeneruje v detailoch nášho formulára „Text požiadavky“:

If Constructor.OpenModal()=True Then Object.RequestText=Constructor.Text; koniec Ak;

Môžeme však manuálne niečo zmeniť v texte požiadavky (v užívateľskom režime - v okne atribútu „Text požiadavky“), aby sa naše zmeny dostali do konštruktora dotazov pri jeho opätovnom vyvolaní - tu pridáme jednoduchú podmienku:

Ak nie EmptyString(Object.QueryText) Then Constructor.Text = Object.QueryText; koniec Ak;

To je všetko, pripojili sme Query Constructor zabudovaný do platformy 1c8, poďme sa pozrieť na našu prácu. Ak to chcete urobiť, spustite 1C:Enterprise v režime hrubého klienta pomocou jednej z nasledujúcich metód: 1) hlavné menu konfigurátora – Ladenie – Spustiť ladenie – Hrubý klient; 2) alebo ak máte tieto klávesy na ovládacom paneli v konfigurátore - stačí stlačiť tlačidlo so žltým kruhom s hrubou bodkou, viď obrázok:

Spustí sa používateľský režim 1cEnterprise8, nájdeme svoje spracovanie, spustíme ho, klikneme na naše tlačidlo „Query Designer“ a uvidíme, ako sa otvorí návrhár zabudovaný do platformy. pozri obr.

Takže máme spustený Query Constructor, môžeme v ňom začať zostavovať náš budúci dotaz, ale zaujíma nás, ako bude fungovať dotaz, ktorý sme vytvorili! A k tomu musíme pri úprave formulára našej konzoly v konfigurátore vytvoriť ďalšie tlačidlo, nazvime ho „Spustiť dotaz“. Vo vlastnostiach tlačidla „Spustiť dotaz“ kliknite na „Akcia“, znova sa zobrazí ponuka, v ktorej sa nás opýta, kde sa spracuje náš programový kód, v tomto prípade vyberieme „Na klientovi aj na serveri“, opäť sa ocitneme v module Formuláre.

V procedúre Execute Query(), ktorú máme na klientovi, napíšeme podmienku, ak používateľ nezadal text dotazu, ale žiada ho vykonať:

If EmptyString(Object.QueryText) Then report("Zadajte text dotazu!"); koniec Ak;

Systém už automaticky vygeneroval odkaz na procedúru Execute RequestOnServer(); – to je dobré, poďme na túto procedúru, ktorá sa vykonáva na serveri a napíšme sem kód na vykonanie našej zadanej požiadavky.

Tu sú možnosti: Všetky výrazy týkajúce sa stavebných dopytov si môžete napísať sami, t.j. manuálne, ale existuje ešte jednoduchšia možnosť - v rámci postupu kliknite pravým tlačidlom myši a v rozbaľovacej ponuke vyberte možnosť „Tvorca dopytov so spracovaním výsledkov, pozri obrázok“:

Ak ste klikli na položku „Tvorca dotazov so spracovaním výsledkov“, zobrazí sa modálne okno „Text dotazu sa nenašiel. Vytvoriť nový?“, kliknite na áno. Otvorí sa vstavaný návrhár dotazov, v ktorom na prvej karte "Spracovanie výsledku" - vyberte prvú položku " Obídenie výsledku." To je všetko, od tohto konštruktora nepotrebujeme nič iné, kliknite na tlačidlo „OK“ - zobrazí sa modálne okno „V žiadosti nie sú vybraté žiadne polia, kliknite na „OK“.

Potom sa v našej procedúre ExecuteRequestOnServer() objaví nasledujúca hotová šablóna:

Prejdime k výrazu skonštruovanému konštruktorom:

Request.Text = "";

Request.Text = Object.RequestText;

Takto je to jednoduché, naše tlačidlo „Vykonať požiadavku“ na spracovateľskom formulári je už prakticky funkčné, zatiaľ dokáže spracovať len jednoduché požiadavky bez parametrov, ale hlavné je, že to funguje! Zostáva len vizuálne zobraziť výsledky našej požiadavky v atribúte „Tabuľka hodnôt“ vo formulári spracovania. Pripomínam, že náš atribút „Tabuľka hodnôt“ je typu „Tabuľkový dokument“, pretože v opačnom prípade neuvidíme naše výsledky v používateľskom režime. Zobrazenie tabuľkových údajov používateľovi sa vždy vykonáva buď tabuľkovým dokumentom alebo rozložením. Veľmi by som chcel, aby bolo možné zobraziť údaje prostredníctvom tabuľky hodnôt - pretože je to veľmi jednoduché a známe, ale žiaľ, tabuľka hodnôt je len nástroj, ktorý vývojár potrebuje, nemôžete pomocou nej zobraziť údaje na obrazovke...

Pozrime sa bližšie na to, čo je tabuľkový dokument - je to ako hárok programu Excel - k záznamu v konkrétnej bunke sa dostanete iba pomocou buniek tabuľky, tu ich nazývame oblasť, ale sami si môžeme vybrať rozsah tejto oblasti do jednej konkrétnej bunky:

Takže sme prišli na to, čo je tabuľkový dokument, a sami sme si určili, že budeme musieť definovať údaje z nášho dotazu v špecifickej bunke tohto tabuľkového dokumentu. Ale zamyslime sa: aký je „Výsledok dopytu“, ktorý nám dizajnér tak rýchlo vygeneroval? Otvorte pomocníka - Výsledkom dotazu je tabuľka, ktorá má príslušné vlastnosti! pozri obr.

A ak teraz napíšeme za výraz Query Result = Query.Execute(); (vytvorený konštruktorom), tu je taký jednoduchý cyklus pre kolekcie:

Pre každý ColumnName From Query Result.Columns Loop report(ColumnName.Name); EndCycle;

Po tomto cykle si zatiaľ poznačte všetky výrazy vytvorené automaticky konštruktorom. A spustite 1C:Enterprise8 pod hrubým klientom. Vytvorte ľubovoľný jednoduchý dotaz (môžete použiť Query Builder - už nám funguje) a kliknite na tlačidlo „Spustiť dotaz“:

V spodnej časti okna správy uvidíte, že v tabuľke Výsledky dotazu sú uložené názvy polí, ktoré sme práve vybrali vytvorením jednoduchého dotazu.

Teraz zobrazme tieto názvy polí nášho utrpenia v tabuľkovom dokumente:

Pre každý názov ColumnName z dotazu Result.Columns slučka Cell=Object.QueryTable.Area(1,QueryResult.Columns.Index(ColumnName)+1); Cell.Text=Názov stĺpca.Názov; EndCycle;

Aby sme zobrazili podrobnosti o údajoch dotazu, analyzujme výrazy vytvorené automaticky dizajnérom a vložme do triediacej slučky „SelectionDetailedRecords“ samotného dotazu presne tú istú slučku, ktorú sme použili na zobrazenie názvov stĺpcov, len teraz musíme preniesť nie údaje z tabuľky „Výsledok dopytu“ do textu bunky. a údaje samotného výberu, pozrime sa v pomocníkovi, ako sa dostanete do poľa Podrobný výber žiadosti:

SelectionDetailRecords = QueryResult.Select(); Kým SelectionDetailedRecords.Next() Loop //v prvom riadku už máme zapísané názvy stĺpcov tabuľky, takže načítame údaje pod prvým riadkomDocRowNumber=Object.QueryTable.TableHeight+1; Pre každý názov ColumnName z dotazu Result.Columns Cycle Cell=Object.QueryTable.Area(DocRowNumber,QueryResult.Columns.Index(Názov stĺpca)+1); Cell.Text = SelectionDetailedRecords[Názov stĺpca.Názov]; EndCycle; EndCycle;

To je všetko, môžeme skontrolovať, načítať podnik pod hrubého klienta, zadať jednoduchú požiadavku bez parametrov, kliknúť na tlačidlo „Spustiť dotaz“, pozri obrázok:

Hurá, všetko funguje!!!

Je veľmi výhodné, keď sa pri otváraní/zatváraní našej Query Console opäť do poľa “Query Text” zapíše náš text dopytu, s ktorým sme pracovali pred zatvorením konzoly. Ak to chcete urobiť, stačí povoliť vlastnosť formulára = Automatické ukladanie, pozri obr.

To je všetko, naša konzola funguje. Aby sme mohli písať zložitejšie dotazy s parametrami v nich špecifikovanými, musíme vytvoriť ďalšie tlačidlo „Nájsť parametre“, ako aj kód pre tlačidlo „Spustiť dotaz“ - spustí sa kód pre tlačidlo „Nájsť parametre“ na klientovi a na serveri. Ďalej v procedúre servera spustíme požiadavku rovnakým spôsobom s textom, ktorý do nej odošleme z okna „Text požiadavky“, pomocou výrazu „Request.FindParameters()“ nájdeme odovzdané parametre a jednoducho ich zadáme do do tabuľkovej časti formulára „Parametre požiadavky“. Nezabudnite ich potom preniesť z vyplnenej tabuľky parametrov do procedúry „Run Query“.

Do našej konzoly môžete pridať aj niekoľko tlačidiel, ktoré v užívateľskom režime vyčistia okno Parametre a text žiadosti.

Naša Query Console je pripravená na použitie, prajem vám úspešné kreatívne riešenia pomocou takého jednoduchého a výkonného nástroja, akým je Query Console!

Toto spracovanie je napísané na platforme 1c8.3 (spravované formuláre) a beží pod hrubým klientom. Dá sa písať aj na platforme 1c8.2, ako pod bežnými formulármi, tak aj pod spravovanými.

Stiahnutý súbor obsahuje vzorku konzoly dotazov, ktorú sme práve vytvorili.

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

Inovácia Query Console:

1) Teraz bude naša domáca Query Console so vstavaným Query Builderom bežať pod akýmkoľvek klientom: pod hrubým klientom bežných a spravovaných formulárov a pod tenkým a webovým klientom.

p.s. Forma a vzhľad vstavaného Query Buildera je rôzny - v závislosti od toho, pod akým klientom sme spustili našu konzolu. (Mne osobne viac vyhovuje forma Query Buildera pod hrubým klientom)

&Na konštruktore dotazov klientskej procedúry (príkaz) //volanie štandardného konštruktora dotazov je možné len pod hrubým klientom #If ThickClientManagedApplication alebo ThickClientNormalApplication Then Constructor=Nový konštruktor dotazu; Ak nie EmptyString(Object.QueryText) Then Constructor.Text = Object.QueryText; koniec Ak; If Constructor.OpenModal()=True Then Object.RequestText=Constructor.Text; koniec Ak; // #Else // Report("Volanie nástroja Query Builder je možné len s hrubým klientom"); // Návrat; //# EndIf #Else Report("Spúšťate Query Builder pod tenkým klientom - mierne sa líši vo forme a rýchlosti výkonu!"); Konštruktor = New QueryConstructor(); Ak nie EmptyString(Object.QueryText) Then Constructor.Text = Object.QueryText; koniec Ak; Upozornenie konštruktora = New AlertDescription("RunAfterClosingConstructor", ThisForm); Constructor.Show(Constructor Alert); # EndIf Koniec procedúry &Na klientskej procedúre ExecuteAfterClosingConstructor(Result, ConstructorParameters) Export //Result=text, ak bol konštruktor zatvorený pomocou tlačidla ok Object.RequestText = AbbreviatedLP(Result); //Tvorba!!! Koniec procedúry

2) Do našej jednoduchej Query Console bola pridaná možnosť zadávať zložité dopyty s dočasnou tabuľkou odovzdanou parametrom!!! Mechanizmus sa ukázal ako veľmi jednoduchý a elegantný – bez použitia XML kódu, ako sa to robí v profesionálnych konzolách.

Samotný kód a postupy pre mechanizmus prenosu do parametrov dočasných tabuliek si môžete pozrieť v druhom priloženom súbore. Ako som začal s vývojom vlastnej verzie dočasných tabuliek v parametroch nájdete na tomto odkaze https://forum.infostart.ru/forum9/topic183700/

Teraz, ako použiť konzolu na komplexný dotaz, keď sa do jej parametrov odovzdá dočasná tabuľka. Môžete si napríklad vziať kód tejto žiadosti;

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 Remaining FROM ExternalData AS ExternalData LEFT JOIN Register Accumulations.Remaining Products.Remainings(&Date, Product IN (SELECT ExternalData.Product FROM ExternalData AS ExternalData)) AS RemainingProductProRemaining Software RemainData Produkt

Na základe príkladu a podobnosti vyššie uvedeného kódu dotazu môžete vytvoriť svoj vlastný komplexný dotaz, berúc do úvahy vaše dátové objekty.

Takže v návrhárovi dotazov sme vytvorili vyššie uvedený dotaz, zatvorením Konštruktora - text dotazu prejde do nášho poľa konzoly „Text dotazu“, kliknite na tlačidlo „Nájsť parametre“, vidíme, že v tabuľke Parametre sa objavil riadok = „Externé údaje“, Typ hodnoty = „Tabuľka hodnôt“, pozri obr.

V tejto tabuľke parametrov - zadajte parameter Dátum, napríklad dnešný dátum, potom kliknutím skúste upraviť parameter našej dočasnej tabuľky „Externé údaje“, kliknite do poľa s „Tabuľkou hodnôt“ na tri bodky – výber typov sa zobrazí kliknite na Row, náš mechanizmus nám otočí stránku vo formulári, kde musíme manuálne zadať túto veľmi dočasnú tabuľku.

Upozorňujeme, že v tomto prípade sa na stránke „Rozvrhy“ v spodnej časti v poli „Dočasný názov tabuľky v parametroch“ zobrazí názov našej dočasnej tabuľky (je skopírovaný z tabuľky Parametre).

Zatiaľ na stránke „Časové poriadky“ vidíme iba jednu prázdnu tabuľku – toto je tabuľka Typy našej budúcej dočasnej tabuľky.Tlačidlom „Pridať“ doplníme názov detailu a typ budúcej tabuľky . Buďte opatrní – názov a typ sa musia zhodovať s tým, čo sme zadali v žiadosti o &ExternalData:

Teraz stlačíme tlačidlo "Aktualizovať dočasnú tabuľku" - a budeme tu mať druhú tabuľku - priamo ju naplníme údajmi dočasnej tabuľky cez tlačidlo "Pridať".

To je všetko, môžeme si ešte raz skontrolovať, či sme zadali primitívne údaje parametrov dotazu do tabuľky parametrov na 1. strane spracovania a kliknúť na tlačidlo „Spustiť dotaz“ - podľa toho sa všetko vypočíta a vyberie obmedzenie údajov odovzdaných v parametri našej dočasnej tabuľky

p.s. Ak ste sa pomýlili pri zadávaní názvov údajov a ich typov (v prvej tabuľke) - stačí zavrieť konzolu a znova ju otvoriť - dočasná tabuľka údajov sa vymaže - a tabuľku Typy je možné znova upravovať a je možné vytvoriť novú tabuľku údajov.

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

To je všetko, vlastnými rukami si dokážeme vytvoriť veľmi výkonný pracovný nástroj, navyše naša konzola je v porovnaní s profesionálnymi stále veľmi rýchla – a to je pre vývojárov veľmi veľké plus! A, samozrejme, teraz naša konzola funguje pod akýmkoľvek klientom! Veľa šťastia vo vašom tvorivom vývoji!!!

Pozrime sa, ako môžeme spojiť tieto dve tabuľky podľa poľa Kód produktu použitím
konštruktor dotazu (ako príklad je uvedený kód na vytváranie dočasných tabuliek
nebudem. Môžete si to vziať z vyššie uvedeného odkazu).

Otvorte okno návrhára, prejdite na kartu "Tabuľky a polia", do sekcie
"stoly" vyberte obe naše tabuľky a v sekcii "polia" -
tie polia z oboch tabuliek, ktoré chceme vidieť ako výsledok dotazu.

Prejdite na záložku "spojenia". Pridajte nový riadok. V teréne stôl 1
z rozbaľovacieho zoznamu vyberte tabuľku s produktmi a v poli Tabuľka 2 Tabuľka
s krajinami.

Pre Tabuľky1 začiarknite políčko Všetky. Pre
Tabuľky2 Toto políčko nezaškrtávame. To znamená, že od Tabuľky1
vyberú sa všetky záznamy a z Tabuľky2 len tie, pre ktoré sa vykonáva
podmienku spojenia, teda pri takejto kombinácii príznakov dostaneme
ĽAVÉ PRIPOJENIE. Ďalej je potrebné vyplniť Podmienka komunikácie.
Tu vyberáme polia tabuľky z rozbaľovacích zoznamov a znak porovnania tiež z rozbaľovacieho zoznamu
zoznam.

V dôsledku tohto spojenia dostaneme nasledujúci text žiadosti:

SELECT VT_Product.Product Code, VT_Product.Name, VT_Country.Country FROM VT_Product AS VT_Product LEFT JOIN VT_Country AS VT_Country BY VT_Product.Product Code = VT_Country.Product Code

Teraz sa pozrime bližšie na niektoré body.
Skúsme vymeniť začiarkavacie políčko Všetky.


Zdalo by sa, že nakoniec by to malo vyjsť SPRÁVNE PRIPOJTE SA, ale ak my
Pozrime sa na text dotazu vygenerovaný konštruktorom, uvidíme, že tabuľky
vymenili si miesta, ale spojenie zostalo ľavé:

SELECT VT_Product.Product Code, VT_Product.Name, VT_Country.Country FROM VT_Country AS VT_Country LEFT JOIN VT_Product AS VT_Product BY VT_Product.Product Code = VT_Country.Product Code

Pozrime sa, čo sa stane, ak zrušíme začiarknutie oboch políčok

V dôsledku toho získame vnútorné spojenie.

SELECT VT_Product.Product Code, VT_Product.Name, VT_Country.Country FROM VT_Product AS VT_Product INTERNAL JOIN VT_Country AS VT_Country BY VT_Product.Product Code = VT_Country.Product Code

Nakoniec, ak sú obe začiarkavacie políčka začiarknuté


získame úplné spojenie

SELECT VT_Product.Product Code, VT_Product.Name, VT_Country.Country FROM VT_Product AS VT_Product ÚPLNÉ PRIPOJENIE VT_Country AS VT_Country BY VT_Product.Product Code = VT_Country.Product Code

Na záložku môžete zadať viacero riadkov Spojenia. V tomto prípade niekoľko
riadky sú spojené podmienkou A. Okrem toho nie sú potrebné linky
vjazd zakaždým znova. Môžu byť skopírované pomocou kľúča F9.
A v novom riadku zmeňte iba podmienku pripojenia. To výrazne urýchľuje vývoj.
V podmienke prepojenia tiež nie je potrebné používať iba preddefinované polia z
rozbaľovacie zoznamy. Môžete použiť ľubovoľný výraz, ktorý vyhovuje
1C dopytovací jazyk. Ak to chcete urobiť, musíte začiarknuť políčko zadarmo
a zadajte podmienku priamo do poľa alebo otvorte pomocné okno
kde môžete použiť šablóny s funkciami jazyka dotazov.


Samozrejme, v praxi existujú oveľa zložitejšie otázky, kde
niekoľko tabuliek s rôznymi prepojeniami medzi sebou. Ale v nástroji na tvorbu dotazov
je možné reprodukovať spojenia akejkoľvek zložitosti.

Návrhár dotazov pozostáva z nasledujúcich kariet:

1. „Tabuľky a polia“ – na karte sú tri hierarchické zoznamy:
a. „Databáza“ – zoznam všetkých dostupných objektov, na ktoré je možné zadávať dopyt. Tiež tlačidlo "Zobraziť tabuľky zmien", pomocou ktorého môžete pristupovať k tabuľkám zmien objektov informačnej bezpečnosti, ak sú registrované pre akýkoľvek výmenný plán.
b. "Tabuľky" - zoznam vybraných tabuliek, na ktoré sa vykoná dotaz. V tomto okne môžete tiež odstrániť tabuľku, premenovať alebo nahradiť tabuľku a pridať interný dotaz.

Parametre virtuálnych tabuliek môžete priradiť kliknutím na tlačidlo „Parametre virtuálnych tabuliek“:

Odporúča sa aktívne používať parametre virtuálnych tabuliek na výber podľa určitých dimenzií, pretože to zvyšuje rýchlosť vykonávania dotazu. V parametroch môžete použiť externé premenné, pred názvom ktorých je znak „&“.
c. "Polia" - zoznam polí, ktoré sú vybrané z tabuliek. Môžete tiež pridať vypočítané polia; kliknutím na tlačidlo „Pridať“ sa otvorí konštruktor vlastného výrazu:

Vľavo je okno s poľami dostupnými vo výraze. Vpravo je náznak použitých funkcií. Nižšie je zostaviteľný ľubovoľný výraz. Vo výrazoch môžete použiť externé parametre, ktoré sú označené znakom „&“, napríklad: &Obdobie, &PočiatočnýDátum
Musíte byť opatrní, ak je v okne napísaný dlhý a zložitý výraz, ktorý obsahuje malú syntaktickú chybu, potom po kliknutí na tlačidlo „OK“ systém vydá varovanie a zatvorí okno. Všetok napísaný kód sa stratí, preto odporúčam, ak si nie ste istí správnosťou výrazu, potom vždy pred zatvorením konštruktora uložte obsah do schránky (Ctrl-C).

2. „Vzťahy“ - na karte sú vyznačené prepojenia medzi tabuľkami.

Tabuľka označuje tabuľky, ktoré sa majú prepojiť, vzťah medzi tabuľkami, ktoré sa majú prepojiť, a stav pripojenia. Ak je podmienka pripojenia zložitá, môžete zadať určitý vypočítaný výraz a otvorí sa konštruktor vlastného poľa.

3. „Zoskupenie“ – záložka označuje, ktoré polia sú zoskupené a ktoré sú agregované (sčítané).

4. Záložka „Podmienky“ – zoznam podmienok, ktoré sú kladené na požiadavku.
V podmienkach môžete tiež písať zložité výrazy pomocou konštruktora jednoduchých výrazov a pomocou externých premenných:

5. "Rozšírené"
Ďalšie parametre uložené žiadosti

6. „Asociácie a pseudonymy“
Na tejto karte môžete priraďovať aliasy poliam, ako aj spravovať dotazy, ktoré sú prepojené pomocou konštrukcií „UNITE“ alebo „UNITE ALL“.

7. "Objednávka"
V akom poradí sa zobrazia výsledky dotazu?

Pozor! V spodnej časti záložky môžete vidieť začiarknutie "Automatická objednávka"- v aktuálnej verzii 1C 8.1 v ACS je to zbytočné; navyše, keď je začiarkavacie políčko začiarknuté, pri nahrávaní ACS zobrazí chybu, takže by ste ho nemali používať.

8. "Zloženie údajov"
Záložka, na ktorej sú definované servisné polia pre systém riadenia prístupu. Hrá približne rovnakú úlohu ako karta „Tvorca zostáv“ v bežnom návrhárovi zostáv.

A. Na karte „Tabuľky“ - sú uvedené tabuľky použité v dopyte; začiarknutím políčka „Povinné“ môžete určiť, či musí byť tabuľka zahrnutá do dopytu. Tie. ak vo výbere nie sú zahrnuté žiadne polia, potom sa táto tabuľka vôbec nezúčastňuje na dopyte. Môžete tiež zadať parametre pre tabuľky.

V procese nastavovania systému kontroly prístupu špecifikujeme ľubovoľné výbery, následne sa všetky hodnoty výberu nahradia do parametrov virtuálnych tabuliek, čo nám opäť pomôže optimalizovať a urýchliť dopyt.
b. Na karte „Polia“ sú uvedené polia a ich aliasy, ktoré sa pridajú do zoznamu polí ACS.
c. „Podmienky“ - ak sú v nastaveniach ACS špecifikované výbery, všetky hodnoty výberu sa pridajú ako dodatočné podmienky; k podmienkam je možné pridať aj zložité výrazy.

9. "Charakteristika"
Záložka, ktorá nemá analógiu v bežnom konštruktore výstupného formulára.

Táto karta vám umožňuje rozšíriť prácu s dopytmi o charakteristiky. Tabuľka na karte pozostáva z niekoľkých polí:
a. „Typ hodnoty“ - typ, pre ktorý sa vyberú charakteristiky. Ak napríklad zadáte „Directory Link.Nomenclature“, potom sa v dopyte vyberú všetky charakteristiky pre nomenklatúru.
b. „Zdroj“ - zdroj vlastností charakteristických typov, môže byť dopyt alebo tabuľka. Do tohto poľa môžeme napísať požiadavku na výber len tých vlastností, ktoré potrebujeme.
c. „Zoznam charakteristík“ - pole, v ktorom je uvedený zdroj vlastností charakteristík. Najčastejšie ide o plán charakteristických typov alebo požiadavku. Musíte tiež špecifikovať polia, ktoré sú zodpovedné za „Identifikátor“, „Názov“ a „Typ“ vlastnosti.
d. „Zdroj“ je ďalšie pole, v ktorom uvádzame zdroj charakteristických hodnôt, ktorým môže byť aj tabuľka alebo dopyt.
e. „Charakteristická hodnota“ je tabuľka alebo dotaz, ktorý dostáva charakteristické hodnoty. Napríklad informačný register „ObjectPropertyValues“ môže slúžiť ako tabuľka hodnôt charakteristík. Musíme tiež uviesť tie polia z tabuľky (alebo dotazu), ktoré sú zodpovedné za „Objekt“, „Vlastnosť“ a „Hodnotu“ charakteristiky.
Po úprave požiadavky je text požiadavky vidieť v okne pod zoznamom polí. Nižšie pomocou začiarkavacieho políčka „Automatické dopĺňanie“ môžeme regulovať vypĺňanie dodatočných parametrov pre polia špecifikované v žiadosti. Upozorňujeme, že zloženie polí sa určuje až v samotnej žiadosti.

Informácie prevzaté zo stránky

Dnes si povieme, ako na to vnorené dopyty použitím tvorca dotazov. Prejdime rovno k príkladu.

Povedzme, že máme tento jednoduchý register informácií, kde sú uložené ceny tovarov a dodávateľov:

Chceme požiadať o príjem všetkých produktov, ktoré majú viac ako jedného dodávateľa. Toto je možné implementovať pomocou nasledujúceho dotazu:

SELECT Počet dodávateľov.Produkt AKO Produkt OD (SELECT Cena.Produkt AKO Produkt, MNOŽSTVO(INÁ CENA.Dodávateľ) AKO Dodávatelia OD RegistrovaťInformácie.Cena AKO Cena GROUP BY Cena.Produkt) AS Počet dodávateľov KDE Počet dodávateľov.Dodávateľov > 1

Vytvorenie vnoreného dotazu v konštruktore

Vytvorme vyššie uvedenú požiadavku pomocou konštruktora.

Ak to chcete urobiť, na paneli príkazov nad poľom Tabuľky stlač tlačidlo Vytvorte poddotaz:


Potom sa otvorí okno s ďalšou inštanciou konštruktora dotazu:


A v tomto novom okne vytvoríme vnorený dotaz:




Kliknutím na tlačidlo Žiadosť V ľavom dolnom rohu vidíme text poddotazu:


Po kliknutí na tlačidlo OK v pomocnom konštruktore dostaneme v hlavnom okne nasledujúci obrázok:


Od vety NestedQuery nie príliš vhodné na vnímanie, premenujme tabuľku na pravé tlačidlo myši Počet Dodávateľov, vyberte z neho pole Produkt a na záložke Podmienky Zapíšme si potrebnú podmienku:




A po všetkých týchto manipuláciách dostaneme požadovanú požiadavku. V prípade potreby môžete vytvárať dotazy s niekoľkými úrovňami vnorenia.

Ako vytvoriť vnorený dotaz z bežného dotazu v konštruktore

Veľmi často nastane situácia, keď v konštruktore začnete robiť požiadavku a v určitom momente si uvedomíte, že musí byť vnorený. Samozrejme, v našom príklade to nie je žiadny problém - môžete jednoducho všetko vymazať a znova zadať požiadavku. V praxi však existujú oveľa zložitejšie príklady, napríklad s niekoľkými úrovňami vnorenia, keď sa žiadosťou strávilo niekoľko hodín. A v tomto prípade existuje pomerne jednoduchá cesta von. Môžete použiť textový editor dotazov zabudovaný do návrhára. Je potrebné použiť tlačidlo Žiadosť získajte text požiadavky (pozri obrázok vyššie) a skopírujte ho do schránky. Potom vytvorte nový vnorený dopyt a znova stlačte tlačidlo Žiadosť, prilepte text z vyrovnávacej pamäte, kliknite na tlačidlo OK. V súlade s tým vymažeme starú požiadavku na najvyššej úrovni. Takto v prípade potreby môžeme jednoducho za chodu vytvárať viacúrovňové vnorené dopyty.

Schopnosť písať text dopytu „ručne“ nebola nikdy „zbytočná“, ale pohodlnejšie je použiť návrhára dopytov.

Komentujte.

Bohužiaľ, v riadenej aplikácii nemôžete použiť návrhára dotazov pri spracovaní „Zoznámte sa s dotazom“. Môžete ho použiť v tomto spracovaní prepnutím do normálneho režimu, ale my to neurobíme.

Vytvorme spracovanie “Request Constructor” a definujme ho v podsystéme “Reports and Processing”.

Vytvorme spracovateľský formulár a pridáme doň atribút formulára "TabDoc" typu "Tabuľkový dokument", ako aj príkaz "Spustiť dotaz" s akciou "Spustiť dotaz". Potom ich pretiahnite do formulára.

Vo formulárovom module, aby príkaz fungoval, napíšeme procedúru:

&OnClient

Postup Vykonať dotaz (príkaz)

ExecuteRequestServer();

Koniec procedúry

&Na serveri

Koniec procedúry

Vstúpime do procedúry volanej na serveri a z kontextového menu zavoláme „Konštruktor dotazu so spracovaním výsledkov“ (obrázok 2.65).

Obrázok 2.65 Konštruktor dotazu so spracovaním výsledkov

Nastavte typ spracovania na „Výstup do tabuľkového dokumentu“ a kliknite buď na tlačidlo „Ďalej“ alebo na kartu „Tabuľky a polia“.

Na karte „Tabuľky a polia“ dizajnéra si môžete prezerať aktuálne existujúce tabuľky v systéme (ľavá časť má názov „Databáza“) (obrázok 2.66).

Obrázok 2.67 Konštruktor dotazu

Tabuľky, z ktorých bude dotaz získavať údaje, sa prenesú do oblasti „Tabuľky“, polia požadované dotazom sa prenesú do oblasti „Polia“. Urobme to ako na obrázku 2.68.

Obr 2.68 Konštruktor dotazu

Tu sme odstránili vytvorené predvolené pole zobrazenia – „PREPRESENTATION (Product ReceiptProducts.Nomenclature)“

Kedykoľvek počas práce s dizajnérom si môžete pozrieť výsledný text požiadavky. Ak chcete vykonať túto úlohu, musíte kliknúť na tlačidlo „Žiadosť“ umiestnené v ľavom dolnom rohu formulára návrhára (obrázok 2.69).

Text požiadavky môžete manuálne upraviť kliknutím na tlačidlo „Upraviť“.

Prax. Kliknite na tlačidlo „OK“ a skontrolujte naše spracovanie v používateľskom režime. Ak analyzujete údaje prijaté pri vykonávaní požiadavky, môžete nájsť „opakovania“ položiek položky (ak to pre vás nefunguje, môžete skopírovať a zaúčtovať akýkoľvek dokument „Prijatie tovaru“).

Vrátime sa k procedúre ExecuteRequestServer() v spracovaní “Query Constructor” a z kontextového menu opäť vyvoláme “Query Constructor so spracovaním výsledkov”.

Ak chcete „zbaliť“ výsledok dotazu, môžete na tento účel použiť kartu „Zoskupenie“ návrhára dotazu.

Pri definovaní zoskupení musíte dodržať nasledujúce pravidlo: všetky polia výberu dotazu sú rozdelené na polia, podľa ktorých sa zoskupovanie (konvolúcia) vykonáva, polia vnorených tabuliek (polia, ktoré sú sčítané relatívne k tým, podľa ktorých sa zoskupovanie vykonáva) a agregované funkcie. Definujme zoskupenia (obrázok 2.70).

Obrázok 2.70 Zostavovač dopytov

Ak sa údaje prijaté žiadosťou musia vybrať podľa nejakej podmienky, potom môže byť v tomto prípade potrebné použiť kartu „Podmienky“. Vyberieme Príjem tovaruTovar.Množstvo=10 (obrázok 2.71).

Obrázok 2.71 Stav konštruktora dotazu.

Upozorňujeme, že ak je podmienka definovaná rovnakým spôsobom ako na obrázku, požiadavka sa nevykoná.

Existujú dva spôsoby nápravy situácie:

    Predefinovaním podmienky zaškrtnutím príznaku „P...“;

    Využitím možnosti zmeniť samotný text žiadosti (získaný kliknutím na tlačidlo „Upraviť žiadosť“).

Samotná manuálna zmena bude spočívať v tom, že je potrebné odstrániť symbol „&“ pred číslom „10“. Tento symbol v texte požiadavky definuje parametre požiadavky, do ktorých sa neskôr (ale pred vykonaním požiadavky) musia zapísať niektoré hodnoty. Kliknite na tlačidlo „Upraviť dopyt“ a upravte (obrázok 2.72).

Obrázok 2.73 Úprava dotazu

Na karte „Rozšírené“ môžete skontrolovať množstvo príznakov (súvisiacich s kľúčovým slovom „Vybrať“ jazyka dopytu) a určiť zloženie tabuliek určených na zmenu dotazu (obrázok 2.74).

Obrázok 2.74 Ďalšie funkcie dotazu

Na karte „Joins/Aliases“ môžete zmeniť názvy polí nastavením „Aliasy“, ale my to neurobíme.

Na karte „Poradie“ môžete určiť poradie triedenia záznamov ako výsledok dotazu (obrázok 2.75).

Obrázok 2.75 Poradie triedenia záznamov

Venujte pozornosť príznaku "Automatické zoradenie", možno ho použiť na zoradenie podľa polí referenčného typu.

Pri definovaní časti „Totals“ by ste sa mali pripraviť na to, že ako výsledok dotazu sa objavia „ďalšie“ celkové záznamy. Spolu s týmito záznamami sa výsledok dotazu stáva hierarchickým (obrázok 2.76).

Obrázok 2.76. Výsledky konštruktora dotazu.

Je možné zadať niekoľko typov súčtov:

    Prvky (výber výsledkov dotazu obsahuje súčty zoskupení a podrobné záznamy);

    Hierarchia (vo výbere výsledkov dotazu sú vo všeobecnom prípade súhrnné záznamy podľa hierarchie, súhrnné záznamy podľa zoskupení a podrobné záznamy);

    Iba hierarchia (vo výbere výsledkov dotazu sú vo všeobecnosti súhrnné záznamy podľa hierarchie).

Po kliknutí na tlačidlo „Ok“ konštruktora sa vygeneruje „Layout“ a do modulu formulára sa zapíše kód procedúry ExecuteRequestServer():

&Na serveri

Postup ExecuteRequestServer()

//((QUERY_CONSTRUCTOR_WITH_RESULT_PROCESSING

// Tento fragment je vytvorený konštruktorom.

// Pri opätovnom použití konštruktora sa zmeny vykonané ručne stratia!!!

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

Žiadosť = Nová požiadavka;

Žiadosť.Text =

| Prevzatie tovaru Tovar Nomenklatúra AS Nomenklatúra,

| SUM (Príjem tovaru Tovar. Množstvo) AS Množstvo,

| SUM(Príjem tovaruTovar.Suma) AS Suma

| Doklad.Prevzatie tovaru.Tovar

| AKO PRIJÍMAŤ PRODUKTY

| Príjem tovaru Tovar. Množstvo > 1

|SKUPOVAŤ PODĽA

| Príjem tovaruTovar.Nomenklatúra

|OBJEDNÁVKA PODĽA

| množstvo,

| Suma ZNÍŽENIE

| SUM(množstvo),

| SUM(Súčet)

| nomenklatúra HIERARCHIA“;

Vysledok = Query.Run();

HeaderArea = Layout.GetArea("Header");

AreaFooter = Layout.GetArea("Footer");

TableHeadArea = Layout.GetArea("TableHeader");

TableFooterArea = Layout.GetArea("TableFooter");

AreaNomenclatureHierarchy = Layout.GetArea("NomenclatureHierarchy");

Nomenklatúra oblasti = Layout.GetArea("Nomenklatúra");

TabDoc.Clear();

TabDoc.Output(AreaHeader);

TabDoc.Output(TableHeadArea);

TabDoc.StartAutoGroupingRows();

SelectionNomenclature = Result.Select(BypassQueryResult.ByGrouping);

Kým SelectionNomenclature.Next() Loop

Ak SelectionNomenclature.RecordType() = RequestRecordType.TotalByHierarchy Then

Area = AreaNomenclatureHierarchy;

Región = Nomenklatúra regiónu;

koniec Ak;

Area.Parameters.Fill(SelectionNomenclature);

TabDoc.Output(Oblasť, Nomenklatúra výberu.Úroveň());

EndCycle;

TabDoc.FinishAutoGroupingRows();

TabDoc.Output(TableFooterArea);

TabDoc.Output(AreaFooter);

//))CONSTRUCTOR_QUERY_WITH_RESULT_PROCESSING