1c v požadavku seřadit podle 2 polí. Řazení výsledků dotazu

/// určitá pole v 1s 8.3, 8.2&Na serveru Postup Jak uspořádat výsledek dotazu podle polí na serveru() // Chcete-li seřadit řádky ve výsledku dotazu // je použita sekce ORDER BY. // Vyžadováno k zobrazení objednaných produktů // nejprve ve vzestupném pořadí barev a potom // v sestupném pořadí kalorií. Požadavek = Nový požadavek ( "SELECT | Jméno, | Barva, | Kalorie | FROM | Adresář. Nomenklatura | OBJEDNAT PODLE | Barva VĚK, | Kalorie DESC"/// Jak seřadit výsledek dotazu podle /// výraz v 1s 8.3, 8.2&Na serveru Postup Jak uspořádat výsledek dotazu podle výrazu na serveru() // V sekci ORDER BY můžete použít// výrazy. // Například objednejme produkty podle // maximální obsah bílkovin a sacharidů// spolu. Požadavek = Nový požadavek ( "VYBRAT | Název, | Bílkoviny, | Sacharidy, | Tuky, | Voda | Z | Adresář. Nomenklatura | ŘADIT PODLE | (Bílkoviny + sacharidy) SESTUPNĚ"); ExecuteRequestAndOutputToForm(Request) ; Konec procedury /// Jak seřadit výsledek dotazu podle /// hierarchie v 1s 8.3, 8.2&Na serveru Postup Jak uspořádat výsledek dotazu podle hierarchie na serveru() // Pro tabulky, pro které je nastavena hierarchická vlastnost // možné řazení podle hierarchie. // Uveďme například výstup prvků z // referenční kniha "Nomenklatura" je v pořádku // jejich pořadí v hierarchii adresářů. Požadavek = Nový požadavek ( "VYBRAT | Jméno | Z | Adresář. Tastes AS Tastes | ORDER BY | Hierarchie jmen"); ExecuteRequestAndOutputToForm(Request) ; Konec procedury /// Jak seřadit výsledek dotazu podle /// funkce seskupení agregátů v 1s 8.3, 8.2&Na serveru Postup Jak uspořádat výsledek dotazu podle agregační funkce na serveru() // V sekci ORDER BY je možné také použít // agregační funkce, které byly použity pro // seskupení výsledku dotazu. // Pro každou barvu - vyberte minimální obsah kalorií // produkt s touto barvou. A pak třídíme // výsledkem je zvýšení řádu tohoto minimálního obsahu kalorií. Požadavek = Nový požadavek ( "VYBRAT | Barva, | MINIMUM (obsah kalorií) | OD | Adresář. Nomenklatura | SESKUPIT PODLE | Barva | OBJEDNAT PODLE | MINIMÁLNÍ VĚKOVÁNÍ (obsah kalorií)"); ExecuteRequestAndOutputToForm(Request) ; Konec procedury /// Jak funguje automatické řazení výsledků/// za 1s 8.3, 8.2 Postup na serveru Jak funguje automatické řazení na serveru() // Klauzule AUTO ORDER umožňuje aktivovat režim // automatické generování polí pro objednání // výsledek požadavku. // Automatické objednávání funguje podle následujících principů: // Pokud požadavek obsahoval klauzuli ORDER BY, // pak každý odkaz na tabulku nalezený v této klauzuli // budou nahrazeny poli, podle kterých je tabulka standardně řazena // (pro adresáře je to kód nebo název, pro dokumenty - datum // dokument). Pokud objednávkové pole odkazuje na hierarchický adresář, // pak bude použito hierarchické řazení podle tohoto adresáře. // Pokud požadavek neobsahuje klauzuli ORDER BY, // ale je tam klauzule RESULTS, pak bude výsledek dotazu // seřazené podle polí přítomných ve větě // VÝSLEDKY za klíčové slovo software, ve stejném pořadí a, // pokud byly součty vypočteny pomocí polí - odkazy, // pak ve výchozím nastavení třídí pole tabulek, na které se odkazuje. // Pokud dotaz neobsahuje klauzule ORDER BY a TOTAL, // ale existuje návrh na GROUP BY, pak výsledek dotazu // budou seřazeny podle polí přítomných ve větě, // ve stejném pořadí a pokud bylo provedeno seskupení // podle polí - odkazy, pak standardně řazení polí tabulek, // na který byly odkazy. // V případě, že v žádosti nejsou žádné věty a // ORDER BY, TOTAL a GROUP BY, výsledek bude // seřazená standardně třídicí pole pro tabulky, // ze kterých jsou vybírána data, v pořadí, v jakém se objevují v požadavku. // Pokud požadavek obsahuje klauzuli RESULTS, každá úroveň // součty se objednávají samostatně. // V níže uvedeném příkladu třídíme podle pole Odkaz a používáme // klíčové slovo AUTO ORDER. Systém // nahradí pole Odkaz v sekci ORDER BY datem dokumentu. Požadavek = Nový požadavek ( "VYBRAT | Odkaz | OD | Dokument. Prodej potravin | OBJEDNAT PODLE | Odkaz VĚK | AUTO OBJEDNAT"); ExecuteRequestAndOutputToForm(Request) ; Konec procedury /// Stáhněte a spusťte tyto příklady na svém počítači

Seznam je nedílným atributem zobrazování informací v jakékoli konfiguraci vytvořené na platformě 1C:Enterprise 8.1. Aby bylo možné efektivně pracovat se seznamy obsahujícími různá data, programy na platformě 1C:Enterprise 8.1 implementují pohodlné a výkonné mechanismy výběru a řazení. O vlastnostech jejich použití hovoří V.V. Rybaření, společnost "1C".


Rýže. 1

Seznamy

S jakými seznamy se uživatelé setkávají? Mohou to být seznamy dokumentů v příslušných časopisech. Téměř každý adresář naplněný daty je prezentován ve formě seznamu, který má zpravidla hierarchii (skupiny složek nebo podřízené prvky). K výběru prvku program často generuje seznamy automaticky nebo v souladu s logikou stanovenou vývojáři.

Téměř ve všech seznamech lze využít selekční mechanismy (pokud to není vývojářem výslovně zakázáno) a různorodé řazení (obr. 1). V programu jsou tyto mechanismy navzájem neoddělitelně propojeny. Podívejme se, jak je správně a efektivně používat.

Rýže. 1

Třídicí mechanismus

Proč potřebujeme třídicí mechanismus? Za prvé, jak název napovídá, umožňuje seřadit seznam podle požadovaného kritéria.

Za druhé, platforma 1C:Enterprise 8.1 aktivně využívá mechanismus rychlého vyhledávání. Tento mechanismus umožňuje rychle najít požadovaný prvek v libovolném seznamu zadáním prvních znaků (obr. 2). Ale v dynamických seznamech (například seznam položek adresáře nebo seznam dokumentů) funguje rychlé vyhledávání pouze podle podrobností, podle kterých je dostupné řazení.

Rýže. 2

Všechny podrobnosti seznamu dostupné pro třídění můžete zobrazit otevřením okna „Výběr a řazení“. Toto okno je obvykle dostupné na liště akcí (obr. 3) nebo v kontextové nabídce seznamu, která se otevře pravým tlačítkem myši (obr. 4). V okně „Výběr a řazení“ musíte přejít na kartu „Řazení“, která zobrazuje všechny dostupné podrobnosti, podle kterých je možné řazení.

Rýže. 3

Rýže. 4

Obrázek 3 ukazuje, že pro seznam dokladů „Prodej zboží a služeb“ je k dispozici třídění podle dvou detailů: „Datum“ a „Číslo“. Informační obsah třídícího okna však není omezen pouze na toto. Zde vidíte, které třídění je aktuálně povoleno (levá strana okna) a seznam všech podrobností dostupných pro třídění (pravá strana). Můžete také nakonfigurovat požadované řazení a jeho pořadí. Upozornění: aktuální atribut řazení bude v seznamu označen speciálním symbolem - šipkou označující směr řazení. Tři příklady různého třídění (včetně kombinovaného) a způsoby jeho zobrazení v seznamu jsou na obrázku 5.

Rýže. 5

Všimněte si, že spodní příklad ilustruje možnost použití kombinovaného třídění (současně několika detaily). V našem případě se jedná o řazení podle data sestupně (nejstarší data dole) a podle čísla vzestupně (největší čísla dole).

V každém seznamu můžete jednotlivě uložit požadované řazení. Stačí zaškrtnout políčko „Při otevírání použít toto nastavení řazení“ a kliknout na „OK“. Systém si nastavení zapamatuje a při příštím otevření tohoto seznamu nastaví uložené řazení.

Seznam můžete rychle seřadit podle požadovaného atributu kliknutím na záhlaví s názvem tohoto atributu.

V našem případě můžete například kliknout na atribut „Datum“ (bude zapnuto řazení dat vzestupně a můžete použít rychlé vyhledávání podle data) nebo na atribut „Číslo“ (řazení podle čísla ve vzestupném pořadí se zapnou, poté můžete rychle vyhledávat podle čísla). Invertování řazení je také snadné – stačí znovu kliknout na stejný atribut v záhlaví seznamu.

Mechanismus výběru

Výběr je výkonný mechanismus platformy 1C:Enterprise 8.1, který umožňuje efektivně pracovat se seznamy, i když obsahují desítky či stovky tisíc prvků. Nejprve se podívejme, jak funguje mechanismus výběru v obecném případě.

Téměř všude tam, kde je seznam (většinou ve formě tabulky), lze využít výběrový mechanismus, který se aktivuje buď příslušným tlačítkem na liště akcí nebo v kontextové nabídce seznamu (obr. 3 a 4). Pokud je u požadovaného seznamu možný výběr, otevře se okno „Výběr a řazení“. Zobrazí všechny možné typy podrobností, které lze vybrat. Seznam dostupných prvků výběru závisí na tom, kde bude výběr použit. Obecně musíte najít jeden nebo více požadovaných prvků pro výběr, zadat hodnoty a aktivovat nakonfigurovanou kombinaci kritérií.

Seznam možných podmínek pro konkrétní typ výběru závisí na typu prvků, které jsou v něm použity. Například pro čísla a data budou k dispozici rozsahy, pro řetězce bude k dispozici vyhledávání podřetězců (podmínky "Obsahuje"/"Neobsahuje") a pro prvky adresáře bude k dispozici vyplňování seznamu a analýza hierarchie.

Pokud zadáte více kritérií výběru současně, zobrazí se v seznamu pouze položky, které splňují všechna zadaná kritéria.

Výběrové a třídicí mechanismy s příklady

Pokusme se vyřešit několik problémů v demo databázi ("Enterprise Accounting", edice 1.6). Zobrazme si například dokumenty vygenerované pro protistranu „Simon and Schuster LLC“ v deníku „Dokumenty zákazníků“. Okamžitě si udělejme rezervaci, že popíšeme pravidla a standard logiky výběru pro platformu 1C:Enterprise 8.1, bez odkazu na jakoukoli konkrétní konfiguraci a další možnosti služeb v ní implementované.

Otevřete tedy deník dokumentů „Zákaznické dokumenty“. Ve standardním stavu bez aktivovaného výběru se na obrazovce zobrazují všechny doklady všech kupujících (i v demo databázi to zabírá více než jednu stránku).

Musíme se rychle podívat na všechny dokumenty protistrany Simon and Schuster LLC. Úloha je realizována následovně: otevře se výběrové okno, v prvku „Counterparty“ vyberte z adresáře „Simon and Schuster LLC“ protistranu (obr. 6) a klikněte na „OK“. Problém je vyřešen (obr. 7).

Rýže. 6

Rýže. 7

Chcete-li rychle použít požadovaný výběr, stačí okamžitě začít s výběrem požadovaného kritéria. Není třeba zaškrtávat políčko vedle použitého výběru. Program to provede sám po zadání potřebného kritéria. Nakonfigurovaná kritéria výběru můžete rychle použít stisknutím kombinace kláves Ctrl+Enter*.

Upozorňujeme také, že při zadávání hodnot v prvcích výběru (v našem příkladu protistrana "Simon and Schuster LLC") bude ve většině případů fungovat mechanismus rychlého výběru, široce používaný v platformě 1C:Enterprise 8.1. V našem příkladu stačilo zadat první znaky jména protistrany nebo jejího kódu přímo do pole hodnoty výběru, stisknout Enter nebo Tab a systém automaticky „uhodnul“ prvek adresáře, který potřebujeme.

Mějte na paměti, že rychlý výběr výrazně urychluje výběr hodnot, které znáte. Používejte jej, kdykoli je to možné.

Nyní zobrazíme seznam položek, jejichž názvy obsahují slovo „Konvice“. K tomu otevřete adresář „Nomenclature“, vyvolejte výběrové okno, v prvku „Name“ vyberte podmínku porovnání „Contains“ a uveďte požadované slovo (obr. 8).

Rýže. 8

Typ porovnání „Obsahuje“ nebyl zvolen náhodou. Je to on, kdo vám umožňuje najít správné slovo(nebo jeho část) kdekoli v názvu nomenklatury. Pokud ponecháte typ porovnání "Rovno", seznam zobrazí pouze ty položky nomenklatury, které jsou pojmenovány přesně tak, jak je dotaz napsán. V naší demo databázi ale žádné takové položky nejsou (to znamená, že by se nezobrazoval ani jeden prvek).

Vzhledem k tomu, že v naší demo databázi má položka atribut „Celé jméno“, nachází se v seznamu dostupných výběrů jako samostatná pozice. Ale zároveň jsou jako srovnávací podmínky k dispozici pouze „Obsahuje“/„Neobsahuje“. Důvodem je, že atribut „Celé jméno“ v naší demo databázi je řetězec neomezené délky.

Pokud nehledáte podle jména, ale podle celého jména, je lepší zrušit zaškrtnutí políčka pro použití výběru podle jména. V opačném případě bude výběr použit jak podle jména, tak podle celého jména, což nemusí být vždy nutné (obr. 9).

Rýže. 9

Pro pohodlí práce s adresářovými prvky při používání výběrů je lepší dočasně vypnout zobrazení hierarchie (obr. 10).

Rýže. 10

Jako třetí úkol se podívejme pouze na doklady „Prodej zboží a služeb“ v protokolu dokladů „Doklady zákazníků“. Řešení tohoto problému ukáže zvláštnost jednoho z typů výběru, dostupného pouze v dokumentových časopisech.

Otevřete deník "Doklady zákazníků" a v prvku výběru "Typ dokladu" označte doklad "Prodej zboží a služeb". Samotný program poskytuje možnost vybrat konkrétní typ dokladu z těch, které jsou v tomto deníku obsaženy. K tomu slouží i osobní tlačítko na akčním panelu (obr. 11).

Rýže. jedenáct

Podobně jako u výběru podle typu dokumentu platforma automaticky nabídne prvek výběru „Struktura podřízenosti“, pokud má konfigurace nakonfigurované vztahy mezi dokumenty.

Zkusme si v protokolu dokumentů "Doklady kupujících" zobrazit pouze doklady "Faktura" pro protistrany umístěné ve skupině "Kupující" adresáře. Tento úkol je podobný prvnímu, jen s tím rozdílem, že neuvádíme konkrétní protistranu, ale analyzujeme faktury celé skupiny protistran, které jsou ve skupině „Kupující“.

Existuje několik způsobů, jak úkol implementovat. Podívejme se na ten nejúčinnější. Otevřete deník "Doklady kupujících" a v prvku výběru "Typ dokladu" označte doklad "Vystavená faktura". Poté ve výběrovém prvku „Protistrana“ označíme typ srovnání „Ve skupině“. Vyberte typ hodnoty "Protistrany" a otevřete formulář pro výběr protistrany. V něm vyberte skupinu „Kupující“ (obr. 12).

Rýže. 12

Tento typ porovnání znamená, že podmínku budou splňovat všechny prvky adresáře, které jsou v zadané skupině. Navíc, i když v zadané skupině existují podskupiny, všechny prvky v ní vnořené také splňují toto kritérium.

Nyní zkomplikujeme úkol: podívejme se pouze na dokumenty „Faktura“ v protokolu dokumentů „Dokumenty kupujících“, ale zároveň se musíme podívat na dokumenty pro kupující i dodavatele. Řešíme to podobně jako předchozí, s výjimkou jednoho uloženého výběrového kritéria.

Lidskou řečí je úkol formulován následovně: „zobrazit všechny potřebné dokumenty pro všechny dodavatele umístěné v adresářových skupinách Nákupčí, Dodavatelé, Dodavatelé na prodej.“ To lze snadno implementovat - ve výběrové podmínce „Protistrana“ vyberte „Ve skupině ze seznamu“ (obr. 13). Poté se zpřístupní mechanismus pro vyplňování seznamu, do kterého můžete přidat potřebné skupiny (nebo prvky) adresáře. Seznam lze navíc vyplnit ručně. Analogicky k řešení předchozího problému najděte požadovanou skupinu a vyberte ji, opakujte to pro každý nový prvek seznamu. Je však vhodnější použít pohodlný výběrový mechanismus, který je automaticky implementován programem. Pomocí výběru je mnohem jednodušší a rychlejší naplnit seznam potřebnými součástmi. Po dokončení seznamu klikněte na „OK“ a aktivujte nakonfigurovaná kritéria výběru. Problém je vyřešen.

Rýže. 13

Rozdíl mezi podmínkou výběru „Ve skupině ze seznamu“ a podmínkou „V seznamu“ je v tom, že v prvním případě bude podmínka splněna pro všechny prvky adresáře, které jsou buď explicitně specifikovány v seznamu, nebo umístěny uvnitř skupiny uvedené v seznamu. Druhý případ jednoduše říká programu, aby při výběru zkontroloval seznam. To znamená, že pokud tam zadáte skupinu, bude do výběru zahrnuta samotná skupina (jako nezávislý prvek adresář) a prvky, které jsou v něm obsaženy, nebudou splňovat kritéria výběru. Problém bylo možné vyřešit „čelem“ - vyberte podmínku „V seznamu“ a pomocí výběru tam přidejte všechny prvky obsažené v potřebných skupinách.

Podmínky výběru „Není v seznamu“ a „Není ve skupině ze seznamu“ umožňují zadat požadované datové sady, které nemají být zahrnuty do výběru. To znamená, že problém by se dal vyřešit i opačně - specifikujte „Není ve skupině ze seznamu“ a přidejte tam všechny skupiny adresářů kromě tří nezbytných (Nákupci, Dodavatelé, Dodavatelé na prodej).

A nakonec v dokumentu „Prodej zboží a služeb“ s číslem TDN00002 zobrazíme v tabulkové části pouze nomenklaturu obsahující v názvech slovo „STINOL“. Tento úkol nám umožní vidět univerzálnost samotného selekčního mechanismu i to, jak rozmanité může být jeho použití. Úloha vychází z reálných situací, kdy je například v tabulkové části faktury několik stovek (nebo i tisíců) řádků a potřebujete rychle analyzovat její složení. V naší demo databázi je dokument „Prodej zboží a služeb“ s číslem TDN00002, který má v tabulkové části několik řádků. Navzdory tomu, že v dokumentu nejsou žádná tlačítka pro použití výběrů, vyvolání výběru je dostupné přes kontextové menu (pravé tlačítko myši).

Dále zavedeme výběrová kritéria v kontextu nomenklatury. Okamžitě vyvstává další otázka - jak vybrat „STINOL“, pokud jsou podmínky pro výběr nomenklatury značně omezené (k dispozici „Rovno“, „Nerovná se“, „V seznamu“ a „Není v seznamu“). Za takových podmínek lze problém vyřešit. Zvolíme podmínku „V seznamu“, otevřeme již známé okno pro vyplnění seznamu a použijeme výběr položek (obr. 14, 1). V seznamu nomenklatur může být velké množství prvků, takže nebudeme hledat požadované položky. Využijme výběr v seznamu položek, přičemž u názvu položky uvedeme podmínku výběru "Obsahuje" (obr. 14, 2).

Rýže. 14

Poté zbývá pouze přidat vybrané položky do výběrového seznamu pro doklad a použít výběrová kritéria.

Užitečné funkce mechanismu výběru

Podívejme se na několik dalších bodů souvisejících tak či onak s výběry v systému 1C:Enterprise 8.1.

V seznamech konfiguračních objektů, které používají datovou vazbu (například seznamy dokumentů) a v protokolech dokumentů, můžete použít rychlé filtrování podle rozsahu dat. Chcete-li to provést, stačí kliknout na příslušné tlačítko „Nastavení období“ na panelu akcí (nebo jej vybrat v kontextové nabídce) (obr. 15). Tímto způsobem můžete individuálně upravit kritérium pro zobrazení prvků podle data v každém seznamu.

Rýže. 15

Výběr podle hodnoty v aktuální buňce seznamu můžete rychle nastavit kliknutím na tlačítko „Výběr podle hodnoty v aktuálním sloupci“ (obr. 16). Po kliknutí na toto tlačítko se provede výběr na základě aktuální hodnoty ve sloupci. Tato funkce funguje pouze pro ty sloupce, jejichž podrobnosti lze použít k nastavení výběru. Pokud seznam již používá nějaký výběr, bude k němu připojen nový. Navíc se tlačítko stane aktivním pro tento sloupec. Takový výběr můžete zrušit stejným způsobem - „stisknutím“ tlačítka v příslušném sloupci.

Rýže. 16

Další užitečná vlastnost mechanismus výběru - udržování historie výběru (obr. 17). Program si pamatuje, které volby byly nastaveny, takže se ke kterékoli z nich můžete rychle vrátit pouhým výběrem z rozevíracího seznamu. Mimochodem, v okně „Výběr a řazení“ věnujte pozornost tlačítku „Výběry“ (obr. 6). Kliknutím na toto tlačítko se dostanete do rozhraní, kde můžete uložit a obnovit nastavení výběru, abyste se k nim mohli později vrátit (obr. 18).

Rýže. 17

Rýže. 18

A poslední funkcí je zrušení všech výběrů (obr. 19). Kliknutím na tlačítko "Zakázat výběr" zakážete všechny výběry nainstalované v seznamu. Podobné akce lze dosáhnout otevřením okna „Výběr a řazení“ a zrušením zaškrtnutí všech aktivních prvků.

Rýže. 19

Program má také možnost rychlého vyhledávání podle čísla dokumentu v seznamech dokumentů nebo v časopisech. Tato funkce se vyvolá tlačítkem „Hledat podle čísla“ (obr. 20) a umožňuje vyhledání požadovaný dokument, flexibilně konfigurující parametry vyhledávání. Dokumenty nalezené na základě zadaných kritérií se zobrazí ve spodní části okna této služby a můžete přejít na požadovaný dokument.

/
Provádění zpracování dat

Řazení výsledků dotazu

1.1. Pokud algoritmus pro zpracování výsledků dotazu závisí na pořadí záznamů v dotazu nebo pokud je uživateli předložen výsledek zpracování dotazu v té či oné formě, pak by měla být věta použita v textu dotazu SEŘAZENO PODLE. Při absenci výrazu SEŘAZENO PODLE nelze učinit žádné předpoklady o pořadí, ve kterém se záznamy objeví ve výsledcích dotazu.

Typické příklady problémů, které mohou nastat:

  • rozdílné pořadí řádků v tabulkové části při vyplňování podle výsledků dotazu;
  • různé pořadí výstupu dat (řádky, sloupce) v sestavách;
  • různé plnění pohybů dokladů na základě výsledků dotazu (*).

Pravděpodobnost výskytu různých výsledků při provádění stejných akcí se zvyšuje

* Poznámka: řazení výsledků dotazů generujících pohyby je oprávněné pouze v případě, že je objednávání součástí algoritmu pro generování pohybů (např. odepisování zůstatků šarží zboží pomocí FIFO). V ostatních případech by se záznamy neměly třídit, protože dodatečné objednávání bude vytvářet nadměrné zatížení DBMS.

1.2. Pokud se výsledky dotazu musí uživateli nějakým způsobem zobrazit, pak

  • je nutné uspořádat výsledky takových dotazů podle polí primitivních typů;
  • Řazení podle polí referenčních typů by mělo být nahrazeno řazením podle řetězcových reprezentací těchto polí.

V opačném případě se pořadí řádků bude uživateli zdát náhodné (nevysvětlitelné).

Viz také: Řazení řádků tabulky hodnot

1.3. Žádná nabídka SEŘAZENO PODLE oprávněné pouze v případech, kdy

  • Algoritmus pro zpracování výsledků dotazu se nespoléhá na konkrétní pořadí záznamů
  • výsledek zpracování provedeného požadavku se uživateli nezobrazí
  • výsledkem dotazu je zjevně jeden záznam

Společné použití s ​​RŮZNÝM designem

2. Pokud žádost využívá stavby ROZLIČNÝ, objednávání by mělo být prováděno pouze podle polí zahrnutých do výběru (v sekci VYBRAT).

Tento požadavek je spojen s následující funkcí provádění dotazu: objednávková pole jsou implicitně zahrnuta do výběrových polí, což zase může vést k tomu, že se v důsledku dotazu objeví několik řádků se stejnými hodnotami výběrových polí.

Omezení použití konstrukce AUTO ORDER

3. Použití designu PRVNÍ spolu se strukturou AUTO OBJEDNÁVKA zakázáno.

V ostatních případech design AUTO OBJEDNÁVKA Také se nedoporučuje používat, protože vývojář nekontroluje, která pole budou použita pro objednávání. Použití takového provedení má své opodstatnění pouze v případech, kdy není důležité výsledné pořadí záznamů, ale musí být stejné bez ohledu na použitý DBMS.

Žádosti jsou navrženy tak, aby extrahovaly a zpracovávaly informace z databáze a poskytovaly je uživateli v požadované podobě. Zpracování zde znamená seskupování polí, řazení řádků, výpočet součtů atd. Data nelze měnit pomocí dotazů v 1C!

Požadavek se provede podle daných instrukcí − text žádosti. Text požadavku je sestaven v souladu se syntaxí a pravidly dotazovací jazyk. Dotazovací jazyk 1C:Enterprise 8 je založen na standardu SQL, ale má určité rozdíly a rozšíření.

Schéma práce s požadavkem

Obecné schéma práce s požadavkem se skládá z několika po sobě jdoucích fází:

  1. Vytvoření objektu požadavku a nastavení textu požadavku;
  2. Nastavení parametrů požadavku;
  3. Vyřízení požadavku a získání výsledku;
  4. Vynechání výsledku požadavku a zpracování přijatých dat.

1. Objekt Žádost má majetek Text, ke kterému je potřeba přiřadit text požadavku.

// Možnost 1
Žádost = Nová žádost;
Žádost . Text =
"VYBRAT
| Kurzy měn. Období,
| Kurzy měn. Měna,
| Kurzy měn. Kurz
|OD

| KDE
;

// Možnost 2
Žádost = Nová žádost("VYBRAT
| Kurzy měn. Období,
| Kurzy měn. Měna,
| Kurzy měn. Kurz
|OD
| Registr informací. Kurzy měn AS Kurzy měn
| KDE
| Kurzy měn. Měna = &Měna");

2. Nastavení hodnot parametrů se provádí pomocí metody SetParameter(< Имя>, < Значение>) . Parametry v textu požadavku jsou označeny symbolem „ & " a obvykle se používají v podmínkách výběru (sekce WHERE) a v parametrech virtuální tabulky.

Žádost);

3. Po přiřazení textu a nastavení parametrů je nutné požadavek provést a získat výsledek provedení. Spuštění se provádí metodou Execute(), která vrací objekt Výsledek dotazu. Z výsledku dotazu můžete:

  • získat výběr pomocí metody Select (< ТипОбхода>, < Группировки>, < ГруппировкиДляЗначенийГруппировок>) ;
  • nahrajte hodnoty do tabulky hodnot nebo do stromu hodnot pomocí metody Upload (< ТипОбхода>) .

// Přijetí vzorku

Vzorek = Výsledek dotazu. Vybrat();

// Získání tabulky hodnot
RequestResult = požadavek. Běh();
Stůl = Výsledek dotazu. Vyložit();

4. Výběr výsledku dotazu můžete obejít pomocí smyčky:

sbohem Sample.Next() Smyčka
Zpráva(Výběr.Kurz);
EndCycle;

Kompletní příklad práce s požadavkem může vypadat takto:

// Fáze 1. Vytvoření požadavku a nastavení textu požadavku
Žádost = Nová žádost;
Žádost . Text =
"VYBRAT
| Kurzy měn. Období,
| Kurzy měn. Měna,
| Kurzy měn. Kurz
|OD
| Registr informací. Kurzy měn AS Kurzy měn
| KDE
| Kurzy měn. Měna = &Měna";

// Fáze 2. Nastavení parametrů
Žádost . SetParameter("Currency" , SelectedCurrency);

// Fáze 3. Provedení dotazu a získání vzorku
RequestResult = požadavek. Běh();
Vzorek = Výsledek dotazu. Vybrat();

// Procházení výběru
sbohem Sample.Next() Smyčka
Zpráva(Výběr.Kurz);
EndCycle;

Složení textu požadavku

Text žádosti se skládá z několika částí:

  1. Popis požadavku— seznam volitelných polí a zdrojů dat;
  2. Slučování dotazů— výrazy „UNITE“ a „UNITE ALL“;
  3. Organizování výsledků— výraz „OBJEDNAT BY...“;
  4. Automatická objednávka— výraz „AUTO OBJEDNÁVKA“;
  5. Popis výsledků- výraz „VÝSLEDKY ... PODLE ...“.

Povinná je pouze první část.

Dočasné tabulky a dávkové dotazy

1C dotazovací jazyk podporuje použití dočasné stoly— tabulky získané jako výsledek provádění dotazu a dočasně uložené.

Často se můžete setkat se situací, kdy potřebujete jako zdroj dotazu použít nikoli databázové tabulky, ale výsledek provedení jiného dotazu. Tento problém lze vyřešit pomocí vnořených dotazů popř dočasné stoly. Použití dočasných tabulek umožňuje zjednodušit text složitého dotazu jeho rozdělením na jednotlivé části a také v některých případech urychlit provádění dotazu a snížit počet zámků. Chcete-li pracovat s dočasnými tabulkami, použijte objekt Správce jízdních řádů. Dočasná tabulka se vytvoří pomocí klíčového slova PLACE následovaného názvem dočasné tabulky.

ManagerVT = New TemporaryTablesManager;
Žádost = Nová žádost;
Žádost . ManagerTemporaryTables = ManagerVT;

Žádost . Text =
"VYBRAT
| Currencies.Code,
| Měny.Jméno
| Místo v měně
|OD
| Directory.Currencies AS Currencies";

RequestResult = požadavek. Vykonat();

Chcete-li použít dočasnou tabulku VTVcurrency v jiných dotazech, musíte těmto dotazům přiřadit společného správce dočasných tabulek – VT Manager.

Dávkový požadavek je požadavek, který obsahuje několik požadavků oddělených znakem „;“. Při provádění dávkového dotazu jsou všechny dotazy, které jsou v něm obsaženy, prováděny postupně a výsledky všech dočasných tabulek jsou dostupné pro všechny následující dotazy. Explicitní přiřazení dočasného správce tabulek k dávkovým dotazům není nutné. Pokud není přiřazen dočasný správce tabulek, budou všechny dočasné tabulky odstraněny ihned po provedení dotazu.

Pro dávkové dotazy je k dispozici metoda ExecuteBatch(), která provede všechny dotazy a vrátí pole výsledků. Dočasné tabulky v dávkovém dotazu budou reprezentovány tabulkou s jedním řádkem a jedním sloupcem „Počet“, ve které je uložen počet záznamů. Chcete-li ladit dávkové požadavky, můžete použít metodu Proveďte dávku S MEZIPROSTŘEDNÍMI DATA() : Vrací skutečný obsah dočasných tabulek, nikoli počet záznamů.

// Příklad práce s dávkovým požadavkem
Žádost = Nová žádost;
Žádost . Text =
"VYBRAT
| Měny.Jméno
|OD
| Adresář.Currencies AS Měny
|;
|VYBRAT
| Nomenklatura.Jméno
|OD
| Adresář. Nomenklatura AS Nomenklatura";

Výsledek dávky = požadavek. ExecuteBatch();

TZ měny =PacketResult[ 0]. Vyložit();
TZNomenklatura = Výsledek balíčku[ 1]. Vyložit();

// Příklad použití dočasných tabulek v dávkovém požadavku
Žádost = Nová žádost;
Žádost . Text =
"VYBRAT
| Produkty Odkaz JAK NA Produkt
|PLACE VTProducts
|OD
| Adresář.Nomenklatura JAK Produkty
| KDE
| Products.Manufacturer = &Manufacturer
|;
|VYBRAT
| VTTProducts.Product,
| Odborná škola. Množství,
| Odborná škola. Cena,
| Odborná škola. Link AS DocumentReceipts
|OD
| Produkty VT JAKO Produkty VT
| LEVÉ SPOJENÍ Dokument Příjem zboží a služeb Zboží JAKO PTU
| Software VTProducts.Product = PTU.Nomenklatura"
;

Žádost . SetParameter( "Výrobce", výrobce);

RequestResult = požadavek. Běh();
Vzorek = Výsledek dotazu. Vybrat();

sbohem Sample.Next() Smyčka

EndCycle;

Virtuální stoly

Virtuální stoly- jedná se o tabulky, které nejsou uloženy v databázi, ale jsou generovány platformou. V jádru jsou to vnořené dotazy proti jedné nebo více fyzickým tabulkám prováděným platformou. Virtuální tabulky přijímají informace pouze z registrů a jsou určeny především pro řešení vysoce specializovaných problémů.

Existují následující virtuální tabulky (možné parametry jsou uvedeny v závorkách):

  • Pro informační registry:
    • SliceFirst(<Период>, <Условие>) — nejstarší záznamy ke stanovenému datu;
    • SliceLast(<Период>, <Условие>) — nejnovější záznamy k určenému datu;
  • Pro akumulační registry:
    • Zbytky(<Период>, <Условие>) — zůstatky ke stanovenému datu;
    • Revoluce (<НачалоПериода>, <КонецПериода>, <Периодичность>, <Условие>) - transakce období;
    • RemainsAndTurnover(<НачалоПериода>, <КонецПериода>, <Периодичность>, <МетодДополненияПериодов>, <Условие>) — zůstatky a obrat za období;
  • Pro účetní registry:
    • Zbytky(<Период>, <УсловиеСчета>, <Субконто>, <Условие>) — zůstatky k uvedenému datu podle účtu, dimenzí a podúčtů;
    • Revoluce (<НачалоПериода>, <КонецПериода>, <Периодичность>, <УсловиеСчета>, <Субконто>, <Условие>, <УсловиеКорСчета>, <КорСубконто>) — obrat za období v rámci účetnictví, měření, kor. účty, subconto, kor. subconto;
    • RemainsAndTurnover(<НачалоПериода>, <КонецПериода>, <Периодичность>, <МетодДополненияПериодов>, <УсловиеСчета>, <Субконто>, <Условие>) — zůstatky a obrat v souvislosti s účty, měřeními a podúčty;
    • ObratDtKt(<НачалоПериода>, <КонецПериода>, <Периодичность>, <УсловиеСчетаДт>, <СубконтоДт>, <УсловиеСчетаКт>, <СубконтоКт>, <Условие>) — obrat za období podle účtu Dt, účtu Kt, Subconto Dt, Subconto Kt;
    • Pohyby Podkonto(<НачалоПериода>, <КонецПериода>, <Условие>, <Порядок>, <Первые>) — pohyby spolu s hodnotami subkonto;
  • Pro výpočetní registry:
    • Základna(<ИзмеренияОсновногоРегистра>, <ИзмеренияБазовогоРегистра>, <Разрезы>, <Условие>) — základní údaje registru výpočtů;
    • DataGraphics(<Условие>)—grafová data;
    • ActualActionPeriod(<Условие>) je skutečná doba platnosti.

Při práci s virtuálními tabulkami byste měli použít výběr v parametrech virtuálních tabulek, a ne v podmínce WHERE. Na tom velmi závisí doba provádění dotazu.

Konstruktor dotazů

Pro urychlení zadávání textů dotazů má platforma speciální nástroje: Konstruktor dotazů A Konstruktor dotazů se zpracováním výsledků. Chcete-li zavolat konstruktory, musíte kliknout pravým tlačítkem a vybrat požadovanou položku:

Konstruktory lze také vyvolat z hlavní nabídky Text.

Pomocí tvůrce dotazů může programátor interaktivně sestavit text dotazu. Chcete-li to provést, vyberte potřebné tabulky a pole pomocí myši, vytvořte vztahy, seskupení, součty atd. Tento přístup šetří čas a eliminuje možné chyby. Konstruktor dotazu jako výsledek své práce generuje text dotazu.

Konstruktor dotazu se zpracováním výsledků kromě generování textu dotazu vytváří hotový fragment kódu pro příjem a zpracování dat.

Objekt RequestSchema

Platforma umožňuje programově vytvářet a upravovat text požadavku pomocí objektu Vyžádejte si schéma. Objekt má jednu vlastnost Dávka požadavků, ve kterém objekt ukládá vlastnosti všech aktuálně upravovaných dotazů. Objekt RequestSchema podporuje následující metody:

  • SetQueryText(< Текст>) — vyplní vlastnost Query Packet na základě zaslaného textu požadavku;
  • GetQueryText() - vrátí text požadavku vygenerovaný na základě vlastnosti Request Packet;
  • FindParameters() - vrací parametry požadavku.

Podívejme se na příklad práce s objektem RequestSchema. Chcete-li programově vygenerovat text požadavku

SEŘAZENO PODLE
Měny. Kód

Vložený kód jazyka může vypadat takto:

RequestScheme = New RequestScheme;
Balíček 1 = RequestScheme. RequestBatch[ 0];
Provozovatel 1 = Balíček1. Operátory[ 0 ];
// přidání zdroje
RegisterTable = Operátor1. Prameny. Přidat( "Adresář. Měny", "Měny");
// přidání polí
FieldLink = Provozovatel1. SelectableFields. Add("Měny.Odkaz" , 0 );
FieldCode = Provozovatel1. SelectableFields. Add("Kód měny", 1);
// určení aliasů polí
Balíček 1 . Sloupce[ 0 ]. Alias ​​​​= "Měna" ;
Balíček 1 . Sloupce[ 1]. Alias ​​​​= "Kód" ;
// přidání podmínky
Provozovatel 1 . Výběr. Přidat( "NOT FlagDelete");
// přidat objednávku
Balíček 1 . Objednat. Add(FieldCode);
RequestText = RequestScheme. GetQueryText();

Dotazovací jazyk v 1C 8 je zjednodušeným analogem známého „strukturovaného programovacího jazyka“ (jak se častěji nazývá SQL). Ale v 1C se používá pouze pro čtení dat; používá se ke změně dat objektový model data.

Dalším zajímavým rozdílem je ruská syntaxe. I když ve skutečnosti můžete použít konstrukce v anglickém jazyce.

Příklad požadavku:

VYBRAT
Banks.Name,
Banky.Účet
Z
Adresář.Banky JAK Banky

Tento požadavek nám umožní zobrazit informace o jménu a korespondenčním účtu všech bank existujících v databázi.

Dotazovací jazyk je nejjednodušší a nejefektivnější způsob získávání informací. Jak je vidět z příkladu výše, v dotazovacím jazyce je potřeba používat názvy metadat (jedná se o seznam systémových objektů, které tvoří konfiguraci, tj. adresáře, dokumenty, registry atd.).

Popis konstrukcí dotazovacího jazyka

Struktura dotazu

Pro získání dat stačí použít konstrukce „SELECT“ a „FROM“. Nejjednodušší požadavek vypadá takto:

SELECT * FROM Directories.Nomenklatura

Kde „*“ znamená výběr všech polí tabulky a Directories.Nomenclature – název tabulky v databázi.

Podívejme se na složitější a obecnější příklad:

VYBRAT
<ИмяПоля1>JAK<ПредставлениеПоля1>,
Součet(<ИмяПоля2>) JAK<ПредставлениеПоля2>
Z
<ИмяТаблицы1>JAK<ПредставлениеТаблицы1>
<ТипСоединения>SLOUČENINA<ИмяТаблицы2>JAK<ПредставлениеТаблицы2>
PODLE<УсловиеСоединениеТаблиц>

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

SKUPINA VYTVOŘENÁ
<ИмяПоля1>

SEŘAZENO PODLE
<ИмяПоля1>

VÝSLEDEK
<ИмяПоля2>
PODLE
<ИмяПоля1>

V tomto dotazu vybereme data polí „FieldName1“ a „FieldName1“ z tabulek „TableName1“ a „TableName“, k polím přiřadíme synonyma pomocí operátoru „HOW“ a spojíme je pomocí určité podmínky „TableConnectionCondition “.

Z přijatých dat vybereme pouze data, která splňují podmínku z „KDE“ „Podmínka výběru dat.“ Dále seskupíme požadavek podle pole „Název pole1“, přičemž sečteme „Název pole2“. Pro pole vytvoříme součty „Název pole1“ a poslední pole „Název pole2“.

Posledním krokem je seřadit požadavek pomocí konstrukce ORDER BY.

Obecné návrhy

Podívejme se na obecné struktury dotazovacího jazyka 1C 8.2.

PRVNÍn

Pomocí tohoto operátoru můžete získat n počet prvních záznamů. Pořadí záznamů je určeno pořadím v dotazu.

VYBERTE PRVNÍCH 100
Banks.Name,
Banky Kód AS BIC
Z
Adresář.Banky JAK Banky
SEŘAZENO PODLE
Banky.Jméno

Požadavek obdrží prvních 100 položek z adresáře „Banky“ seřazených abecedně.

POVOLENO

Tato konstrukce je relevantní pro práci s mechanismem. Podstatou mechanismu je omezit čtení (a další akce) na uživatele pro konkrétní záznamy v databázové tabulce, a ne pro tabulku jako celek.

Pokud se uživatel pokusí pomocí dotazu přečíst záznamy, které jsou pro něj nepřístupné, zobrazí se mu chybové hlášení. Abyste tomu zabránili, měli byste použít konstrukci „ALLOWED“, tj. požadavek bude číst pouze záznamy, které jsou k němu povoleny.

VYBRAT POVOLENO
Úložiště dalších informací. Odkaz
Z
Adresář.Úložiště dalších informací

ROZLIČNÝ

Použití „DIFFERENT“ zabrání duplicitním řádkům ve vstupu do výsledku dotazu 1C. Duplikace znamená, že všechna pole požadavku se shodují.

VYBERTE PRVNÍCH 100
Banks.Name,
Banky Kód AS BIC
Z
Adresář.Banky JAK Banky

Prázdná tabulka

Tato konstrukce se pro kombinování dotazů používá velmi zřídka. Při připojování možná budete muset zadat prázdnou vnořenou tabulku v jedné z tabulek. Operátor „EmptyTable“ je k tomu jako stvořený.

Příklad z nápovědy 1C 8:

SELECT Link.Number, EMPTY TABLE.(No., Item, Quantity) AS Složení
FROM Document.Expense Faktura
KOMBINOVAT VŠECHNO
SELECT Link.Number, Contents. (LineNumber, Product, Quantity)
FROM Document.Invoice Document.Invoice.Composition.*

ISNULL

Velmi užitečná funkce, která vám umožní vyhnout se mnoha chybám. YesNULL() umožňuje nahradit hodnotu NULL požadovanou. Velmi často se používá při kontrole přítomnosti hodnoty ve spojených tabulkách, například:

VYBRAT
Odkaz na nomenklaturu,
IsNULL(Item Remaining.QuantityRemaining,0) AS QuantityRemaining
Z


Lze použít i jinak. Pokud například pro každý řádek není známo, ve které tabulce hodnota existuje:

ISNULL(InvoiceReceived.Date; InvoiceIssued.Date)

HOW je operátor, který nám umožňuje přiřadit název (synonymum) tabulce nebo poli. Příklad použití jsme viděli výše.

Tyto konstrukce jsou velmi podobné – umožňují získat řetězcovou reprezentaci požadované hodnoty. Jediný rozdíl je v tom, že REPRESENTATION převádí libovolné hodnoty na typ řetězce, zatímco REPRESENTATIONREF převádí pouze referenční hodnoty. REFERENČNÍ REPREZENTACE se doporučuje používat v dotazech na skládání dat pro optimalizaci, pokud ovšem není plánováno použití referenčního datového pole ve výběrech.

VYBRAT
View(Link), //řetězec, například „Předběžná zpráva č. 123 ze dne 10.10.2015
Zobrazit (DeletionMark) AS DeleteMarkText, //string, „Ano“ nebo „Ne“
ViewReferences(DeletionMark) AS DeleteMarkBoolean //boolean, True or False
Z
Document.Advance Report

VYJÁDŘIT

Express umožňuje převádět hodnoty polí na požadovaný datový typ. Hodnotu můžete převést buď na primitivní typ, nebo na typ odkazu.

Express pro referenční typ se používá k omezení požadovaných datových typů v polích komplexního typu, často používaný k optimalizaci výkonu systému. Příklad:

EXPRESS(TableCost.Subconto1 AS Directory.Cost Items).Typ aktivity pro daňové náklady

U primitivních typů se tato funkce často používá k omezení počtu znaků v polích neomezené délky (s takovými poli nelze srovnávat). Aby nedošlo k chybě" Neplatné parametry v operaci porovnání. Nelze porovnávat obory
neomezená délka a pole nekompatibilních typů
", musíte tato pole vyjádřit následovně:

EXPRESS(Komentář JAKO řádek(150))

DIFFERENCEDATE

Získejte 267 videolekcí na 1C zdarma:

Příklad použití IS NULL v požadavku 1C:

VYBRAT Z
Ref
LEVÉ PŘIPOJENÍ RegisterAkumulace.Produktyveskladech.Zbývající JAKO Zbývající produkt
Nomenclature softwaruRef.Link = Nomenklatura pro prodané zbožíCommitteesRemains
KDE NENÍ Zbývající zboží Zbývající množství JE NULL

Datový typ v dotazu lze určit pomocí funkcí TYPE() a VALUETYPE() nebo pomocí logického operátoru REFERENCE. Obě funkce jsou podobné.

Předdefinované hodnoty

Kromě použití předávaných parametrů v dotazech v dotazovacím jazyce 1C můžete použít předdefinované hodnoty nebo . Například převody, předdefinované adresáře, účtové osnovy atd. K tomu se používá konstrukce „Value()“.

Příklad použití:

WHERE Nomenclature.Type of Nomenclature = Value(Directory.Types of Nomenclature.Product)

WHERE Protistrany. Typ kontaktních informací = Hodnota (výčet. Typy kontaktních informací. Telefon)

KDE Zůstatky na účtu. Účetní účet = Hodnota (Účtový diagram. Zisk. ZiskZtráta)

Spojení

Existují 4 typy připojení: VLEVO, ODJET, ŽE JO, KOMPLETNÍ, VNITŘNÍ.

LEVÉ a PRAVÉ PŘIPOJENÍ

Spojení se používají k propojení dvou tabulek na základě konkrétní podmínky. Funkce kdy PŘIPOJIT SE VLEVO spočívá v tom, že vezmeme první zadanou tabulku celou a podmíněně svážeme druhou tabulku. Pole druhé tabulky, která nemohla být svázána podmínkou, jsou vyplněna hodnotou NULA.

Například:

Vrátí celou tabulku Protistran a pole „Banka“ vyplní pouze v těch místech, kde bude splněna podmínka „Protistrany.Jméno = Banky.Jméno“. Není-li podmínka splněna, pole Banka bude nastaveno na NULA.

RIGHT JOIN v jazyce 1C naprosto podobný LEVÉ připojení, s výjimkou jednoho rozdílu - v PRÁVO PŘIPOJENÍ„Hlavní“ tabulka je druhá, nikoli první.

PLNÉ PŘIPOJENÍ

PLNÉ PŘIPOJENÍ se od levé a pravé liší tím, že zobrazuje všechny záznamy ze dvou tabulek a spojuje pouze ty, které dokáže spojit podle podmínky.

Například:

Z

PLNÉ PŘIPOJENÍ
Adresář.Banky JAK Banky

PODLE

Dotazovací jazyk vrátí obě tabulky úplně, pouze pokud je splněna podmínka pro spojení záznamů. Na rozdíl od spojení vlevo/vpravo je možné, aby se NULL objevila ve dvou polích.

VNITŘNÍ SPOJENÍ

VNITŘNÍ SPOJENÍ se od plného liší tím, že zobrazuje pouze ty záznamy, které bylo možné podle dané podmínky propojit.

Například:

Z
Adresář Protistrany AS klienti

VNITŘNÍ SPOJENÍ
Adresář.Banky JAK Banky

PODLE
Clients.Name = Banks.Name

Tento dotaz vrátí pouze řádky, ve kterých mají banka a protistrana stejný název.

Asociace

Konstrukce JOIN a JOIN ALL kombinují dva výsledky do jednoho. Tito. výsledek provedení dvou se „sloučí“ do jednoho, společného.

To znamená, že systém funguje úplně stejně jako běžné, pouze pro dočasnou tabulku.

Jak používat INDEX BY

Je však třeba vzít v úvahu jeden bod. Vytvoření indexu na dočasné tabulce také nějakou dobu trvá. Proto je vhodné použít konstrukci „ “ pouze v případě, že je jisté, že v dočasné tabulce bude více než 1-2 záznamy. V opačném případě může být efekt opačný – výkon indexovaných polí nekompenzuje čas potřebný k vytvoření indexu.

VYBRAT
Kurzy měn Nejnovější průřez Měna AS Měna,
Kurzy měn Nejnovější průřez.
Kurzy měn PUT
Z
Informace Registrovat. Kurzy měn.Poslední řez (&období,) AS Kurzy měnPoslední řez
INDEX BY
Měna
;
VYBRAT
Ceny Nomenklatura.Nomenklatura,
Ceny Nomenklatury. Cena,
Ceny Nomenklatury. Měna,
Kurzy měn. Kurz
Z
Registr informací.Nomenklatura Ceny.Poslední řez (&období,
Nomenklatura B (&Nomenklatura) A PriceType = &PriceType) AS Cenová nomenklatura
LEFT JOIN kursy měn JAKO kursy měn
Ceny softwaru Nomenclatures.Currency = Kurzy měn.Měna

Seskupování

Dotazovací jazyk 1C umožňuje při seskupování výsledků dotazů používat speciální agregační funkce. Seskupování lze také použít bez agregačních funkcí k „eliminaci“ duplicit.

Existují následující funkce:

Množství, Množství, Počet různých, Maximum, Minimum, Průměr.

Příklad č. 1:

VYBRAT
Prodej zboží a služeb Zboží. Nomenklatura,
SUM(Prodej zbožíSlužbyZboží.Množství) AS Množství,
SUM(Sales of GoodsServicesGoods.Amount) AS Částka
Z

SKUPINA VYTVOŘENÁ
Prodej zboží a služeb Zboží Nomenklatura

Požadavek obdrží všechny řádky se zbožím a sumarizuje je podle množství a množství podle položky.

Příklad č. 2

VYBRAT
Banks.Code,
MNOŽSTVÍ (RŮZNÉ Banky. Odkaz) JAKO Počet duplikátů
Z
Adresář.Banky JAK Banky
SKUPINA VYTVOŘENÁ
Banks.Code

Tento příklad zobrazí seznam BIC v adresáři „Banks“ a ukáže, kolik duplikátů pro každý z nich existuje.

Výsledek

Výsledky jsou způsob, jak získat data ze systému s hierarchickou strukturou. Agregační funkce lze použít pro souhrnná pole, stejně jako pro seskupení.

Jedním z nejoblíbenějších způsobů využití výsledků v praxi je dávkový odpis zboží.

VYBRAT




Z
Dokument Prodej zboží a služeb zboží JAK na prodej zboží a služeb zboží
SEŘAZENO PODLE

VÝSLEDEK
SUM(množství),
SOUČET (Součet)
PODLE
Nomenklatura

Výsledek dotazu bude následující hierarchický:

Obecné výsledky

Pokud potřebujete získat součty pro všechny „součty“, použijte operátor „OBECNÉ“.

VYBRAT
Prodej zboží a služeb Zboží Nomenklatura AS Nomenklatura,
Prodej zboží a služeb Zboží Odkaz AS Dokument,
Prodej zboží a služeb Zboží Množství AS Množství,
Prodej zboží a služeb Zboží Částka AS Částka
Z
Dokument Prodej zboží a služeb zboží JAK na prodej zboží a služeb zboží
SEŘAZENO PODLE
Prodej zboží a služeb Zboží. Odkaz. Datum
VÝSLEDEK
SUM(množství),
SOUČET (Součet)
PODLE
JSOU BĚŽNÉ,
Nomenklatura

V důsledku provedení požadavku získáme následující výsledek:

Ve které 1 úrovni seskupení je agregace všech potřebných polí.

Zařizování

Operátor ORDER BY se používá k řazení výsledku dotazu.

Řazení pro primitivní typy (řetězec, číslo, boolean) se řídí obvyklými pravidly. U polí typu odkazu dochází k řazení podle vnitřní reprezentace odkazu (jedinečného identifikátoru), spíše než podle kódu nebo podle reprezentace odkazu.

VYBRAT

Z
Directory.Nomenclature AS Nomenklatura
SEŘAZENO PODLE
název

Požadavek zobrazí seznam jmen v adresáři nomenklatur seřazený abecedně.

Automatická objednávka

Výsledkem dotazu bez řazení je chaoticky prezentovaná sada řádků. Vývojáři platformy 1C nezaručují, že při provádění identických dotazů budou řádky vydávány ve stejném pořadí.

Pokud potřebujete zobrazit záznamy tabulky v konstantním pořadí, musíte použít konstrukci Auto-Order.

VYBRAT
Nomenklatura.Name AS Jméno
Z
Directory.Nomenclature AS Nomenklatura
AUTO OBJEDNÁVKA

Virtuální stoly

Virtuální tabulky v 1C jsou jedinečnou funkcí dotazovacího jazyka 1C, která se nenachází v jiných podobných syntaxích. Virtuální tabulka je rychlý způsob, jak získat informace o profilu z registrů.

Každý typ registru má svou vlastní sadu virtuálních tabulek, které se mohou lišit v závislosti na nastavení registru.

  • řez prvního;
  • řez posledně jmenovaného.
  • zbytky;
  • revoluce;
  • zůstatky a obrat.
  • pohyby z podkonta;
  • revoluce;
  • rychlost Dt Kt;
  • zbytky;
  • zůstatky a obrat
  • subconto.
  • základna;
  • grafová data;
  • skutečnou dobu platnosti.

Pro vývojáře řešení jsou data přebírána z jedné (virtuální) tabulky, ale ve skutečnosti je platforma 1C bere z mnoha tabulek a převádí je do požadované podoby.

VYBRAT
Produkty ve skladech Zbytky a obrat. Nomenklatura,
ProductsInWarehousesRemainingAndTurnover.QuantityInitialRemaining,
ProductsInWarehousesRemainsAndTurnover.QuantityObrat,
ZbožíInWarehousesRemainsAndTurnover.QuantityIncoming,
Zboží ve skladechRemainsAndTurnover.QuantityConsumption,
ProductsInWarehousesRemainingsAndTurnover.QuantityFinalRemaining
Z
RegisterAccumulations.GoodsInWarehouses.RemainsAndTurnover AS GoodsInWarehousesRemainsAndTurnover

Tento dotaz umožňuje rychle získat velké množství dat.

Možnosti virtuálního stolu

Velmi důležitým aspektem práce s virtuálními tabulkami je použití parametrů. Parametry virtuální tabulky jsou specializované parametry pro výběr a konfiguraci.

U takových tabulek se považuje za nesprávné použít výběr v konstrukci „WHERE“. Kromě toho, že se dotaz stane neoptimálním, je možné přijímat nesprávná data.

Příklad použití těchto parametrů:

Evidence kumulací. Zboží ve skladech. Zůstatky a obraty (& Začátek období, & Konec období, Měsíc, pohyby a hranice období, Číselník = & Povinné názvosloví)

Algoritmus pro virtuální tabulky

Například nejpoužívanější virtuální tabulka typu „Remains“ ukládá data ze dvou fyzických tabulek – zůstatky a pohyby.

Při použití virtuální tabulky systém provádí následující manipulace:

  1. V tabulce součtů získáme nejbližší vypočítanou hodnotu z hlediska data a měření.
  2. Částku z tabulky pohybu „přičteme“ k částce z tabulky součtů.


Takový jednoduché kroky může výrazně zlepšit výkon systému jako celku.

Použití Tvůrce dotazů

Tvůrce dotazů– nástroj zabudovaný do systému 1C Enterprise, který výrazně usnadňuje vývoj databázových dotazů.

Tvůrce dotazů má poměrně jednoduché a intuitivní rozhraní. Přesto se podívejme na použití konstruktoru dotazu podrobněji.

Konstruktor textu dotazu se spouští z kontextové nabídky (pravé tlačítko myši) na požadovaném místě v kódu programu.

Popis konstruktoru požadavku 1C

Podívejme se na každou záložku návrháře podrobněji. Výjimkou je záložka Builder, která je tématem na jinou diskusi.

Karta Tabulky a pole

Tato karta určuje zdroj dat a pole, která je třeba v sestavě zobrazit. V podstatě jsou zde popsány konstrukce SELECT.. FROM.

Zdrojem může být fyzická databázová tabulka, virtuální tabulka registrů, dočasné tabulky, vnořené dotazy atd.

V kontextovém menu virtuálních tabulek můžete nastavit parametry virtuální tabulky:

Karta Připojení

Záložka slouží k popisu spojení několika tabulek a vytváří konstrukce se slovem SPOJENÍ.

Karta seskupení

Na této záložce systém umožňuje seskupit a shrnout požadovaná pole výsledku tabulky. Popisuje použití konstrukcí GROUP BY, SUM, MINIMUM, AVERAGE, MAXIMUM, QUANTITY, NUMBER OF RŮZNÉ.

Záložka Podmínky

Zodpovídá za vše, co přijde v textu požadavku po konstrukci WHERE, tedy za všechny podmínky kladené na přijatá data.

Karta Upřesnit

Tab dodatečně plný nejrůznějších parametrů, které jsou velmi důležité. Podívejme se na každou z vlastností.

Seskupování Výběr záznamů:

  • První n– parametr, který dotazu vrátí pouze N záznamů (operátor FIRST)
  • Žádné duplikáty– zajišťuje jedinečnost přijatých záznamů (JINÝ operátor)
  • Povoleno– umožňuje vybrat pouze ty záznamy, které vám systém umožňuje vybrat s přihlédnutím k (POVOLENÁ konstrukce)

Seskupování Typ požadavku určuje, jaký typ požadavku bude: načtení dat, vytvoření dočasné tabulky nebo zničení dočasné tabulky.

Dole je vlajka Uzamknout přijatá data pro pozdější úpravu. Umožňuje povolit možnost nastavení zamykání dat, které zajišťuje bezpečnost dat od jejich načtení až po jejich změnu (relevantní pouze pro režim Automatické zamykání, provedení PRO ZMĚNU).

Karta spojení/aliasy

Na této kartě návrháře dotazů můžete nastavit možnost spojování různých tabulek a aliasů (konstrukt HOW). Tabulky jsou vyznačeny na levé straně. Pokud nastavíte příznaky naproti tabulce, použije se konstrukce UNITE, jinak - UNITE ALL (rozdíly mezi oběma metodami). Na pravé straně je uvedena korespondence polí v různých tabulkách, pokud korespondence není uvedena, dotaz vrátí hodnotu NULL.

Záložka Objednávka

Toto určuje pořadí, ve kterém jsou hodnoty seřazeny (ORDER BY) - sestupně (DESC) nebo vzestupně (ASC).

Je zde také zajímavá vlajka - Automatická objednávka(v poptávce - AUTO OBJEDNÁVKA). Ve výchozím nastavení systém 1C zobrazuje data v „chaotickém“ pořadí. Pokud nastavíte tento příznak, systém seřadí data podle interních dat.

Karta Dávkový dotaz

Na kartě Návrhář dotazů můžete vytvořit nové a také ji použít jako navigaci. V textu požadavku jsou pakety odděleny symbolem „;“ (čárkou).

Tlačítko „Dotaz“ v návrháři dotazů

V levém dolním rohu návrháře požadavku je tlačítko Požadavek, pomocí kterého můžete kdykoli zobrazit text požadavku:

V tomto okně můžete provést úpravy požadavku a provést jej.


Pomocí konzoly dotazů

Query Console je jednoduchý a pohodlný způsob, jak ladit složité dotazy a rychle získávat informace. V tomto článku se pokusím popsat, jak používat Query Console a poskytnout odkaz na stažení Query Console.

Pojďme se na tento nástroj podívat blíže.

Stáhněte si dotazovací konzoli 1C

Za prvé, abyste mohli začít pracovat s konzolí dotazů, musíte ji odněkud stáhnout. Léčba se obvykle dělí na dva typy – kontrolované formy a konvenční (nebo se někdy nazývají 8.1 a 8.2/8.3).

Pokusil jsem se tyto dva pohledy zkombinovat v jednom zpracování - požadovaný formulář se otevře v požadovaném provozním režimu (ve spravovaném režimu konzole funguje pouze v tlustém režimu).

Popis konzole dotazu 1C

Začněme se podívat na konzolu dotazů s popisem hlavního panelu zpracování:

V záhlaví konzoly dotazu můžete vidět čas provedení posledního dotazu s přesností na milisekundy, což vám umožňuje porovnávat různé návrhy z hlediska výkonu.

První skupina tlačítek na panelu příkazů je zodpovědná za ukládání aktuálních dotazů do externího souboru. To je velmi pohodlné, vždy se můžete vrátit k psaní složitého požadavku. Nebo si například uložte seznam typických příkladů určitých vzorů.

Vlevo v poli „Požadavek“ můžete vytvářet nové požadavky a ukládat je do stromové struktury. Druhá skupina tlačítek je zodpovědná za správu seznamu požadavků. Pomocí něj můžete vytvořit, kopírovat, mazat, přesouvat požadavek.

  • Vykonatžádost– jednoduché provedení a výsledky
  • Spustit balíček– umožňuje zobrazit všechny přechodné dotazy v dávce dotazů
  • Zobrazení dočasných tabulek– umožňuje zobrazit výsledky, které dočasné dotazy vracejí v tabulce

Parametry požadavku:

Umožňuje nastavit aktuální parametry požadavku.

V okně parametrů dotazu je zajímavé následující:

  • Knoflík Získejte z žádosti automaticky najde všechny parametry v požadavku pro pohodlí vývojáře.
  • Vlajka Společné parametry pro všechny požadavky– při jeho zpracování nedojde k vymazání parametrů při přechodu z požadavku na požadavek v obecném seznamu požadavků.

Nastavte parametr se seznamem hodnot Je to velmi jednoduché, stačí při výběru hodnoty parametru kliknout na tlačítko smazat hodnotu (křížek), systém vás vyzve k výběru datového typu, kde je třeba vybrat „Value List“:

V horním panelu je také tlačítko pro vyvolání nastavení konzoly dotazu:

Zde můžete zadat parametry pro automatické ukládání dotazů a parametry provádění dotazů.

Text požadavku se zadává do pole požadavku konzoly. To lze provést jednoduchým zadáním testu dotazu nebo zavoláním speciálního nástroje – návrháře dotazů.

Návrhář dotazů 1C 8 se vyvolá z kontextové nabídky (pravé tlačítko myši), když kliknete na vstupní pole:

V této nabídce jsou také užitečné funkce, jako je vymazání nebo přidání zalomení řádku („|“) k požadavku nebo přijetí kódu požadavku v této pohodlné formě:

Žádost = Nová žádost;
Request.Text = ”
|VYBRAT
| Měny. Odkaz
|OD
| Adresář.Currencies AS Currencies“;
RequestResult = Request.Execute();

Spodní pole konzoly dotazu zobrazuje pole výsledku dotazu, proto bylo toto zpracování vytvořeno:



Také dotazovací konzole kromě seznamu může zobrazovat data ve formě stromu - pro dotazy obsahující součty.

Optimalizace dotazu

Jedním z nejdůležitějších bodů při zvyšování produktivity 1C enterprise 8.3 je optimalizacežádosti. Tento bod je také velmi důležitý, kdy absolvování certifikace. Níže budeme hovořit o typických důvodech, proč tomu tak není optimální výkon dotazy a optimalizační metody.

Výběry ve virtuální tabulce pomocí konstrukce WHERE

Na detaily virtuální tabulky je nutné aplikovat filtry pouze prostřednictvím parametrů VT. V žádném případě nepoužívejte pro výběr ve virtuální tabulce konstrukci WHERE, to je z hlediska optimalizace závažná chyba. V případě výběru pomocí WHERE totiž systém přijme VŠECHNY záznamy a teprve poté vybere potřebné.

ŽE JO:

VYBRAT

Z
Registr kumulací. Vzájemné vyrovnání s účastníky organizací. Zůstatky (
,
Organizace = &Organizace
AND Jednotlivec = &Jednotlivec) JAK Vzájemné vyrovnání s účastníky organizací zůstatky

ŠPATNĚ:

VYBRAT
Vzájemné vyrovnání zůstatků s účastníky organizací Částka Zůstatek
Z
Registr kumulací Vzájemná vypořádání s účastníky organizací Zůstatky (,) JAK Vzájemná vyrovnání s účastníky organizací Zůstatky
KDE
Vzájemné vyrovnání zůstatků s účastníky organizací Organizace = & Organizace
AND Vzájemné vyrovnání s účastníky zůstatků organizací Individuální = &Jednotlivec

Získání hodnoty pole komplexního typu pomocí tečky

Při příjmu dat komplexního typu v dotazu přes tečku systém spojí levým spojením přesně tolik tabulek, kolik je možných typů v poli komplexního typu.

Například pro optimalizaci je vysoce nežádoucí přístup do pole záznamu registru – registrátor. Registrátor má složený datový typ, mezi nimiž jsou všechny možné typy dokumentů, které mohou zapisovat data do registru.

ŠPATNĚ:

VYBRAT
Record Set.Recorder.Date,
RecordSet.Quantity
Z
RegisterAccumulations.ProductsOrganizations AS SetRecords

To znamená, že ve skutečnosti takový dotaz nezpřístupní jednu tabulku, ale 22 databázových tabulek (tento registr má 21 typů registrátorů).

ŽE JO:

VYBRAT
VÝBĚR
WHEN ProductsOrg.Registrar LINK Document.Sales of Products and Services
PAK EXPRESNÍ (ProductsOrganization. Registrator AS Document. Sales of GoodsServices).Datum
WHEN GoodsOrg.Registrar LINK Document.Receipt of GoodsServices
PAK EXPRESNÍ (GoodsOrg.Registrar AS Document.Receipt of GoodsServices).Datum
KONEC JAKO DATUM,
ProduktyOrg. Množství
Z
RegisterAccumulations.ProductsOrganizations AS ProductsOrganizations

Nebo druhá možnost je přidat takové informace do detailů, například v našem případě přidání data.

ŽE JO:

VYBRAT
ProductsOrganizations.Date,
Produkty Organizace. Množství
Z
Registr kumulací Zboží organizací AS Zboží organizací

Poddotazy ve stavu spojení

Pro optimalizaci je nepřípustné používat poddotazy v podmínkách spojení, což výrazně zpomaluje dotaz. V takových případech je vhodné použít VT. Chcete-li se připojit, musíte použít pouze metadata a objekty VT, které jste předtím indexovali podle polí připojení.

ŠPATNĚ:

VYBRAT …

PŘIPOJIT SE VLEVO (
SELECT FROM RegisterInformation.Limits
KDE…
SKUPINA VYTVOŘENÁ...
) OD…

ŽE JO:

VYBRAT …
Limity PUT
FROM Information Register.Limits
KDE…
SKUPINA VYTVOŘENÁ...
INDEX BY...;

VYBRAT …
Z dokumentu Prodej zboží a služeb
Limity LEVÉHO PŘIPOJENÍ
BY …;

Spojení záznamů s virtuálními tabulkami

Jsou situace, kdy při propojení virtuálního stolu s ostatními systém nefunguje optimálně. V tomto případě, abyste optimalizovali výkon dotazu, můžete zkusit umístit virtuální tabulku do dočasné tabulky a nezapomenout indexovat spojená pole v dotazu na dočasnou tabulku. To je způsobeno skutečností, že VT jsou často obsaženy v několika fyzických tabulkách DBMS; v důsledku toho je zkompilován poddotaz, který je vybere, a problém se ukáže jako podobný předchozímu bodu.

Použití výběrů založených na neindexovaných polích

Jednou z nejčastějších chyb při psaní dotazů je používání podmínek na neindexovaných polích, což je v rozporu pravidla optimalizace dotazů. DBMS nemůže provést dotaz optimálně, pokud dotaz obsahuje výběr na neindexovatelných polích. Pokud vezmete dočasnou tabulku, musíte také indexovat pole připojení.

Pro každou podmínku musí existovat vhodný index. Vhodný index je takový, který splňuje následující požadavky:

  1. Index obsahuje všechna pole uvedená v podmínce.
  2. Tato pole jsou na samém začátku indexu.
  3. Tyto výběry jsou po sobě jdoucí, to znamená, že hodnoty, které nejsou zahrnuty do podmínky dotazu, mezi nimi nejsou „zaklíněné“.

Pokud DBMS nevybere správné indexy, bude naskenována celá tabulka – to bude mít velmi negativní dopad na výkon a může vést k dlouhodobému zablokování celé sady záznamů.

Použití logického OR v podmínkách

To je vše, tento článek se zabýval základními aspekty optimalizace dotazů, které by měl znát každý odborník na 1C.

Velmi užitečný bezplatný videokurz o vývoji a optimalizaci dotazů, Vřele doporučuji pro začátečníky a další!

Pokud najdete chybu, vyberte část textu a stiskněte Ctrl+Enter.