Výsledok dotazu v podmienke 1c. Vytváranie dopytov a práca s nimi (pre začiatočníkov)

Teraz zvážime zvyšok.

Funkcie pre prácu s reťazcami v 1C dotazoch

Existuje málo funkcií a operátorov na prácu s údajmi reťazca v dotazoch 1C.

Po prvé, reťazce v dopytoch môžu byť zložené. Ak to chcete urobiť, použite operátor „+“:

Dopyt. Text = "VYBRAŤ
""Riadok: " "+ Zdroj. Meno
;

Po druhé, môžete vybrať časť riadku. Ak to chcete urobiť, použite funkciu SUBSTRÁT. Funkcia je podobná vstavanému jazyku 1C. Má tri parametre:

  1. Zdrojový reťazec.
  2. Číslo znaku, ktorým má začínať vybraný riadok.
  3. Postavy.

Dopyt. Text = "VYBERTE
PODKLAD ("
"Riadka: " ", 4, 3) AKO je výsledok"; // Výsledok: ok

Funkcia JE NULL

NULL je špeciálny typ údajov na platforme 1C: Enterprise. Je to zároveň jediná možná hodnota tohto typu. NULL sa môže vyskytnúť v dotazoch v niekoľkých prípadoch: pri spájaní zdrojov dotazov, ak sa zodpovedajúca hodnota nenašla v jednej z tabuliek; pri prístupe k detailom neexistujúceho objektu; ak bola v zozname polí dotazu zadaná hodnota NULL (napríklad pri kombinovaní výsledkov výberu z viacerých tabuliek) atď.

Pretože NULL nie je ani null, ani prázdny reťazec, dokonca ani hodnota Nedefinované,často je užitočné nahradiť ho nejakým užitočnejším typom údajov. Na to je funkcia určená. JE NULL.

Má dva parametre:

  1. Hodnota na kontrolu.
  2. Hodnota, ktorou sa má nahradiť prvý parameter, ak je NULL.

Dopyt. Text = "VYBERTE
JE NULL (zdroj. zostáva, 0) AKO zostatok "
; // Ak je v dôsledku požiadavky pole zvyšku = NULL,
// potom bude nahradená 0 ​​a môžete s ňou vykonávať matematické operácie

Funkcie REPREZENTÁCIA a ODKAZY NA PODÁVANIE

Tieto funkcie sú navrhnuté tak, aby získali reťazcové reprezentácie rôznych hodnôt. To znamená, že konvertujú odkazy, čísla, booleany atď. na obyčajný text. Rozdiel medzi nimi je vo funkcii REPREZENTÁCIA skonvertuje všetky typy údajov na text (reťazec) a funkciu ODKAZY NA PODÁVANIE- iba odkazuje a vráti zvyšok hodnôt tak, ako sú, neprevedené.

Dopyt. Text = "VYBERTE
REPREZENTUJÚCI (PRAVDA) AKO booleovský,
REPREZENTÁCIA (4) AKO číslo,
SUBMISSION (Source.Link) AS Link,
ZASTÚPENIE (DÁTUM ČAS (2016, 07.10.)) AKO Dátum "
;
// Boolean = "Áno", Číslo = "4", Odkaz = "Dokument Hotovostná faktúra č. ... od ..."
// Dátum = "10/07/2016 0:00:00"

Dopyt. Text = "VYBERTE
PREDSTAVUJE ODKAZ (PRAVDIVÝ) AKO boolovský,
PREDSTAVENIE ODKAZU (4) AKO ČÍSLA,
ODOSLANIE ODKAZU (Source.Link) AKO ODKAZ,
REPREZENTÁCIA ODKAZU (DÁTUM ČAS (2016, 07.10.)) AKO Dátum "
;
// Boolean = TRUE, Number = 4, Link = "Dokument Hotovostná faktúra č. ... z ..."
// Dátum = 10/07/2016 0:00:00

Funkcie TYP a TYP HODNOTY

Funkcia TYP vráti typ údajov platformy 1C: Enterprise.

Dopyt. Text = "VYBERTE
TYPE (číslo),
TYPE (reťazec),
TYPE (Document.Index Cash Order) “
;

Funkcia TYP HODNOTY vráti typ hodnoty, ktorá mu bola odovzdaná.

Dopyt. Text = "VYBERTE
TYP (5) AKO číslo,
TYP ("
"čiara" ") AS reťazec,
TYPE (Source.Link) AS Reference
Z referencie. Zdroj AS Zdroj "
;
// Number = Number, String = String, Directory = DirectoryRef.Source

Tieto funkcie je vhodné použiť napríklad vtedy, keď potrebujete zistiť, či pole prijaté v dotaze je hodnotou nejakého typu. Napríklad z registra kontaktných informácií dostaneme kontaktné informácie protistrán (sú tam uložené nielen kontakty protistrán, ale aj organizácií, jednotlivcov atď.):

Dopyt. Text = "VYBERTE

OD

KDE
TYPE (ContactInformation.Object) = TYPE (Directory.Contractors) "
;

Funkcia VÝZNAM

Funkcia Význam umožňuje použiť konfiguračné objekty 1C v požiadavke priamo bez toho, aby ste ju použili.

Doplňme predchádzajúci príklad ešte jednou podmienkou. Potrebujete získať iba telefónne čísla protistrán.

Dopyt. Text = "VYBERTE
Kontaktné informácie.
OD
Informácie Register.Contact Information AS Kontaktné informácie
KDE
TYPE (Contact Information.Object) = TYPE (Directory.Contractors)
AND ContactInformation.Type = VALUE (Enumeration.Types of ContactInformation.Phone) "
;

Treba si uvedomiť, že túto funkciu je možné použiť len s preddefinovanými hodnotami, t.j. s hodnotami, ktoré sú prístupné priamo z konfigurátora. Teda funkcia VÝZNAM nemožno použiť s používateľsky vytvorenými prvkami katalógu, ale môže pracovať s enumeráciami, s preddefinovanými prvkami katalógu, s hodnotami EmptyLink.

Operátor LINK

Operátor LINK je určený na kontrolu hodnôt prijatých dotazom, či patria ku konkrétnemu typu odkazu. Rovnakú úlohu možno vykonať pomocou funkcií TYP a TYP HODNOTY(ktoré majú širší rozsah a boli diskutované vyššie).

Napríklad problém výberu kontaktných informácií dodávateľov by sa dal vyriešiť takto:

Dopyt. Text = "VYBERTE
Kontaktné informácie.
OD
Informácie Register.Contact Information AS Kontaktné informácie
KDE
ContactInformation.Object LINK Directory.Contractors "
;

Operátor EXPRESNÉ

Operátor EXPRESNÉ sa používa v žiadostiach 1C v dvoch prípadoch:

  • keď potrebujete zmeniť vlastnosti primitívneho typu;
  • keď potrebujete vytvoriť pole s jedným typom z poľa s komplexným typom údajov.

Primitívne typy údajov zahŕňajú: číslo, reťazec, dátum, boolean. Niektoré z týchto typov údajov majú ďalšie charakteristiky. Typ číslo má dĺžku a presnosť, typ Riadok - dĺžka alebo neobmedzená.

Operátor EXPRESNÉ umožňuje zmeniť nie typ údajov, ale skôr dodatočné charakteristiky. Napríklad dokáže premeniť šnúrku s neobmedzenou dĺžkou na šnúrku s obmedzenou dĺžkou. Je to užitočné, ak chcete zoskupiť výsledky dotazu podľa takéhoto poľa. Nemôžete zoskupovať podľa polí s neobmedzenou dĺžkou, preto to skonvertujeme na reťazec s dĺžkou 200 znakov.

Dopyt. Text = "VYBERTE
MNOŽSTVO (RÔZNY príchod tovaruServices.Link) AKO Odkaz
OD
Dokument.Príchod tovaruSlužby AS Príjem tovaruSlužby
LOAD BY
EXPRES (Potvrdenie o servisných produktoch. Komentár AKO RIADOK (200)) "
;

V niektorých prípadoch môže platforma 1C spracovať dotazy na polia so zloženým dátovým typom neoptimálne. To zvyšuje čas vykonania dotazu, takže môže byť užitočné vopred skonvertovať zložený typ na jeden typ.

Dopyt. Text = "VYBERTE
EXPRES (Pohyb tovaruObraty. Objednávka AKO doklad. Objednávka klienta) .Dátum AKO Dátum objednávky,
Pohyb tovaruObraty.Nomenklatúra
OD
Akumulačný register.Pohyb tovaru.Obraty AS Pohyb tovaruObraty
KDE
Pohyb tovaruObraty. ODKAZ objednávky Dokument. Objednávka klienta "
;

Operátori VOĽBA a JE NULL

Operátor VOĽBA podobne ako operátor AK vo vstavanom jazyku 1C, ale má trochu obmedzenú funkčnosť.

Povedzme, že chceme získať kontaktné informácie z registra Kontaktných informácií a zároveň v samostatnom poli žiadosti uviesť, či patria protistrane alebo jednotlivcovi.

Dopyt. Text = "VYBERTE
Kontaktné informácie. Zastúpenie,
VOĽBA
WHEN TYPE (ContactInformation.Object) = TYPE (Adresár.Dodávatelia)
POTOM "
Protistrana "
INÝ VÝBER
WHEN TYPE (ContactInformation.Object) = TYPE (Directory.Persons)
POTOM "
Jednotlivec"
INAK „Niekto iný "
KONIEC
KONIEC AKO vlastník
OD
Informácie Register.Kontaktné informácie AS Kontaktné informácie "
;

Ako môžete vidieť na príklade, v konštrukcii VOĽBA za slovom je vždy podmienka KEDY; hodnota, ktorá sa má použiť, ak je podmienka splnená, za slovom POTOM a hodnota, ktorá sa má použiť, ak podmienka nie je splnená, za slovom INAK. Všetky tri konštrukčné prvky VOĽBA sú povinné. Vynechať prvok INAK, rovnako ako pri použití operátora AK v zabudovanom jazyku 1C je to nemožné. Aj operátor VOĽBA neexistuje žiadny analógový dizajn INÁČ AK, ale môžete dať jeden VOĽBA v inom, ako to bolo urobené v našom príklade.

Operátor JE NULL používané v stavebníctve VOĽBA na porovnanie poľa dotazu s typom NULL.

Dopyt. Text = "VYBERTE
VOĽBA
KEĎ JE hodnota NULL, POTOM 0
ELSE Hodnota
KONIEC"
;

Okrem toho operátor JE NULL možno použiť v podmienkach dopytu, napríklad vo vete KDE.

V tomto článku s vami chceme všetko prediskutovať 1c funkcie dopytovacieho jazyka, ako aj konštrukcie dotazovacieho jazyka... Aký je rozdiel medzi funkciou a konštrukciou? Funkcia sa volá so zátvorkami a možnými parametrami v nich a konštrukcia sa zapisuje bez zátvoriek. Bezpochyby všetky konštrukcie a funkcie dopytovacieho jazyka 1c aby bol proces získavania údajov flexibilný a multifunkčný. Tieto funkcie a konštrukcie sú použiteľné pre polia dotazu a niektoré sú použiteľné aj v podmienkach.

1c funkcie dopytovacieho jazyka

Od jasného popisu 1c funkcie dopytovacieho jazyka je oveľa menej bežné ako popis štruktúr, rozhodli sme sa začať skúmať presne funkcie. Teraz sa pozrime na každý zvlášť, popíšeme jeho účel, syntax a príklad použitia, takže:

1. Funkcia DÁTUM ČAS- táto funkcia vytvára konštantné pole typu "Dátum".

Syntax: DÁTUM ČAS(<Год>,<Месяц>,<День>,<Час>,<Минута>,<Секунда>)

Príklad použitia:

2. Funkcia DIFFERENCE- vráti rozdiel medzi dvoma dátumami v jednej z dimenzií (rok, mesiac, deň, hodina, minúta, sekunda). Meranie sa odovzdáva v parametri.

Syntax: ROZDIEL (<Дата1>, <Дата2>, <Тип>)

Príklad použitia:

Query.Text = "SELECT | DIFFERENCE (DÁTUM ČAS (2015, 4, 17), DÁTUM ČAS (2015, 2, 1), DEŇ) | AS Počet dní";

3. funkcia VALUE- nastaví konštantné pole s preddefinovaným záznamom z databázy, môžete získať aj prázdny odkaz akéhokoľvek typu.

Syntax: VALUE (<Имя>)

Príklad použitia:

Request.Text = "SELECT // preddefinovaný prvok | VALUE (Directory.Currencies.Dollar) AS dolár, // prázdny odkaz | VALUE (Document.Incoming GoodsService.EmptyLink) AS prichádzajúce, // vymenovaná hodnota | VALUE (Enumeration.Právnická osoba . Jednotlivec) AS Jednotlivec, // preddefinovaný účet | VALUE (Plán účtov. Samonosné materiály.) AS Účet_10 ";

4. Funkcia SELECT- pred nami je analógia konštrukcie IF, ktorá sa používa v kóde, iba táto sa používa v požiadavkách 1C.

Syntax: VYBERTE KEDY<Выражение>POTOM<Выражение>INAK<Выражение>KONIEC

Príklad použitia:

Request.Text = // ak je suma vyššia ako 7500, potom by mala byť zľava 300 rubľov, // takže ak sa podmienka spustí, funkcia // vráti sumu - 300 // v opačnom prípade žiadosť jednoducho vrátiť čiastku "SELECT | SELECT | WHEN TCH potvrdenky. Suma > 7500 | POTOM PM potvrdenky. Suma - 300 | INAK PM potvrdenky. Suma | KONIEC AKO Zľavnená suma | OD | Dokument. Príjem tovaruSlužby. Tovar AKO "; Príjem

5. Funkcia EXPRESS- umožňuje vyjadriť konštantné pole konkrétnym typom.

Syntax: EXPRESS (názov poľa ako názov typu)

Príklad použitia:

Query.Text = "VYBERTE RÔZNE | Číslo registr.predaja, | VYBERTE | KEĎ PREPOJTE ODKAZ.REGISTRÁTORA DOKUMENT.FAKTURÁCIA | POTOM VYJADRITE (Predaj.Registrátor AKO doklad.Výdavky) | INAK VYBERTE | KEĎ ODKAZ predajcu.Registrátor. POTOM VYJADRITE ( Predaj.Registrátor AS Dokument.Realizácia) | KONIEC | ... | KONIEC AS Číslo | OD | Register akumulácie.Nákupy AS Nákupy ";

Existuje aj variant použitia funkcie EXPRESS v poliach zmiešaných typov, kde sa nachádzajú? Najjednoduchším príkladom je „Registrátor“ pre akýkoľvek register. Prečo by sme teda potrebovali špecifikovať typ v registri? Zoberme si situáciu, keď z registrátora vyberieme pole "Číslo", z ktorej tabuľky sa číslo vyberie? Správna odpoveď všetkých! Preto, aby náš dotaz fungoval rýchlo, mali by ste zadať explicitný typ pomocou funkcie EXPRESS

Príklad použitia:

Query.Text = "SELECT | EXPRESS (Nomenclature.Comment AS Line (300)) AS Comment, | EXPRESS (Nomenclature.Sum AS Number (15,2)) AS Sum | FROM | Reference.Nomenclature AS Nomenclature";

6. Funkcia ISNULL(alternatívny pravopis IS NULL) - ak je pole typu NULL, nahradí sa druhým parametrom funkcie.

Syntax: ISNULL (<Поле>, <ПодставляемоеЗначение>)

Príklad použitia:

Tiež si všimnite, že je vhodné VŽDY nahradiť typ NULL nejakou hodnotou, pretože porovnávanie s typom NULL sa vždy vyhodnotí ako FALSE, aj keď porovnávate NULL s NULL. Hodnoty NULL sa najčastejšie vytvárajú ako výsledok spájania tabuliek (všetky typy spojení okrem interných).

Request.Text = // Vyberte celú položku a zostatok na nej // ak v niektorej položke nie je zostatok, potom bude pole // NULL, ktoré bude nahradené hodnotou 0 SELECT | Nom.Ref, | IS NULL (Položky v skladoch. Zostatok | Z | Adresár. Číselník AKO Číselník | LEFT JOIN Register akumulácie. Produkty v skladoch. Zostáva AKO Produkty v skladoch

7. Funkcia PRESENT- umožňuje získať pohľad na pole požiadavky.

Syntax: REPREZENTÁCIA(<НаименованиеПоля>)

Príklad použitia:

Query.Text = "SELECT | REPREZENTÁCIA (Voľné zostatky. Zostatky. Nomenklatúra) AKO nomenklatúra, | PREZENTÁCIA (Voľné zostatky. Zostatky. Sklad) AKO Sklad, | Voľné zostatky.

Konštrukcie v dopytovacom jazyku 1c

Vyššie sme s vami zvážili 1c funkcie dopytovacieho jazyka, teraz je čas zvážiť konštrukcie v dopytovacom jazyku 1c, nie sú o nič menej dôležité a užitočné, začnime.

1. Stavebné REFERENCIE- je logický operátor na kontrolu typu odkazu. Najčastejšie sa vyskytuje pri kontrole poľa komplexného typu pre konkrétny typ. Syntax: LINK<Имя таблицы>

Príklad použitia:

Požiadavka.Text = // ak je typ hodnoty registrátora Prijímanie dokladu, // potom žiadosť vráti "Príjem tovaru", inak "Predaj tovaru" "VYBERTE | VYBERTE | KEĎ Zostatky. LINK Registrátora Dokument. "" Výdavok "" | KONIEC AKO Druh pohybu | OD | Register akumulácie. Zostatky tovaru v skladoch AS Zostatky ";

2. Stavba MEDZI- tento operátor skontroluje, či je hodnota v určenom rozsahu.

Syntax: MEDZI<Выражение>A<Выражение>

Príklad použitia:

Request.Text = // získame celú nomenklatúru, ktorej kód leží v rozsahu od 1 do 100 "SELECT | Nomenclature.Ref | FROM | Directory.Nomenclature AS Nomenclature | WHERE | Nomenclature.Code BETWEEN 1 AND 100";

3. Konštrukcia B a B HIERARCHIA- skontrolujte, či je hodnota v prenášanom zozname (polia, tabuľky hodnôt atď. môžu byť odovzdané ako zoznam). Operátor V HIERARCHII umožňuje zobraziť hierarchiu (príklad použitia Plánu účtov).

Syntax: V(<СписокЗначений>), V HIERARCHII (<СписокЗначений>)

Príklad použitia:

Request.Text = // vyberte všetky podúčty účtu "SELECT | Self-supporting.Link AS account | FROM | Plan of accounts. Self-supported AS Self-supported | WHERE | Self-supporting. Reference IN HIERARCHY VALUE (Plan of účty. Samonosné.Tovar)";

4. Stavebné LIKE- táto funkcia nám umožňuje porovnávať reťazec so vzorom reťazca.

Syntax: PÁČI SA MI TO "<ТекстШаблона>"

Možnosti vzoru reťazcov:

% je sekvencia obsahujúca ľubovoľný počet ľubovoľných znakov.

Jedna ľubovoľná postava.

[...] - každý jeden znak alebo postupnosť znakov uvedených v hranatých zátvorkách. Rozsahy môžu byť špecifikované v enumerácii, napríklad a-z, ktoré označujú ľubovoľný znak zahrnutý v rozsahu vrátane koncov rozsahu.

[^ ...] – každý jeden znak alebo postupnosť znakov uvedených v hranatých zátvorkách, okrem tých, ktoré sú uvedené za znakom záporu.

Príklad použitia:

Request.Text = // nájdite celú nomenklatúru, ktorá obsahuje koreň TABUR a začína // buď malým alebo veľkým písmenom t "SELECT | Nomenclature.Ref | FROM | Directory.Nomenclature AS Nomenklatúra | WHERE | Produkty. Názov LIKE" " [TT ] abur% "" ";

5. Dizajn POVOLENÝ- tento operátor umožňuje vybrať z databázy len tie záznamy, do ktorých má volajúci právo čítať. Tieto práva sa konfigurujú na úrovni záznamu (RLS).

Syntax: Za kľúčovým slovom SELECT sa píše ALLOWED

Príklad použitia:

Request.Text = "VYBERTE POVOLENÉ | Dodávatelia.Odkaz | FROM | Adresár.Dodávatelia AS Dodávatelia";

6. Konštrukcia RÔZNA- umožňuje vybrať záznamy, v ktorých nie sú žiadne opakované záznamy.

Syntax: Za kľúčovým slovom SELECT sa píše DIFFERENT

Príklad použitia:

Request.Text = // vyberie záznamy, ku ktorým má čitateľ práva "SELECT DIFFERENT | Contractors.Name | FROM | Directory.Contractors AS Contractors";

Konštrukciu RÔZNE je možné použiť aj s AUTORIZOVANÝM operátorom a inými operátormi.

Príklad použitia:

Request.Text = // vyberie rôzne záznamy, pre ktoré má čitateľ práva "VYBRAŤ POVOLENÉ INÉ | Dodávatelia. Meno | FROM | Adresár.Dodávatelia AS Dodávatelia";

7. Stavba PRVÝ- vyberie počet záznamov zadaný v parametri z výsledku dotazu.

Syntax: FIRST<число>

Príklad použitia:

Request.Text = // vyberte prvé 4 GTD čísla z adresára "SELECT FIRST 4 | GTD numbers.Link | FROM | Reference.GTD numbers AS GTD numbers";

8. DIZAJN NA ZMENU- umožňuje uzamknúť tabuľku, funguje iba v transakciách (relevantné len pre automatické zámky).

Syntax: PRE ZMENU<НаименованиеТаблицы>

Príklad použitia:

Query.Text = "SELECT | Voľné zostatky. Zostatky. Nomenklatúra, | Voľné zostatky. Zostatky. Sklad, | Voľné zostatky. Zostatky. Na sklade

9. Dizajn OBJEDNAŤ BY- zoradí údaje podľa špecifického poľa. Ak je pole odkaz, potom pri nastavovaní príznaku AUTO OBJEDNÁVKA triedenie sa vykoná prezentáciou odkazu, ak je príznak vypnutý, odkazy sú zoradené podľa priority adresy odkazu v pamäti.

Syntax: TRIEDIŤ PODĽA<НаименованиеПоля>AUTO OBJEDNÁVKA

Príklad použitia:

Request.Text = "SELECT | Voľné zostatky

10. Stavba LOAD BY- používa sa na zoskupenie reťazcov dopytov podľa konkrétnych polí. Číselné polia sa musia použiť s akoukoľvek agregovanou funkciou.

Syntax: LOAD BY<НаименованиеПоля1>, .... , <НаименованиеПоляN>

Príklad použitia:

Request.Text = "SELECT | Produkty v skladoch. Nomenklatúra AS Nomenklatúra, | Produkty v skladoch. Sklad, | SUMA (Produkty v skladoch. Na sklade) AS Sklad | OD | Register akumulácie.

11. DIZAJN MAŤ- umožňuje aplikovať agregovanú funkciu na podmienku výberu údajov, podobne ako pri konštrukcii WHERE.

Syntax: MAJÚCI<агрегатная функция с условием>

Príklad použitia:

Request.Text = // vyberie zoskupené záznamy, kde je pole na sklade väčšie ako 3 "SELECT | ProductsIn Warehouses. GoodsIn Warehouses.Nomenclature, | GoodsIn Warehouses.Warehouse | | HAVING | AMOUNT (TovarsIn Warehouses. In Sklad)> 3 ";

12. Stavebníctvo INDEX BY- používa sa na indexovanie poľa dotazu. Dokončenie indexovaného dotazu trvá dlhšie, no zrýchľuje vyhľadávanie v indexovaných poliach. Dá sa použiť iba na virtuálnych stoloch.

Syntax: INDEX BY<Поле1, ... , ПолеN>

Príklad použitia:

Request.Text = "SELECT | Tz.Name OS, | Tz.Number zložky, | Tz.codeOS, | Tz.Term, | Tz.Type | POST Data .KodOS ";

13. Stavba KDE- umožňuje uložiť podmienku na ľubovoľné výberové polia. Do výsledku budú zahrnuté len záznamy, ktoré spĺňajú podmienku.

Syntax: KDE<Условие1 ОператорЛогСоединения УсловиеN>

Príklad použitia:

Request.Text = // vyberie všetky záznamy, pre ktoré zostáva kompenzácia<>0 a // SummaDlyaRaschKompOstatok> 100 "SELECT | KompensatsiyaRPOstatki.Kontragent, | KompensatsiyaRPOstatki.Rebenok, | KompensatsiyaRPOstatki.KompensatsiyaOstatok, | KompensatsiyaRPOstatki.SummaDlyaRaschKompOstatok | PUT DannyeTz | Z | RegistrNakopleniya.KompensatsiyaRP.Ostatki KompensatsiyaRPOstatki AKO | KDE | KompensatsiyaRPOstatki.KompensatsiyaOstatok<>0 | A kompenzácia za zostatok. AmountForCalculateCompOut balance> 100 ";

14. VÝSLEDKY STAVBY ... VŠEOBECNE- používa sa na výpočet súčtov, návrh špecifikuje polia, podľa ktorých sa budú počítať súčty a agregačné funkcie aplikované na súčtové polia. Pri použití súčtov pre každé pole podľa konštrukcie TOTAL sú údaje zoskupené. Existuje voliteľný konštrukt GENERAL a jeho použitie tiež poskytuje ďalšie zoskupovanie. Nižšie uvidíte príklad výsledku dotazu.

Syntax: VÝSLEDKY<АгрегатнаяФункция1, ... , АгрегатнаяФункцияN>ON<ОБЩИЕ> <Поле1, ... , ПолеN>

Príklad použitia:

Žiadosť.Text = "VYBERTE | Vyrovnania. Zmluva s dodávateľom. Typ dohody AS Typ zmluvy, | Vyrovnania. Zmluva s dodávateľom AS Dohoda, | Vyrovnania. Dodávateľ, | Vyrovnania. Suma vzájomného vyrovnania. | ZAP | VŠEOBECNÉ | Typ dohody " ;

Na obrázku sú zakrúžkované zoskupenia, ktoré sa vytvorili počas vykonávania dotazu, najvyššie patrí do sekcie GENERAL a druhé do poľa ContractorAgreementContractType.

Dotazovací jazyk v 1C 8 je zjednodušeným analógom známeho „štruktúrovaného programovacieho jazyka“ (ako sa často nazýva SQL). Ale v 1C sa používa iba na čítanie údajov, na zmenu údajov sa používa objektový dátový model.

Ďalším zaujímavým rozdielom je ruská syntax. Aj keď v skutočnosti môžete použiť konštrukcie v anglickom jazyku.

Príklad žiadosti:

VYBRAŤ
Banky. Názov,
Banky.Účet
OD
Adresár Banky AS Banky

Táto požiadavka nám umožní vidieť informácie o názve a korešpondenčnom účte všetkých bánk existujúcich v databáze.

Dopytovací jazyk je najjednoduchší a najefektívnejší spôsob získavania informácií. Ako vidíte z vyššie uvedeného príkladu, v dopytovacom jazyku musíte apelovať na názvy metadát (toto je zoznam systémových objektov, ktoré tvoria konfiguráciu, tj adresáre, dokumenty, registre atď.).

Popis konštruktov jazyka dotazovania

Štruktúra dopytu

Na získanie údajov stačí použiť konštrukcie „SELECT“ (výber) a „FROM“ (from). Najjednoduchšia požiadavka vyzerá takto:

SELECT * FROM Directories.Nomenklatúra

Kde "*" znamená výber všetkých polí tabuľky a References.Nomenclature je názov tabuľky v databáze.

Pozrime sa na komplexnejší a všeobecnejší príklad:

VYBRAŤ
<ИмяПоля1>AKO<ПредставлениеПоля1>,
Súčet(<ИмяПоля2>) AKO<ПредставлениеПоля2>
OD
<ИмяТаблицы1>AKO<ПредставлениеТаблицы1>
<ТипСоединения>COMPOUND<ИмяТаблицы2>AKO<ПредставлениеТаблицы2>
ON<УсловиеСоединениеТаблиц>

KDE
<УсловиеОтбораДанных>

LOAD BY
<ИмяПоля1>

TRIEDIŤ PODĽA
<ИмяПоля1>

VÝSLEDKY
<ИмяПоля2>
ON
<ИмяПоля1>

V tomto dotaze vyberieme údaje polí „NázovPole1“ a „NázovPole1“ z tabuliek „Názov tabuľky1“ a „Názov tabuľky“, priradíme synonymá k poliam pomocou operátora „AS“, spojíme ich podľa určitej „Podmienky tabuľky“ stav.

Z prijatých údajov vyberáme len údaje, ktoré spĺňajú podmienku z „WHERE“ „DataFeedback Condition". Ďalej dotaz zoskupíme podľa poľa „FieldName1", pričom sčítame „FieldName2". Vytvoríme súčty pre pole „FieldNameField1". a posledné pole „FieldName2“.

Posledným krokom je triedenie požiadavky pomocou konštrukcie ORDER BY.

Všeobecné konštrukcie

Uvažujme o všeobecných konštrukciách dopytovacieho jazyka 1C 8.2.

NAJPRVn

Pomocou tohto operátora môžete získať n počet prvých záznamov. Poradie záznamov je určené poradím v požiadavke.

VYBERTE PRVÝCH 100
Banky. Názov,
Banky.Kód AS BIK
OD
Adresár Banky AS Banky
TRIEDIŤ PODĽA
banky.

Žiadosť dostane prvých 100 záznamov z adresára „Banky“ zoradených podľa abecedy.

POVOLENÝ

Tento dizajn je relevantný pre prácu s mechanizmom. Podstatou mechanizmu je obmedziť čítanie (a iné akcie) na používateľov pre konkrétne záznamy v databázovej tabuľke, a nie pre tabuľku ako celok.

Ak sa používateľ pokúsi prečítať záznamy, ktoré sú pre neho nedostupné s požiadavkou, dostane chybové hlásenie. Aby ste tomu zabránili, mali by ste použiť konštrukciu "ALLOWED", to znamená, že požiadavka bude čítať iba záznamy, ktoré sú pre ňu povolené.

VYBERTE POVOLENÉ
Ďalšie informácie Store.Link
OD
Referencie. Ukladanie ďalších informácií

RÔZNY

Použitie "DIFFERENT" vám umožní vylúčiť duplicitné reťazce zo zadávania výsledku dotazu 1C. Duplikácia znamená, že všetky polia požiadavky sa zhodujú.

VYBERTE PRVÝCH 100
Banky. Názov,
Banky.Kód AS BIK
OD
Adresár Banky AS Banky

EmptyTable

Táto konštrukcia sa zriedka používa na kombinovanie dopytov. Pri spájaní môže byť potrebné zadať prázdnu vnorenú tabuľku v jednej z tabuliek. Práve na to sa hodí operátor „EmptyTable“.

Príklad z pomocníka 1C 8:

VYBERTE referenčné číslo, PRÁZDNÚ TABUĽKU. (Počet, Tov, Množ.) AS Zloženie
Z dokumentu.Výdavky
KOMBINUJ VŠETKO
SELECT Reference.Number, Composition. (LineNumber, Item, Quantity)
FROM Document.Invoice Document.Invoice.Content. *

JE NULL

Veľmi užitočná funkcia, ktorá zabráni mnohým chybám. YesNULL () umožňuje nahradiť hodnotu NULL požadovanou hodnotou. Veľmi často sa používa v testoch na prítomnosť hodnoty v spojených tabuľkách, napríklad:

VYBRAŤ
NomenklatúraRef.Ref.
Existuje NULL (Zostatok položky. Zostatok množstva, 0) AS Zostatok množstva
OD


Môžete ho použiť aj inak. Napríklad, ak pre každý riadok nie je známe, v ktorej tabuľke hodnota existuje:

JE NULL (InvoiceInvoiceReceived.Date, InvoiceInvoiced.Date)

AS je operátor, ktorý nám umožňuje priradiť názov (synonymum) tabuľke alebo poľu. Príklad použitia sme videli vyššie.

Tieto konštrukcie sú veľmi podobné – umožňujú vám získať reťazcovú reprezentáciu požadovanej hodnoty. Jediný rozdiel je v tom, že REPRESENTATION konvertuje ľubovoľné hodnoty na typ reťazca a REFERENCE REPRESENTATION konvertuje iba referenčné hodnoty. REFERENČNÁ REPREZENTÁCIA sa odporúča použiť v dotazoch systému kompozície údajov na optimalizáciu, pokiaľ sa, samozrejme, neplánuje použiť pole referenčných údajov vo filtroch.

VYBRAŤ
Zobraziť (odkaz), // riadok, napríklad „Predbežná správa č. 123 zo dňa 10.10.2015
Reprezentácia (značka vymazania) AKO Text značky vymazania, // reťazec, "Áno" alebo "Nie"
ReferenceRepresentation (značka vymazania) AS značka vymazania Boolean // Boolean, True or False
OD
Dokument.Predbežná správa

EXPRESNÉ

Express vám umožňuje previesť hodnoty polí na požadovaný typ údajov. Hodnotu môžete previesť buď na primitívny typ, alebo na typ odkazu.

Express for reference type sa používa na obmedzenie požadovaných typov údajov v poliach komplexného typu, ktoré sa často používajú na optimalizáciu výkonu systému. Príklad:

EXPRESS (Cost.Subconto1 Table AS Reference.Cost Articles) .ActivityTypeFor Accounting Tax Cost Accounting

Pri primitívnych typoch sa táto funkcia často používa na obmedzenie počtu znakov v poliach neobmedzenej dĺžky (s takýmito poľami nemožno porovnávať). Aby nedošlo k chybe" Neplatné parametre v operácii porovnania. Nemôžete porovnávať polia
neobmedzená dĺžka a polia nekompatibilných typov
", Je potrebné vyjadriť tieto polia takto:

EXPRES (komentár AS riadok (150))

ROZDIEL

Získajte bezplatné videonávody 267 1C:

Príklad použitia IS NULL v požiadavke 1C:

VYBER Z
Spr
LEFT JOIN Akumulačný register.ProduktyV skladoch.Vľavo AKO Zvyšný tovar
Softvér NomenclatureRef.Ref = ImplementedCommentsComponentsRemains.Nomenclature
KDE JE Zostatok TOVARU.Množstvo Zostatok JE NULOVÝ

Typ údajov v dotaze možno definovať nasledovne: pomocou funkcií TYPE () a TYPE () alebo pomocou logického operátora REFERENCE. Tieto dve funkcie sú podobné.

Preddefinované hodnoty

Okrem použitia odovzdaných parametrov v požiadavkách v dotazovacom jazyku 1C môžete použiť preddefinované hodnoty resp. Napríklad enumerácie, preddefinované vyhľadávania, účtovné osnovy atď. Na tento účel sa používa konštrukcia „Hodnota ()“.

Príklad použitia:

WHERE Nomenclature.NomenclatureType = Hodnota (Directory.NomenclatureType.Product)

WHERE Counterparties. Typ kontaktných informácií = Hodnota (Vyčíslenie. Kontaktné informácie. Typ. Telefón)

KDE Zostatky na účte. Účet = Hodnota (Plán účtov. Samonosné. ZiskyStrata)

Spojenia

Existujú 4 typy spojení: LEFT, SPRÁVNY, KOMPLETNÉ, VNÚTORNÉ.

PRIPOJTE SA VĽAVO a VPRAVO

Spojenia slúžia na prepojenie dvoch tabuliek podľa konkrétnej podmienky. Funkcia v ĽAVÝ KĹB v tom, že vezmeme prvú špecifikovanú tabuľku celú a naviažeme druhú tabuľku podľa podmienky. Polia druhej tabuľky, ktoré nebolo možné zviazať podmienkou, sú vyplnené hodnotou NULOVÝ.

Napríklad:

Vráti celú tabuľku Protistrán a pole „Banka“ vyplní len na tých miestach, kde bude splnená podmienka „Protistrany.Názov = Banky.Názov“. Ak podmienka nie je splnená, nastaví sa pole Banka NULOVÝ.

PRAVÝ SPÁR v jazyku 1Cúplne to isté ĽAVÉ pripojenie, s výnimkou jedného rozdielu - v SPRÁVNE PRIPOJENIE„Hlavná“ tabuľka je druhá, nie prvá.

ÚPLNÉ PRIPOJENIE

ÚPLNÉ PRIPOJENIE sa od ľavej a pravej líši tým, že zobrazuje všetky záznamy z dvoch tabuliek, spája len tie, ktoré dokáže spojiť podľa podmienky.

Napríklad:

OD

ÚPLNÉ PRIPOJENIE
Adresár Banky AS Banky

ON

Dopytovací jazyk vráti obe tabuľky v plnom rozsahu iba vtedy, ak je splnená podmienka spojenia záznamov. Na rozdiel od ľavého/pravého spojenia sa hodnoty NULL môžu objaviť v dvoch poliach.

VNÚTORNÉ PRIPOJENIE

VNÚTORNÉ PRIPOJENIE sa od úplného líši tým, že zobrazuje len tie záznamy, ktoré by mohli byť prepojené zadanou podmienkou.

Napríklad:

OD
Adresár Dodávatelia AS Klienti

VNÚTORNÉ PRIPOJENIE
Adresár Banky AS Banky

ON
Klienti.Názov = Banky.Názov

Táto požiadavka vráti iba riadky, v ktorých majú banka a protistrana rovnaký názov.

združenia

Konštrukt COMBINE and COMBINE ALL kombinuje dva výsledky do jedného. Tie. výsledok vykonania dvoch sa „zlúči“ do jedného, ​​spoločného.

To znamená, že systém funguje rovnako ako zvyčajne, len pre dočasnú tabuľku.

Ako používať INDEX SOFTWARE

Je však potrebné mať na pamäti jeden bod. Vytvorenie indexu na dočasnej tabuľke si tiež vyžaduje čas. Preto je vhodné použiť konštrukciu "" len vtedy, ak je s istotou známe, že v dočasnej tabuľke nebudú 1-2 záznamy. V opačnom prípade môže byť efekt opačný – výkon z indexovaných polí nekompenzuje čas budovania indexu.

VYBRAŤ
Kurzy mienSliceLast.Currency AS mena,
Kurzy mienSliceLast.Course
Kurzy meny POST
OD
Informácie Register.Currency Rates.SliceLast (& Obdobie,) AS Kurzy mienSliceLast
INDEX BY
mena
;
VYBRAŤ
Ceny
Ceny Nomenklatúry .Cena,
Nomenklatúry cien. Mena,
Kurzy mien.
OD
Informácie Register.NomenclaturePrices.SliceLast (& Obdobie,
Nomenklatúra B (& nomenklatúra) A typ ceny = & cena typ) AS Ceny
Kurzy mien LEFT UNION AKO kurzy mien
BY RatesNomenclature.Currency = SadzbyCurrency.Currency

Zoskupovanie

Dotazovací jazyk 1C vám umožňuje používať špeciálne agregačné funkcie pri zoskupovaní výsledkov dotazov. Zoskupovanie je možné použiť aj bez agregačných funkcií na „elimináciu“ duplikátov.

K dispozícii sú nasledujúce funkcie:

Množstvo, Počet, Počet rôznych, Maximum, Minimum, Priemer.

Príklad č. 1:

VYBRAŤ
Predaj tovaru, služieb, tovaru, nomenklatúry,
SUMA (Predaj tovaru, služieb, tovaru. Množstvo) AS Množstvo,
AMOUNT (Predaj tovaruSlužbyTovar.Suma) AS Suma
OD

LOAD BY
Realizácia TovarSlužby Tovar.Nomenklatúra

Požiadavka dostane všetky riadky s tovarom a sumarizuje ich podľa množstva a čiastok v kontexte položky.

Príklad č.2

VYBRAŤ
Kód banky,
MNOŽSTVO (RÔZNE Banky.Odkaz) AKO MnožstvoDvojnásobok
OD
Adresár Banky AS Banky
LOAD BY
Kódex bánk

Tento príklad zobrazí zoznam BIC v adresári "Banks" a ukáže, koľko duplikátov existuje pre každú z nich.

výsledky

Súčty sú spôsob, ako získať údaje z hierarchického systému. Pre súhrnné polia možno použiť agregačné funkcie, ako pre zoskupenia.

Jedným z najobľúbenejších spôsobov využitia súčtov v praxi sú dávkové odpisy tovaru.

VYBRAŤ




OD
Dokument.Realizácia tovaruSlužby.Tovar AS Predaj tovaruSlužbyTovar
TRIEDIŤ PODĽA

VÝSLEDKY
SUM (množstvo),
SUM (suma)
ON
Nomenklatúra

Výsledok dotazu bude nasledujúci hierarchický:

Všeobecné zhrnutie

Ak chcete získať súčty pre všetky "súčty", použite operátor "GENERAL".

VYBRAŤ
Realizácia TovarSlužby Tovar Nomenklatúra AS Nomenklatúra,
Realizácia TovarSlužby Dokument Tovar.Link AS,
Realizácia tovarov, služieb, tovarov Množstvo AS Množstvo,
Predaj tovaruSlužbyTovar.Suma AS Suma
OD
Dokument.Realizácia tovaruSlužby.Tovar AS Predaj tovaruSlužbyTovar
TRIEDIŤ PODĽA
Implementácia TovarSlužbyTovar.Odkaz.Dátum
VÝSLEDKY
SUM (množstvo),
SUM (suma)
ON
SÚ BEŽNÉ,
Nomenklatúra

V dôsledku vykonania dotazu dostaneme nasledujúci výsledok:

V ktorej 1. úroveň zoskupenia je agregácia všetkých požadovaných polí.

Objednávanie

Operátor ORDER BY sa používa na zoradenie výsledku dotazu.

Triedenie pre primitívne typy (reťazec, číslo, boolean) sa riadi obvyklými pravidlami. Pre polia referenčných typov dochádza k triedeniu podľa internej reprezentácie odkazu (jedinečný identifikátor), a nie podľa kódu alebo reprezentácie odkazu.

VYBRAŤ

OD
Odkaz.Nomenklatúra Nomenklatúra AS
TRIEDIŤ PODĽA
názov

Dotaz zobrazí zoznam názvov katalógu skladových listov v abecednom poradí.

Automatické objednávanie

Výsledkom dotazu bez zoradenia je chaoticky prezentovaná množina riadkov. Vývojári platformy 1C nezaručujú výstup reťazcov v rovnakom poradí pri vykonávaní rovnakých dopytov.

Ak potrebujete zobraziť záznamy tabuľky v konzistentnom poradí, musíte použiť konštrukciu "Autoorder".

VYBRAŤ
Nomenklatúra Názov AS Názov
OD
Odkaz.Nomenklatúra Nomenklatúra AS
AUTO OBJEDNÁVKA

Virtuálne stoly

Virtuálne tabuľky v 1C sú jedinečnou vlastnosťou dopytovacieho jazyka 1C, ktorá sa nenachádza v iných podobných syntaxách. Virtuálna tabuľka je rýchly spôsob, ako získať informácie o profile z registrov.

Každý z typov registrov má svoju vlastnú sadu virtuálnych tabuliek, ktoré sa môžu líšiť v závislosti od nastavenia registra.

  • strih prvého;
  • strih toho druhého.
  • zvyšky;
  • revolúcie;
  • zostatky a obraty.
  • pohyby zo subkonta;
  • revolúcie;
  • RPM Dt Kt;
  • zvyšky;
  • zostatky a obraty
  • subconto.
  • základňa;
  • grafové údaje;
  • skutočnú dobu platnosti.

Pre vývojára riešení sa údaje preberajú z jednej (virtuálnej) tabuľky, ale v skutočnosti platforma 1C berie z mnohých tabuliek a transformuje ich do požadovanej podoby.

VYBRAŤ
ProduktyV skladochZostatky aobraty.Nomenklatúra,
ProduktyV skladochZostatkyAObrat.MnožstvoPočiatočný zostatok,
TovarV skladochZostatky aObraty.MnožstvoObrat,
Tovar v skladochZostatkyAndTurnover.NumberIncome,
TovarV skladochZostatky aObraty.MnožstvoSpotreba,
ProduktyV skladochZostatkyAObraty.MnožstvoKonečný zostatok
OD
Register akumulácie.TovarVskladoch.Zostatky A Obraty AKO TovarVSkladochZostatky a obraty

Takýto dotaz vám umožňuje rýchlo získať veľké množstvo údajov.

Parametre virtuálnej tabuľky

Veľmi dôležitým aspektom práce s virtuálnymi tabuľkami je použitie parametrov. Parametre virtuálnej tabuľky - špecializované parametre pre výber a ladenie.

Pre takéto tabuľky sa považuje za nesprávne použitie výberu v konštrukte „WHERE“. Okrem toho, že požiadavka nebude optimálna, je možné získať nesprávne údaje.

Príklad použitia takýchto parametrov:

Accumulation Register.ProductsIn Warehouses.RemainsAndTurnovers (& BeginningPeriod, & EndPeriod, Month, Movements And PeriodHranice, Nomenklatúra = & DesiredNomenclature)

Algoritmus virtuálnych tabuliek

Napríklad najčastejšie používaná virtuálna tabuľka typu „Residuals“ ukladá dáta z dvoch fyzických tabuliek – zostatky a pohyby.

Pri použití virtuálnej tabuľky systém vykonáva nasledujúce manipulácie:

  1. Vypočítanú hodnotu dostaneme najbližšie z hľadiska dátumu a rozmerov v tabuľke súčtov.
  2. „Pridať“ sumu z tabuľky pohybu k sume z tabuľky súčtu.


Takéto jednoduché akcie môžu výrazne zlepšiť výkon systému ako celku.

Používanie nástroja na tvorbu dopytov

Konštruktor dotazov- nástroj zabudovaný do podnikového systému 1C, ktorý výrazne uľahčuje vývoj dopytov do databázy.

Konštruktor dotazu má pomerne jednoduché a intuitívne rozhranie. Pozrime sa však bližšie na používanie konštruktora dotazu.

Konštruktor textu dotazu sa spúšťa kontextovým menu (pravým tlačidlom myši) na správnom mieste v kóde programu.

Popis konštruktora dotazu 1C

Pozrime sa bližšie na každú kartu dizajnu. Výnimkou je záložka Builder, ktorá je témou na inú diskusiu.

Tabuľky a polia kariet

Táto karta určuje zdroj údajov a polia, ktoré chcete zobraziť v zostave. V skutočnosti sú tu popísané konštrukcie VYBER .. OD.

Zdrojom môže byť fyzická tabuľka databázy, tabuľka virtuálnych registrov, dočasné tabuľky, vnorené dotazy atď.

V kontextovom menu virtuálnych tabuliek môžete nastaviť parametre virtuálnej tabuľky:

Karta Odkazy

Záložka slúži na popis spojení viacerých tabuliek, vytvára konštrukcie so slovom SPOJENIE.

Karta Zoskupovanie

Na tejto karte vám systém umožňuje zoskupiť a zhrnúť požadované polia výsledku tabuľky. Popisuje použitie konštrukcií GROUP BY, SUM, MINIMUM, AVERAGE, MAXIMUM, QUANTITY, NUMBER OF RŮZNÉ.

Karta Podmienky

Zodpovedá za všetko, čo je v texte požiadavky po konštrukcii WHERE, teda za všetky podmienky kladené na prijaté dáta.

Karta Rozšírené

Tab Okrem toho je plný najrôznejších parametrov, ktoré sú veľmi dôležité. Zoberme si každú z vlastností.

Zoskupovanie Načítavanie záznamov:

  • Prvý N- parameter, ktorý vráti do dotazu iba N záznamov (operátor FIRST)
  • Žiadne opakovanie- zabezpečuje jedinečnosť prijatých záznamov (operátor INÝ)
  • Povolený- umožňuje vybrať len tie záznamy, ktoré vám systém umožňuje vybrať s prihliadnutím (stavba POVOLENÁ)

Zoskupovanie Typ žiadosti určuje, aký typ dotazu bude: načítanie údajov, vytvorenie dočasnej tabuľky alebo zničenie dočasnej tabuľky.

Dole je vlajka Zablokovať prijaté údaje pre neskoršiu zmenu... Umožňuje povoliť možnosť nastavenia zámku dát, ktorý zaisťuje bezpečnosť dát od ich načítania až po zmenu (relevantné len pre Automatický režim zámkov, štruktúra PRE ZMENU).

Odbory / Aliasy Tab

Na tejto záložke návrhára dotazov môžete nastaviť možnosť kombinovať rôzne tabuľky a aliasy (konštrukcia AKO). Tabuľky sú uvedené vľavo. Ak nastavíte vlajky pred stôl, použije sa konštrukcia UNION, inak - UNION ALL (tieto dva spôsoby sa líšia). Pravá strana označuje zhodu polí v rôznych tabuľkách, ak nie je zadaná žiadna zhoda, dotaz vráti hodnotu NULL.

Záložka Objednávka

Tu určíte poradie triedenia hodnôt (ORDER BY) - zostupne (DESCENT) alebo vzostupne (RETURN).

Je tu aj zaujímavá vlajka - Automatické objednávanie(v dopyte - AUTO OBJEDNÁVKA). V predvolenom nastavení systém 1C zobrazuje údaje v „chaotickom“ poradí. Ak nastavíte tento príznak, systém zoradí údaje podľa interných údajov.

Karta balík dotazov

Na karte návrhára dotazov môžete vytvoriť nové a použiť ju aj ako navigáciu. V texte požiadavky sú pakety oddelené symbolom „;“ (čiarkou).

Tlačidlo dotazu v Zostavovači dotazov

V ľavom dolnom rohu konštruktora dotazu sa nachádza tlačidlo Dopyt, pomocou ktorého môžete kedykoľvek zobraziť text dotazu:

V tomto okne môžete vykonať úpravy požiadavky a vykonať ju.


Pomocou konzoly dotazov

Query Console je jednoduchý a pohodlný spôsob ladenia zložitých dotazov a rýchleho získavania informácií. V tomto článku sa pokúsim popísať, ako používať Query Console a dať odkaz na stiahnutie Query Console.

Poďme sa na tento nástroj pozrieť bližšie.

Stiahnite si 1C Query Console

V prvom rade, ak chcete začať používať Query Console, musíte si ju odniekiaľ stiahnuť. Procesy sa zvyčajne delia na dva typy - riadené formy a pravidelné (alebo sa niekedy nazývajú 8.1 a 8.2 / 8.3).

Tieto dva pohľady som sa pokúsil skombinovať v jednom spracovaní - v požadovanom režime prevádzky sa otvorí požadovaný formulár (v riadenom režime konzola funguje len v hrubom režime).

Popis konzoly dotazu 1C

Začnime sa pozerať na konzolu dotazov s popisom hlavného panela spracovania:

V hlavičke konzoly dotazu môžete vidieť čas vykonania posledného dotazu s presnosťou na milisekundy, čo vám umožňuje porovnávať rôzne konštrukcie z hľadiska výkonu.

Prvá skupina tlačidiel na paneli príkazov je zodpovedná za ukladanie aktuálnych požiadaviek do externého súboru. To je veľmi pohodlné, vždy sa môžete vrátiť k písaniu zložitého dotazu. Alebo si napríklad veďte zoznam typických príkladov určitých konštrukcií.

Vľavo v poli Dopyt môžete vytvárať nové dotazy a ukladať ich do stromovej štruktúry. Druhá skupina tlačidiel je zodpovedná práve za správu zoznamu požiadaviek. S ním môžete vytvárať, kopírovať, mazať, presúvať požiadavku.

  • Vykonaťvyšetrovanie- jednoduché prevedenie a dosiahnutie výsledku
  • Spustiť balík- umožňuje zobraziť všetky prechodné požiadavky v dávke žiadostí
  • Zobrazenie dočasných tabuliek- umožňuje zobraziť výsledky, ktoré sú vrátené dočasnými dotazmi v tabuľke

Parametre požiadavky:

Umožňuje nastaviť aktuálne parametre požiadavky.

V okne parametrov dotazu je zaujímavé nasledovné:

  • Tlačidlo Získajte zo žiadosti automaticky nájde všetky parametre v požiadavke pre pohodlie vývojára.
  • Vlajka Jednotné parametre pre všetky požiadavky- pri inštalácii sa pri jeho spracovaní nevyčistia parametre pri prechode z požiadavky na požiadavku vo všeobecnom zozname požiadaviek.

Nastavte parameter ako zoznam hodnôt je to veľmi jednoduché, keď vyberiete hodnotu parametra, stlačením tlačidla hodnotu vymažete (krížik), systém ponúkne výber typu údajov, kde je potrebné vybrať „Zoznam hodnôt“:

Na hornom paneli je tiež tlačidlo na vyvolanie nastavení konzoly dotazov:

Tu môžete zadať voľby pre automatické ukladanie dotazov a voľby pre vykonanie dotazu.

Text dotazu sa zadáva do poľa dotazu konzoly. Dá sa to urobiť pomocou jednoduchého testovacieho balíka dotazov alebo zavolaním špeciálneho nástroja – návrhára dotazov.

Konštruktor dotazu 1C 8 sa volá z kontextovej ponuky (pravé tlačidlo myši), keď kliknete na vstupné pole:

V tejto ponuke sú aj také užitočné funkcie, ako je vymazanie alebo pridanie znakov prerušenia riadku („|“) do požiadavky alebo získanie kódu požiadavky v takej pohodlnej forme:

Žiadosť = Nová požiadavka;
Request.Text = "
| VYBERTE SI
| Meny.Odkaz
| OD
| Adresár Meny AS Meny “;
QueryResult = Query.Run ();

V dolnom poli konzoly dotazu sa zobrazí pole výsledku dotazu, pre ktoré bolo toto spracovanie vytvorené:



Konzola dotazov okrem zoznamu môže tiež zobraziť údaje vo forme stromu - pre dopyty obsahujúce súčty.

Optimalizácia dopytov

Jedným z najdôležitejších bodov pri zvyšovaní produktivity 1C Enterprise 8.3 je optimalizáciažiadosti... Tento bod je tiež veľmi dôležitý, keď absolvovanie certifikácie... Nižšie si povieme o typických príčinách neoptimálnej práce dotazov ao metódach optimalizácie.

Výbery vo virtuálnej tabuľke pomocou konštrukcie WHERE

Na detaily virtuálnej tabuľky je potrebné aplikovať filtre len cez parametre BT. V žiadnom prípade nepoužívajte na výber vo virtuálnej tabuľke konštrukciu WHERE, to je z hľadiska optimalizácie hrubá chyba. V prípade výberu pomocou WHERE v skutočnosti systém dostane VŠETKY záznamy a až potom vyberie potrebné.

SPRÁVNY:

VYBRAŤ

OD
Akumulačný register.Vzájomné vyrovnaniaS organizáciami Deponents.Zostatky (
,
Organizácia = & Organizácia
A Jednotlivec = & Jednotlivec) AKO Vzájomné vyrovnaniaS DeponentmiOrganizácie

NIE SPRÁVNE:

VYBRAŤ
Vzájomné vyrovnaniaS DeponentmiOrganizácieZostatky.SumaZostatok
OD
Register akumulácie.Vzájomné vyrovnaniaS DeponentmiOrganizáciami.Zostatky (,) AS Vzájomné vyrovnaniaSDeponentmiOrganizáciamiZostatky
KDE
SettlementsWith DeponentsOrganizationsBalances.Organization = & Organizácia
A Vzájomné vyrovnaniaS DeponentmiOrganizácieZostatky.Osobné = & Jednotlivci

Získanie hodnoty poľa komplexného typu cez bodku

Pri prijímaní údajov zloženého typu v dotaze cez bodku systém spojí ľavým spojením presne toľko tabuliek, koľko je možných typov v poli zloženého typu.

Napríklad pri optimalizácii je veľmi nežiaduce odkazovať na pole záznamu registra – registrátora. Registrátor má zložený dátový typ vrátane všetkých možných typov dokumentov, ktoré môžu zapisovať údaje do registra.

NIE SPRÁVNE:

VYBRAŤ
Record Set.Recorder.Date,
Súbor záznamov.Číslo
OD
Akumulácia Register.ProduktyOrganizácie AS SetRecords

To znamená, že takáto požiadavka sa v skutočnosti nebude vzťahovať na jednu tabuľku, ale na 22 databázových tabuliek (tento register má 21 typov registrátora).

SPRÁVNY:

VYBRAŤ
VOĽBA
WHEN GoodsOrg.Registrar LINK Document.Realization of TovarSlužby
POTOM VYJADRITE (GoodsOrg.Registrar AS Document.Realization of GoodsServices) .Dátum
KEĎ GoodsOrg.Registrar LINK Document. Príchod tovaruSlužby
POTOM VYJADRITE (GoodsOrg.Registrar AS Document.Arrival of GoodsServices) .Dátum
KONIEC AKO dátum,
ProduktyOrg.Množstvo
OD
Akumulačný register.ProduktyOrg

Alebo druhá možnosť je doplniť takéto informácie k rekvizitám, napríklad v našom prípade pridať dátum.

SPRÁVNY:

VYBRAŤ
ProductsOrganizations.Date,
ProductsOrganizations.Number
OD
Akumulačný register.Tovar organizácií AS Tovar organizácií

Poddotazy v stave spojenia

Pre optimalizáciu je neprijateľné používať poddotazy v podmienkach spojenia, výrazne to spomaľuje dopyt. V takýchto prípadoch je vhodné použiť VT. Ak sa chcete pripojiť, musíte použiť iba metadáta a objekty BT, ktoré ste predtým indexovali podľa polí pripojenia.

NIE SPRÁVNE:

VYBERTE…

ĽAVÝ KĹB (
VYBERTE Z INFORMÁCIÍ REGISTRÁCIA.Limity
KDE …
NAČÍTAŤ PODĽA...
) ON…

SPRÁVNY:

VYBERTE…
POST limity
FROM Information Register.Limits
KDE …
NAČÍTAŤ PODĽA...
INDEX PODĽA…;

VYBERTE…
Z dokumentu.Realizácia tovaruSlužby
LEFT JOIN Limity
ON …;

Spájanie záznamov s virtuálnymi tabuľkami

Existujú situácie, keď systém nefunguje optimálne pri spájaní virtuálneho stola s ostatnými. V tomto prípade, aby ste optimalizovali výkon dotazu, môžete skúsiť umiestniť virtuálnu tabuľku do dočasnej tabuľky, pričom nezabudnite indexovať spojené polia v dotaze na dočasnú tabuľku. Je to spôsobené tým, že VT sú často obsiahnuté v niekoľkých fyzických tabuľkách DBMS, v dôsledku čoho sa na ich výber vytvorí poddotaz a problém je podobný predchádzajúcemu bodu.

Používanie filtrov na neindexovaných poliach

Jednou z najčastejších chýb pri písaní dotazov je používanie podmienok na neindexovaných poliach, čo je v rozpore pravidlá optimalizácie dopytov. DBMS nemôže vykonať dotaz optimálne, ak je v dotaze uložené filtrovanie podľa neindexovaných polí. Ak sa vezme dočasná tabuľka, je potrebné indexovať aj polia spojenia.

Pre každú podmienku musí existovať vhodný index. Vhodný je index, ktorý spĺňa nasledujúce požiadavky:

  1. Index obsahuje všetky polia uvedené v podmienke.
  2. Tieto polia sa nachádzajú na samom začiatku indexu.
  3. Tieto výbery sú v rade, to znamená, že hodnoty, ktoré nie sú zahrnuté v podmienke dotazu, nie sú medzi nimi „zaklinené“.

Ak DBMS nenájde správne indexy, potom bude naskenovaná celá tabuľka – to bude mať veľmi negatívny dopad na výkon a môže viesť k dlhodobému zablokovaniu celej sady záznamov.

Použitie logického OR v podmienkach

To je všetko, tento článok pokrýval základy aspektov optimalizácie dotazov, ktoré by mal poznať každý odborník na 1C.

Veľmi užitočný bezplatný video kurz o vývoji a optimalizácii dopytov, vysoko odporucany nielen pre začiatočníkov!

Pozor! Toto je úvodná verzia lekcie, ktorej materiály môžu byť neúplné.

Prihláste sa ako študent

Ak chcete získať prístup k školským materiálom, prihláste sa ako študent

Dotazovací jazyk 1C 8.3 pre začínajúcich programátorov: podmienený operátor

Podmienený príkaz v dotaze

Napíšme dotaz, ktorý získa názvy a kalórie jedla:

Teraz k výsledku dotazu pridáme stĺpec, do ktorého zobrazíme obsah tuku v potravinách podľa nasledujúcich pravidiel:

  • ak je obsah kalórií nižší ako 100, potom je obsah tuku nízky;
  • ak je obsah kalórií od 100 do 200, potom je obsah tuku normálny;
  • ak je obsah kalórií vyšší ako 200, potom je obsah tuku vysoký.

Ako sa to dá dosiahnuť, pretože v tabuľke Adresár Jedložiadny stĺpec Tučnota?

Ukázalo sa, že tento stĺpec môžeme pridať sami pomocou podmieneného operátora v dotaze:

Pozrime sa bližšie na text žiadosti:

V sekcii VYBRAŤ existuje zoznam polí výberu: názov, Obsah kalórií a potom namiesto tretieho poľa je konštrukcia podmieneného operátora, ktorej výsledok prechádza do tretieho stĺpca.

Podmienky operátora spracovávané postupne... Ak sa jeden z nich ukáže ako správny, vráti sa zodpovedajúca hodnota. Ak nie je splnená žiadna z podmienok, vráti sa hodnota zo sekcie. INAK.

Preto nový dotaz vráti tabuľku takto:

Ustúpiť

Všimnite si, že sa volá tretí stĺpec v tabuľke vrátenej dotazom Pole1... Tento názov vygeneroval systém automaticky, pretože tretí stĺpec nezodpovedá žiadnemu reálnemu poľu v tabuľke. Adresár Jedlo odkiaľ bolo možné tento názov získať.

Ale je v našich silách dať jej to meno. Ak to chcete urobiť, ihneď po popise poľa musíte napísať kľúčové slovo AKO a potom zadajte samotný názov oddelený medzerou. Čítate úvodnú verziu lekcie, nájdete úplné lekcie. Takéto meno sa bude nazývať alias poľa.

Aliasy môžete priradiť ľubovoľnému poľu vrátane tých, ktoré už majú názov. Urobme si alias Jedlo pre pole názov:

Príklad použitia funkcie Podreťazec:

SELECT Name, SELECT WHEN SUBSTRING (Name, 1, 3) = "Ban" THEN "Toto je banán" WHEN SUBSTRING (Meno, 1, 2) = "Chi" THEN "Toto sú chipsy" INAK "Niečo iné" KONIEC FROM Adresár... Jedlo

Komplexnejšie výsledky podmieneného operátora

Výsledkom podmieneného operátora môže byť nielen reťazec, ale aj číslo, dátum, booleovský alebo referenčný typ. Môže to byť buď konštanta vyššie uvedených typov, alebo pole tabuľky. Čítate úvodnú verziu lekcie, nájdete úplné lekcie.

Dovoľte mi uviesť všeobecný príklad, ktorý demonštruje všetky tieto možnosti:

Urobte si test

Spustiť test

1. Podmienky zvoleného prevádzkovateľa (ako sa tiež nazýva) sú spracované

2. Podmienený operátor sa vždy vráti

3. Ak nie je splnená žiadna z podmienok, operátor výberu vráti hodnotu

4. Oddiel ELSE v podmienenom vyhlásení

5. V podmienkach zvoleného prevádzkovateľa možno použiť

   

17 pravidiel pre zostavenie optimálnej ŽIADOSTI o údaje databázy 1C

Na vytváranie a vykonávanie dopytov do databázových tabuliek na platforme 1C sa používa špeciálny objekt programovacieho jazyka Dopyt... Tento objekt je vytvorený volaním konštrukcie Nová žiadosť... Dotaz je užitočný, keď potrebujete získať komplexný súbor údajov, zoskupený a zoradený podľa potreby. Klasickým príkladom použitia dotazu je získanie súhrnu stavu akumulačného registra v určitom časovom bode. Mechanizmus dopytov vám tiež umožňuje ľahko získať informácie v rôznych časových rámcoch.

Telo požiadavky je pokyn, podľa ktorého sa má požiadavka vykonať. Text žiadosti popisuje:

  • tabuľky informačnej databázy používané ako zdroje údajov dopytov;
  • polia tabuľky, ktoré je potrebné spracovať v dotaze;
  • pravidlá zoskupovania;
  • triedenie výsledkov;
  • atď.

Inštrukcia je vypracovaná v špeciálnom jazyku – dopytovacom jazyku a pozostáva z oddelených častí – sekcií, viet, kľúčových slov, funkcií, aritmetických a logických operátorov, komentárov, konštánt a parametrov.

Dotazovací jazyk platformy 1C je veľmi podobný syntaxi iných jazykov SQL, existujú však určité rozdiely. Hlavné výhody vstavaného dotazovacieho jazyka sú: dereferencovanie polí, prítomnosť virtuálnych tabuliek, pohodlná práca so súčtami, netypové polia v dotazoch.

Odporúčania na písanie dotazov do databázy v jazyku dotazov platformy 1C:

1) Telo požiadavky môže obsahovať preddefinované konfiguračné údaje, ako napríklad:

  • enumeračné hodnoty;
  • preddefinované údaje:
  • referenčná literatúra;
  • tabuľky charakteristických typov;
  • účtovné osnovy;
  • plány typov výpočtov;
  • prázdne odkazy;
  • hodnoty bodov trasy obchodných procesov.

Text dotazu môže obsahovať aj hodnoty systémových enumerácií, ktoré možno priradiť poliam v databázových tabuľkách: AccumulationMotionType, AccountType a AccountingMotionType. Dotazy odkazujú na preddefinované konfiguračné údaje a systémové hodnoty enumerácie pomocou literálu funkčného typu VALUE. Tento literál zlepšuje čitateľnosť dotazu a znižuje počet parametrov dotazu.

Príklad použitia doslovu VÝZNAM:

  • KDE Mesto = HODNOTA (Adresár.Mestá.Moskva)
  • KDE Mesto = HODNOTA (Directory.Cities.EmptyLink)
  • WHERE ItemType = VALUE (Enumeration.Product Types.Service)
  • WHERE Typ pohybu = HODNOTA (Akumulačný typ pohybu. Príchod)
  • WHERE RoutePoint = HODNOTA (BusinessProcess.BusinessProcess1.RoutePoint.Action1

2) Pomocou pokynov AUTO OBJEDNÁVKA dokončenie dotazu môže trvať dlho, takže ak triedenie nie je potrebné, je lepšie ho nepoužívať vôbec. Vo väčšine prípadov je najlepšie triediť pomocou pokynov TRIEDIŤ PODĽA.

Automatické objednávanie funguje podľa nasledujúcich princípov:

  • Ak bola v žiadosti uvedená doložka ORDER BY, potom každý odkaz na tabuľku v tejto doložke bude nahradený poľami, podľa ktorých je tabuľka štandardne zoradená (pre referenčné knihy je to kód alebo názov, pre dokumenty - dátum dokumentu) . Ak sa pole na zoradenie vzťahuje na hierarchický katalóg, použije sa hierarchické triedenie podľa tohto katalógu.
  • Ak požiadavka neobsahuje klauzulu ORDER BY, ale je tam klauzula TOTAL, potom bude výsledok dotazu zoradený podľa polí prítomných v klauzule TOTAL za kľúčovým slovom BY, v rovnakom poradí a ak sa súčty vypočítali odkazom polia, potom triedením polí predvolené tabuľky, na ktoré sa odkazovalo.
  • Ak požiadavka neobsahuje klauzuly ORDER BY a TOTAL, ale existuje klauzula GRUPP BY, potom sa výsledok dotazu zoradí podľa polí prítomných v klauzule v rovnakom poradí a ak bolo zoskupenie vykonané podľa referenčných polí , potom štandardne triedi tabuľky polí, na ktoré sa odkazovalo.
  • Ak dotaz neobsahuje klauzuly a ORDER BY, TOTAL a GROUP BY, výsledok sa zoradí podľa predvolených triediacich polí pre tabuľky, z ktorých sa vyberajú údaje, v poradí, v akom sa zobrazujú v dotaze.
  • V prípade, že dotaz obsahuje klauzulu TOTAL, každá úroveň súčtov sa objednáva samostatne.

3) Aby ste sa vyhli opakovanému dotazu na databázu pri zobrazení výsledku dotazu používateľovi (napríklad zostavenie dotazu alebo zobrazenie výsledku dotazu pomocou tabuľkového dokumentu), je užitočné použiť príkaz ODKAZY NA PODÁVANIE, ktorý vám umožňuje získať reprezentáciu referenčnej hodnoty. Príklad:

Je možné použiť aj návod REPREZENTÁCIA- je určený na získanie reťazcovej reprezentácie hodnoty ľubovoľného typu. Rozdiel medzi týmito pokynmi je v tom, že v prvom prípade, ak je inštrukcii odovzdaný odkaz, výsledkom bude reťazec, v ostatných prípadoch bude výsledkom hodnota odovzdaného parametra. V druhom prípade bude výsledkom inštrukcie vždy reťazec!

4) Ak požiadavka obsahuje pole so zloženým typom, potom je pre takéto polia potrebné previesť hodnoty poľa na určitý typ pomocou inštrukcie EXPRESNÉ, ktorý odstráni nepotrebné tabuľky z ľavého spojenia so zložitým poľom typu údajov a urýchli vykonávanie dotazu. Príklad:

Existuje register kumulácie zostatkov tovaru, v ktorom má pole Registrátor zložený typ. V požiadavke sa volí Dátum a číslo dokladov o preberaní tovaru, pričom pri prístupe k detailu dokladu cez pole Registrátor sa nevyskytuje veľa ľavých spojení tabuľky akumulačného registra s tabuľkami dokladov registra.

Kód 1C v 8.x SELECT
EXPRES (Zostatok tovaru. Dokument registrátora AS. Príjem tovaru). Číslo AS Číslo potvrdenky,
EXPRES (Zostatok tovaru. Dokument registrátora AS. Prevzatie tovaru). Dátum AS Dátum prijatia
OD
Akumulačný register. Zostatky tovaru AS Zostatky tovaru

Ak sa typová konverzia nepovažuje za uskutočniteľnú, potom bude výsledkom typovej konverzie hodnota NULOVÝ.

5) Nezabudnite na pokyny POVOLENÝ, čo znamená, že dotaz vyberie len tie záznamy, ku ktorým má aktuálny používateľ práva. Ak toto slovo nie je zadané, tak v prípade, že požiadavka vyberie záznamy, ku ktorým užívateľ nemá práva, požiadavka bude spracovaná s chybou.

6) Ak dotaz používa spojenie a niektoré časti spojenia obsahujú vnorené tabuľky (dokument s tabuľkovou sekciou) a niektoré nie, je potrebné doplniť výberový zoznam o polia – prázdne vnorené tabuľky. To sa vykonáva pomocou kľúčového slova PRÁZDNY TABUĽ nasledované aliasmi polí, ktoré budú tvoriť vnorenú tabuľku v zátvorkách. Príklad:

Kód 1C v 8.x // Vyberte polia Číslo a Zloženie
// z virtuálnej tabuľky Document.Expense
VYBERTE referenčné číslo, PRÁZDNÚ TABUĽKU. (Počet, Tov, Množ.) AS Zloženie
Z dokumentu.Výdavky
KOMBINUJ VŠETKO
SELECT Reference.Number, Composition. (LineNumber, Item, Quantity)
FROM Document.Invoice Document.Invoice.Content. *

7) Aby ste sa vyhli duplicitným riadkom vo výsledku dotazu, mali by ste použiť inštrukciu RÔZNY, pretože toto je jasnejšie a jasnejšie, a pokyny LOAD BY používa sa na zoskupovanie pomocou agregačných funkcií. Ksati, pri použití agregovaných funkcií, návrh LOAD BY nemusia byť zadané vôbec a všetky výsledky dotazu budú zoskupené do jedného riadka. Príklad:

Kód 1C v 8.x // Je potrebné zistiť, ktoré protistrany vo všeobecnosti
// tovar bol odoslaný za obdobie.
Vyberte položku Rôzne
Dokument.FaktúraFaktúra.Dodávateľ

8) Návod LOAD BY umožňuje prístup k poliam najvyššej úrovne bez zoskupovania výsledkov podľa týchto polí, ak sa na polia vnorenej tabuľky použijú agregačné funkcie. Aj keď je to napísané v pomocníkovi 1C, pri zoskupovaní výsledkov dotazu musia byť v zozname polí výberu uvedené agregované funkcie a okrem agregovaných funkcií je možné v zozname špecifikovať iba polia, pomocou ktorých sa zoskupovanie vykonáva. výberových polí. Príklad:

Kód 1C v 8.x SELECT
Príjem tovaru a služieb. Tovar (SUM (množstvo), nomenklatúra),
Príjem tovaru a služieb.Odkaz,
Príjem tovaru a služieb.
OD
Dokument Príjem tovaru a služieb AS Príjem tovaru a služieb
LOAD BY
Príjem tovaru a služieb. Tovar. (Nomenklatúra)

9) Návod JE NULL má nahradiť hodnotu NULOVÝ na inú hodnotu, ale nezabudnite, že druhý parameter sa skonvertuje na typ prvého, ak je typom prvého parametra reťazec alebo číslo.

10) Pri odkaze na hlavnú tabuľku sa môžete odvolávať na údaje podriadenej tabuľky v podmienke. Táto funkcia sa nazýva dereferencovanie polí podriadenej tabuľky.

Príklad (vyhľadajte dokumenty obsahujúce konkrétny produkt v tabuľkovej časti):

Výhodou tohto dotazu oproti dotazu na podriadenú tabuľku Receipt.Products je, že ak sú v dokumentoch duplikáty, výsledok dotazu vráti iba jedinečné dokumenty bez použitia kľúčového slova DIFFERENT.

11) Zaujímavou verziou operátora B je kontrola výskytu usporiadanej množiny v množine takýchto množín (Pole1, Pole2, ..., PoleN) B (Pole1, Pole2, ..., PoleN).

Kód 1C v 8.x SELECT
Dodávatelia.Odkaz
KDE
(Protistrany.Odkaz, Tovar.Odkaz) В
(SELECT Predaj.Kupujúci, Predaj.Produkt
Z Akumulačného registra. Predaj AS Predaj)
OD
Adresár. Dodávatelia,
Adresár.Produkty

12) Vždy, keď je to možné, používajte virtuálne tabuľky dotazov. Pri vytváraní dotazu systém poskytuje množstvo virtuálnych tabuliek ako dátových zdrojov – sú to tabuľky, ktoré sú zároveň výsledkom dotazu, ktorý systém vygeneruje v čase vykonávania zodpovedajúcej časti kódu.

Vývojár môže nezávisle získať rovnaké údaje, ktoré mu systém poskytuje ako virtuálne tabuľky, avšak algoritmus na získanie týchto údajov nebude optimalizovaný, pretože:

Všetky virtuálne tabuľky sú parametrizované, to znamená, že vývojár má možnosť nastaviť niektoré parametre, ktoré systém použije pri generovaní požiadavky na vytvorenie virtuálnej tabuľky. V závislosti od toho, aké parametre virtuálnej tabuľky špecifikuje vývojár, môže systém vygenerovať RÔZNY dotazov na získanie rovnakej virtuálnej tabuľky a budú optimalizované z hľadiska odovzdaných parametrov.

Nie vždy má vývojár prístup k údajom, ku ktorým má systém prístup.

13) Vo verzii klient-server diela je funkcia PODKLAD () implementované pomocou funkcie SUBSTRING () zodpovedajúceho príkazu SQL odovzdaného do databázy SQL Server, ktorá vypočítava typ výsledku funkcie SUBSTRING () podľa zložitých pravidiel v závislosti od typu a hodnôt jej parametrov, ako aj v závislosti od v kontexte, v ktorom sa používa... Vo väčšine prípadov tieto pravidlá neovplyvňujú vykonanie dotazu, ale sú chvíle, kedy je maximálna dĺžka výsledného reťazca vypočítaná serverom SQL Server relevantná pre vykonanie dotazu. Je dôležité mať na pamäti, že v niektorých kontextoch, kde sa používa funkcia SUBSTRING (), maximálna dĺžka jej výsledku môže byť maximálnou dĺžkou ohraničeného reťazca, čo je v SQL Serveri 4000 znakov. To môže viesť k neočakávanému abnormálnemu ukončeniu vykonávania dotazu:

Poskytovateľ Microsoft OLE DB pre SQL Server: Upozornenie: Procesor dotazov nemohol vytvoriť plán dotazov z optimalizátora, pretože celková dĺžka všetkých stĺpcov v klauzule GROUP BY alebo ORDER BY presahuje 8000 bajtov.

HRESULT = 80040E14, SQLSTATE = 42 000, natívny = 8618

14) Používajte opatrne ALEBO v stavebníctve KDE, keďže použitie podmienky s OR môže výrazne „zaťažiť“ dopyt. Problém môžete vyriešiť konštrukciou KOMBINUJ VŠETKO... Príklad:

Kód 1C v 8.x SELECT

OD

KDE
_DemoContractors.Link = Odkaz1
KOMBINUJ VŠETKO
VYBRAŤ
_DemoContractors.NameFull
OD
Adresár._DemoContractors AS _DemoContractors
KDE
_DemoContractors.Link = Odkaz2

15) Podmienka NIE B v stavebníctve KDE zvyšuje čas vykonania požiadavky, keďže ide o druh NIE (ALEBO1 OR2 ... ORn), takže pre veľké stoly skúste použiť LEFT JOIN with IS NULL... Príklad:

Kód 1C v 8.x SELECT
_DemoContractors.Link
OD
Adresár._DemoContractors AS _DemoContractors
Dokument LEFT JOINT._DemoBuyerOrder AS _DemoBuyerOrder
Softvér _DemoContractors.Link = _DemoObjednávka Kupujúceho.Dodávateľ
KDE
_DemoOrderBuyer.Contractor JE NULL

16) Pri používaní Dočasné stoly musíte indexovať podmienku a spájať polia v týchto tabuľkách, ALE pri použití indexov môže byť dopyt ešte pomalší. Preto je potrebné analyzovať každý dotaz s indexom aj bez neho, zmerať rýchlosť vykonania dotazu a urobiť konečné rozhodnutie.

Ak vložíte údaje do dočasnej tabuľky, ktorá bola pôvodne indexovaná niektorými poľami, dočasná tabuľka už nebude mať index pre tieto polia.

17) Ak nepoužívate Dočasný správca tabuľky, potom nie je potrebné explicitne odstrániť dočasnú tabuľku, bude vymazaná po dokončení dávkového dotazu, inak by ste mali dočasnú tabuľku odstrániť jedným z nasledujúcich spôsobov: príkazom ZNIČIŤ v požiadavke, metóda volania TempTablesManager.Close ().

A okrem videa od Evgenyho Gileva: Typické chyby pri písaní žiadostí o 1C:

Načítava ...Načítava ...