Zdravím vás, vážení čtenáři blogové stránky! Dnes se pomocí příkladů podíváme na to, jak v praxi můžete použít funkci dotazů 1C PODKLAD... Použití této funkce přijde vhod nejen v jednoduchých dotazech, které zde budeme zvažovat, ale také v dotazech, stejně jako v dotazech.

Úkolem bylo to, co bylo potřeba od rekvizit dokumentu Dodržování vyberte dva řádky a seřaďte je podle nich. Odpovídající účtu tohoto typu: 779000/004599. Jak rozdělíte tuto hodnotu na dvě?

Funkce SUBSTRING má tři parametry. První je původní řetězec, ze kterého chcete vybrat část znaků - podřetězec. Je zřejmé, že typ hodnoty tohoto parametru je Čára... Pozor, toto je velmi důležitá poznámka, pokud použijete neřetězcový typ prvního parametru, funkce nebude fungovat, požadavek vygeneruje chybu! Druhý parametr určuje pozici znaku ve zdrojovém řetězci, od kterého začíná výběr části řetězce, a třetí je délka vybraného podřetězce. Typ hodnoty pro druhý a třetí parametr je číslo.

Pojďme procvičovat:

Vyberte typický. DVR AS Název, Podřetězec(Typický.Záznamník. Odpovídající jméno, 1, 6) AS nákladový účet, Podřetězec(Typical.Recorder.CorrespondingName, 8, 11) AS Department, SUM (SELECT WHEN MONTH (Typical.Period) \u003d 3 THEN EXPRESS (Typical.Sum AS NUMBER (15, 2)) ELSE 0 END) AS March FROM Accounting Register. Typické AS Typické KDE Typical.Account \u003d & AccountCt AND Typical.Period MEZI & Start and Period & PeriodCon Group By Podřetězec(Typické. Registrátor. Odpovídající jméno, 1, 6), Podřetězec(Typical.Recorder.Corresponding Name, 8, 11), Typical.Registrator ORDER BY Department, Cost Account

Výsledek tohoto dotazu je následující:

název Cena faktury Oddělení březen
Odchozí platební příkaz 00000000319 ze dne 01.03.2010 14:42:54 779000 004599 9 000
Odchozí platební příkaz 00000000320 ze dne 02.03.2010 12:07:34 779000 004599 4 721,6
Odchozí platební příkaz 00000000203 ze dne 01.03.2010 12:28:52 786500 004599 987 614,51
Příkaz k odeslání platby 00000000227 ze dne 03.03.2010 14:16:00 786500 004599 400 000
Odchozí platební příkaz 00000000238 ze dne 05.03.2010 12:37:57 732000 004600 5 400
Odchozí platební příkaz 00000000197 ze dne 01.03.2010 11:53:11 732500 004600 12 100
Odchozí platební příkaz 00000000198 ze dne 01.03.2010 11:55:39 732500 004600 12 100
Odchozí platební příkaz 00000000279 ze dne 26.03.2010 0:00:00 734100 004600 19 609
Odchozí platební příkaz 00000000287 ze dne 29. března 2010 14:15:36 734100 004600 55 300
Odchozí platební příkaz 00000000291 ze dne 30.03.2010 11:01:10 734100 004600 18 090
Odchozí platební příkaz 00000000268 ze dne 18.03.2010 10:34:25 738000 004600 10 050
Odchozí platební příkaz 00000000276 ze dne 18.03.2010 12:20:20 750400 004600 13 060,98
Odchozí platební příkaz 00000000281 ze dne 29. března 2010 12:33:46 750400 004600 555 645,41
Odeslaný platební příkaz 00000000234 ze dne 3. 4. 2010 12:21:55 754450 004600 24 120
Odchozí platební příkaz 00000000290 ze dne 30.03.2010 10:44:39 754450 004600 100 000
Odchozí platební příkaz 00000000240 ze dne 09.03.2010 10:53:24 786300 004600 20 800
Odchozí platební příkaz 00000000269 ze dne 18.03.2010 10:58:04 786300 004600 61 012
Odchozí platební příkaz 00000000289 ze dne 30.03.2010 9:27:14 786300 004600 6 000
Odchozí platební příkaz 00000000223 ze dne 03.03.2010 12:13:38 786500 004600 36 000
Odchozí platební příkaz 00000000228 ze dne 04.03.2010 9:52:35 786500 004600 378 138,85
Odchozí platební příkaz 00000000229 ze dne 04.03.2010 9:57:50 786503 004600 126 117,75
Odchozí platební příkaz 00000000200 ze dne 01.03.2010 11:58:06 754422 004762 63 000
Odchozí platební příkaz 00000000286 ze dne 29. března 2010 14:10:18 764422 004762 10 000
Odchozí platební příkaz 00000000267 ze dne 17.03.2010 0:00:00 764423 004762 464 370
Příkaz k odeslání platby 00000000261 ze dne 15. 3. 2010 11:16:28 764522 004762 81 357

Takže pokud vezmeme řádek 779000/004599, pak SUBSTRING (Typical.Registrator.Corcerning to the name, 1, 6) zvýrazní řádek "779000". SUBSTRING (Typical.Regist.Related.Name, 8, 11) bude mít výstup "004599".

Ve stejném požadavku se používá výraz:

SUM (VYBERTE, KDYŽ MĚSÍC (Typicky. Období) \u003d 3 VYJÁDŘTE POTOM (Typicky. Součet JAKO ČÍSLO (15, 2)) JINÉ 0 KONEC) JAKO březen

Ve stejném úkolu bylo nutné přidat nové sloupce s názvy měsíců a částkami za ně. Toto je výraz, který tento problém řeší. Pokud potřebujete použít jiné měsíce, například leden, nahraďte výraz:

SUM (VYBERTE, KDYŽ MĚSÍC (Typické. Období) \u003d 1 POTOM VÝSLOVNĚ (Typicky. Součet JAKO ČÍSLO (15, 2)) JINÉ 0 KONEC) AS leden

Uvedu příklad textu požadavku, ve kterém jsou pole měsíců (tučně) vytvářena pomocí cyklu začínajícího od března do února.

Text požadavku \u003d "| SELECT | Typical.Registrator AS Name, | SUBSTRATE (Typical.Registrator.Acc to Name, 1, 6) AS Cost Account, | SUBSTRING (Typical.Registrator.According to Name, 8, 11) AS Department, "; For Mid \u003d 1 by 12 Cycle If Mid< 11 Тогда Мес = Сч + 2; Иначе Мес = Сч - 10; КонецЕсли; ТекстЗапроса = ТекстЗапроса + " |СУММА(ВЫБОР | КОГДА МЕСЯЦ(Типовой.Период) = " + Мес + " | ТОГДА ВЫРАЗИТЬ(Типовой.Сумма КАК ЧИСЛО(15, 2)) | ИНАЧЕ 0 |КОНЕЦ) КАК Поле" + Мес + ?(Сч=12,"",","); КонецЦикла; Text požadavku \u003d Text požadavku + "| FROM | Účetní registr." + AccountRegisterName + ".MotionsSubconto (| & StartPeriod, | & ConPeriod,"; StringDefinitionsByData \u003d "(Activity \u003d TRUE) AND (Account IN HIERARCHY (& AnalysisAcount))" "; Text dotazu \u003d QueryText" QueryQuery QueryText \u003d QueryText + "| WHERE | Typical.Account \u003d & Analysis Account | AND Typical.Period BETWEEN & StartPeriod AND & EndPeriod | LOAD BY | SUBSTRING (Typical.Regist.Related.Name, 1, 6), | Substring. Name, 8, 11), | Typical.Registrator | ORDER BY | Department, | Cost Account ";

Takže pomocí výše uvedeného kódu (tučně) se zobrazí části dotazu s měsíci. Přidávají se tedy nové sloupce s názvy měsíců a částkami za ně.

Typ „String“ se nachází ve všech programovacích jazycích. Je to primitivní a v 1C existuje mnoho funkcí pro práci s ním. V tomto článku se na příkladech blíže podíváme na různé způsoby práce s typy řetězců v 1C 8.3 a 8.2.

Čára

Aby bylo možné převést proměnnou jakéhokoli typu na řetězec, existuje funkce se stejným názvem „String ()“. Vstupním parametrem bude samotná proměnná, jejíž řetězcové vyjádření je třeba získat.

String (False) // vrátí „Ne“
Řetězec (12345) // vrací „12 345“
String (CurrentDate ()) // 07/21/2017 11:55:36 ″

Je možné převést nejen primitivní typy na řetězec, ale i další, například prvky adresářů, dokumentů.

SocrLP, SocrL, SocrP

Jako vstupní parametry těchto funkcí se používá proměnná typu řetězce. Funkce odstraňují nevýznamné znaky (mezery, návraty vozíku atd.): Z levé a pravé strany, pouze z levé strany a pouze z pravé strany.

Zkratka („Mezery na obou stranách budou odstraněny“) // „Mezery na obou stranách budou odstraněny“
Zkráceno („Mezery na obou stranách budou odstraněny“) // „Mezery vlevo budou odstraněny“
Zkratka („Mezery na obou stranách budou odstraněny“) // „Mezery vpravo budou odstraněny“

Lev, správně, ve středu

Tyto funkce vám umožňují oříznout část řetězce. Funkce "Lion ()" vrátí část řetězce z levé strany zadané délky. Funkce „Right ()“ je stejná, ale oříznutí se provádí vpravo. Funkce "Med ()" umožňuje určit počet znaků, ze kterých bude řetězec vybrán, a jeho délku.

Lion ("Řetězcová proměnná", 4) // vrátí "Stro"
Right ("String variable", 7) // vrací "variable"
St ("Řetězcová proměnná", 2, 5) // vrátí "troco"

Délka Str

Funkce určuje počet znaků, které jsou obsaženy v řetězcové proměnné.

StrLength ("Word") // výsledek provádění bude číslo 5

Najít

Funkce umožňuje vyhledávat část řetězce v libovolné proměnné řetězce. Návratová hodnota bude číslo, které ukazuje pozici začátku nalezeného řetězce. Pokud není nalezena shoda, vrátí se nula.

Upozorňujeme, že při vyhledávání se rozlišují velká a malá písmena. Pokud původní řetězec obsahuje více než jeden výskyt hledaného podřetězce, funkce vrátí začátek prvního výskytu.

Najít ("jeden, dva, jeden, dva, tři", "dva") // funkce vrátí číslo 6

Prázdný řádek

Pomocí této funkce můžete určit, zda je řetězec prázdný. Nevýznamné znaky, jako je mezera, návrat vozíku a další, jsou ignorovány.

EmptyString ("Pupkin Vasily Ivanovich") // funkce vrátí hodnotu False
EmptyString ("") // funkce vrátí True

VReg, NReg, Treg

Tyto funkce jsou velmi užitečné pro porovnávání a převod řetězcových proměnných. Breg () vrátí původní řetězec velkými písmeny, HPreg () malými písmeny a TPreg () jej naformátuje tak, že první znak každého jednotlivého slova bude velkými písmeny a všechny následující budou malá.

Vreg ("GENERAL DIRECTOR") // návratová hodnota - "GENERAL DIRECTOR"
NReg ("GENERAL DIRECTOR") // návratová hodnota - "generální ředitel"
TREG ("GENERAL DIRECTOR") // návratová hodnota - "generální ředitel"

PageReplace

Tato funkce je obdobou náhrady v textových editorech. Umožňuje vám nahradit jeden znak nebo sadu znaků za jiný v řetězcových proměnných.

StrReplace ("červená, bílá, žlutá", ",", ";") // vrátí "červená; bílý; žlutá"

StrNumberStrings

Tato funkce umožňuje určit počet řádků oddělených znaky konce řádku v textové proměnné.

Smyčka v níže uvedeném příkladu projde třemi kruhy, protože funkce RowNumber vrátí 3:

Pro ind \u003d 1 podle StrNumber of Lines ("String1" + Symbols.PS + "String2" + Symbols.PS + "String3") Loop
<тело цикла>
Konec cyklu;

StrGetString

Tato funkce pracuje s víceřádkovým textem stejným způsobem jako předchozí. Umožňuje vám získat konkrétní řetězec z textové proměnné.

StrGetString ("String1" + Symbols.PS + "String2" + Symbols.PS + "String3", 2) // vrátí „String2“

Str Počet událostí

Funkce spočítá počet výskytů znaku nebo podřetězce ve vyhledávacím řetězci.

StrNumber of Attachments ("a; b; c; d;", \u200b\u200b";") // funkce vrátí číslo 4

Symbol a kód symbolu

Tyto funkce vám umožňují získat znak podle jeho kódu Unicode a také určit tento kód podle samotného znaku.

SymbolCode ("A") // funkce vrátí číslo 1040
SymbolCode (1040) // funkce vrátí "A"

Časté úkoly při práci s řetězci

Zřetězení řetězců

Pro zřetězení více řetězců (k provedení zřetězení) stačí použít operátor přidání.

„Řádek 1“ + „Řádek 2“ // výsledek přidání dvou řádků bude „Řádek 1 Řádek 2“

Převod typu

Aby bylo možné převést typ na řetězec, například odkaz na položku slovníku, číslo atd., Stačí použít funkci "String ()". Funkce jako „Abbreviation ()“ také převedou proměnné na řetězec, ale okamžitě se zkrácením nevýznamných znaků.

Řetězec (1000) // vrátí hodnotu „1000“

Pamatujte, že při převodu čísla na řetězec program automaticky přidal mezeru oddělující tisíc. Abyste tomu předešli, můžete použít následující konstrukce:

StrReplace (String (1000), Characters.NPP, "") // vrátí "1000"

Řetězec (formát (1000, "ChG \u003d")) // vrátí hodnotu "1000"

Citáty v řetězci

Docela často se budete muset vypořádat s nutností specifikovat uvozovky v řetězcové proměnné. Může to být buď text požadavku napsaný v konfigurátoru, nebo jen proměnná. Chcete-li tento problém vyřešit, stačí nastavit dvě uvozovky.

Název \u003d Řetězec („Horns and Hooves LLC“ - to jsme my! ") // vrátí„ Horns and Hoofs LLC - to jsme my! "

Víceřádkový, konec řádku

Aby bylo možné vytvořit víceřádkový text, stačí k němu přidat znaky zalomení řádku (Symbols.PS).

MultilineText \u003d "První řádek" + Symbols.PS + "Druhý řádek"

Jak odstranit mezery

Chcete-li odstranit mezery vpravo nebo vlevo, můžete použít funkci „Zkratka ()“ (stejně jako „Zkratka ()“ a „Zkratka ()“):

StringNoSpaces \u003d AbbreviatedLP ("Mnoho písmen") // funkce vrátí hodnotu "Mnoho písmen"

Pokud po převodu čísla na řetězec potřebujete odstranit neporušené mezery, použijte následující konstrukci:

StringNoSpaces \u003d StrReplace (String (99999), Characters.NPP, "") // vrátí "99999"

Programátoři také často používají následující konstrukci, která umožňuje odstranit nebo nahradit všechny mezery textové proměnné jiným znakem:

StringNoSpaces \u003d StrReplace ("welcome", "", "") // vrátí "ahoj"

Porovnávání řetězců navzájem

Výrazy lze srovnávat s obvyklým znaménkem rovnosti. Ve srovnání se rozlišují velká a malá písmena.

"Hello" \u003d "ahoj" // vrátí hodnotu False
"Hello" \u003d "Hello" // vrátí hodnotu True
"Hello" \u003d "Sbohem" // vrátí hodnotu False

V dotazovacím jazyce 1C: Enterprise funkce PODKLAD () v formát SUBSTRING (<Исходная строка>, <Начало>, <Длина>) lze použít na data typu řetězce a umožňuje zvýraznit fragment<Исходной строки>počínaje číslem znaku<Начало> (znaky v řetězci jsou očíslovány od 1) a délka<Длина> postavy. Výsledek vyhodnocení funkce SUBSTRING () má typ řetězce proměnné délky a délka bude považována za neomezenou, pokud<Исходная строка> má neomezenou délku a parametr<Длина> není konstantní nebo přesahuje 1024.

Vyhodnocení funkce SUBSTRING () na serveru SQL:
V provozním režimu klient-server je funkce SUBSTRING () implementována pomocí funkce SUBSTRING () odpovídajícího příkazu SQL předaného databázovému serveru SQL Server, který podle komplexních pravidel vypočítá typ výsledku funkce SUBSTRING () v závislosti na typu a hodnotách jeho parametrů, stejně jako stejné v závislosti na kontextu, ve kterém se používá.

Ve většině případů tato pravidla neovlivní provedení dotazu 1C: Enterprise, ale existují případy, kdy je pro provedení dotazu nezbytná maximální délka výsledného řetězce vypočítaná serverem SQL. Je důležité mít na paměti, že v některých kontextech, kde se používá funkce SUBSTRING (), může být maximální délka jeho výsledku maximální délka ohraničeného řetězce, který je na serveru SQL Server 4000 znaků. To může vést k neočekávanému neobvyklému ukončení požadavku.

Například požadavek:
Kód 1C v 8.x VYBRAT
VÝBĚR

JINÉ NULL
KONEC LIKE Zobrazit,
VÝBĚR
KDY View \u003d & LegalAddressPhysPersons
POTOM SUBSTRING (Pohled, 0, 200)
JINÉ NULL
KONEC JAKO POHLED
Z

SEŘAZENO PODLE
Reprezentace,
Představení1
abnormálně končí zprávou Chyba DBMS:
Poskytovatel Microsoft OLE DB pro SQL Server: Upozornění: Procesor dotazu nemohl z optimalizátoru vytvořit plán dotazu, protože celková délka všech sloupců v klauzuli GROUP BY nebo ORDER BY přesahuje 8000 bajtů.
HRESULT \u003d 80040E14, SQLSTATE \u003d 42000, nativní \u003d 8618

Důvodem je, že Microsoft SQL Server vypočítal maximální délku řetězce, která je výsledkem výrazu:
Kód 1C v 8.x VOLBA
KDY View \u003d & LegalAddressPhysPersons
POTOM SUBSTRING (Pohled, 0, 200)
JINÉ NULL
KONEC LIKE Zobrazit,
se rovná 4000 znakům. Délka záznamu sestávajícího ze dvou takových polí proto přesahuje 8000 bajtů povolených pro operaci řazení.

Z důvodu popsané funkce provádění funkce SUBSTRING () na serveru SQL Server se nedoporučuje používat funkci SUBSTRING () k převodu řetězců neomezené délky na řetězce omezené délky. Místo toho je lepší použít operaci obsazení EXPRESS (). Výše uvedený příklad lze přepsat zejména na:
Kód 1C v 8.x VYBRAT
VÝBĚR
KDY View \u003d & LegalAddressPhysPersons
JINÉ NULL
KONEC LIKE Zobrazit,
VÝBĚR
KDY View \u003d & LegalAddressPhysPersons
POTOM EXPRES (Představuje AS String (200))
JINÉ NULL
KONEC JAKO POHLED
Z
Registr informací. Kontaktní informace AS Kontaktní informace
SEŘAZENO PODLE
Reprezentace,
Představení1

Řetězec je jedním z primitivních datových typů v systémech 1C: Enterprise 8. Proměnné s typem čára obsahovat text.

Hodnoty typových proměnných čárajsou uvedeny v uvozovkách. Lze přidat několik proměnných tohoto typu.

Per1 \u003d "Slovo 1";
Per2 \u003d "Slovo 2";
Per3 \u003d Per1 + "" + Per2;

Nakonec Per3 bude znamenat „ Slovo 1 Slovo 2 “.

Systémy 1C: Enterprise 8 navíc poskytují funkce pro práci s řetězci. Zvažme ty hlavní:

Zavést řetězec (<Строка>, <Подсказка>, <Длина>, <Многострочность>) — funkce je navržena tak, aby zobrazovala dialogové okno, ve kterém může uživatel určit hodnotu proměnné typu Čára... Parametr <Строка> je povinné a obsahuje název proměnné, do které bude zapsán zadaný řetězec. Parametr <Подсказка> volitelný je název dialogového okna. Parametr <Длина> volitelný, označuje maximální délku vstupního řetězce. Výchozí hodnota je nula, což znamená neomezenou délku. Parametr <Многострочность> volitelný. Určuje režim zadávání víceřádkového textu: True - zadání víceřádkového textu s oddělovači řádků; False - jednoduché zadání řetězce.

Řetězec lze zadat a zadat kód znaků Unicode:

Symbol(<КодСимвола>) — kód se zadává jako číslo.

Písmeno \u003d Symbol (1103); // já

K dispozici je také inverzní funkce, která vám umožní zjistit kód znaku.

SymbolCode (<Строка>, <НомерСимвола>) — vrací číslo Unicode zadaného znaku jako číslo.

Funkce převodu případů:

BReg (<Строка>) - převede všechny znaky v řetězci na velká písmena.

HPreg (<Строка>) - převede všechny znaky v řetězci na malá písmena.

Treg (<Строка>) - převede všechny znaky v řetězci na velká písmena. To znamená, že první písmena všech slov jsou převedena na velká písmena a zbývající písmena jsou převedena na malá písmena.

Funkce pro vyhledávání a nahrazování znaků v řetězci:

Najít(<Строка>, <ПодстрокаПоиска>) - najde číslo znaku výskytu hledaného podřetězce. Například:

Najít ("Řetězec", "Dobře"); // 4

Vyhledávání (<Строка>, <ПодстрокаПоиска>, <НаправлениеПоиска>, <НачальнаяПозиция>, <НомерВхождения>) - najde číslo znaku výskytu vyhledávacího podřetězce, číslo výskytu je uvedeno v příslušném parametru. V tomto případě hledání začíná znakem, jehož číslo je uvedeno v parametru Počáteční pozice.Hledání je možné od začátku nebo od konce řetězce. Například:

Number4 Occurrences \u003d StrFind ( „Schopnost obrany“, „o“, směr vyhledávání. Od začátku, 1, 4); // 7

Nahradit (<Строка>, <ПодстрокаПоиска>, <ПодстрокаЗамены>) - najde všechny výskyty vyhledávacího podřetězce v původním řetězci a nahradí jej náhradním podřetězcem.

StrReplace ("String", "Oka", ""); // Stránka

Prázdný řádek (<Строка>) - zkontroluje řetězec, zda neobsahuje významné znaky. Pokud neexistují žádné významné znaky nebo vůbec žádné znaky, vrátí se hodnota Skutečný... V opačném případě - Ležící.

Str Počet událostí (<Строка>, <ПодстрокаПоиска>) - vypočítá počet výskytů vyhledávacího podřetězce v původním řetězci.

Str Počet událostí ( „Studuj, studuj a studuj znovu“, "studie", ""); // 3

PageTemplate (<Строка>, <ЗначениеПодстановки1>…<ЗначениеПодстановкиN> — nahradí parametry do řetězce číslem. Řádek musí obsahovat substituční značky ve tvaru: "% 1 ..% N". Značky jsou očíslovány od 1. Pokud je hodnota parametru Nedefinováno, je nahrazen prázdný řetězec.

PageTemplate ( „Parametr 1 \u003d% 1, parametr 2 \u003d% 2“, "1" , "2" ) ; // Parametr 1 \u003d 1, Parametr 2 \u003d 2

Funkce převodu řetězce:

Lev(<Строка>, <ЧислоСимволов>) - nejprve vrátí první znaky řetězce.

Že jo (<Строка>, <ЧислоСимволов>) - vrátí poslední znaky řetězce.

Středa (<Строка>, <НачальныйНомер>, <ЧислоСимволов>) - vrací řetězec délky<ЧислоСимволов>počínaje postavou<НачальныйНомер>.

AbbrL (<Строка>) zkrátí nevýznamné znaky nalevo od prvního významného znaku v řetězci.

Zkratka (<Строка>) - vyřízne nevýznamné znaky napravo od posledního významného znaku v řetězci.

SocrLP (<Строка>) - ořízne bezvýznamné znaky nalevo od prvního významného znaku v řádku a napravo od posledního významného znaku v řádku.

StrGetString (<Строка>, <НомерСтроки>) - získá víceřádkový řetězec podle čísla.

Další funkce:

StrLength (<Строка>) - vrací počet znaků v řetězci.

RowNumber (<Строка>) - vrací počet řádků ve víceřádkovém řetězci. Řádek je považován za nový, pokud je od předchozího řádku oddělen znakem posuvu řádku.

Porovnat (<Строка1>, <Строка2> ) - porovnává dva řetězce, nerozlišují se malá a velká písmena. Funkce funguje stejně jako objekt Srovnání hodnot... Vrací:

  • 1 - pokud je první řádek větší než druhý
  • -1 - pokud je druhý řádek větší než první
  • 0 - pokud jsou řetězce stejné

StrCompare ("První řádek", "Druhý řádek"); // jeden

Dotazovací jazyk v 1C 8 je zjednodušeným analogem známého „strukturovaného programovacího jazyka“ (jak se tomu často říká, SQL). Ale v 1C se používá pouze ke čtení dat, datový model objektu se používá ke změně dat.

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

Příklad požadavku:

VYBRAT
Banky. Jméno,
Banks.CorrAccount
Z
Adresář Banky AS Banky

Tato žádost 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 nejúčinnější způsob, jak získat informace. Jak vidíte z výše uvedeného příkladu, v dotazovacím jazyce se musíte odvolat s názvy metadat (jedná se o seznam systémových objektů, které tvoří konfiguraci, tj. Adresáře, dokumenty, registry atd.).

Popis konstruktů dotazovacího jazyka

Struktura dotazů

Chcete-li získat data, stačí použít konstrukce „SELECT“ (výběr) a „FROM“ (od). Nejjednodušší požadavek vypadá takto:

VYBERTE * Z Adresářů. Názvosloví

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

Zvažte složitější a obecnější příklad:

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

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

ZATÍŽIT
<ИмяПоля1>

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

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

V tomto dotazu vybereme data polí „FieldName1“ a „FieldName1“ z tabulek „TableName1“ a „TableName“, přiřadíme synonyma polím pomocí operátoru „AS“, spojíme je podle určité „TableCondition“ stav.

Z přijatých dat vybereme pouze data, která splňují podmínku z „WHERE“ „DataFeed Condition“. Dále seskupíme dotaz podle pole „FieldName1“ a sečteme „FieldName2“. Vytvoříme součty pro pole „FieldNameField1“ a závěrečné pole „FieldName2“

Posledním krokem je seřadit požadavek pomocí konstrukce OBJEDNAT PODLE.

Obecné stavby

Uvažujme o obecných konstrukcích 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í položek je určeno objednávkou v požadavku.

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

Žádost obdrží prvních 100 záznamů v adresáři „Banky“ seřazených podle abecedy.

POVOLENO

Tento design 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 nikoli v tabulce jako celku.

Pokud se uživatel pokusí přečíst záznamy, které jsou pro něj nepřístupné, zobrazí se mu chybová zpráva. Abyste tomu zabránili, měli byste použít konstrukci „POVOLENO“, to znamená, že požadavek bude číst pouze záznamy, které jsou pro ni povoleny.

VYBERTE POVOLENÉ
Ukládání dalších informací. Odkaz
Z
Odkaz Uložení dalších informací

ROZLIČNÝ

Použití "DIFFERENT" vám umožní vyloučit duplicitní řetězce ze zadávání výsledku dotazu 1C. Duplikace znamená, že se všechna pole požadavku shodují.

VYBERTE PRVNÍ 100
Banky. Jméno,
Banky. Kód AS BIC
Z
Adresář Banky AS Banky

Prázdná tabulka

Tato konstrukce se zřídka používá ke kombinování dotazů. Při připojování může být nutné určit prázdnou vnořenou tabulku v jedné z tabulek. K tomu je vhodný operátor „EmptyTable“.

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

VYBERTE Referenční číslo, PRÁZDNOU TABULKU. (Nom, Tov, Množství) AS Složení
Z dokumentu. Výdaje
Zkombinujte vše
Vyberte referenční číslo, složení. (Číslo řádku, položka, množství)
FROM Document.Invoice Document.Invoice.Content. *

JE NULL

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

VYBRAT
Nomenklatura Ref. Ref.
K dispozici je NULL (zůstatek položky, zůstatek množství, 0) jako množstevní zůstatek
Z


Můžete jej použít jiným způsobem. Například pokud pro každý řádek není známo, ve které tabulce hodnota existuje:

JE NULL (InvoiceReceived.Date, InvoiceEdited.Date)

AS 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ým rozdílem je, že REPRESENTATION převádí jakékoli hodnoty na typ řetězce a REFERENCE REPRESENTATION převádí pouze referenční hodnoty. REFERENČNÍ ZASTOUPENÍ se doporučuje použít v dotazech na systém složení dat pro optimalizaci, pokud ovšem není ve filtrech plánováno použití pole referenčních dat.

VYBRAT
Pohled (odkaz), // řádek, například „Předběžná zpráva č. 123 ze dne 10. 10. 2015
Zastoupení (značka pro smazání) AS Značka pro smazání Text, // řetězec, „Ano“ nebo „Ne“
Pohled na odkazování (značka odstranění) AS Značka odstranění Boolean // Boolean, True nebo False
Z
Dokument.Předběžná zpráva

Vyjádřit

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

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

EXPRESS (tabulka Cost.Subconto1 jako reference.Cost články) .ActivityTypePro účtování daňových nákladů

U primitivních typů se tato funkce často používá k omezení počtu znaků v polích s neomezenou délkou (tato pole nelze porovnávat). Aby se zabránilo chybě “ Neplatné parametry v operaci porovnání. Nelze porovnávat pole
neomezená délka a pole nekompatibilních typů
", Je nutné vyjádřit tato pole takto:

EXPRESS (komentář jako řádek (150))

ROZDÍL

Získejte zdarma 267 1C videonávodů:

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

VYBRAT Z
Spr
LEFT JOIN Accumulation Register.ProductsIn Warehouses.Left AS Balance
Softwarová nomenklaturaRef.Ref \u003d ImplementedCommentsComponentsRemains.Nomenclature
KDE JE BALANCE PRODUKTU. Zůstatek množství JE NULL

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

Předdefinované hodnoty

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

Příklad použití:

WHERE Nomenclature.NomenclatureType \u003d Hodnota (Directory.NomenclatureTypes.Product)

WHERE Contractors.Contact Information Type \u003d Value (Enumeration.Contact Information.Type.Phone)

WHERE Account Balances.Account \u003d hodnota (plán účtů. Self-support.ProfitsLosses)

Připojení

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

VLEVO a PRAVÉ PŘIPOJENÍ

Spojení se používají k propojení dvou tabulek podle konkrétní podmínky. Funkce na VLEVO KLOUB v tom, že vezmeme první zadanou tabulku v plném rozsahu a podmíněně svážeme druhou tabulku. Pole druhé tabulky, která nemohla být vázána podmínkou, jsou vyplněna hodnotou NULA.

Například:

Vrátí celou tabulku protistran a vyplní pole „banka“ pouze na těch místech, kde bude splněna podmínka „protistrany.název \u003d banky.název“. Pokud podmínka není splněna, nastaví se pole Banka NULA.

SPRÁVNÝ SPOJ v jazyce 1C naprosto stejné LEVÉ připojení, s výjimkou jednoho rozdílu - v SPRÁVNÉ PŘIPOJENÍ „Hlavní“ tabulka je druhá, nikoli první.

PLNÉ PŘIPOJENÍ

PLNÉ PŘIPOJENÍ se liší od levé a pravé v tom, že zobrazuje všechny záznamy ze dvou tabulek, spojuje pouze ty, ke kterým se může připojit podle podmínky.

Například:

Z

PLNÉ PŘIPOJENÍ
Adresář Banky AS Banky

PODLE

Dotazovací jazyk vrátí obě tabulky v plném rozsahu, pouze pokud je splněna podmínka spojování záznamů. Na rozdíl od připojení vlevo / vpravo je možné, aby se hodnoty NULL objevily ve dvou polích.

VNITŘNÍ PŘIPOJENÍ

VNITŘNÍ PŘIPOJENÍ se liší od úplného v tom, že zobrazuje pouze ty záznamy, které lze připojit podle zadané podmínky.

Například:

Z
Adresář Dodavatelé AS Klienti

VNITŘNÍ PŘIPOJENÍ
Adresář Banky AS Banky

PODLE
Clients.Name \u003d Banks.Name

Tento požadavek vrátí pouze řádky, na nichž má banka i protistrana stejný název.

Sdružení

Konstrukce UNION a UNION ALL kombinuje dva výsledky do jednoho. Ty. výsledek provedení dvou bude „sloučen“ do jednoho, běžného.

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

Jak používat INDEXOVÝ SOFTWARE

Je však třeba vzít v úvahu jeden bod. Vytvoření indexu na dočasné tabulce také vyžaduje čas. Proto je vhodné použít konstrukci "" pouze v případě, že je jisté, že v dočasné tabulce nebudou žádné 1-2 záznamy. Jinak může být účinek opačný - výkon indexovaných polí nekompenzuje dobu vytváření indexu.

VYBRAT
Currency RatesSliceLast.Currency AS Currency,
Měnové kurzySliceLast.Course
Kurzy měn POST
Z
Information Register.Currency Rates.SliceLast (& Period,) AS Currency RatesSliceLast
INDEX PODLE
Měna
;
VYBRAT
Ceny Nomenklatura. Nomenklatura,
Ceny Názvy. Cena,
Ceny Nomenklatury. Měna,
Kurzy měn.
Z
Information Register.NomenclaturePrices.SliceLast (& Period,
Nomenklatura B (& Nomenklatura) AND PriceType \u003d & PriceType) AS Ceny
LEVÉ UNIE Měnové kurzy AS Měnové kurzy
BY RatesNomenclature.Currency \u003d RatesCurrency.Currency

Seskupení

Jazyk dotazu 1C umožňuje při seskupování výsledků dotazu používat speciální agregační funkce. Seskupení lze také použít bez agregačních funkcí k "odstranění" duplikátů.

Existují následující funkce:

Množství, počet, počet různých, maximum, minimum, průměr.

Příklad č. 1:

VYBRAT
Prodej zboží, služeb, zboží, nomenklatury,
SUMA (prodej zboží, služeb, zboží, množství) AS množství,
ČÁSTKA (prodej zboží zboží, služby), částka JAKO částka
Z

ZATÍŽIT
Realizace zboží. Služby. Zboží. Nomenklatura

Žádost přijímá všechny řádky se zbožím a shrnuje je podle množství a množství v kontextu položky.

Příklad č. 2

VYBRAT
Bankovní kód,
MNOŽSTVÍ (RŮZNÉ Banks.Link) JAKO QuantityDoubles
Z
Adresář Banky AS Banky
ZATÍŽIT
Bankovní kód

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

Výsledek

Součty představují způsob, jak získat data z hierarchického systému. Agregační funkce lze použít pro souhrnná pole, stejně jako pro seskupení.

Jedním z nejpopulárnějších způsobů, jak v praxi použít součty, jsou hromadné odpisy zboží.

VYBRAT




Z
Document.Realization ofGoodsServices.Goods AS Prodej ofGoodsServicesGoods
SEŘAZENO PODLE

VÝSLEDEK
SUM (množství),
SUM (částka)
PODLE
Nomenklatura

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

Obecné shrnutí

Chcete-li získat součty pro všechny „součty“, použijte operátor „OBECNĚ“.

VYBRAT
Realizace zboží, služeb, zboží Nomenklatura AS Nomenklatura,
Realizace dokumentu GoodsServicesGoods.Link AS,
Realizace zboží, služeb, zboží. Množství AS Množství,
Prodej zbožíSlužby zboží.Částka AS Částka
Z
Document.Realization ofGoodsServices.Goods AS Prodej ofGoodsServicesGoods
SEŘAZENO PODLE
Implementace GoodsServicesGoods.Link.Date
VÝSLEDEK
SUM (množství),
SUM (částka)
PODLE
JSOU BĚŽNÉ,
Nomenklatura

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

Ve které 1. úrovni seskupení je agregace všech požadovaných polí.

Objednávání

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

Třídění pro primitivní typy (řetězec, číslo, logická hodnota) se řídí obvyklými pravidly. U polí referenčních typů dochází k třídění podle interní reprezentace odkazu (jedinečný identifikátor), nikoli podle kódu nebo reprezentace odkazu.

VYBRAT

Z
Odkaz. Nomenklatura AS nomenklatura
SEŘAZENO PODLE
název

Dotaz zobrazí seznam názvů katalogového seznamu seřazených podle abecedy.

Automatické objednávání

Výsledkem dotazu bez řazení je náhodně prezentovaná sada řádků. Vývojáři platformy 1C nezaručují výstup řádků ve stejném pořadí při provádění stejných dotazů.

Pokud potřebujete zobrazit záznamy tabulky v konzistentním pořadí, musíte použít konstrukci "Autoorder".

VYBRAT
Název nomenklatury Název AS
Z
Odkaz. Nomenklatura AS nomenklatura
AUTO OBJEDNÁVKA

Virtuální tabulky

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

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

  • plátek prvního;
  • část z toho druhého.
  • zbytky;
  • otáčky;
  • zůstatky a obraty.
  • pohyby z subkonta;
  • otáčky;
  • rPM Dt Kt;
  • zbytky;
  • zůstatky a obraty
  • subkonto.
  • základna;
  • grafová data;
  • skutečná doba platnosti.

Pro vývojáře řešení jsou data převzata z jedné (virtuální) tabulky, ale ve skutečnosti platforma 1C přebírá z různých tabulek a transformuje je do požadované formy.

VYBRAT
Produkty ve skladech Váhy a obraty. Nomenklatura,
Zboží ve skladech Zůstatky a obrat Objem Množství Počáteční zůstatek,
Zboží ve skladech Váhy a obraty Množství Obrat,
Zboží ve skladech Zůstatky A Obrat Množství Příjem,
Zboží ve skladechBalancesAndTurnover.QuantityExpense,
Produkty Ve skladech Zůstatky A Obrat Množství Konečný zůstatek
Z
Registr akumulace. Zboží ve skladech. Váhy a obraty AS Zboží ve skladech. Váhy a obraty

Takový dotaz vám umožní rychle získat velké množství dat.

Parametry virtuální tabulky

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

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

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

Registr akumulace.Produkty ve skladech.RemainsAndTurnovers (& BeginningPeriod, & EndPeriod, Month, Movements And Period Boundary, Nomenclature \u003d & Desired Nomenclature)

Algoritmus virtuálních tabulek

Například nejpoužívanější virtuální tabulka typu „Residuals“ ukládá data ze dvou fyzických tabulek - zůstatků a pohybů.

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

  1. Vypočítanou hodnotu dostaneme nejbližší z hlediska data a měření v tabulce součtů.
  2. „Přidat“ částku z tabulky pohybu k částce z tabulky součtu.


Takové jednoduché akce mohou výrazně zlepšit výkon systému jako celku.

Pomocí návrháře dotazů

Konstruktor dotazu - nástroj zabudovaný do podnikového systému 1C, který výrazně usnadňuje vývoj dotazů do databáze.

Konstruktor dotazů má poměrně jednoduché a intuitivní rozhraní. Pojďme se však blíže podívat na použití konstruktoru dotazu.

Konstruktor textového dotazu je spuštěn kontextovou nabídkou (pravým tlačítkem myši) na správném místě v kódu programu.

Popis konstruktoru dotazu 1C

Podívejme se podrobněji na každou kartu návrhu. Výjimkou je karta Tvůrce, toto je téma pro další diskusi.

Tabulky a pole záložek

Tato karta určuje zdroj dat a pole, která chcete zobrazit v sestavě. Ve skutečnosti konstrukce SELECT .. FROM.

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

V místní nabídce virtuálních tabulek můžete nastavit parametry virtuální tabulky:

Karta Odkazy

Záložka slouží k popisu spojení několika tabulek, vytváří konstrukce se slovem PŘIPOJENÍ.

Karta Seskupení

Na této kartě vám systém umožňuje seskupit a shrnout požadovaná pole výsledku tabulky. Popisuje použití konstrukcí SKUPINA PODLE, SUMA, MINIMÁLNĚ, PRŮMĚRNĚ, MAXIMÁLNĚ, MNOŽSTVÍ, POČET RŮZNÝCH.

Karta Podmínky

Odpovídá za vše, co jde v textu požadavku po konstrukci WHERE, tj. Za všechny podmínky uložené na přijatá data.

Karta Upřesnit

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

Seskupení Načítání záznamů:

  • První n - parametr, který vrací do dotazu pouze N záznamů (operátor FIRST)
  • Žádné opakování - zajišťuje jedinečnost přijatých záznamů (operátor DIFFERENT)
  • Povoleno - umožňuje vybrat pouze ty záznamy, které vám systém umožňuje vybrat, s přihlédnutím (konstrukce POVOLENO)

Seskupení Typ požadavkuurčuje, jaký typ dotazu bude: načítání dat, vytváření dočasné tabulky nebo zničení dočasné tabulky.

Dole je vlajka Blokovat přijatá data pro pozdější změnu... Umožňuje vám povolit možnost nastavit datový zámek, který zajišťuje bezpečnost dat od okamžiku jejich načtení až do jejich změny (relevantní pouze pro automatický režim zámků, konstrukce PRO ZMĚNU).

Záložka Odbory / Aliasy

Na této kartě návrháře dotazů můžete nastavit schopnost kombinovat různé tabulky a aliasy (JAK konstrukce). Tabulky jsou uvedeny vlevo. Pokud nastavíte vlajky před stůl, použije se konstrukce UNION, jinak - UNION ALL (tyto dva způsoby se liší). Pravá strana označuje korespondenci polí v různých tabulkách, pokud není zadána žádná shoda, dotaz vrátí NULL.

Karta Objednávka

Zde můžete určit pořadí řazení hodnot (ORDER BY) - sestupně (DESCENT) nebo vzestupně (RETURN).

K dispozici je také zajímavá vlajka - Automatické objednávání (na vyžádání - 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 Dotazový balíček

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

Tlačítko Dotaz v Tvůrci dotazů

V levém dolním rohu konstruktoru dotazu je tlačítko Dotaz, pomocí kterého můžete text dotazu kdykoli zobrazit:

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


Pomocí Query Console

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

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

Stáhněte si 1C Query Console

Nejprve je třeba začít s Query Console, abyste si jej odněkud stáhli. Procesy jsou obvykle rozděleny do dvou typů - kontrolované formy a pravidelné (nebo se někdy nazývají 8.1 a 8.2 / 8.3).

Snažil jsem se tyto dva pohledy zkombinovat do jednoho zpracování - v požadovaném provozním režimu se otevře požadovaný formulář (v řízeném režimu konzola funguje pouze v tlustém režimu).

Popis konzoly dotazu 1C

Začněme se dívat na konzolu dotazu popisem hlavního panelu zpracování:

V záhlaví konzoly dotazu můžete zobrazit čas provedení posledního dotazu s přesností na milisekundy, což vám umožní porovnat různé konstrukce z hlediska výkonu.

První skupina tlačítek na panelu příkazů odpovídá za uložení aktuálních požadavků do externího souboru. To je velmi výhodné, vždy se můžete vrátit k psaní složitého dotazu. Nebo například vést seznam typických příkladů určitých konstrukcí.

Vlevo v poli Dotaz můžete vytvářet nové dotazy a ukládat je do stromové struktury. Druhá skupina tlačítek je právě zodpovědná za správu seznamu požadavků. S ním můžete vytvořit, kopírovat, odstranit, přesunout požadavek.

  • Vykonatžádost - jednoduché provedení a získání výsledku
  • Spustit balíček - umožňuje zobrazit všechny mezilehlé požadavky v dávce požadavku
  • Prohlížení dočasných tabulek - umožňuje zobrazit výsledky, které jsou vráceny dočasnými dotazy v tabulce

Parametry požadavku:

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

V okně parametrů dotazu je zajímavé:

  • Knoflík Získejte od požadavku automaticky najde všechny parametry v požadavku pro pohodlí vývojáře.
  • Vlajka Jednotné parametry pro všechny požadavky - pokud je nainstalován, jeho zpracování nevymaže parametry při přechodu z požadavku na požadavek v obecném seznamu požadavků.

Nastavit parametr jako seznam hodnot je to velmi jednoduché, když vyberete hodnotu parametru, kliknete na tlačítko vymazat hodnotu (křížek), systém nabídne výběr datového typu, kde musíte vybrat „Seznam hodnot“:

Také v horním panelu je tlačítko pro volání nastavení konzoly dotazu:

Zde můžete určit možnosti pro automatické ukládání dotazů a možnosti pro provedení dotazu.

Text dotazu se zadává do pole dotazu konzoly. To lze provést pomocí jednoduché testovací sady dotazů nebo voláním speciálního nástroje - návrháře dotazů.

Konstruktor dotazu 1C 8 se volá z místní nabídky (pravé tlačítko myši), když kliknete na vstupní pole:

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

Žádost \u003d Nový požadavek;
Request.Text \u003d "
| VYBERTE si
| Měny. Odkaz
| OD
| Adresář. Měny AS Měny “;
QueryResult \u003d Query.Run ();

V dolním poli konzoly dotazu se zobrazí pole výsledku dotazu, pro které bylo toto zpracování vytvořeno:



Konzole dotazů kromě seznamu může také zobrazit data ve formě stromu - pro dotazy obsahující součty.

Optimalizace dotazů

Jedním z nejdůležitějších bodů při zvyšování produktivity produktu 1C Enterprise 8.3 je optimalizacežádosti... Tento bod je také velmi důležitý, když absolvování certifikace ... Níže si povíme o typických důvodech neoptimální práce dotazů a metodách optimalizace.

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

Je nutné použít filtry na podrobnosti virtuální tabulky pouze prostřednictvím parametrů BT. V žádném případě byste pro výběr ve virtuální tabulce neměli používat konstrukci WHERE, jedná se o hrubou chybu z hlediska optimalizace. V případě výběru pomocí WHERE systém ve skutečnosti obdrží VŠECHNY záznamy a až poté vybere ty potřebné.

ŽE JO:

VYBRAT

Z
Akumulační registr. Vzájemná vyrovnání s DeponentsOrganizations.Remains (
,
Organizace \u003d & Organizace
A jednotlivci \u003d & jednotlivci) JAK Vzájemné dohody s organizacemi DeponentsOrganizations

ŠPATNĚ:

VYBRAT
Vzájemné dohodyWithDeponentsOrganizationsBalances.AmountBalance
Z
Akumulační registr. Vzájemná vyrovnání s DeponentsOrganizations.Balances (,) AS Vzájemné vyrovnání s DeponentsOrganizationsBalances
KDE
SettlementsWith DeponentsOrganizationsBalances.Organization \u003d & Organizace
A vzájemné dohody s DeponentsOrganizationsBalances.Personal \u003d & Individual

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

Při příjmu dat složeného typu v dotazu pomocí tečky se systém spojí s levým spojem přesně tolik tabulek, kolik je v poli složeného typu možných typů.

Například je pro optimalizaci vysoce nežádoucí odkazovat na pole záznamu registru - registrátor. Registrátor má složený datový typ, včetně všech možných typů dokumentů, které mohou zapisovat data do registru.

ŠPATNĚ:

VYBRAT
Record Set.Registrator.Date,
Sada záznamů. Číslo
Z
Registr akumulace.ProduktyOrganizace AS SetRecords

To znamená, že takový požadavek ve skutečnosti nebude odkazovat na jednu tabulku, ale na 22 databázových tabulek (tento registr má 21 typů registrátorů).

ŽE JO:

VYBRAT
VÝBĚR
KDY Goods.rg.Registrar LINK dokument .Realizace GoodsServices
POTOM VÝSLOVNĚ (dokument GoodsOrg.Registrar AS. Realizace GoodsServices). Datum
KDY GoodsOrg.Registrar LINK Dokument. Příjezd GoodsServices
POTOM VÝSLOVNĚ (ZbožíOrg.Registrar AS Document. Příjezd GoodsServices). Datum
KONEC AS Datum,
ProduktyOrg. Množství
Z
Registr akumulace.GoodsOrg

Nebo druhou možností je přidat tyto informace k rekvizitám, například v našem případě přidat datum.

ŽE JO:

VYBRAT
ProduktyOrganizace.Datum,
ProduktyOrganizace.Číslo
Z
Registr akumulace. Zboží organizací AS Zboží organizací

Poddotazy ve stavu spojení

Pro optimalizaci je nepřijatelné 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 BT, které jste dříve indexovali podle polí připojení.

ŠPATNĚ:

VYBRAT…

LEVÝ KLOUB (
VYBERTE Z TECHNICKÉHO LISTU. Limity
KDE ...
NAČÍT ...
) BY ...

ŽE JO:

VYBRAT…
Limity POST
Z INFORMACE Registr. Limity
KDE ...
NAČÍT ...
INDEX PODLE ...;

VYBRAT…
FROM Document. Realizace GoodsServices
LEFT JOIN Limity
BY ...;

Spojování záznamů s virtuálními tabulkami

Existují situace, kdy systém při připojení k virtuální tabulce s ostatními nefunguje optimálně. V tomto případě můžete optimalizovat výkon dotazu zkusit umístit virtuální tabulku do dočasné tabulky, přičemž nezapomeňte indexovat spojená pole v dotazu dočasné tabulky. To je způsobeno skutečností, že BT jsou často obsaženy v několika fyzických tabulkách DBMS, ve výsledku je zkompilován poddotaz k jejich výběru a problém je podobný předchozímu bodu.

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

Jednou z nejčastějších chyb při psaní dotazů je používání podmínek v neindexovaných polích, což je v rozporu pravidla optimalizace dotazu. DBMS nemůže provést dotaz optimálně, pokud dotaz překrývá neindexovaná pole. Pokud se vezme dočasná tabulka, je také nutné indexovat pole spojení.

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

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

Pokud DBMS nenajde správné indexy, bude prohledána celá tabulka - bude to mít velmi negativní dopad na výkon a může to vést k prodlouženému blokování celé sady záznamů.

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

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

Velmi užitečný bezplatný video kurz o vývoji a optimalizaci dotazů, důrazně doporučujeme pro začátečníky a nejen!