Expresní jako v poptávce 1s 8.3. Funkce typ a typová hodnota

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
Nomenklatura 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ého vypořádání Zůstatek
Z
Evidence kumulací. Vzájemná zúčtování se zaměstnanci
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 JAK Příjem zboží
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
Přehled cen Nomenklatury
VÝSLEDEK
MAXIMÁLNĚ (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
Přehled cen Nomenklatury
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 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 sečtený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 . Zapíše se do něj text požadavku, nastaví se parametry a zobrazí se jeho výsledek.

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

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 se vztahují na pole požadavku a některé také na podmínky.

1C Funkce dotazovacího jazyka

Protože jasný popis 1c funkce dotazovacího jazyka 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 s typem "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: DIFFERENCEDATE(<Дата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, můžete také získat prázdný odkaz jakéhokoli 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 .

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í:

Požadavek.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í Součet - 300 //jinak požadavek vrátí jednoduše Součet "SELECT | SELECT | WHEN TCReceips.Amount > 7500 | THEN TCReceipts.Amount - 300 | ELSE TCReceips.Amount | END AS AmountWithDiscount | FROM |

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.Consumable | THEN EXPRESS(Sales.Registrar AS Document.Consumable) | ELSE SELECT | WHEN Sales.Registrar LINK Document.Implementation | THEN EXPRESS(Sales.Registrar AS Document.Realizace) |. END AS Number |.

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, musíme určit 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) AS Zbývající OD |. Číselník.Č.

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"" |. KONEC AS Typ pohybu OD |.

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 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";

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. Na skladě | FROM | Registrovat akumulace. Volný zbytek. Zbytek jako volný | | OBJEDNAT PODLE |. Nomenklatura |.

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í:

Query.Text = "SELECT | ProductsInWarehouses.Nomenclature AS Nomenklatura, | ProductsInWarehouses.Warehouse, | SUM(ZbožíNaSkladech.Na skladě) JAKO NA SKLADĚ |OD | RegistrovatAkumulace.ProduktyNaskladech JAKO ProduktyNaskladech | |SKUPINA,Poklady.Produkty;Sklad.

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É |.

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 |Registrace údajůARPORemainsASFROM | |KDE |KompenzaceRPOZbývající.KompenzaceZbývající<>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 |. CELKEM |. ČÁSTKA (Zůstatek) |

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.

Pojďme se nyní podívat na zbytek.

Funkce pro práci s řetězci v 1C dotazech

Pro práci s řetězcovými daty v 1C dotazech je málo funkcí a operátorů.

Za prvé, řetězce v dotazech mohou být přidány. Chcete-li to provést, použijte operátor „+“:

Žádost. Text = "VYBRAT
""Řádek: " " + Zdroj. Název
;

Za druhé, můžete vybrat část řádku. K tomu použijte funkci PODSTRUKTURA. Funkce je podobná vestavěnému jazyku 1C. Má tři parametry:

  1. Zdrojový řetězec.
  2. Číslo znaku, kterým má vybraný řádek začínat.
  3. Postavy.

Žádost. Text= "VYBRAT
SUBSTRING("
"Řádek:" ", 4, 3) jako výsledek"; // Výsledek: dobře

Funkce ISNULL

NULL je speciální datový typ na platformě 1C:Enterprise. Je to také jediná možná hodnota tohoto typu. NULL se v dotazech může objevit v několika případech: při připojování zdrojů dotazů, pokud nebyla v jedné z tabulek nalezena odpovídající hodnota; při přístupu k detailům neexistujícího objektu; pokud byla v seznamu polí dotazu uvedena hodnota NULL (například při kombinování výsledků výběru z několika tabulek) atd.

Protože NULL není ani null, ani prázdný řetězec, dokonce ani hodnota Nedefinováno,často je užitečné jej nahradit něčím více užitečný typ data. K tomu je funkce určena. ISNULL.

Má dva parametry:

  1. Kontrolovaná hodnota.
  2. Hodnota, kterou se má nahradit první parametr, pokud se ukáže, že je NULL.

Žádost. Text= "VYBRAT
ISNULL(Source.Remainder, 0) AS Remainder"
; // Pokud je výsledkem požadavku pole zbytek = NULL,
// pak bude nahrazena 0 a můžete s ní provádět matematické operace

Funkce VÝKON A ODKAZY NA ÚVOD

Tyto funkce jsou navrženy k získání řetězcových reprezentací různých hodnot. To znamená, že převádějí odkazy, čísla, booleany atd. do prostého textu. Rozdíl mezi nimi je ve funkci VÝKON převede libovolné datové typy na text (řetězec) a funkci ODKAZY NA ÚVOD- pouze propojí a vrátí zbývající hodnoty tak, jak jsou, nepřevedené.

Žádost. Text= "VYBRAT
REPREZENTACE (PRAVDA) JAKO booleovská,
REPREZENTACE (4) JAKO číslo,
REPREZENTACE (Source.Link) JAKO odkaz,
REPRESENTATION(DATETIME(2016,10,07)) AS Date"
;
// Boolean = "Ano", Číslo = "4", Link = "Dokument Pokladní příjem objednávky č.... od..."
// Datum="07.10.2016 0:00:00"

Žádost. Text= "VYBRAT
REPRESENTATIONREFERENCE (PRAVDA) JAKO Boolean,
REFERENCE REPREZENTACE(4) JAKO ČÍSLO
PRESENTINGLINK(Source.Link) JAKO odkaz,
REPRESENTATIONREFERENCE(DATETIME(2016,10,07)) AS Date"
;
// Boolean = TRUE, Number = 4, Link = "Dokument Cash příjem order No... from..."
// Datum=07.10.2016 0:00:00

Funkce TYP A TYPOVÉ HODNOTY

Funkce TYP vrátí datový typ platformy 1C:Enterprise.

Žádost. Text= "VYBRAT
TYPE (číslo)
TYPE (řetězec),
TYP (Dokument. Výdajový hotovostní příkaz)“
;

Funkce TYPOVÉ HODNOTY vrátí typ hodnoty, která mu byla předána.

Žádost. Text= "VYBRAT
VALUES TYPE (5) AS Číslo,
TYP ("
"Čára" ") AS řetězec,
TYPE (Source.Link) AS Reference
Ze zdroje Directory.Source jako zdroj"
;
//Číslo=Číslo, String=Řetězec, Adresář = DirectoryLink.Source

Tyto funkce je vhodné použít například tehdy, když potřebujete zjistit, zda pole přijaté v požadavku je hodnotou nějakého typu. Například kontaktní údaje protistran získáme z informačního registru ContactInformation (jsou tam uloženy kontakty nejen protistran, ale i organizací, jednotlivců atd.):

Žádost. Text= "VYBRAT

Z

KDE
VALUES TYPE(ContactInformation.Object) = TYPE(Directory.Counterparties)“
;

Funkce VÝZNAM

Funkce Význam umožňuje používat konfigurační objekty 1C přímo v požadavku, bez použití .

K předchozímu příkladu přidáme ještě jednu podmínku. Potřebujete pouze telefonní čísla svých protistran.

Žádost. Text= "VYBRAT
Kontaktní informace.Úvod
Z
Registr kontaktních informací JAK Kontaktní informace
KDE
VALUES TYPE(ContactInformation.Object) = TYPE(Directory.Counterparties)
AND ContactInfo.Type = VALUE(Enum.ContactInfoTypes.Phone)"
;

Je třeba poznamenat, že tuto funkci lze použít pouze s předdefinovanými hodnotami, tzn. s hodnotami, které jsou přístupné přímo z konfigurátoru. Tedy funkce VÝZNAM nelze použít s prvky adresáře vytvořenými uživateli, ale může pracovat s výčty, s předdefinovanými prvky adresáře, s hodnotami EmptyLink.

Operátor ODKAZ

Operátor ODKAZ je navržen tak, aby zkontroloval hodnoty vrácené požadavkem, zda patří ke konkrétnímu typu reference. Stejný úkol lze provést pomocí funkcí TYP A TYPOVÉ HODNOTY(které mají širší záběr a byly diskutovány výše).

Například úkol výběru kontaktních informací pro protistrany by mohl být vyřešen tímto způsobem:

Žádost. Text= "VYBRAT
Kontaktní informace.Úvod
Z
Registr kontaktních informací JAK Kontaktní informace
KDE
ContactInformation.Object LINK Directory.Counterparties"
;

Operátor VYJÁDŘIT

Operátor VYJÁDŘIT použito v dotazech 1C ve dvou případech:

  • když potřebujete změnit vlastnosti primitivního typu;
  • když potřebujete změnit pole se složeným datovým typem na pole jediného typu.

Primitivní datové typy zahrnují: číslo, řetězec, datum, boolean. Některé z těchto datových typů mají další vlastnosti. Typ Číslo má délku a přesnost, typ Řádek - délka nebo neomezená.

Operátor VYJÁDŘIT umožňuje změnit nikoli datový typ, ale další charakteristiky. Dokáže například proměnit provázek s neomezenou délkou na provázek s omezenou délkou. To může být užitečné, pokud potřebujete seskupit výsledky dotazu podle takového pole. Nelze seskupovat podle polí s neomezenou délkou, proto to převedeme na řetězec o délce 200 znaků.

Žádost. Text= "VYBRAT
MNOŽSTVÍ (ODLIŠNÝ PŘÍJEZD ZBOŽÍ A SLUŽIEB. Odkaz) JAKO Odkaz
Z
Dokument Příjem zboží a služeb JAK Příjem zboží a služeb
SKUPINA VYTVOŘENÁ
EXPRESS (Příjem zboží a služeb. Komentář JAKO ŘÁDEK (200))"
;

V některých případech nemusí být dotazy na pole se složeným datovým typem platformou 1C zpracovány optimálně. To má za následek delší doby dotazování, takže může být užitečné předem převést složený typ na jeden typ.

Žádost. Text= "VYBRAT
EXPRESS (Pohyb zbožíObrat. Objednávka AS doklad. Objednávka zákazníka). Datum AS Datum objednávky,
Pohyb zbožíObrat. Nomenklatura
Z
RegistrAkumulace.Pohyb zboží.Obrat AS Pohyb zbožíObrat
KDE
Pohyb zbožíObrat. ODKAZ na objednávku Dokument. Objednávka klienta"
;

Operátoři VÝBĚR A JE NULL

Operátor VÝBĚR podobný operátorovi LI ve vestavěném jazyce 1C, ale má poněkud omezenou funkčnost.

Řekněme, že chceme dostávat kontaktní informace z registru informací ContactInformation a zároveň v samostatném poli požadavku uvést, zda patří protistraně nebo fyzické osobě.

Žádost. Text= "VYBRAT
Kontaktní informace.Úvod,
VÝBĚR
WHEN VALUES TYPE(ContactInformation.Object) = TYPE(Directory.Counterparties)
PAK "
Protistrana "
JINÁ VOLBA
WHEN VALUES TYPE(ContactInformation.Object) = TYPE(Directory.Individuals)
PAK "
Individuální"
ELSE "Někdo jiný" "
KONEC
KONEC JAKO VLASTNÍK
Z
Registr informací Kontaktní informace AS"
;

Jak je vidět z příkladu, v designu VÝBĚR za slovem je vždy podmínka KDYŽ; hodnota použitá, pokud je podmínka pravdivá za slovem PAK a hodnota použitá v případě, že podmínka není splněna, za slovem V OPAČNÉM PŘÍPADĚ. Všechny tři designové prvky VÝBĚR jsou povinne. Vynechat prvek V OPAČNÉM PŘÍPADĚ, stejným způsobem jako při použití operátoru LI ve vestavěném jazyce 1C je to nemožné. Také od operátora VÝBĚR neexistuje žádná obdoba designu ELSEIF, ale můžete jeden investovat VÝBĚR v jiném, jak bylo provedeno v našem příkladu.

Operátor JE NULL používané v designu VÝBĚR pro porovnání pole dotazu s typem NULL.

Žádost. Text= "VYBRAT
VÝBĚR
KDYŽ JE HODNOTA NULL, PAK 0
ELSE Význam
KONEC"
;

Navíc provozovatel JE NULL lze použít v podmínkách dotazu, například ve větě KDE.

Mnoho lidí interpretuje funkci EXPRESS v dotazovacím jazyce 1C 8 jako převodník typů, ale pro tyto účely není vůbec určena. Detaily pod střihem...

Mnoho lidí se tedy mylně domnívá, že mohou převést pole pomocí typu Čára v poli s typem Číslo nebo odkaz v řadě. Ve skutečnosti může operátor EXPRESS převádět:

  • nastavení primitivního typu;
  • pole složeného typu na pole jediného typu;

Pojďme se na tyto situace podívat podrobněji...

Převod nastavení primitivního typu

Uvažujme situaci, kdy chceme data seskupit podle řetězce neomezeného typu, například takový řetězec je často komentář v dokumentech. V tomto případě nebudeme moci seskupit podle komentáře, zobrazí se chyba. Proto musíme převést řetězec neomezené délky na řetězec omezené délky a poté jej seskupit. Spočítejme například počet dokumentů se stejnými komentáři:

VYBRAT
EXPRESS(Vstup.Komentář JAKO ŘÁDEK(300)) JAKO Komentář,
MNOŽSTVÍ (Příchozí.Odkaz) JAKO Odkaz
Z
Dokument Vstupní hala AS Vstupní hala

SKUPINA VYTVOŘENÁ
EXPRESS(Vstup.Komentář JAKO ŘÁDEK(300))

Jiná situace je, když požadavek využívá výpočty, na výstupu můžeme získat číslo s velkým počtem desetinných míst (1100.001568794). Aby se toto číslo po dokončení dotazu nezpracovalo, můžete jej okamžitě zkrátit na požadovanou délku, ale je důležité si uvědomit, že se číslo ořezává a nezaokrouhluje. Příklad:

VYBRAT
Prodej. Produkt,
EXPRESNÍ(Prodej.Množství * Prodej.Cena JAKO ČÍSLO(15, 2)) JAKO Částka
Z

Převod složeného typu na jeden typ

Registry registrů mají často složený typ, chcete-li jej převést na jeden typ, použijte konstrukt VYJÁDŘIT Pokud se však ve fázi vzorkování pokusíte převést implementační dokument na doklad o příjmu, požadavek určitě selže s chybou, takže před převodem byste měli zkontrolovat typ odkazu. To je takový nesmysl))) Proč je to všechno nutné, ptáte se. Odpovídám, to je jeden z momentů implicitní optimalizace dotazů na úkor stručnosti psaní. Podívejme se na aplikaci tohoto bodu na příkladu.

Řekněme, že jste se rozhodli získat číslo každého registrátora z prodeje RN. napsat žádost:

VYBERTE RŮZNÉ
Prodejní.registrační.číslo
Z
RegisterAccumulations.Sales JAK Prodej

Ve skutečnosti nemůže být nic jednoduššího. Ale 1C ve fázi provádění převede tento požadavek bez jakýchkoli připojení na požadavek s tolika zbývajícími připojeními, kolik máme možných registrátorů. Tito. pokud je do tohoto registru zapsáno 20 dokumentů, dostaneme SQL dotaz s 20 zbývajícími spojeními. Proč se tohle děje? Protože vestavěný optimalizátor 1C nezpracovává pole přijatá přes tečku příliš dobře, jedná se v tomto případě o atribut Number. Toto jsou koláče, pokud chceme často dostávat číslo dokladu, pak je nejrozumnější zahrnout ho do údajů registru nebo použít operátor EXPRESS, ale na úkor stručnosti:

VYBERTE RŮZNÉ
Prodejní.registrační.číslo,
VÝBĚR
PŘI Prodeje. ODKAZ na registrátora Dokument. Spotřební materiál
PAK EXPRESNÍ (Prodej. Registrátor JAKO Dokument. Spotřební materiál)
JINÁ VOLBA
KDYŽ Prodej. Registrátor LINK Dokument. Implementace
PAK EXPRESNÍ (Prodej. Registrátor JAKO Dokument. Implementace)
KONEC
...
KONEC JAKO Číslo
Z
RegisterAccumulations.Sales JAK Prodej

Nyní bude levé spojení zahrnovat jednu konkrétní tabulku.

Obecně byste měli pečlivě odkazovat na data pomocí tečky, protože 1C v tomto případě používá levé spojení v dotazu SQL, což může výrazně ovlivnit výkon. Toto je jeden z bodů optimalizace.

Takže, začněme. Dotaz 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 je třeba 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.

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 například použít typ akumulačního pohybu, typ účtu).

WHERE Město = HODNOTA(Adresář.Města.Moskva)

KDE Město = HODNOTA(Directory.Cities.EmptyLink)

WHEREProductType = VALUE(Enumeration.ProductTypes.Service)

WHEREMovementType = VALUE(MovementTypeAccumulation.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

Zbývající zbožíRemaining.QuantityRemaining

Directory.Nomenclature AS Nomenklatura

LEVÉ PŘIPOJENÍ Registrovat Akumulace Zbývající zboží 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.

VYBRAT

ZASTOUPENÍ (Dokument. Protistrana) JAKO příjemce,

PREZENTACE (Dokument.Základ)

Dokument.Faktura AS Dokument

5. Použijte v žádosti EXPRESS (typ pole AS) umožňuje odstranit nepotřebné tabulky ze spojení s polem komplexní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É
EXPRESNÍ (Zbývající zboží. Registrátor JAKO doklad. Příjem zboží). Číslo JAKO ČÍSLO PŘÍJMU,

EXPRESNÍ (Zbývající zboží. Registrátor JAKO doklad. Příjem zboží).Datum JAKO DATUM PŘÍJMU

Z
Registr akumulace 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, klíčové slovo musí být použito v požadavku na takové objekty POVOLENO aby byl požadavek proveden bez chyb (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.

KOMBINOVAT VŠECHNO

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í PRAVDĚPODOBNĚ 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 PRAVDĚPODOBNĚ.

Příklad (sice vymyšlený, pro úplné připojení):

VYBRAT

K. Protistrana

Výčet 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.

Vybrat

Částka(Invoice.Amount) As Amount

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)

VYBRAT


Příjem zboží a služeb Množství AS Množství,
Příjem zboží a služebGoods.Link.Protistrana
Z

KDE
Příjem zboží a služebGoods.Link = &Odkaz

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í.

VYBRAT

Příjem zboží a služeb zboží, nomenklatura.

Kód příjmu zboží a služeb.

SUM (Příjem zboží a služeb Zboží. Množství) AS Množství,

Dokument Příjem zboží a služeb JAK Příjem zboží a služeb Zboží

SKUPINA VYTVOŘENÁ

Příjem zboží a služeb zboží, nomenklatura.

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í.

VYBRAT

Příjem zboží a služeb (SUM (množství), nomenklatura),

Příjem zboží a služeb

Dokument Příjem zboží a služeb JAK Příjem zboží a služeb

SKUPINA VYTVOŘENÁ

Příjem zboží a služeb (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.K) AS 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 připojení tabulky a parametrech virtuální tabulky. 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;

OrderingType = ?(NĚJAKÉ PROMĚNNÉ,"","DESC");

Query.Text = "Vybrat... Uspořádat DLE pole1 " + Typ objednávky + "...";

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.

Vybrat

DocTch.Nomenklatura,

&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("&Parameter", 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í". Tolik užitečné informace dotazovací jazyk 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ší!

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.

...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.

...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.

V poddotazu máte přístup k vnějším polím dotazu v podmínce.

// Vyberte názvy produktů, které byly přítomny

// ve fakturách

VYBRAT

Produkty.Název

Adresář.Nomenklatura JAK Produkty

(VYBRAT

Složení faktury. Nomenklatura

Document.Invoice.Composition AS InvoiceComposition

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. Kromě toho je na úrovni sestavy ACS 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

Consumables.Line Number,

ConsumableProducts.Product,

Spotřební položky. Množství,

Cena spotřebního zboží,

ConsumableItems.Amount

Dokument.Spotřební materiál AS D

Možné řešení:

A) Nahradit za SEŘAZENO PODLE na

OBJEDNEJTE DO D.DATA POPIS.

B) Vnořený dotaz můžete přesunout do dočasné tabulky:

Dokument.Spotřební materiál AS D

A D.Protistrana = &Protistrana

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

VYBRAT

Consumables.Line Number,

ConsumableItems.Items,

Spotřební položky. Množství,

Cena spotřebního zboží,

ConsumableItems.Amount

Document.Consumables.Goods AS ConsumablesGoods

C) Můžete odkazovat na hlavní tabulku dokumentu a teprve potom na tabulkovou část

VYBERTE TOP 1

Číslo řádku,

Produkt,

Množství,

Cena,

Součet

Document.Consumables AS Consumables

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ůžete přistupovat také 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.

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:

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.



Náhodné články

Nahoru