Акаунт в йерархията заявка 1s. Примери за заявки за работа с йерархични директории

Този раздел показва примери за решаване на типични проблеми при работа с йерархични директории.

Получаване на елементи от йерархична директория, които са подчинени на дадена група

За получаване на подчинени елементи на йерархична директория, езикът за заявки предоставя конструкцията IN HIERARCHY. Пример за използване В ЙЕРАРХИЯТА:


ИЗБИРАМ
Номенклатура.Код,
Номенклатура.Покупна цена
ОТ

В този пример ще бъдат получени всички записи на номенклатурната директория, разположена в групата &група, включително самата нея, нейните подчинени групи и елементи, принадлежащи към подчинени групи.

Ако се интересуваме само от елементи и групи, разположени директно в дадена група, тогава можем да получим такива елементи, като зададем условие в полето Parent. Пример:


ИЗБИРАМ
Номенклатура.Код,
Номенклатура Име КАТО Име,
Номенклатура.Покупна цена
ОТ
Справочник.Номенклатура AS Номенклатура

КЪДЕТО
Nomenclature.Parent = &Група

Тази заявка ще избере групи и елементи, подчинени на групата с връзката &Група.

Проверка на наличието на подчинени елементи на елемент от директория

За да проверите наличието на подчинени записи на елемент от директория, можете да използвате заявка, подобна на представената:

В този пример препратката към елемента, за който искате да проверите за деца, се записва в параметъра на заявка Родител. След като изпълните такава заявка, трябва да проверите резултата за празнота. Ако резултатът не е празен, значи има подчинени записи. Иначе - не. Пример:


Ако Request.Execute().Empty() Тогава
Доклад ("Няма записи");
В противен случай
Доклад ("Налични записи");
endIf;

Получаване на всички родители на елемент

Езикът за заявки не предоставя никакви специални средства за извличане на всички родители на елемент. Можете да използвате йерархични суми, за да завършите задачата, но получаването на йерархични суми е оптимизирано за изграждане на суми за голям брой записи и не е напълно ефективно за получаване на родителите на един елемент. За по-ефективно извличане на всички родителски записи на даден елемент се препоръчва да преминавате през неговите родители на малки части. Пример:


CurrentItemItem = Артикул;

Заявка = Нова заявка ("ИЗБЕРЕТЕ
| Номенклатура. Родител,
| Номенклатура.Родител.Родител,
| Номенклатура.Родител.Родител.Родител,
| Номенклатура.Родител.Родител.Родител.Родител,
| Номенклатура.Родител.Родител.Родител.Родител.Родител
| ОТ
| Справочник.Номенклатура AS Номенклатура
|КЪДЕ
| Nomenclature.Link = &CurrentNomenclatureElement";

Докато цикълът на истината
Request.SetParameter("CurrentItemItem", CurrentItemItem);
Резултат = Query.Run();
Ако Result.Empty() Тогава
Прекъсване;
endIf;
Избор = Резултат.Избор();
Избор.Напред();
За ColumnNumber = 0 Чрез Result.Columns.Quantity() - 1 цикъл
CurrentItemItem = Избор [Номер на колона];
Прекъсване;
В противен случай
Доклад(Текущ елемент);
endIf;
EndCycle;

Ако CurrentItemItem = Directories.Nomenclature.EmptyLink() Тогава
Прекъсване;
endIf;
EndCycle;

В този пример всички родители за връзката, записана в променливата ElementNomenclature, се показват в прозореца на служебното съобщение. В цикъла се избират 5 родители на връзки.

Ако броят на нивата в директорията е ограничен и малък, тогава е възможно да получите всички родители с една заявка без цикъл.

Показване на йерархична директория в отчет

За да покажете йерархична директория в отчет, като същевременно запазите йерархията, трябва да използвате заявка, подобна на следната:


ИЗБИРАМ
Номенклатура.Код,
Номенклатура Име КАТО Име,
Номенклатура.Покупна цена
ОТ
Справочник.Номенклатура AS Номенклатура
СОРТИРАНЕ ПО
Име ЙЕРАРХИЯ

Тази заявка избира всички записи от директорията и ги подрежда по йерархия. Резултатът ще бъде подреден по име, като се вземе предвид йерархията.

За да могат групите директории да бъдат поставени над елементите, е необходимо да се замени клаузата ORDER BY в тази заявка със следното:


СОРТИРАНЕ ПО
Номенклатура. Това е груповата ЙЕРАРХИЯ,
Име

Резултатът все още ще бъде подреден йерархично, но групите ще се показват над елементите.

Възможна е и замяна на офертата ПОРЪЧАЙ ПО с опция АВТОМАТИЧНА ПОРЪЧКА. В този случай резултатът ще бъде подреден в съответствие с настройките на директорията, т.е. ако директорията посочва, че групите трябва да бъдат разположени над елементите, тогава те ще бъдат разположени по-горе.

Възможно е също така да се получи йерархичната структура на директорията, като се използват резултатите.


ИЗБИРАМ
Номенклатура.Код,
Номенклатура Име КАТО Име,
Номенклатура.Покупна цена

ОТ Справочник.Номенклатура КАТО Номенклатура

КЪДЕТО
(Nomenclature.ThisGroup = FALSE)

ПОРЪЧАЙТЕ ПО Име

Получаване на суми по йерархия

За да получите суми по йерархия в заявка, трябва да посочите ключовата дума HIERARCHY в клаузата SOFTWARE TOTAL, след като посочите полето, по което ще се изчисляват сумите. Пример за отчет "Оборот на артикул" с получаване на суми по йерархия:


ИЗБИРАМ

ОТ

Номенклатурна ЙЕРАРХИЯ

В резултат на тази заявка общите суми ще бъдат изчислени не само за всеки артикул, но и за групите, към които принадлежи този или онзи артикул.

В случай, че не се нуждаем от суми за елементи, а само от суми за групи, трябва да използваме конструкцията САМО ЙЕРАРХИЯ в сумите. Пример:


ИЗБИРАМ
Счетоводно отчитане на номенклатурния оборот. Номенклатура AS номенклатура,
Счетоводно отчитане на НоменклатураОборот.Номенклатура.Представяне,
Счетоводно отчитане на NomenclatureTurnover.QuantityTurnover AS QuantityTurnover
ОТ
Натрупващ регистър. Номенклатурно счетоводство. Оборот КАК Номенклатурно счетоводство Оборот
РЕЗУЛТАТИ СУМА (КоличествоОборот) PO
Номенклатура САМО ЙЕРАРХИЯ

Резултатът от тази заявка ще бъде общ брой записи само за групи артикули.

внимание! Това е въвеждаща версия на урока, чиито материали може да са непълни.

Влезте в сайта като студент

Влезте като ученик за достъп до учебни материали

Език за заявки 1C 8.3 за начинаещи програмисти: оператори BETWEEN и IN

Логически оператор BETWEEN

Оператор МЕЖДУви позволява да проверите включена ли е стойността?израз, посочен вляво от него в диапазона, посочен вдясно ( заедно с границите на диапазона, тоест включително).

Така че вместо

Ако, напротив, е необходимо да изберете цялата храна, чието калорично съдържание не е включено в диапазона, тогава е подходяща следната форма на отрицание (появи се частица НЕ):

Оператор МЕЖДУМоже да се прилага към повече от просто числови диапазони. Също така работи добре с дати:

Логически оператор B

Проверка за съвпадение с един от изброените

Оператор INви позволява да проверите съвпада ли стойносттаизразът, посочен вляво от него, с една от стойноститеописан вдясно.

Така че вместо

Можеш ли да напишеш нещо по-сбито?

И резултатът ще бъде същият:

Ако, напротив, е необходимо да изберете цялата храна, чийто цвят не съвпада с нито една стойност от списъка, тогава е подходяща следната форма на отрицание (появила се е частица НЕ):

Проверка дали дадена стойност съответства на един от резултатите от заявката

Да предположим, че трябва да изберем от базата данни само онези цветове, които присъстват в описанието на храната. По този начин избраният списък не трябва да съдържа например черния цвят, тъй като в нашата база данни няма черна храна. Вие четете пробна версия на урока, налични са пълни уроци.

Един от начините да направите това е да използвате логическия оператор IN, вдясно от който ще има подзаявка, избираща имена на цветове от всички записи в директорията Храна:

ИЗБЕРЕТЕ име ОТ директория. Цветове WHERE Name IN ( SELECT Color. Name FROM Directory. Food )

Като настрана ще спомена, че от вътрешна заявка е възможно да получите достъп до полетата на външна заявка.

Отново за тази форма на оператора IN, използването на частици също е налично НЕпред него.

Проверка на членството в йерархията за директории

За директории може да се извърши проверка и за принадлежност към йерархия.

Първо, нека да разгледаме пример за йерархична директория. Отворете директорията „Градове“ в нашата база данни:

Моля, обърнете внимание, че неговите елементи са различни от другите директории ( Храна, Цветове, Аромати) наличие на жълти папки. Това групи директории.

Групите се различават от обикновените елементи по това, че могат да включват други групи и елементи.Точно както папките съдържат други папки и файлове.

За да видите съдържанието на група, щракнете двукратно върху нея:

За да отидете на ниво нагоре, щракнете двукратно върху групата отново:

Така йерархичната директория може да съдържа както обикновени елементи (например Рио де Жанейро, Салвадор), така и групи (например Бразилия, Индия). Вие четете пробна версия на урока, налични са пълни уроци.

Всеки елемент (независимо дали е група или обикновен елемент) може да има родител. Например родителят на елемента Рио де Жанейро е групата Бразилия:

И това е вярно, защото Рио де Жанейро е част от бразилската група в йерархията на директорията:

Сега нека напишем заявка, която ще поиска избраната група държави и всички градски елементи, включени в нея.

Моля, обърнете внимание, че в текста на заявката има амперсанд (&) преди името GroupCountry. Имената с амперсанд се разпознават автоматично от системата като параметри, чиято стойност трябва да бъде зададена преди изпълнението на заявката.

След като поставим тази заявка в конзолата и щракнете върху бутона Изпълни, за да актуализирате, ще можем да зададем този параметър:

Изберете групата "Русия" като нейна стойност (бутон Избор):

Ако сега щракнете върху бутона "Изпълни", резултатът от заявката ще бъде както следва:

Резултатът от искането беше самата група (Русия) и всички елементи, които са част от нея (Перм, Красноярск и Воронеж).

Ако изберете „Бразилия“ вместо Русия, резултатът ще бъде следният:

Така резултатът от оператора В ЙЕРАРХИЯТАще бъде TRUE, ако стойността на израза отляво е препратка към елемент от директория и е включена в набора от стойности вдясно (Бразилия) или йерархично принадлежи към някаква група, съдържаща се в този набор (Сао Пауло, Рио де Жанейро, Салвадор).

Наборът от стойности, които трябва да бъдат проверени за съвпадение, може също да включва резултата от заявка. В този случай отдясно на оператора INтрябва да посочите описание на заявката:

За оператора В ЙЕРАРХИЯТАизползването на частици също е налично НЕпред него.

Направете теста

Стартирайте теста

1. Логическият оператор BETWEEN проверява стойността

2. Логически израз 1 МЕЖДУ 1 И 1

3. Логически израз 1 НЕ МЕЖДУ 2 И 2

4. Проверки на логически оператор B

5. Логическият оператор B ви позволява да проверите

Дизайнът „В ЙЕРАРХИЯ“ в заявките на 1C:Enterprise 8.x ви позволява да получавате подчинени елементи на йерархичен конфигурационен обект според даден избор. Днес в статията ще разгледаме пример за използването му, както и действията на платформата от страна на СУБД и влиянието му върху производителността.

Използване

Нека да разгледаме прост пример за използване на конструкцията "В ЙЕРАРХИЯТА". При изпълнение на следната заявка ще бъдат получени подчинените елементи на йерархичната директория "Продукти" за предадената стойност на променливата "Връзка".

Текст на заявката = " ИЗБЕРЕТЕ | Продукти . връзка,| Стоки . код на продавача |ОТ| Справочник . Продукти AS Продукти|КЪДЕ | Стоки . Връзка В ЙЕРАРХИЯТА (& връзка)"

В тестовата база данни директорията „Продукти“ съдържа следните тестови данни:

Разбира се, изображението не показва всички записи в директорията. Екранната снимка показва само структурата за съхранение на данни в йерархичната директория. Таблицата с директории съхранява 10 групи от най-високо ниво, всяка от които съдържа 5 вложени групи с 200 елемента всяка.

Да се ​​върнем към заявката за тест. Нека предадем връзката към групата "Група - 1" към параметъра "&Връзка" (вижте екранната снимка по-горе). Тогава резултатът от заявката ще изглежда така:

Както виждаме, заявката върна връзка към самата горна група (подадена като параметър), както и вложени групи с елементите в тях. По този начин използването на конструкцията „В ЙЕРАРХИЯТА“ ви позволява удобно да получавате йерархично подчинени данни.

Синтаксис на езика за заявки 1C:Enterprise класически SQLмного подобни в някои отношения. Но за израза „В ЙЕРАРХИЯТА“ няма аналог в езика за заявки SQL, тъй като например за израза на езика за заявки на платформата „B“ има подобен SQL оператор „IN“. Следователно работата на платформата със СУБД при използване на този оператор е интересна.

Зад сцената

Така че да започваме. Например ще използваме написаната по-рано заявка за директорията „Продукти“. Ще анализираме действията на платформата за две ситуации:

  1. Ще предадем групата от най-високо ниво „Група 1“ като параметър „&Връзка“ (както направихме по-рано).
  2. В параметъра ще предадем връзка към групата "Група 1 - 1", вложена в групата от най-високо ниво "Група 1".

Сега по ред. В първия случай платформата ще извърши следните действия на SQL сървъра:

1. Първо се изпълнява SQL заявка, за да се получи връзка към групата директория, предадена като параметър, и всички подчинени групи. Резултатът се поставя във временната таблица "#tt1".

2. Във втория етап една и съща заявка се изпълнява два пъти:

Екранната снимка съдържа подробни коментари върху текста на SQL заявката. Накратко, заявката ви позволява да изберете подчинени елементи за групи, които са посочени във временна таблица. Остава въпросът: "Защо заявката се изпълнява два пъти?" Отговорът тук е прост: първо, заявката получава подчинени елементи за групи от първо ниво, които вече се съдържат във временната таблица (вижте точка 1). След това втората заявка извлича поделементите за подгрупите от второ ниво. Тъй като на третото ниво на йерархията не присъства група директории, тази заявка вече не се изпълнява.

В нашия случай втората заявка ще върне празен резултат, тъй като няма подчинени елементи за записи, разположени на 3-то ниво на йерархията (там няма групи).

3. За да получи крайния резултат от заявката, платформата генерира следната SQL заявка:

Резултатът от тази конкретна заявка може да бъде допълнително обработен от алгоритми на вградения език на платформата. По този начин, записи във временната таблица "#tt1" се използват за задаване на условието за вземане на проби от референтната таблица "_Reference41".

4. На последната стъпка платформата 1C:Enterprise 8.x изтрива временната таблица „#tt1“, тъй като тя вече няма да се използва в бъдеще.

Това завършва процеса на изпълнение на оператора “IN HIERARCHY”.Позволете ми да ви напомня, че разглежданата последователност от действия на SQL сървъра беше извършена, когато предадохме връзка към групата от най-високо ниво „Група - 1“ към заявка от страна на платформата. Но как ще се държи платформата, ако предадем връзка към групата от второ ниво „Група - 1 - 1“ като параметър „&Връзка“? Всичко ще се случи по същия начин, с изключение на следната точка: по-горе, във втория етап на изпълнение на SQL заявки от платформата, беше написано, че заявката за получаване на подчинени елементи е изпълнена два пъти - в случай на получаване на подчинени елементи за групата "Група - 1 - 1" това не е така. Заявката ще бъде изпълнена само веднъж.

Факт е, че броят на заявките за получаване на подчинени елементи зависи от броя на групите в йерархията. С други думи, ако нивото на йерархията на елемента съдържа поне една група, тогава искане от т.2.

Въздействие върху производителността

Неправилното използване на оператор в заявка може да доведе до неоптимална производителност на системата. Разглежданият оператор „В ЙЕРАРХИЯТА“ не прави изключение. Трябва да се използва с повишено внимание, тъй като значително усложнява алгоритъма за изпълнение на SQL заявки към базата данни и по този начин увеличава натоварването на СУБД сървъра.

Позволете ми да ви дам пример за неоптимална заявка, която може да доведе до тъжните последствия, споменати по-горе:

ИЗБЕРЕТЕ продукти. Връзка ОТ директория. Продукти КАТО Продукти WHERE (Продукти. Връзка В ЙЕРАРХИЯ (& Връзка) ИЛИ Продукти. Връзка В ЙЕРАРХИЯ (& Връзка1) ИЛИ Продукти. Връзка В ЙЕРАРХИЯ (& Връзка2) )

Както можете да предположите, заявката ще доведе до генериране на много SQL заявки, което ще доведе до намаляване на производителността на информационната система.

Направете си изводите!

От вас зависи да си направите изводите. Само да кажа, че операторът “В ЙЕРАРХИЯТА” се използва от платформата за системата за композиране на данни, когато условията за избор включват “В ГРУПА”, “В ГРУПА ОТ СПИСЪКА” и други. Мисля, че няма нужда да обяснявам, че с неправилни манипулации потребителите могат да настроят много сложни селекции и да увеличат натоварването на 1C сървъра и СУБД няколко пъти. Нека променим настройките само за опитни потребители.

И разбира се, когато пишете свои собствени механизми, обърнете внимание на оператора „В ЙЕРАРХИЯТА“. Много удобно от една страна и опасно от друга.

Какво е 1C директория и защо е необходима? Справочникът съхранява условно постоянна информация, т.е. информация, която остава почти непроменена за дълъг период от време. Например директорията „Номенклатура“ съдържа списък с продадени или произведени стоки. Освен това една директория може да съдържа много свойства, описващи елемент на директория.

Ако вземем пола на човек за сравнение, тогава списъкът е ограничен и не се променя, така че изброяването е по-подходящо за него.

След като създадем нова директория, ще видим следната картина.

Нека да разгледаме всичките му отметки.

Основен

Тук се посочва името (идентификатор в базата данни) и синоним (потребителско име на директорията). Незадължителният коментар е този, който може да обясни предназначението на директорията или да опише нейните функции.

Йерархия

В този раздел можете да конфигурирате дълбочината на влагане на елементите на директория. Използвайки тази настройка, е удобно да разграничавате и детайлизирате елементите според някои критерии. Например продуктите “Шкафове” са в една група, а продуктите “Маси” са в друга. По подразбиране, когато се създаде, директорията представя списък с елементи. Ако поставите отметка в квадратчето Йерархична директория, тогава всеки елемент може да бъде подчинен на друг елемент (група). По-долу има опции за персонализиране на този маркер и промяна на дисплея в потребителски режим.

Тип йерархия:

Йерархия на групи и елементи

С тази настройка елементите могат да бъдат вложени само в групи (папки).

Тук, както можете да видите, всички елементи и групи имат еднакви икони и всеки елемент може да бъде вложен.

Поставете групи отгоре

Когато това квадратче е отметнато, групите винаги ще са най-отгоре, в противен случай те ще бъдат подредени в ред на сортиране, например по следния начин:

Ограничаване на броя на йерархичните нива

Ако квадратчето за отметка не е отметнато тук, влагането е неограничено.

Ако квадратчето е отметнато, можете да посочите броя на нивата по-долу.

Собственици

На отметката собственици могат да бъдат посочени други директории, по отношение на които тази е подчинена. Диаграмата на връзката на подчинените директории е подобна на диаграмата на връзката на йерархична директория, само че тук друга директория действа като родител и се нарича собственик. В типичните конфигурации добър пример е подчинението на директория „Споразумения“ на директория „Контрагенти“, т.к. Не може да има споразумение, което да не принадлежи на нито един контрагент.

Полето "Списък на собствениците на директория" указва списъка с директории, които притежават елементите на тази директория.

По-долу в полето „Използване на подчиненост“ е посочено на какво ще бъдат подчинени елементите на тази директория.

Как програмно да разберете дали една директория е йерархична или не

За да направите това, трябва да се обърнете към метаданните

Това е HierarchicalDirectory = Metadata.Directories.Counterparties.Hierarchical;

Следва продължение...

Езикът за заявки в 1C 8 е опростен аналог на добре познатия „структуриран език за програмиране“ (както по-често се нарича SQL). Но в 1C се използва само за четене на данни; обектен модел на данни се използва за промяна на данни.

Друга интересна разлика е руският синтаксис. Въпреки че всъщност можете да използвате англоезични конструкции.

Примерна заявка:

ИЗБИРАМ
Банки. Име,
Банки.CorrAccount
ОТ
Справочник.Банки КАК Банки

Тази заявка ще ни позволи да видим информация за името и кореспондентската сметка на всички банки, съществуващи в базата данни.

Езикът за заявки е най-простият и ефективен начин за получаване на информация. Както може да се види от примера по-горе, в езика за заявки трябва да използвате имена на метаданни (това е списък от системни обекти, които съставляват конфигурацията, т.е. директории, документи, регистри и т.н.).

Описание на конструкциите на езика за заявки

Структура на заявката

За да получите данни, е достатъчно да използвате конструкциите "SELECT" и "FROM". Най-простата заявка изглежда така:

ИЗБЕРЕТЕ * ОТ Директории.Номенклатура

Където “*” означава избиране на всички полета от таблицата, а Directories.Nomenclature – името на таблицата в базата данни.

Нека да разгледаме по-сложен и общ пример:

ИЗБИРАМ
<ИмяПоля1>КАК<ПредставлениеПоля1>,
Сума(<ИмяПоля2>) КАК<ПредставлениеПоля2>
ОТ
<ИмяТаблицы1>КАК<ПредставлениеТаблицы1>
<ТипСоединения>СЪЕДИНЕНИЕ<ИмяТаблицы2>КАК<ПредставлениеТаблицы2>
ОТ<УсловиеСоединениеТаблиц>

КЪДЕТО
<УсловиеОтбораДанных>

ГРУПИРАЙ ПО
<ИмяПоля1>

СОРТИРАНЕ ПО
<ИмяПоля1>

РЕЗУЛТАТИ
<ИмяПоля2>
ОТ
<ИмяПоля1>

В тази заявка избираме данните от полетата „FieldName1“ и „FieldName1“ от таблиците „TableName1“ и „TableName“, присвояваме синоними на полетата с помощта на оператора „HOW“ и ги свързваме с помощта на определено условие „TableConnectionCondition ”.

От получените данни избираме само данни, които отговарят на условието от „КЪДЕ” „Условие за избор на данни”. След това групираме заявката по поле „Име на поле1”, докато сумираме „Име на поле2”. Създаваме общи суми за полето „Име на поле1“ и последното поле „Име на поле2“.

Последната стъпка е да сортирате заявката с помощта на конструкцията ORDER BY.

Общи проекти

Нека да разгледаме общите структури на езика за заявки 1C 8.2.

ПЪРВОн

Използвайки този оператор, можете да получите n броя на първите записи. Редът на записите се определя от реда в заявката.

ИЗБЕРЕТЕ ПЪРВИТЕ 100
Банки. Име,
Банки Код AS BIC
ОТ
Справочник.Банки КАК Банки
СОРТИРАНЕ ПО
Банки. Име

Заявката ще получи първите 100 записа от директорията „Банки“, сортирани по азбучен ред.

ПОЗВОЛЕН

Този дизайн е подходящ за работа с механизма. Същността на механизма е да ограничи четенето (и други действия) до потребителите за конкретни записи в таблица на база данни, а не таблицата като цяло.

Ако потребител се опита да използва заявка за четене на записи, които са недостъпни за него, той ще получи съобщение за грешка. За да избегнете това, трябва да използвате конструкцията „ALLOWED“, т.е. заявката ще чете само записи, които са разрешени за нея.

ИЗБЕРЕТЕ РАЗРЕШЕНО
Хранилище на допълнителна информация Връзка
ОТ
Директория. Хранилище на допълнителна информация

РАЗЛИЧНИ

Използването на „DIFFERENT“ ще предотврати въвеждането на дублирани редове в резултата от заявката на 1C. Дублирането означава, че всички полета на заявката съвпадат.

ИЗБЕРЕТЕ ПЪРВИТЕ 100
Банки. Име,
Банки Код AS BIC
ОТ
Справочник.Банки КАК Банки

EmptyTable

Тази конструкция се използва много рядко за комбиниране на заявки. Когато се присъединявате, може да се наложи да посочите празна вложена таблица в една от таблиците. Операторът “EmptyTable” е точно за това.

Пример от помощта на 1C 8:

ИЗБЕРЕТЕ Връзка.Номер, ПРАЗНА ТАБЛИЦА.(№, артикул, количество) КАТО състав
ОТ Документ. Разходна фактура
КОМБИНИРАЙТЕ ВСИЧКО
ИЗБЕРЕТЕ Link.Number, Contents.(LineNumber, Product, Quantity)
ОТ Документ.Фактура Документ.Фактура.Състав.*

ISNULL

Много полезна функция, която ви позволява да избегнете много грешки. YesNULL() ви позволява да замените NULL стойността с желаната. Много често се използва при проверка за наличие на стойност в обединени таблици, например:

ИЗБИРАМ
Връзка към номенклатурата,
IsNULL(Item Remaining.QuantityRemaining,0) AS QuantityRemaining
ОТ


Може да се използва и по други начини. Например, ако за всеки ред не е известно в коя таблица съществува стойността:

ISNULL(InvoiceReceived.Date, InvoiceIssued.Date)

HOW е оператор, който ни позволява да присвоим име (синоним) на таблица или поле. Видяхме пример за използване по-горе.

Тези конструкции са много сходни - те ви позволяват да получите низово представяне на желаната стойност. Единствената разлика е, че REPRESENTATION преобразува всякакви стойности в тип низ, докато REPRESENTATIONREF преобразува само референтни стойности. РЕФЕРЕНТНО ПРЕДСТАВЯНЕ се препоръчва да се използва в заявки за система за композиране на данни за оптимизация, освен ако, разбира се, полето за референтни данни не е планирано да се използва в селекции.

ИЗБИРАМ
View(Link), //низ, например „Авансов отчет № 123 от 10.10.2015 г.
View(DeletionMark) AS DeleteMarkText, //низ, „Да“ или „Не“
ViewReferences(DeletionMark) AS DeleteMarkBoolean //boolean, True или False
ОТ
Документ. Предварителен отчет

ЕКСПРЕСНО

Express ви позволява да преобразувате стойностите на полетата в желания тип данни. Можете да конвертирате стойност или в примитивен тип, или в референтен тип.

Express за референтен тип се използва за ограничаване на исканите типове данни в полета от сложен тип, често използвани за оптимизиране на производителността на системата. Пример:

EXPRESS(TableCost.Subconto1 AS Directory.Cost Items).Тип на ActivityForTaxAccountingCosts

За примитивни типове тази функция често се използва за ограничаване на броя на знаците в полета с неограничена дължина (такива полета не могат да се сравняват). За да избегнете грешката " Невалидни параметри в операцията за сравнение. Не можете да сравнявате полета
неограничена дължина и полета от несъвместими типове
", трябва да изразите такива полета, както следва:

EXPRESS(Коментар AS ред(150))

ДАТА НА РАЗЛИКА

Вземете безплатно 267 видео урока за 1C:

Пример за използване на IS NULL в 1C заявка:

ИЗБИРАМ ОТ
Реф
ЛЯВА ВРЪЗКА RegisterAccumulations.ProductsInWarehouses.Remaining AS Product Remaining
Софтуерна номенклатураRef.Link = Продадени стокиCommitteesRemains.Номенклатура
WHERE NOT Оставащи продукти. QuantityRemaining Е NULL

Типът данни в заявка може да се определи чрез използване на функциите TYPE() и VALUETYPE() или чрез използване на логическия оператор REFERENCE. Двете функции са сходни.

Предварително зададени стойности

В допълнение към използването на предадени параметри в заявки на езика за заявки 1C, можете да използвате предварително зададени стойности или . Например трансфери, предварително дефинирани директории, сметкопланове и т. н. За това се използва конструкцията „Value()“.

Пример за употреба:

WHERE Номенклатура.Тип номенклатура = Стойност(Директория.Видове номенклатура.Продукт)

WHERE Контрагенти.Тип информация за контакт = Стойност(Изброяване.Типове информация за контакт.Телефон)

WHERE Салда по сметки. Счетоводна сметка = Стойност (Сметкоплан. Печалба. Печалба Загуба)

Връзки

Има 4 вида връзки: НАЛЯВО, ДЯСНО, ПЪЛЕН, ВЪТРЕШЕН.

ЛЯВО и ДЯСНО ВЪРЗВАНЕ

Съединенията се използват за свързване на две таблици въз основа на конкретно условие. Характеристика, когато ЛЯВО ПРИСЪЕДИНЯВАНЕе, че вземаме първата посочена таблица в нейната цялост и условно свързваме втората таблица. Полетата на втората таблица, които не могат да бъдат обвързани с условие, се попълват със стойността НУЛА.

Например:

Той ще върне цялата таблица с контрагенти и ще попълни полето „Банка“ само там, където ще бъде изпълнено условието „Име на контрагенти = Име на банки“. Ако условието не е изпълнено, полето Банка ще бъде настроено на НУЛА.

RIGHT JOIN на езика 1Cабсолютно подобни ЛЯВА връзка, с изключение на една разлика - в ПРАВО НА СВЪРЗВАНЕ„Основната“ маса е втората, а не първата.

ПЪЛНА СВЪРЗВАНЕ

ПЪЛНА СВЪРЗВАНЕсе различава от ляво и дясно по това, че показва всички записи от две таблици и свързва само тези, които може да свърже по условие.

Например:

ОТ

ПЪЛНА СВЪРЗВАНЕ
Справочник.Банки КАК Банки

ОТ

Езикът за заявки ще върне и двете таблици напълно само ако е изпълнено условието за обединяване на записите. За разлика от ляво/дясно свързване, възможно е NULL да се появи в две полета.

ВЪТРЕШНО СЪЕДИНЕНИЕ

ВЪТРЕШНО СЪЕДИНЕНИЕсе различава от пълния по това, че показва само онези записи, които могат да бъдат свързани според дадено условие.

Например:

ОТ
Указател Контрагенти AS Клиенти

ВЪТРЕШНО СЪЕДИНЕНИЕ
Справочник.Банки КАК Банки

ОТ
Клиенти.Име = Банки.Име

Тази заявка ще върне само редове, в които банката и контрагентът имат едно и също име.

Асоциации

Конструкциите JOIN и JOIN ALL комбинират два резултата в един. Тези. резултатът от извършването на две ще бъде „слят“ в един, общ.

Тоест системата работи точно както обикновените, само за временна маса.

Как да използвате INDEX BY

Трябва обаче да се вземе предвид една точка. Изграждането на индекс върху временна таблица също отнема време за завършване. Ето защо е препоръчително да използвате конструкцията „ “ само ако е известно със сигурност, че във временната таблица ще има повече от 1-2 записа. В противен случай ефектът може да е обратен - производителността на индексираните полета не компенсира времето, необходимо за изграждане на индекса.

ИЗБИРАМ
Валутни курсове Последно напречно сечение Валута КАТО Валута,
Валутни курсове Последно напречно сечение.
PUT Валутни курсове
ОТ
Информационен регистър.Валутни курсове.Последен отрязък(&период,) AS Валутни курсовеПоследен отрязък
ИНДЕКС ПО
Валута
;
ИЗБИРАМ
ЦениНоменклатура.Номенклатура,
ЦениНоменклатури.Цена,
Цени Номенклатури. Валута,
Валутни курсове
ОТ
Информационен регистър. Номенклатурни цени. Последен отрязък (&период,
Номенклатура B (&номенклатура) И PriceType = &PriceType) AS PriceNomenclature
LEFT JOIN Валутни курсове КАТО Валутни курсове
Номенклатури на цените на софтуера.Валута = Валутни курсове.Валута

Групиране

Езикът за заявки 1C ви позволява да използвате специални агрегатни функции, когато групирате резултатите от заявките. Групирането може да се използва и без агрегатни функции за „елиминиране“ на дубликати.

Съществуват следните функции:

Сума, Количество, Брой различни, Максимум, Минимум, Средно.

Пример #1:

ИЗБИРАМ
Продажби на стоки и услуги Стоки.Номенклатура,
SUM(Продажби на СтокиУслугиСтоки.Количество) КАТО Количество,
SUM(Продажби на СтокиУслугиСтоки.Сума) КАТО Сума
ОТ

ГРУПИРАЙ ПО
Продажба на стоки и услуги Стоки Номенклатура

Заявката получава всички редове със стоки и ги обобщава по количество и суми по позиции.

Пример №2

ИЗБИРАМ
Банки.Код,
QUANTITY(DIFFERENT Banks.Link) КАТО брой дубликати
ОТ
Справочник.Банки КАК Банки
ГРУПИРАЙ ПО
Банки.Код

Този пример ще покаже списък с BIC кодове в директорията „Банки“ и ще покаже колко дубликати съществуват за всеки от тях.

Резултати

Резултатите са начин за получаване на данни от система с йерархична структура. Агрегираните функции могат да се използват за обобщени полета, точно както за групиране.

Един от най-популярните начини за използване на резултатите на практика е груповото отписване на стоки.

ИЗБИРАМ




ОТ
Документ Продажби на стоки и услуги Стоки КАК да продавате стоки и услуги Стоки
СОРТИРАНЕ ПО

РЕЗУЛТАТИ
SUM (Количество),
SUM(сума)
ОТ
Номенклатура

Резултатът от заявката ще бъде следната йерархия:

Общи резултати

Ако трябва да получите общи суми за всички „общи суми“, използвайте оператора „ОБЩИ“.

ИЗБИРАМ
Продажби на стоки и услуги Стоки Номенклатура AS Номенклатура,
Продажби на стоки и услуги Стоки Връзка AS Документ,
Продажби на стоки и услуги Стоки. Количество КАКТО Количество,
Продажби на стоки и услуги Стоки. Сума КАТО сума
ОТ
Документ Продажби на стоки и услуги Стоки КАК да продавате стоки и услуги Стоки
СОРТИРАНЕ ПО
Продажби на стоки и услуги Стоки Връзка Дата
РЕЗУЛТАТИ
SUM (Количество),
SUM(сума)
ОТ
СА ЧЕСТИ,
Номенклатура

В резултат на изпълнение на заявката получаваме следния резултат:

В което 1 ниво на групиране е агрегирането на всички необходими полета.

Аранжиране

Операторът ORDER BY се използва за сортиране на резултата от заявка.

Сортирането за примитивни типове (низ, число, булев) следва обичайните правила. За полетата от референтен тип сортирането се извършва по вътрешното представяне на връзката (уникалния идентификатор), а не по код или по референтно представяне.

ИЗБИРАМ

ОТ
Справочник.Номенклатура AS Номенклатура
СОРТИРАНЕ ПО
Име

Заявката ще покаже списък с имена в директорията на номенклатурата, сортирани по азбучен ред.

Автоматична поръчка

Резултатът от заявка без сортиране е хаотично представен набор от редове. Разработчиците на платформата 1C не гарантират, че редовете ще бъдат изведени в същата последователност при изпълнение на идентични заявки.

Ако трябва да покажете записите на таблицата в постоянен ред, трябва да използвате конструкцията Auto-Order.

ИЗБИРАМ
Номенклатура. Име КАТО Име
ОТ
Справочник.Номенклатура AS Номенклатура
АВТОМАТИЧНА ПОРЪЧКА

Виртуални маси

Виртуалните таблици в 1C са уникална функция на езика за заявки 1C, която не се среща в други подобни синтаксиси. Виртуалната таблица е бърз начин за получаване на информация за профила от регистрите.

Всеки тип регистър има свой собствен набор от виртуални таблици, които може да се различават в зависимост от настройките на регистъра.

  • разрез на първия;
  • изрязване на последното.
  • остатъци;
  • революции;
  • салда и оборот.
  • движения от субконто;
  • революции;
  • скорост Dt Kt;
  • остатъци;
  • салда и оборот
  • подконто.
  • база;
  • графични данни;
  • действителен срок на валидност.

За разработчика на решение данните се вземат от една (виртуална) таблица, но всъщност платформата 1C взема от много таблици, трансформирайки ги в необходимата форма.

ИЗБИРАМ
Продукти в складови остатъци и оборот Номенклатура,
ProductsInWarehousesRemainingAndTurnover.QuantityInitialRemaining,
ProductsInWarehousesRemainsAndTurnover.QuantityTurnover,
СтокиВСкладовеОстатъциИОборот.КоличествоВходящи,
СтокиВСкладовеОстатъциИОборот.КоличествоПотребление,
ProductsInWarehousesRemainingsAndTurnover.QuantityFinalRemaining
ОТ
RegisterAccumulations.GoodsInWarehouses.RemainsAndTurnover AS СтокиВСкладовеRemainsAndTurnover

Тази заявка ви позволява бързо да извлечете голямо количество данни.

Опции за виртуална маса

Много важен аспект при работата с виртуални таблици е използването на параметри. Параметрите на виртуалната таблица са специализирани параметри за избор и конфигурация.

За такива таблици се счита за неправилно да се използва селекция в конструкцията „WHERE“. В допълнение към факта, че заявката става неоптимална, е възможно да получите неверни данни.

Пример за използване на тези параметри:

Регистър на натрупвания Стоки в складове Салда и обороти (& Начало на периода, & Край на периода, Месец, Движения и граници на периода, Номенклатура = & Задължителна номенклатура)

Алгоритъм за виртуални маси

Например най-използваната виртуална таблица от типа „Остатъци” съхранява данни от две физически таблици – салда и движения.

Когато използвате виртуална таблица, системата извършва следните манипулации:

  1. Получаваме най-близката изчислена стойност по отношение на датата и измерванията в таблицата с общите суми.
  2. „Добавяме“ сумата от таблицата за движение към сумата от таблицата с общите суми.


Такива прости действия могат значително да подобрят работата на системата като цяло.

Използване на Query Builder

Създател на заявки– инструмент, вграден в системата 1C Enterprise, който значително улеснява разработването на заявки към бази данни.

Създателят на заявки има доста прост, интуитивен интерфейс. Въпреки това, нека разгледаме по-подробно използването на конструктора на заявки.

Текстовият конструктор на заявката се стартира от контекстното меню (десен бутон на мишката) на желаното място в програмния код.

Описание на конструктора на заявки 1C

Нека разгледаме всеки раздел на дизайнера по-подробно. Изключение прави разделът Builder, който е тема за друга дискусия.

Раздел Таблици и полета

Този раздел определя източника на данни и полетата, които трябва да бъдат показани в отчета. По същество тук са описани конструкциите SELECT.. FROM.

Източникът може да бъде физическа таблица на база данни, виртуална регистрационна таблица, временни таблици, вложени заявки и др.

В контекстното меню на виртуални таблици можете да зададете параметри на виртуална таблица:

Раздел Връзки

Разделът се използва за описание на връзките на няколко таблици и създава конструкции с думата CONNECTION.

Раздел Групиране

В този раздел системата ви позволява да групирате и обобщавате задължителните полета на резултата от таблицата. Описва използването на конструкциите ГРУПИРАНЕ ПО, СУМА, МИНИМУМ, СРЕДНО, МАКСИМУМ, КОЛИЧЕСТВО, БРОЙ РАЗЛИЧНИ.

Раздел Условия

Отговаря за всичко, което идва в текста на заявката след конструкцията WHERE, т.е. за всички условия, наложени върху получените данни.

Раздел Разширени

Раздел Допълнителнопълен с всякакви параметри, които са много важни. Нека разгледаме всеки от свойствата.

Групиране Избиране на записи:

  • Първо Н– параметър, който връща само N записа към заявката (оператор FIRST)
  • Без дубликати– гарантира уникалността на получените записи (оператор DIFFERENT)
  • Позволен– позволява ви да изберете само онези записи, които системата ви позволява да изберете, като вземете предвид (ПОЗВОЛЕНА конструкция)

Групиране Тип заявкаопределя какъв тип ще бъде заявката: извличане на данни, създаване на временна таблица или унищожаване на временна таблица.

Отдолу има знаме Заключете получените данни за по-късна промяна. Позволява ви да активирате възможността за задаване на заключване на данни, което гарантира безопасността на данните от момента на четенето им до промяната им (важи само за режима на автоматично заключване, дизайн ЗА ПРОМЯНА).

Раздел Присъединявания/Псевдоними

В този раздел на дизайнера на заявки можете да зададете възможността за свързване на различни таблици и псевдоними (конструкцията HOW). Таблиците са посочени от лявата страна. Ако поставите флаговете срещу таблицата, ще се използва конструкция UNITE, в противен случай - UNITE ALL (разлики между двата метода). От дясната страна е посочено съответствието на полетата в различни таблици; ако съответствието не е посочено, заявката ще върне NULL.

Раздел за поръчка

Това определя реда, в който се сортират стойностите (ORDER BY) - низходящ (DESC) или възходящ (ASC).

Има и едно интересно знаме - Автоматична поръчка(в заявката - АВТОМАТИЧНА ПОРЪЧКА). По подразбиране системата 1C показва данни в „хаотичен“ ред. Ако зададете този флаг, системата ще сортира данните по вътрешни данни.

Раздел Пакет на заявка

В раздела дизайнер на заявки можете да създавате нови и да го използвате като навигация. В текста на заявката пакетите се разделят със символа “;” (запетая).

Бутон „Заявка“ в дизайнера на заявки

В долния ляв ъгъл на дизайнера на заявки има бутон Заявка, с който можете да видите текста на заявката по всяко време:

В този прозорец можете да направите корекции на заявката и да я изпълните.


Използване на конзолата за заявки

Конзолата за заявки е прост и удобен начин за отстраняване на грешки в сложни заявки и бързо получаване на информация. В тази статия ще се опитам да опиша как да използвам Query Console и ще дам връзка за изтегляне на Query Console.

Нека да разгледаме по-отблизо този инструмент.

Изтеглете 1C конзола за заявки

Първо, за да започнете да работите с конзолата за заявки, трябва да я изтеглите от някъде. Лечението обикновено се разделя на два вида - контролирани форми и конвенционални (или понякога се наричат ​​8.1 и 8.2/8.3).

Опитах се да комбинирам тези два изгледа в една обработка - желаната форма се отваря в желания режим на работа (в управляван режим конзолата работи само в дебел режим).

Описание на конзолата за заявки 1C

Нека започнем да разглеждаме конзолата за заявки с описание на основния панел за обработка:

В заглавката на конзолата за заявки можете да видите времето за изпълнение на последната заявка с точност до милисекунда, което ви позволява да сравнявате различни дизайни по отношение на производителността.

Първата група бутони в командната лента е отговорна за запазването на текущите заявки във външен файл. Това е много удобно, винаги можете да се върнете към писане на сложна заявка. Или, например, съхранявайте списък с типични примери за определени дизайни.

Отляво, в полето „Заявка“, можете да създавате нови заявки и да ги запазвате в дървовидна структура. Втората група бутони отговаря за управлението на списъка със заявки. С него можете да създавате, копирате, изтривате, премествате заявка.

  • Изпълниискане– просто изпълнение и резултати
  • Изпълнение на пакета– позволява ви да видите всички междинни заявки в пакет от заявки
  • Преглед на временни таблици– позволява ви да видите резултатите, които временните заявки връщат в таблица

Параметри на заявката:

Позволява ви да зададете текущите параметри за заявката.

В прозореца с параметри на заявката е интересно следното:

  • Бутон Вземете от заявкаавтоматично намира всички параметри в заявката за удобство на програмиста.
  • Флаг Общи параметри за всички заявки– когато е инсталиран, обработката му не изчиства параметрите при преминаване от заявка към заявка в общия списък със заявки.

Задайте параметър със списък от стойностиМного е просто, просто когато избирате стойност на параметър, щракнете върху бутона за изчистване на стойността (кръст), системата ще ви подкани да изберете типа данни, където трябва да изберете „Списък със стойности“:

Също така в горния панел има бутон за извикване на настройките на конзолата за заявки:

Тук можете да зададете параметри за автоматично запазване на заявки и параметри за изпълнение на заявки.

Текстът на заявката се въвежда в полето за заявка на конзолата. Това може да стане чрез просто въвеждане на тест на заявка или чрез извикване на специален инструмент - дизайнер на заявки.

Дизайнерът на заявки 1C 8 се извиква от контекстното меню (десен бутон на мишката), когато щракнете върху полето за въвеждане:

Това меню също има такива полезни функции като изчистване или добавяне на нов ред („|“) към заявката или получаване на кода на заявката в тази удобна форма:

Заявка = Нова заявка;
Request.Text = ”
|ИЗБЕРЕТЕ
| Валути.Връзка
| ОТ
| Справочник.Валути AS Валути”;
RequestResult = Request.Execute();

Долното поле на конзолата за заявки показва полето за резултат от заявката, поради което е създадена тази обработка:



Също така, конзолата за заявки, в допълнение към списъка, може да показва данни под формата на дърво - за заявки, съдържащи общи суми.

Оптимизация на заявките

Една от най-важните точки за увеличаване на производителността на 1C предприятие 8.3 е оптимизациязаявки. Тази точка също е много важна, когато преминаване на сертифицирането. По-долу ще говорим за типични причини за неоптимална производителност на заявките и методи за оптимизация.

Селекции във виртуална таблица с помощта на конструкцията WHERE

Необходимо е да се прилагат филтри към детайлите на виртуалната таблица само чрез VT параметрите. При никакви обстоятелства не трябва да използвате конструкцията WHERE за избор във виртуална таблица; това е сериозна грешка от гледна точка на оптимизацията. В случай на избор чрез WHERE, всъщност системата ще получи ВСИЧКИ записи и едва след това ще избере необходимите.

ДЯСНО:

ИЗБИРАМ

ОТ
Регистър на натрупвания. Взаимни разплащания с участници в организации. Салда (
,
Организация = &Организация
И Индивидуално = &Индивидуално) КАК Взаимни разплащания с Участници в Организации Салда

ГРЕШНО:

ИЗБИРАМ
Взаимни разплащания с участниците в организациите Салда
ОТ
Регистър на натрупвания Взаимни разчети с участници в организации Салда (,) КАК Взаимни разчети с участници в организации Салда
КЪДЕТО
Взаимни разплащания с участници в организациите Салда Организация = & Организация
И Взаимни разплащания с участници в баланси на организации. Индивидуално = &Индивидуално

Получаване на стойността на поле от сложен тип с помощта на точка

При получаване на данни от сложен тип в заявка чрез точка, системата свързва с ляво съединение точно толкова таблици, колкото са възможните типове в полето на сложния тип.

Например, крайно нежелателно е оптимизацията да има достъп до полето за запис в регистъра – регистратор. Регистраторът има съставен тип данни, сред които са всички възможни типове документи, които могат да записват данни в регистъра.

ГРЕШНО:

ИЗБИРАМ
Запис Set.Recorder.Date,
RecordSet.Quantity
ОТ
RegisterAccumulations.ProductsOrganizations AS SetRecords

Тоест, всъщност такава заявка ще има достъп не до една таблица, а до 22 таблици на база данни (този регистър има 21 типа регистратори).

ДЯСНО:

ИЗБИРАМ
ИЗБОР
WHEN ProductsOrg.Registrar LINK Документ. Продажби на продукти и услуги
THEN EXPRESS(ProductsOrganization.Registrar AS Document.Sales of GoodsServices).Дата
WHEN GoodsOrg.Registrar LINK Document.Receipt of GoodsServices
THEN EXPRESS(GoodsOrg.Registrar AS Document.Receipt of GoodsServices).Дата
КРАЙ КАТО ДАТА,
ProductsOrg.Quantity
ОТ
RegisterAccumulations.ProductsOrganizations AS ProductsOrganization

Или вторият вариант е да добавите такава информация към детайлите, например в нашия случай добавяне на дата.

ДЯСНО:

ИЗБИРАМ
ПродуктиОрганизации.Дата,
ПродуктиОрганизации.Количество
ОТ
Регистър на натрупванията Стоки на организации AS Стоки на организации

Подзаявки в условие за присъединяване

За оптимизация е неприемливо използването на подзаявки в условия на присъединяване; това значително забавя заявката. В такива случаи е препоръчително да се използва VT. За да се свържете, трябва да използвате само метаданни и VT обекти, като предварително сте ги индексирали по полета за връзка.

ГРЕШНО:

ИЗБИРАМ …

ЛЯВО ПРИСЪЕДИНЯВАНЕ (
ИЗБЕРЕТЕ ОТ RegisterInformation.Limits
КЪДЕТО …
ГРУПИРАЙ ПО...
) ОТ …

ДЯСНО:

ИЗБИРАМ …
PUT Ограничения
ОТ Информационен регистър.Ограничения
КЪДЕТО …
ГРУПИРАЙ ПО...
ИНДЕКС ПО...;

ИЗБИРАМ …
ОТ Документ Продажби на стоки и услуги
LEFT JOIN Граници
ОТ …;

Обединяване на записи с виртуални таблици

Има ситуации, когато при свързване на виртуална маса с други, системата не работи оптимално. В този случай, за да оптимизирате производителността на заявката, можете да опитате да поставите виртуалната таблица във временна таблица, като не забравяте да индексирате обединените полета в заявката за временна таблица. Това се дължи на факта, че VT често се съдържат в няколко физически таблици на СУБД; в резултат на това се компилира подзаявка, за да ги изберете, и проблемът се оказва подобен на предишната точка.

Използване на селекции въз основа на неиндексирани полета

Една от най-честите грешки при писане на заявки е използването на условия за неиндексирани полета, това противоречи правила за оптимизиране на заявки.СУБД не може да изпълни оптимално заявка, ако заявката включва избор на неиндексируеми полета. Ако вземете временна таблица, трябва също да индексирате полетата за връзка.

Трябва да има подходящ индекс за всяко условие. Подходящ индекс е този, който отговаря на следните изисквания:

  1. Индексът съдържа всички полета, изброени в условието.
  2. Тези полета са в самото начало на индекса.
  3. Тези селекции са последователни, т.е. стойностите, които не са включени в условието на заявката, не са „вградени“ между тях.

Ако СУБД не избере правилните индекси, цялата таблица ще бъде сканирана - това ще има много негативно влияние върху производителността и може да доведе до продължително блокиране на целия набор от записи.

Използване на логическо ИЛИ в условия

Това е всичко, тази статия обхваща основните аспекти на оптимизацията на заявките, които всеки 1C експерт трябва да знае.

Много полезен безплатен видео курс за разработване и оптимизиране на заявки, Горещо препоръчвамза начинаещи и повече!



Свързани публикации