Zastoupení v žádosti 1s 8.3. Vlastnosti práce s polem View a funkcí View() dotazovacího jazyka. Pomocí konzoly dotazů

Chcete-li zobrazit referenční pole v sestavě, musíte získat reprezentaci referenčního pole v požadavku a při jeho výstupu je použít, nikoli samotný odkaz. Tato část popisuje některé funkce pole "View" a funkce pro získání zobrazení - View(). Více o výstupu referenčních polí si můžete přečíst v části "Výstup referenčních polí".

Zastoupení v terénu

Každá tabulka objektů v infobázi má virtuální pole - "Zobrazit". Toto pole obsahuje textovou reprezentaci objektu. V dotazu je možné toto pole získat stejným způsobem jako ostatní pole tabulky, ale s tímto polem nelze provádět žádné operace. Tato funkce je způsobena skutečností, že toto pole je virtuální a ve skutečnosti při načítání tohoto pole z databáze dotaz obdrží několik polí a při přijetí hodnoty pole z výsledku dotazu převede přijaté hodnoty do provázku. Takže jediná věc, kterou můžete s polem Zobrazit udělat, je dostat ho do výsledku dotazu.

V důsledku toho se nedoporučuje třídit výsledek dotazu podle pole "Zobrazit", protože to nepovede k požadovanému výsledku – výsledek dotazu bude seřazen vzestupně podle odkazů na objekt. Více si o tom můžete přečíst v části „Funkce objednávání podle referenčních polí“.

Zobrazení funkcí ()

Funkce zobrazení je navržena tak, aby získala textovou reprezentaci jakékoli hodnoty, kterou lze získat pomocí dotazovacího jazyka. Funkce View() funguje pro referenční i primitivní typy. U typů odkazů je výsledek funkce zcela podobný příjmu pole "Representation" z reference předané funkci jako parametr. U primitivních typů je výsledkem funkce řetězec, do kterého byla převedena hodnota předaná jako parametr. Zvláštností této funkce je, že její výsledek nelze použít ve výrazu. Tato funkce je způsobena skutečností, že převod hodnot na řetězec se provádí již při příjmu dat z výsledku dotazu, protože Převod libovolné hodnoty na řetězec při provádění požadavku na serveru se neprovádí, protože při převodu hodnot na řetězec je třeba vzít v úvahu místní nastavení.

Použití funkce View() má oproti použití pole View několik výhod. Například v případě, kdy pole, ze kterého je reprezentace odvozena, může obsahovat referenční i primitivní typy, načtení pole Reprezentace tečkovaného z takového pole povede k tomu, že reprezentace pro hodnoty primitivního typu nebudou získány. Pokud se však pro takové pole použije funkce Representation(), pak bude získána reprezentace řetězce bez ohledu na typ hodnoty obsažené v poli. Navíc, pokud je funkce View() použita na pole, které je odkazem na více než tři tabulky, dotazovací jazyk načte z databáze pouze referenční hodnoty a načte hodnoty zobrazení pomocí jednoho nebo více dalších dotazů. Toto chování vám umožňuje efektivněji získat pohledy na pole, která odkazují na velký počet tabulek (například do libovolného adresáře), protože spouštěný dotaz nebude obsahovat velký počet připojení, která jsou nezbytná k získání pole, která tvoří pohled.

Použití funkce Representation() může být také užitečné při získávání reprezentace pole - výčtu, v případě provádění požadavku přes COM spojení

Dotazovací jazyk je jedním ze základních mechanismů 1C 8.3 pro vývojáře. Pomocí dotazů můžete rychle získat jakákoli data uložená v databázi. Jeho syntaxe je velmi podobná SQL, ale existují určité rozdíly.

Hlavní výhody dotazovacího jazyka 1C 8.3 (8.2) oproti SQL:

  • dereferencování referenčních polí (odkazování jednoho nebo více bodů na detaily objektu);
  • práce s výsledky je velmi pohodlná;
  • schopnost vytvářet virtuální tabulky;
  • žádost může být napsána v angličtině i ruštině;
  • schopnost blokovat data, aby nedošlo k uváznutí.

Nevýhody dotazovacího jazyka v 1C:

  • na rozdíl od SQL v 1C dotazy neumožňují změnu dat;
  • nedostatek uložených procedur;
  • nemožnost převodu řetězce na číslo.

Pojďme se podívat na náš mini tutoriál o základních konstrukcích dotazovacího jazyka 1C.

Vzhledem k tomu, že dotazy v 1C umožňují pouze přijímat data, musí každý dotaz začínat slovem „SELECT“. Po tomto příkazu jsou označena pole, ze kterých je třeba získat data. Pokud zadáte „*“, budou vybrána všechna dostupná pole. Místo, ze kterého se budou data vybírat (dokumenty, registry, adresáře atd.), je uvedeno za slovem „OD“.

V níže uvedeném příkladu jsou názvy celé nomenklatury vybrány z adresáře „Nomenklatura“. Za slovem „JAK“ jsou uvedeny aliasy (názvy) pro tabulky a pole.

VYBRAT
Název AS Název nomenklatury
Z
Directory.Nomenclature AS Nomenklatura

Vedle příkazu „SELECT“ můžete zadat klíčová slova:

  • ROZLIČNÝ. Dotaz vybere pouze řádky, které se liší alespoň v jednom poli (bez duplicit).
  • První n, Kde n– počet řádků od začátku výsledku, které je třeba vybrat. Nejčastěji se tato konstrukce používá ve spojení s řazením (ORDER BY). Například, když potřebujete vybrat určitý počet dokumentů, které jsou aktuální podle data.
  • POVOLENO. Tento návrh umožňuje vybrat z databáze pouze ty záznamy, které má aktuální uživatel k dispozici. Na základě použití tohoto klíčového slova se uživateli při pokusu o dotazování na záznamy, ke kterým nemá přístup, zobrazí chybová zpráva.

Tato klíčová slova lze použít společně nebo samostatně.

PRO ZMĚNU

Tento návrh blokuje data, aby se předešlo vzájemným konfliktům. Uzamčená data nebudou načtena z jiného připojení, dokud transakce neskončí. V této klauzuli můžete určit konkrétní tabulky, které je třeba zamknout. Jinak budou všichni zablokováni. Konstrukce je relevantní pouze pro režim automatického zamykání.

Nejčastěji se při příjmu zůstatků používá doložka „PRO ZMĚNU“. Když totiž v programu pracuje více uživatelů současně, zatímco jeden přijímá zůstatky, jiný je může měnit. V tomto případě již výsledný zbytek nebude správný. Pokud s tímto návrhem zablokujete data, pak dokud první zaměstnanec nedostane správný zůstatek a neprovede s ním všechny potřebné manipulace, bude druhý zaměstnanec nucen čekat.

VYBRAT
Vzájemné vyrovnání. Zaměstnanec,
Vzájemná vypořádání Výše ​​vzájemných vypořádání Zůstatek
Z
Evidence kumulací Vzájemná zúčtování se zaměstnanci Zůstatky AS Vzájemná zúčtování
PRO ZMĚNU

KDE

Návrh je nutný pro zavedení určitého druhu výběru na nahraná data. V některých případech získávání dat z registrů je rozumnější specifikovat podmínky výběru v parametrech virtuálních tabulek. Při použití "WHERE" se nejprve načtou všechny záznamy a až poté se aplikuje výběr, což výrazně zpomalí dotaz.

Níže je uveden příklad požadavku na získání kontaktních osob na konkrétní pozici. Parametr výběru má formát: &Název parametru (název parametru je libovolný).

VÝBĚR (PŘÍPAD)

Návrh umožňuje specifikovat podmínky přímo v těle požadavku.

V níže uvedeném příkladu bude „AdditionalField“ obsahovat text v závislosti na tom, zda je dokument odeslán nebo ne:

VYBRAT
VstupnéT&U.Link,
VÝBĚR
KDYŽ PřijetíT&U.Provedeno
PAK "Dokument byl schválen!"
ELSE „Dokument nebyl odeslán...“
KONEC JAKO DalšíPole
Z
Dokument Příjem zboží a služeb JAK Příjem T&C

PŘIPOJIT

Spojení propojují dvě tabulky na základě konkrétní podmínky vztahu.

LEVÉ/PRAVÉ PŘIPOJENÍ

Podstatou LEVÉHO spojení je, že první zadaná tabulka se vezme celá a druhá se na ni naváže podle podmínky spojení. Pokud neexistují žádné záznamy odpovídající první tabulce ve druhé, pak se jako jejich hodnoty nahradí NULL. Jednoduše řečeno, hlavní tabulka je první určená tabulka a data druhé tabulky (pokud existuje) jsou již nahrazena jejími daty.

Například je nutné získat položky položek z dokladů „Příjem zboží a služeb“ a ceny z evidence informací „Ceny položek“. V tomto případě, pokud cena pro jakoukoli pozici není nalezena, nahraďte místo ní NULL. Vyberou se všechny položky z dokladu bez ohledu na to, zda mají nebo nemají cenu.

VYBRAT
Potvrzení a nomenklatura U.,
Ceny.Cena
Z
Dokument.Příjem zboží a služeb.Zboží JAK Příjem a specifikace
INTERNAL JOIN RegisterInformation.CenyNomenklatura.SliceLast AS Ceny
Softwarový příjem&U.Nomenklatura = Ceny.Nomenklatura

V PRAVĚ je vše přesně naopak.

PLNÉ PŘIPOJENÍ

Tento typ připojení se od předchozích liší tím, že ve výsledku budou vráceny všechny záznamy první i druhé tabulky. Pokud nejsou v první nebo druhé tabulce nalezeny žádné záznamy na základě zadané podmínky propojení, bude místo toho vrácena hodnota NULL.

Při použití plného připojení v předchozím příkladu budou vybrány všechny položky položek z dokladu „Příjem zboží a služeb“ a všechny nejnovější ceny z evidence „Ceny položek“. Hodnoty nenalezených záznamů v první i druhé tabulce se budou rovnat NULL.

VNITŘNÍ SPOJENÍ

Rozdíl mezi INNER JOIN a FULL JOIN je ten, že pokud záznam není nalezen alespoň v jedné z tabulek, dotaz jej vůbec nezobrazí. V důsledku toho budou vybrány pouze ty položky položek z dokladu „Příjem zboží a služeb“, pro které existují záznamy v informačním registru „Ceny položek“, pokud v předchozím příkladu nahradíme „PLNÉ“ za „INTERNÍ“.

SKUPINA VYTVOŘENÁ

Seskupování v dotazech 1C umožňuje sbalit řádky tabulky (pole seskupení) podle určité společné charakteristiky (pole seskupení). Seskupování polí lze zobrazit pouze pomocí agregačních funkcí.

Výsledkem následujícího dotazu bude seznam typů produktů s maximálními cenami za ně.

VYBRAT
,
MAX(cena.cena) AS Cena
Z

SKUPINA VYTVOŘENÁ
Ceny. Nomenklatura. Typ nomenklatury

VÝSLEDEK

Na rozdíl od seskupování se při použití součtů zobrazí všechny záznamy a přidají se k nim součtové řádky. Seskupení zobrazí pouze zobecněné záznamy.

Výsledky lze shrnout pro celou tabulku (pomocí klíčového slova „OBECNÉ“), pro několik polí, pro pole s hierarchickou strukturou (klíčová slova „HIERARCHIE“, „POUZE HIERARCHIE“). Při sumarizaci výsledků není nutné používat agregační funkce.

Podívejme se na příklad podobný příkladu výše s použitím seskupování. V tomto případě výsledek dotazu vrátí nejen seskupená pole, ale také podrobné záznamy.

VYBRAT
Ceny.Nomenklatura.Typ nomenklatury AS Typ nomenklatury,
Ceny. Cena AS Cena
Z
Registr informací Ceny nomenklatury Přehled nejnovějších cen AS
VÝSLEDEK
MAXIMUM (cena)
PODLE
Typ Nomenklatura

MÍT

Tento operátor je podobný operátoru WHERE, ale používá se pouze pro agregační funkce. Zbývající pole, kromě těch, která používá tento operátor, musí být seskupena. Operátor WHERE nelze použít pro agregační funkce.

V níže uvedeném příkladu jsou maximální ceny položky vybrány, pokud překročí 1000, seskupené podle typu položky.

VYBRAT

MAX(cena.cena) AS Cena
Z
Registr informací Ceny nomenklatury Přehled nejnovějších cen AS
SKUPINA VYTVOŘENÁ
Ceny. Nomenklatura. Typ nomenklatury
MÍT
MAXIMUM (Ceny.Cena) > 1000

SEŘAZENO PODLE

Operátor ORDER BY seřadí výsledek dotazu. Aby bylo zajištěno, že záznamy jsou zobrazeny v konzistentním pořadí, používá se funkce AUTO ORDER. Primitivní typy jsou seřazeny podle obvyklých pravidel. Typy odkazů jsou seřazeny podle GUID.

Příklad získání seznamu zaměstnanců seřazených podle jména:

VYBRAT
Employees.Name AS Name
Z
Adresář.Zaměstnanci JAK Zaměstnanci
SEŘAZENO PODLE
název
AUTO OBJEDNÁVKA

Další konstrukce dotazovacího jazyka 1C

  • KOMBAJN– výsledky dvou dotazů do jednoho.
  • KOMBINOVAT VŠECHNO– podobné COMBINE, ale bez seskupování stejných řádků.
  • PRÁZDNÝ STŮL– někdy se používá při spojování dotazů k určení prázdné vnořené tabulky.
  • MÍSTO– vytvoří dočasnou tabulku pro optimalizaci složitých 1C dotazů. Takové požadavky se nazývají dávkové požadavky.

Funkce dotazovacího jazyka

  • SUBSTRING zkrátí řetězec ze zadané pozice na zadaný počet znaků.
  • ROK...DRUHÝ umožňují získat vybranou hodnotu číselného typu. Vstupním parametrem je datum.
  • ZAČÁTEK OBDOBÍ a KONEC OBDOBÍ používá se při práci s daty. Jako doplňkový parametr je uveden typ období (DEN, MĚSÍC, ROK atd.).
  • ADDKDATE umožňuje přidat nebo odečíst zadaný čas určitého typu od data (SEKUnda, MINUTA, DEN atd.).
  • DIFFERENCEDATE určuje rozdíl mezi dvěma daty s uvedením typu výstupní hodnoty (DEN, ROK, MĚSÍC atd.).
  • ISNULL nahradí chybějící hodnotu zadaným výrazem.
  • REPREZENTACE a REPREZENTAČNÍ ODKAZY získat řetězcovou reprezentaci zadaného pole. Použít na jakékoli hodnoty a pouze referenční hodnoty.
  • TYP, TYPOVÉ HODNOTY se používají k určení typu vstupního parametru.
  • ODKAZ je logický porovnávací operátor pro typ hodnoty atributu.
  • VYJÁDŘIT slouží k převodu hodnoty na požadovaný typ.
  • ČAS SCHŮZKY získá hodnotu typu "Datum" z číselných hodnot (rok, měsíc, den, hodina, minuta, sekunda).
  • VÝZNAM v požadavku 1C se používá k označení předdefinovaných hodnot - adresářů, výčtů, plánů typů charakteristik. Příklad použití: " Kde právnická osoba = hodnota (výčet. Právnická osoba. Jednotlivec)«.

Tvůrce dotazů

Pro vytváření dotazů pomocí 1C existuje velmi pohodlný vestavěný mechanismus - návrhář dotazů. Obsahuje následující hlavní záložky:

  • „Tabulky a pole“ – obsahuje pole, která je třeba vybrat, a jejich zdroje.
  • „Connections“ - popisuje podmínky pro strukturu CONNECTION.
  • „Seskupování“ – obsahuje popis seskupovacích struktur a na nich založených souhrnných polí.
  • „Podmínky“ – odpovídá za výběr údajů v požadavku.
  • „Advanced“ – další parametry dotazu, jako jsou klíčová slova pro příkaz „SELECT“ atd.
  • „Joins/Aliasy“ - jsou uvedeny možnosti spojení tabulek a specifikovány aliasy (konstrukt „HOW“).
  • „Objednávka“ je zodpovědná za třídění výsledků dotazů.
  • „Součet“ – podobná záložce „Seskupení“, ale používá se pro konstrukci „TOTALS“.

Samotný text žádosti lze zobrazit kliknutím na tlačítko „Žádost“ v levém dolním rohu. V této podobě jej lze ručně opravit nebo zkopírovat.


Žádost o konzolu

Chcete-li rychle zobrazit výsledek dotazu v podnikovém režimu nebo ladit složité dotazy, použijte . Obsahuje text požadavku, nastavuje parametry a zobrazuje výsledek.

Konzolu dotazů si můžete stáhnout na disku ITS nebo přes .

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, ke změně dat se používá objektový datový model.

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
Nomenklatura 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 - in 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é akce mohou 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 konzoli dotazů 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:

Tato nabídka má 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 neoptimálního výkonu dotazů a optimalizačních metodách.

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 se 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ě pro optimalizaci výkonu 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ší!

Článek poskytuje užitečné techniky při práci s dotazy 1C v.8.2 a také informace, které nejsou o dotazovacím jazyce tak známé. Nesnažím se podat úplný popis dotazovacího jazyka, ale chci se pozastavit pouze u některých bodů, které mohou být pro někoho užitečné.

Takže, začněme. Požadavek je speciální objekt v 1C 8.2, který se používá ke generování a provádění dotazů na databázové tabulky v systému. Chcete-li provést dotaz, musíte sestavit text dotazu, který popisuje, které tabulky budou použity jako zdroje dat dotazu, která pole vybrat, které řazení a seskupení použít atd. Více o dotazech si můžete přečíst v knize „1C 8.2 Developer's Guide“. Dotazovací jazyk 1C 8.2 je syntaxí velmi podobný jiným dotazovacím jazykům databáze SQL, ale existují také rozdíly. Mezi hlavní výhody vestavěného dotazovacího jazyka stojí za zmínku dereference polí, přítomnost virtuálních tabulek, pohodlná práce se součty a netypizovaná pole v dotazech. Nevýhody jsou, že nemůžete použít dotaz jako výstupní pole, nemůžete použít uložené procedury a nemůžete převést řetězec na číslo.

Poskytnu informace a doporučení k jazyku dotazu bod po bodu:
1. Chcete-li zvýšit čitelnost požadavku a snížit počet parametrů požadavku, můžete použít literál pro přístup k předdefinovaným konfiguračním datům v požadavku HODNOTA (REPREZENTACE HODNOTY). Jako reprezentace hodnot jsou to hodnoty výčtů, předdefinovaná data adresářů, plány typů výpočtů, plány typů charakteristik, účtové osnovy, prázdné odkazy, hodnoty bodů trasy, hodnoty systémových přenosů ( lze použít například typ akumulačního pohybu, typ účtu).
Příklady:

WHERE Město = HODNOTA(Adresář.Města.Moskva)
KDE Město = HODNOTA(Directory.Cities.EmptyLink)
WHEREProductType = VALUE(Enumeration.ProductTypes.Service)
WHEREMovementType = VALUE(Typ pohybuAccumulation.Incoming)
KDE je bod trasy =
VALUE(BusinessProcess.Agreement.RoutePoint.Agreement)

Výraz v závorce vždy začíná slovem v jednotném čísle (Adresář, Výčet atd.), které odpovídá typu předdefinované hodnoty.

2.Automatické řazení v dotazu může značně zpomalit proces. Pokud není třídění potřeba, je lepší jej nepoužívat vůbec. V mnoha případech je efektivnější napsat řazení pomocí klíčového slova SEŘAZENO PODLE.

3.Musíte se ujistit, že při použití aliasů se neobjeví nejednoznačné pole. Jinak systém nepochopí, ke kterému objektu je třeba přistupovat.
Příklad požadavku s nejednoznačným polem:
VYBRAT
Nomenclature.Link,
Zbývající zbožíRemaining.QuantityRemaining
Z
Directory.Nomenclature AS Nomenklatura
LEVÉ SPOJENÍ Registrovat akumulace. Zbývající zboží Zbývající AS Zbývající zboží
Software Remaining ProductsRemaining.Nomenclature = Nomenclature.Link
Je nutné opravit alias tabulky, např. takto: „Directory.Nomenclature AS Nomenclature1“ a „Nomenclature.Link“ by měly být opraveny podle „Nomenclature1.Link“.

4.Někdy je užitečné získat reprezentaci referenčních polí pomocí klíčového slova VÝKON spolu s odkazem, aby nedocházelo k opakovanému přístupu do databáze. To je užitečné při zobrazení výsledku dotazu v tabulce.
Příklad:
VYBRAT
ZASTOUPENÍ (Dokument. Protistrana) JAKO Příjemce,
PREZENTACE (Dokument.Základ)
Z
Dokument.Faktura AS Dokument

5. Použijte v žádosti EXPRESS (typ pole AS) umožňuje odstranit nepotřebné tabulky ze spojení s polem složeného datového typu. Tím se urychlí vyřízení požadavku.
Příklad (registrátor je pole s kompozitním typem pro fyzickou tabulku evidence akumulace Zbývajícího zboží, v požadavku se volí Datum a Počet dokladů Příjem zboží, přičemž při přístupu k detailu dokladu Datum a Číslo přes registrátor, nedochází k vícenásobnému propojení registrační tabulky s tabulkami dokumentů, které jsou registrátory pro evidenci zbytkového zboží):
VYBERTE RŮZNÉ[b] EXPRESNÍ (Zbývající zboží. Registrátor JAKO doklad. Příjem zboží). Číslo JAKO ČÍSLO PŘÍJMU,
[b] EXPRESNÍ (Zbývající zboží. Registrátor JAKO doklad. Příjem zboží).Datum K DATUM PŘÍJMU
[b]OD Registr kumulací Zbývající zboží AS Zbývající zboží KDE (EXPRESNÍ (Zbývající zboží. Registrátor JAKO doklad. Příjem zboží) NENÍ NULL)

6.Pokud jsou v konfiguraci 1C uživatelé, kteří mají omezená práva k určitým konfiguračním objektům, musí být klíčové slovo použito v požadavku na takové objekty POVOLENO aby byl požadavek proveden bezchybně (Vyberte povoleno...)

7. Při slučování tabulek obsahujících vnořené tabulky (například Dokument s tabulkovou částí) může být klíčové slovo užitečné PRÁZDNÝ když například jeden z dokumentů nemá tabulkovou část.
Příklad:
SELECT Link.Number, EMPTY TABLE.(No., Item, Quantity) AS Složení

KOMBINOVAT VŠECHNO
SELECT Link.Number, Composition.(LineNumber, Nomenclature, Quantity)
Z dokumentu. Faktura

8.Při práci se spojeními tabulek obsahujících každý jeden řádek může být nutné sloučit řádky tabulek (v obou tabulkách není pole, kterým by se daly spojit). Toho lze dosáhnout použitím konstrukce " Tabulka FULL CONNECTION podle TRUE" Pokud mají tabulky více než jeden řádek, výsledkem bude počet řádků rovný součinu počtu řádků obou tabulek. Pokud je v jedné tabulce O řádků, pak se počet řádků ve výsledné tabulce bude rovnat počtu řádků ve druhé tabulce. Pro spojení takových tabulek lze také použít kartézský součin tabulek, ve kterém se ve výsledné tabulce objeví všechny kombinace řádků z obou tabulek. Musíme si pamatovat, že pokud je v jedné z tabulek 0 řádků, pak kartézský součin bude 0, takže úplné spojení bude lepší. Obecně platí, že místo úplného připojení PO PRAVDĚ Můžete použít jakýkoli jiný typ spojení, ale v tomto případě je také možné, že výsledná tabulka bude mít 0 řádků, i když jedna z tabulek bude mít nenulový počet řádků. V případě úplného spojení tato situace nastane pouze v jednom případě, pokud je počet řádků v obou tabulkách 0. Pokud víte, že v tabulce je právě alespoň jeden řádek, můžete použít LEVÉ PŘIPOJENÍ s jinou tabulkou s podmínkou PO PRAVDĚ.
Příklad (sice vymyšlený, pro úplné připojení):
VYBRAT
První 1
Gender.Link,
K. Protistrana
Z
Pohlaví JAKO Pohlaví
ÚPLNÉ PŘIPOJENÍ (Vyberte první 1 D. Protistrana Z dokumentu. Prodej zboží JAK D Uspořádat D. Časový okamžik) JAK NA TO
ZAPNUTO (PRAVDA)

9. Chcete-li získat jedinečné záznamy pro určité pole, je správnější místo seskupování použít klíčové slovo ROZLIČNÝ v žádosti, protože tato konstrukce je mnohem jasnější a klíčové slovo SKUPINA VYTVOŘENÁ má širší uplatnění a často se používá, pokud je navíc nutné počítat agregační funkce podle seskupení. V některých případech je nutné vytisknout omezený počet řádků. Chcete-li to provést, měli byste v popisu požadavku zadat klíčové slovo PRVNÍ a po něm - požadovaný počet řádků.
Příklad pro PRVNÍ:
Vyberte Prvních 5
Directory.Nomenclature.Name,
Adresář.Nomenklatura.Nákupní cena
Seřazeno podle
Adresář.Nomenklatura.Nákupní cena sestupně
Příklad pro ROZLIČNÝ:
Vyberte Různé
Dokument.Spotřební materiál.Protistrana

10.Agregační funkce v dotazu lze použít bez klíčového slova SKUPINA. V tomto případě budou všechny výsledky seskupeny do jednoho řádku.
Příklad:
Vybrat
Částka(Invoice.Amount) As Amount
Z
Document.Invoice.Composition As Invoice

11.V dotazech ve výběrových polích můžete volně přistupovat k detailům výběrových polí. Tato funkce se nazývá dereferencování výběru pole. Pokud je zdrojem dat vnořená tabulka (tabulková část dokumentu), pak ve výběrových polích lze přistupovat i k polím hlavní tabulky (např. přes pole Odkaz vstoupit do pole hlavní tabulky Účet)
Příklad:
VYBRAT[b] Příjem zboží a služeb Zboží Množství AS Množství, Příjem zboží a služebGoods.Link.Protistrana Z KDE
Existuje jedna zvláštnost použití dereferencování pole, pokud jsou v požadavku seskupení. V jakýchkoli dotazech se seskupením v seznamech polí dotazu můžete volně přistupovat k podrobnostem polí seskupení.
Příklad:
VYBRAT
Příjem zboží a služeb Zboží Nomenklatura,
Příjem zboží a služeb Zboží. Nomenklatura. Kód,
SUM (Příjem zboží a služeb Zboží. Množství) AS Množství,
Příjem zboží a služebGoods.Link.Counterparty,
Příjem zboží a služebZboží.Odkaz.Datum
Z
Dokument. Příjem zboží a služeb Zboží JAK Příjem zboží a služeb Zboží
KDE
Příjem zboží a služebGoods.Link = &Odkaz
SKUPINA VYTVOŘENÁ
Příjem zboží a služeb Zboží Nomenklatura,
Příjem zboží a služebGoods.Link
Nápověda 1C říká, že pokud existuje seskupování, mohou se pole výběru dotazu účastnit pouze seskupovací pole a agregační funkce pro výběrová pole. Existuje jeden výjimečný případ, kdy jsou agregační funkce aplikovány na pole vnořené tabulky. V tomto případě je v seznamu výběrových polí možné přistupovat k polím tabulky nejvyšší úrovně bez seskupování výsledků podle těchto polí.
Příklad:
VYBRAT
Příjem zboží a služeb (součet (množství), nomenklatura),
Příjem zboží a služeb. Odkaz,
Příjem zboží a služeb. Protistrana
Z
Dokument Příjem zboží a služeb JAK Příjem zboží a služeb
SKUPINA VYTVOŘENÁ
Příjem zboží a služeb. Zboží. (Nomenklatura)

12. Někdy je užitečné místo určení libovolného pole v seskupení zahrnout do polí pro výběr dotazu následující parametr:
VYBRAT DocProducts.Nomenklatura, &Protistrana, &Doba, SUM(DocProducts.Quantity * DocProducts.Q) JAKO množství, SUM(DocProducts.Amount) JAKO Částka Z Document.Admission.Products JAKO DocProducts KDE DocProducts.Link = &Odkaz
SKUPINA VYTVOŘENÁ DocProducts.Nomenklatura
A poté nastavte parametr v těle požadavku:
Request.SetParameter("&Účet", SelectAccount);
Query.SetParameter("&Období", Datum);

13. V univerzálních dotazech lze parametry použít v popisu zdrojů dat dotazu, v podmínkách KDE, v podmínkách spojování tabulek a parametrů virtuálních tabulek. Existují dvě techniky pro vytváření obecných dotazů:
A) pomocí mechanismu zřetězení řetězců, přidání proměnných do textu požadavku;
Příklad1:

OrderingType = ?(NĚJAKÉ PROMĚNNÉ,"","DESC");
Query.Text = "Vybrat... Uspořádat DLE pole1 " + Typ objednávky + "...";
Příklad2:
Query.Text = "Vybrat pole1...";

Pokud NĚJAKÉ PROMĚNNÉ = 1 Pak
Request.Text = Request.Text + ",Pole2 ...";
endIf;
B) použijte parametry v různých částech požadavku (například v části datových zdrojů požadavku) a poté vestavěnou jazykovou metodu - STREPLACE(). Při navrhování univerzálních dotazů je užitečné přistupovat k vlastnosti objektů METADATA(), pomocí kterého můžete určit název tabulky pro nějaký odkaz (např. pro dokument to bude něco takového - Odkaz . METADATA().NAME), předaný přes parametr nějaké univerzální proceduře.
Příklad:
Vybrat
DocTch.Nomenklatura,
...
Z
&Nějaký DocTC JAKO DocTC
A poté nastavte parametr v těle požadavku
Request.Text = StrReplace(Request.Text, "&SomeDocTCH", "Document."+Link.Metadata().Name+.Products");

Parametry lze použít v podmínkách dotazu k povolení volitelné podmínky &Parametr NEBO NE SomeProperty:
Request.SetParameter(“&Parametr”, “Název protistrany=””Ivanov”””);
Pomocí doslovného SKUTEČNÝ můžete odstranit určité filtry v požadavku
Request.SetParameter("&Parametr", True);

14.Velmi užitečný v návrháři dotazů je příkaz kontextové nabídky tabulky - " Přejmenovat tabulku...", pomocí kterého můžete přijít s nějakým zobecněným názvem pro zdroj dat. Chcete-li vytvořit dotazy pro tabulky stejného typu, podobné struktury, může být užitečné, aby druhá tabulka zkopírovala text dotazu první tabulky, přejděte do okna návrháře dotazů a vyberte položku v kontextové nabídce tabulky - Vyměnit stůl... a vyberte druhou tabulku.

15.Při práci s tvorbou vnořených dotazů v sekcích podmínek nebo parametrů virtuálních tabulek návrháře dotazů se používá technika zvýraznění mezery v závorkách, poté se v kontextovém menu objeví položka „Designer dotazu“ a při úpravě vnořeného dotazu se v podmínce zvýrazní celý dotaz v závorkách.
Příklad vnořeného dotazu:
Produkt B (Vyberte produkt...)

16. Při návrhu sestav ACS v dotazech do bilančních registrů je pohodlnější a správnější použít výraz jako parametr Period AddToDate(EndPeriod(Period,DAY),SECOND,1), protože virtuální zůstatky se získávají na začátku období, bez poslední sekundy. Techniku ​​+1 sekundy nelze použít u dokladů: podle nového způsobu zaúčtování dokladů musí být evidenční zůstatky přijaty za Období určené objektem Hranice s časovým okamžikem dokladu včetně (nikoli dnem doklad +1 sekunda!), a podle starého způsobu zaúčtování - v okamžiku dokladu (a ne k datu dokladu!). Při analýze obratu nebo dat za období je vhodné přidat parametr s typem Standardní období(v tomto případě není nutné uvádět poslední datum intervalu na konci dne). Pro standardní pole „Začátek období“ musíte do pole „Výraz“ zadat "&Období. Datum zahájení" A pro standardní pole „Konec období“ do pole „Výraz“ napište „ &Period.Datum ukončení". Mnoho užitečných informací o dotazovacím jazyce lze nalézt nikoli v asistentu syntaxe, ale v úplné nápovědě konfigurátoru 1C 8.2 (tlačítko F1)

17. Funkce dotazu JeNull(vhodnější je napsat anglickou verzi JeNull) se obvykle používá k odstranění hodnot Null pro numerická pole dotazu. V některých případech například úplné spojení dvou tabulek, funkce IsNull (Parametr1,Parametr2) může úspěšně nahradit design VOLBA, KDY... PAK..JINAK....KONEC, kdy pro libovolné pole mohou být hodnoty NULL jak v první tabulce, tak ve druhé (tato konstrukce umožňuje získat pro pole nenulovou hodnotu). To si ale musíme pamatovat na rozdíl od podmíněného operátoru VÝBĚR funkce JeNull převede typ druhého argumentu na typ prvního argumentu, což je třeba vzít v úvahu, pokud se typy argumentů liší!
Příklad:
IsNull(Reg.Remaining,0)
IsNull(Doc.Product,Doc1.Item)

18. U podmíněné výstavby VÝBĚR Existuje alternativní syntaxe pro jednoduchý případ testování rovnosti na určitou hodnotu, ale není zdokumentována:
Volba výrazu Když 1 Pak „Vysoká“ Když 2 Pak „Střední“ Jinak „Nízká“ Konec

19. Operátor kontroly hodnoty NULL Ano Null(Doporučujeme použít anglickou verzi Je Null). Tato konstrukce se objevila, protože jakákoli operace porovnávající dvě hodnoty, z nichž alespoň jedna je Null, je vždy nepravdivá. Napsat Kde Jméno = Nullšpatně. Zajímavá je i forma negace tohoto operátora Ne Null- špatně, ale správně Ano Ne Null nebo tvar Ne (pole 1 je nulové)- to je podstatný rozdíl od všech operátorů používaných ve spojení s operátorem He.

20. Někdy je užitečný formulář operátora V pro kontrolu shody s jednou z uvedených hodnot.
Příklad:
...Kde je Produkt. Název B ("domácí spotřebiče","Počítače")
Pro referenční knihy může být užitečný formulář operátora V kontroly členství v hierarchii.
Příklad:
...Kde je nomenklatura V HIERARCHII (&Group)
Operátor Včasto se používá ke kontrole, zda je hodnota zahrnuta ve výsledku dílčího dotazu.
Příklad:
...Kde Nomenclature.Link B (Select Nomenclature.Link...).
V poddotazu máte přístup k vnějším polím dotazu v podmínce.
Příklad:
// Vyberte názvy produktů, které byly přítomny
// ve fakturách
VYBRAT
Produkty.Název
Z
Adresář.Nomenklatura JAK Produkty
KDE
Produkty. Odkaz B
(VYBRAT
Složení faktury. Nomenklatura
Z
Document.Invoice.Composition AS InvoiceComposition
KDE
InvoiceContent.Nomenclature = Products.Link)
Úkon V lze použít s poli, seznamy hodnot, tabulkami hodnot, vnořenými dotazy. V tomto případě je možné snížit podmínky
Syntaxe pro poddotaz
(výraz1, výraz2,...,výrazN) V (Vyberte výraz1, výraz2,...,výrazN...)
Syntaxe tabulky hodnot
(výraz1, výraz2,...,výrazN) In (&TK), kde je použito prvních N sloupců v tabulce hodnot TK

20. Na internetu existuje vtip o tom, jak to vždy dělá návrhář dotazů VLEVO, ODJET spojování tabulek (a jejich výměna), bez ohledu na to, jak určíme ŽE JO:
1C: Podnik miluje „doleva“.

21. Je vhodné ladit složité dotazy v konzole dotazů. Na internetu je jich mnoho. Po odladění dotazu jej můžete zkopírovat a v návrháři dotazů je úžasné tlačítko „ Žádost“, kam jej můžete vložit ve stejném tvaru a uložit (dříve bylo možné pouze zkopírovat v konfigurátoru a naformátovat požadavek pomocí znaku zalomení řádku). V okně, které se otevře, když kliknete na tlačítko „Dotaz“, můžete upravit dotaz a zobrazit výsledek provedení, což je docela pohodlné.

22. Při navrhování sestav ACS je třeba pamatovat na to, že pokud potřebujete zajistit filtrování podle určitého pole, není nutné do textu požadavku přidávat parametr. Tvůrce dotazů má kartu " Složení dat“, kde můžete přidat parametry k podmínkám. Na úrovni sestavy ACS je navíc karta podmínek, kde můžete přidat libovolné podmínky a uložit je v rychlém nastavení. V tomto případě budou podmínky univerzální (rovnost, nerovnost, sounáležitost, zařazení do seznamu atd.).

23. Při práci s dokumenty možná budete muset přidat třídění podle pole virtuální tabulky CHVÍLE ČASU, ale smůla - ve vnořených dotazech řazení podle tohoto pole nefunguje správně. Pomáhá tanec s tamburínami: řazení podle virtuálního pole CHVÍLE ČASU je nahrazeno dvěma řazeními: podle data a podle odkazu. Problém můžete také vyřešit pomocí dočasné tabulky přesunutím vnořeného dotazu do samostatného dotazu. U mnoha verzí nebyla tato funkce nebo chyba opravena.
Příklad nefunkčního požadavku, který obdrží poslední odeslaný dokument pro zadanou protistranu (nebo spíše tabulkovou část dokumentu):

VYBRAT
ConsumableProducts.Link,
Consumables.Line Number,
ConsumableProducts.Product,
Spotřební položky. Množství,
Spotřební produkty. Cena,
ConsumableItems.Amount
Z

KDE
Spotřební produkty. Odkaz B
(VYBRAT TOP 1
D. Odkaz
Z
Dokument.Spotřební materiál AS D
KDE
D. Link. Provedeno

OBJEDNAT PODLE D. Link. Okamžik času SESTUPNĚ)

Možné řešení:
A) Nahradit za SEŘAZENO PODLE na
OBJEDNEJTE DO D.DATA POPIS.
OBJEDNEJTE PODLE D.Link SESTUPNĚ

B) Vnořený dotaz můžete přesunout do dočasné tabulky:
VYBRAT TOP 1
D. Odkaz
PUT TZLink
Z
Dokument.Spotřební materiál AS D
KDE
D. Link. Provedeno
A D.Protistrana = &Protistrana

SEŘAZENO PODLE
D. Odkaz Okamžik času SESTUPNĚ
;

////////////////////////////////////////////////////////////////////////////////
VYBRAT
ConsumableProducts.Link,
Consumables.Line Number,
ConsumableProducts.Product,
Spotřební položky. Množství,
Spotřební produkty. Cena,
ConsumableItems.Amount
Z
Document.Consumables.Goods AS ConsumablesGoods
KDE
Spotřební produkty. Odkaz B
(VYBRAT
T.Link
Z
TZLink AS T)
C) Můžete odkazovat na hlavní tabulku dokumentu a teprve potom na tabulkovou část
VYBRAT TOP 1
Consumable.Link,
Spotřební materiál. Zboží.(
Odkaz,
Číslo řádku,
Produkt,
Množství,
Cena,
Součet
)
Z
Document.Consumables AS Consumables
KDE
Expense.Protistrana = &Protistrana
A spotřební materiál

SEŘAZENO PODLE
Spotřební materiál. Okamžik času SNÍŽENÍ

24. Při přístupu do hlavní tabulky dokumentu (adresáře) máte také přístup k datům v podřízené tabulce (tabulkové části). Tato příležitost se nazývá dereferencování polí tabulky. Příkladem úlohy je úloha vyhledání dokumentů obsahujících konkrétní produkt v tabulkové části.
Příklad:
Vyberte Receipt.Link FROM Document.Receipt kde Receipt.Goods.Nomenclature = &Nomenklatura.

Výhodou tohoto dotazu oproti dotazu na vnořenou tabulku Receipt.Goods je, že pokud jsou v dokumentech duplikáty, výsledek dotazu vrátí pouze jedinečné dokumenty bez použití klíčového slova ROZLIČNÝ.
Porovnat:
Vyberte Různé Products.Link FROM Document.Receipt.Products jako Produkty Kde Products.Nomenclature = &Nomenklatura.
To je asi vše, co k tomu patří. Je jasné, že v dotazovacím jazyce je stále mnoho otázek, které jsem nepokryl. K napsání tohoto článku jsem použil informace, které jsem získal po absolvování základního kurzu 1C 8.2 spec8.ru, a také z knihy „1C 8.2 Developer’s Guide“ a internetu.
Děkuji všem!

V tomto článku s vámi chceme vše probrat Funkce dotazovacího jazyka 1C, a konstrukty dotazovacího jazyka. Jaký je rozdíl mezi funkcí a designem? Funkce se volá se závorkami a možnými parametry v nich a konstrukce se zapisuje bez závorek. Nepochybně všechny struktury a funkce dotazovacího jazyka 1C učinit proces sběru dat flexibilní a multifunkční. Tyto funkce a konstrukce platí pro pole dotazu a některé také pro podmínky.

1C Funkce dotazovacího jazyka

Protože jasný popis Funkce dotazovacího jazyka 1C je mnohem méně běžné než popisy struktur, rozhodli jsme se začít se zabývat funkcemi. Nyní se podívejme na každý zvlášť, popíšeme jeho účel, syntaxi a příklad použití, takže:

1. Funkce ČAS SCHŮZKY- tato funkce vytvoří konstantní pole typu "Datum".

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

Příklad použití:

2. Funkce DATE DIFFERENCE- vrátí rozdíl mezi dvěma daty v jedné z dimenzí (rok, měsíc, den, hodina, minuta, sekunda). Měření je předáno jako parametr.

Syntax: ROZDÍL DATUM(<Дата1>, <Дата2>, <Тип>)

Příklad použití:

Query.Text = "SELECT | DIFFERENCEDATE(DATETIME(2015, 4, 17), DATETIME(2015, 2, 1), DAY) | AS Qty.Days";

3. Funkce VALUE- nastaví konstantní pole s předdefinovaným záznamem z databáze, lze také získat prázdný odkaz libovolného typu.

Syntaxe: VALUE(<Имя>)

Příklad použití:

Request.Text = "SELECT //předdefinovaný prvek | VALUE(Directory.Currencies.Dollar) AS dolar, //prázdný odkaz | VALUE(Document.Receipt of Goods and Services.EmptyLink) AS Receipt, //transfer value | VALUE(Transfer . Právnická osoba. Fyzická osoba) AS Fyzická osoba, //předdefinovaný účet | VALUE(Účtová osnova. Samonosná. Materiály) AS Účet_10" ;

4. funkce SELECT- máme před sebou obdobu konstrukce IF, která je použita v kódu, pouze tato se používá v 1C dotazech.

Syntax: VOLBA KDY<Выражение>PAK<Выражение>V OPAČNÉM PŘÍPADĚ<Выражение>KONEC

Příklad použití:

Request.Text = //pokud je částka vyšší než 7500, pak by měla být sleva 300 rublů, //takže pokud je podmínka spuštěna, funkce //vrací Částka - 300 //jinak požadavek vrátí jednoduše Částka "SELECT | SELECT | WHEN TCReceipts.Amount > 7500 | THEN TCReceipts.Amount - 300 | ELSE TCReceipts.Amount | END AS AmountWithDiscount |FROM | Document.Receipt of GoodsServices.Goods AS TCReceipts";

5. Funkce EXPRESS- umožňuje vyjádřit konstantní pole konkrétním typem.

Syntax: EXPRESS(název pole jako název typu)

Příklad použití:

Query.Text = "SELECT VARIOUS | Sales.Registrar.Number, | SELECT | WHEN Sales.Registrar LINK Document.Expense | THEN EXPRESS(Sales.Registrar AS Document.Expense) | ELSE SELECT | WHEN Sales.Registrar LINK Document.Implementation | THEN EXPRESS(Sales.Registrar AS Document.Implementation) | END | ... | END AS Number | FROM | RegisterAccumulations.Purchases AS Purchases";

Existuje jiná možnost použití funkce EXPRESS v polích smíšených typů, kde se vyskytují? Nejjednodušším příkladem je „Registrátor“ pro jakýkoli registr. Proč tedy potřebujeme kvalifikovat typ v registrátoru? Uvažujme situaci, kdy z registrátoru vybereme pole "Číslo", ze které tabulky bude číslo vybráno? Správná odpověď všech! Proto, aby náš dotaz fungoval rychle, měli bychom zadat explicitní typ pomocí funkce EXPRESS

Příklad použití:

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

6. Funkce ISNULL(alternativní pravopis ISNULL) - pokud je pole typu NULL, pak je nahrazeno druhým parametrem funkce.

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

Příklad použití:

Všimněte si také, že je vhodné VŽDY nahradit typ NULL nějakou hodnotou, protože porovnání s typem NULL vždy vrátí FALSE, i když porovnáte NULL s NULL. Nejčastěji se hodnoty NULL tvoří jako výsledek spojování tabulek (všechny typy spojení kromě interních).

Query.Text = //Vyberte celou položku a její zůstatky //pokud v některé položce není zůstatek, pak zde bude pole //NULL, které bude nahrazeno hodnotou 0 "SELECT | No. Link, | ISNULL (ProductsInStockRemains.InStockRemaining, 0) JAKO Zbytek | FROM | Directory.Nomenclature JAKO Č. | LEVÉ PŘIPOJENÍ Registrovat Akumulace. ZbožíVSkladech. Zbytky JAKO ZbožíVSkladechZbytky | ON (ZbožíVSkladechZbytky. Čísla odkazu)";

7. funkce REPREZENTACE- umožňuje získat reprezentaci pole požadavku.

Syntax: VÝKON(<НаименованиеПоля>)

Příklad použití:

Query.Text = "SELECT | REPRESENTATION(FreeRemainingRemains.Nomenclature) AS Nomenklatura, | REPRESENTATION(FreeRemainingRemaining.Warehouse) AS Warehouse, | FreeRemainingRemaining.InStockRemaining |FROM |Akumulace Register.FreeRemaining.Remaining AS FreeRemaining";

Konstrukce v dotazovacím jazyce 1C

Diskutovali jsme s vámi výše Funkce dotazovacího jazyka 1C, teď je čas zvážit konstrukty v dotazovacím jazyce 1C, jsou neméně důležité a užitečné, začněme.

1. Stavební LINK- je logický operátor pro kontrolu typu reference. Nejčastěji se vyskytuje při kontrole pole komplexního typu proti specifickému typu. Syntax: ODKAZ<Имя таблицы>

Příklad použití:

Request.Text = //pokud je typ hodnoty záznamníku Příjem dokladu, //pak dotaz vrátí "Příjem zboží", jinak "Prodej zboží" "VYBRAT | VYBRAT | KDYŽ Zbytky.Registrační LINK Dokument.Příjem zboží a Služby | PAK ""Příjem"" | JINAK ""Spotřeba"" | KONEC JAKO Typ pohybu | Z | Registr akumulace. Zbývající produkty ve skladech AS Zbývají" ;

2. Design MEZI- tento operátor kontroluje, zda je hodnota v určeném rozsahu.

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

Příklad použití:

Request.Text = //získání celé nomenklatury, jejíž kód je v rozsahu od 1 do 100 "SELECT | Nomenclature.Link |FROM | Directory.Nomenclature AS Nomenclature |WHERE | Nomenclature.Code BETWEEN 1 AND 100" ;

3. Konstrukce B a B HIERARCHIE- zkontrolovat, zda je hodnota v přeneseném seznamu (pole, tabulky hodnot atd. lze přenést jako seznam). Operátor IN HIERARCHY umožňuje zobrazit hierarchii (příklad použití Účtové osnovy).

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

Příklad použití:

Request.Text = //vyberte všechny podúčty účtu "SELECT | Samonosný. Propojit AS účet | FROM | Účtová osnova. Samonosný AS Samonosný | WHERE | Samonosný. Odkaz V HODNOTĚ HIERARCHIE (Graf of Účty. Samonosné. Zboží)";

4. Design PODOBNÝ- Tato funkce nám umožňuje porovnat řetězec se vzorem řetězce.

Syntax: JAKO "<ТекстШаблона>"

Možnosti vzoru řádků:

% - sekvence obsahující libovolný počet libovolných znaků.

Jedna libovolná postava.

[...] - jakýkoli jednotlivý znak nebo posloupnost znaků uvedená v hranatých závorkách. Výčet může specifikovat rozsahy, například a-z, což znamená libovolný znak zahrnutý v rozsahu, včetně konců rozsahu.

[^...] – jakýkoli jednotlivý znak nebo posloupnost znaků uvedená v hranatých závorkách kromě těch, které jsou uvedeny za znaménkem negace.

Příklad použití:

Query.Text = //najít celou nomenklaturu, která obsahuje kořen TABUR a začíná //buď malým nebo velkým písmenem t "SELECT | Nomenklatura. Odkaz | FROM | Adresář. Nomenklatura JAKO Nomenklatura | WHERE | Produkty. Název LIKE "" [Tt ]abur%""" ;

5. Provedení POVOLENO- tento operátor umožňuje vybrat z databáze pouze ty záznamy, pro které má volající oprávnění ke čtení. Tato práva se konfigurují na úrovni záznamu (RLS).

Syntax: Za klíčovým slovem SELECT se píše ALLOWED

Příklad použití:

Request.Text = "VYBRAT POVOLENO | Protistrany. Odkaz | Z | Adresář. Protistrany JAKO Protistrany";

6. Design RŮZNÉ- umožňuje vybrat záznamy, ve kterých nejsou žádné duplicitní záznamy.

Syntax: Za klíčovým slovem SELECT se píše VARIOUS

Příklad použití:

Request.Text = //vybere záznamy, ke kterým má čtenář práva "SELECT VARIOUS | Counterparties.Name |FROM | Directory. Counterparties AS Counterparties" ;

Také RŮZNÁ konstrukce může být použita s POVOLENÝM operátorem a dalšími operátory.

Příklad použití:

Request.Text = //vybere různé záznamy, ke kterým má čtenář práva "SELECT ALLOWED VARIOUS | Counterparties.Name |FROM | Directory. Counterparties AS Counterparties";

7. Design PRVNÍ- vybere počet záznamů zadaný v parametru z výsledku dotazu.

Syntaxe: FIRST<число>

Příklad použití:

Request.Text = //vyber první 4 čísla CCD z adresáře "SELECT FIRST 4 | CCD Numbers. Link | FROM | Directory. CCD Numbers AS CCD Numbers";

8. Design PRO ZMĚNU- umožňuje zamknout tabulku, funguje pouze v transakcích (relevantní pouze pro automatické zámky).

Syntax: PRO ZMĚNU<НаименованиеТаблицы>

Příklad použití:

Query.Text = "SELECT | Zbytky zdarma. Nomenklatura, | Zbytky zdarma. Sklad, | Zbytky zdarma. Zbytek na skladě | Z | Registr akumulací. Volný zbytek. Zbytek JAKO Volný zbytek | PRO ZMĚNU | Registr akumulací . Volné zbytky. Zbytky";

9. Design OBJEDNAT BY- organizuje data podle konkrétního pole. Pokud je pole odkaz, pak při nastavování příznaku AUTO OBJEDNÁVKAŘazení proběhne podle reprezentace odkazu; pokud je příznak vypnutý, jsou odkazy seřazeny podle seniority adresy odkazu v paměti.

Syntax: SEŘAZENO PODLE<НаименованиеПоля>AUTO OBJEDNÁVKA

Příklad použití:

Query.Text = "SELECT | Volný zbytek. Nomenklatura JAKO Nomenklatura, | Volný zbytek. Sklad AS Sklad | Volný zbytek. | Nomenklatura | AUTOMATICKÉ OBNOVENÍ OBJEDNÁVKY";

10. Design GROUP BY- používá se k seskupování řetězců dotazů podle konkrétních polí. Číselná pole musí být použita s jakoukoli agregační funkcí.

Syntax: SKUPINA VYTVOŘENÁ<НаименованиеПоля1>, .... , <НаименованиеПоляN>

Příklad použití:

dotaz ;

11. Design HAVING- umožňuje aplikovat agregační funkci na podmínku výběru dat, podobně jako konstrukce WHERE.

Syntax: MÍT<агрегатная функция с условием>

Příklad použití:

Query.Text = //vybere seskupené záznamy, kde je pole InStock větší než 3 "SELECT | ItemsInStocks.Nomenclature AS Nomenclature, | ItemsInWarehouses.Warehouse, | SUM(ItemsInStocks.InStock) AS INSTOCK |FROM | RegisterAccumulationsto.ItemsInS | ItemsInS | GROUP BY | ProductsInWarehouses.Nomenklatura, | ProductsInWarehouses.Warehouse | |DOSTUPNÉ | ČÁSTKA(ProduktySkladem.Na skladě) > 3" ;

12. Stavebnictví INDEX BY- používá se pro indexování pole dotazu. Dokončení dotazu s indexováním trvá déle, ale urychluje vyhledávání v indexovaných polích. Lze použít pouze ve virtuálních tabulkách.

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

Příklad použití:

Query.Text = "SELECT | Ts.NameOS, | Ts.FolderNumber, | Ts.CodeOS, | Ts.Term, | Ts.Type | PLACE DataTs | FROM | &Ts AS Ts | | INDEX BY | Ts.NameOS, | Ts .CodeOS";

13. Design KDE- umožňuje uložit podmínku na všechna výběrová pole. Výsledek bude zahrnovat pouze záznamy splňující podmínku.

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

Příklad použití:

Query.Text = //jsou vybrány všechny záznamy s CompensationRemaining<>0 a //AmountForCalcCompRemaining > 100 "SELECT | CompensationRPORemains.Counterparty, |CompensationRPORemains.Child, | CompensationRPORemains.CompensationRemaining, | CompensationRPORemains.AmountForCalcCompRemains |Místo | Místo DataTcumains ASFROM i |WHERE |KompenzaceRPORemaining.CompensationRemaining<>0 | And CompensationRPORemains.AmountForCalcCompRemaining> 100" ;

14. VÝSLEDKY designu... OBECNÉ- používá se k výpočtu součtů, návrh specifikuje pole, podle kterých budou součty počítány, a agregační funkce aplikované na celková pole. Při použití součtů pro každé pole podle konstrukce TOTAL jsou data seskupena. Existuje volitelný konstrukt GENERAL, jehož použití také poskytuje další seskupování. Níže uvidíte příklad výsledku požadavku.

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

Příklad použití:

Request.Text = "SELECT | Kalkulace. Smlouva protistrany. Typ smlouvy AS Typ smlouvy, | Kalkulace. Smlouva protistrany AS Smlouva, | Kalkulace. Protistrana, | Kalkulace. Výše ​​vzájemného vypořádání zůstatku AS Zůstatek | Z | Registr akumulací. Vzájemné Vypořádání S protistranami. Zůstatky JAKO Výpočty | CELKEM | ČÁSTKA (Zůstatek) | Software | OBECNÉ, | Typ smlouvy";

Obrázek ukazuje seskupení, která se vytvořila během provádění požadavku, horní část odkazuje na sekci OBECNÉ a druhá na pole Typ dohody s protistranou.