27.05.2022
1c v požadavku seřadit podle 2 polí. Řazení výsledků dotazu
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
- při převodu informační základna do jiného DBMS
- při změně verze DBMS
- při změně parametrů DBMS
* 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í:
- Vytvoření objektu požadavku a nastavení textu požadavku;
- Nastavení parametrů požadavku;
- Vyřízení požadavku a získání výsledku;
- 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í:
- Popis požadavku— seznam volitelných polí a zdrojů dat;
- Slučování dotazů— výrazy „UNITE“ a „UNITE ALL“;
- Organizování výsledků— výraz „OBJEDNAT BY...“;
- Automatická objednávka— výraz „AUTO OBJEDNÁVKA“;
- 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 BankyPODLE
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 klientiVNITŘNÍ SPOJENÍ
Adresář.Banky JAK BankyPODLE
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 GoodsInWarehousesRemainsAndTurnoverTento 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:
- V tabulce součtů získáme nejbližší vypočítanou hodnotu z hlediska data a měření.
- Čá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:
- Index obsahuje všechna pole uvedená v podmínce.
- Tato pole jsou na samém začátku indexu.
- 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ší!