Рахунок у ієрархії запит 1с. Приклади запитів для роботи з ієрархічними довідниками

У цьому розділі наведено приклади вирішення типових завдань при роботі з ієрархічними довідниками.

Отримання елементів ієрархічного довідника, що у підпорядкуванні заданої групи

Для отримання підлеглих елементів ієрархічного довідника у мові запитів передбачено конструкцію В ІЄРАРХІЇ. Приклад використання У ІЄРАРХІЇ:


ВИБРАТИ
Номенклатура.
Номенклатура.ЗакупівельнаЦіна
З

У цьому прикладі будуть отримані всі записи довідника Номенклатура, що знаходяться в групі &Група, включаючи її саму, її підлеглі групи та елементи, що належать підлеглим групам.

Якщо ж нас цікавлять лише елементи та групи, що знаходяться безпосередньо у заданій групі, то такі елементи ми можемо отримати, встановивши умову на полі Батько. Приклад:


ВИБРАТИ
Номенклатура.
Номенклатура.Найменування ЯК Найменування,
Номенклатура.ЗакупівельнаЦіна
З
Довідник Номенклатура ЯК Номенклатура

ДЕ
Номенклатура.Батько = Група

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

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

Для перевірки наявності підлеглих записів елемента довідника можна користуватися запитом, аналогічним до представленого:

У цьому прикладі посилання елемента, для якого необхідно перевірити наявність дочірніх елементів, записується у параметр запиту "Батько". Після цього запиту необхідно перевірити результат на порожнечу. Якщо результат не порожній, підпорядковані записи є. Інакше – ні. Приклад:


Якщо Запит.Виконати().Порожній() Тоді
Повідомити("Зписів немає");
Інакше
Повідомити("Записи є");
КінецьЯкщо;

Отримання всіх батьків елемента

У мові запитів не передбачено спеціальних засобів отримання всіх батьків елемента. Для виконання завдання можна скористатися ієрархічними результатами, проте отримання ієрархічних результатів оптимізовано для побудови результатів великої кількості записів, і не дуже ефективно для отримання батьків одного елемента. Для більш ефективного отримання всіх батьківських записів елемента, рекомендується перебирати у циклі батьків невеликими порціями. Приклад:


ПоточнийЕлементноменклатури = Елементноменклатура;

Запит = Новий Запит("ВИБРАТИ
| Номенклатура.
| Номенклатура.Батько.Батько,
| Номенклатура.Батько.Батько.
| Номенклатура. Батько. Батько. Батько. Батько,
| Номенклатура.Батьки.Батьки.Батьки.Батьки.Батьки.

| Довідник Номенклатура ЯК Номенклатура
|ДЕ
| Номенклатура.Посилання = &ПоточнийЕлементНоменклатури";

Поки що Істина Цикл
Запит.ВстановитиПараметр("Поточний Елемент Номенклатури", Поточний Елемент Номенклатури);
Результат = Запит.Виконати();
Якщо Результат.Порожній() Тоді
Перервати;
КінецьЯкщо;
Вибірка = Результат.Вибрати();
Вибірка.Наступний();
Для НомерКолонки = 0 За Результат.Колонки.Кількість() - 1 Цикл
ПоточнийЕлементНоменклатури = Вибірка[НомерКолонки];
Перервати;
Інакше
Повідомити(ПоточнийЕлементНоменклатури);
КінецьЯкщо;
КінецьЦикл;

Якщо ПоточнийЕлементНоменклатури = Довідники.Номенклатура.ПустаПосилання() Тоді
Перервати;
КінецьЯкщо;
КінецьЦикл;

У цьому прикладі у вікно службових повідомлень виводяться всі батьки для посилання, записаного у змінну Елемент Номенклатура. У циклі вибирається по 5 батьків заслання.

Якщо кількість рівнів у довіднику обмежена і невелика, можливо отримання всіх батьків одним запитом без циклу.

Виведення ієрархічного довідника у звіт

Для виведення ієрархічного довідника у звіт із збереженням ієрархії необхідно користуватися запитом аналогічним до наступного:


ВИБРАТИ
Номенклатура.
Номенклатура.Найменування ЯК Найменування,
Номенклатура.ЗакупівельнаЦіна
З
Довідник Номенклатура ЯК Номенклатура
ВПОРЯДКУВАТИ ЗА
Найменування Ієрархія

Даний запит вибирає всі записи з довідника та впорядковує ієрархію. Результат буде впорядкований за назвою з урахуванням ієрархії.

Для того, щоб групи довідника розміщувалися вище елементів, необхідно в даному запиті замінити пропозицію ПОРЯДОЧИТИ ПО на наступне:


ВПОРЯДКУВАТИ ЗА
Номенклатура.ЦеГрупа Ієрархія,
Найменування

Результат, як і раніше, буде впорядкований за ієрархією, проте групи будуть розташовуватися вище за елементи.

Можлива також заміна пропозиції ПОРЯДОЧИТИ ПО на пропозицію автоупорядкування. І тут результат буде упорядкований відповідно до налаштуваннями довідника, тобто. якщо в довіднику зазначено, що групи повинні розташовуватися вище за елементи, то вони будуть розташовані вище.

Здобути ієрархічну структуру довідника також можливо і за допомогою підсумків.


ВИБРАТИ
Номенклатура.
Номенклатура.Найменування ЯК Найменування,
Номенклатура.ЗакупівельнаЦіна

З Довідник.Номенклатура ЯК Номенклатура

ДЕ
(Номенклатура.ЦеГрупа = БРЕХНЯ)

ВПОРЯДОЧИТИ ПО Найменування

Отримання підсумків з ієрархії

Для отримання підсумків з ієрархії у запиті необхідно в пропозиції ПІДСУМКИ ПО вказати ключове слово ІЄРАРХІЯ після вказівки поля, за яким розраховуватимуться підсумки. Приклад звіту "Обороти номенклатури" з одержанням підсумків з ієрархії:


ВИБРАТИ

З

Номенклатура ІЄРАРХІЯ

В результаті цього запиту будуть розраховані підсумки не тільки для кожної номенклатури, але й для груп, до яких належить та чи інша номенклатура.

У разі, коли не потрібні підсумки за елементами, а потрібні підсумки лише за групами, нам необхідно використовувати у підсумках конструкцію ТІЛЬКИ ІЄРАРХІЯ. Приклад:


ВИБРАТИ
Облік НоменклатуриОбороти.Номенклатура ЯК Номенклатура,
Облік Номенклатури Обороти. Номенклатура.
ОблікНоменклатуриОбороти.КількістьОборот ЯК КількістьОборот
З
Реєстр Накопичення. Облік Номенклатури.
ПІДСУМКИ СУМА(КількістьОбіг)
Номенклатура ТІЛЬКИ ІЄРАРХІЯ

В результаті цього запиту будуть підсумкові записи лише груп номенклатури.

Увага! Перед вами ознайомлювальна версія уроку, матеріали якого можуть бути неповними.

Увійдіть на сайт як учень

Увійдіть як учень, щоб отримати доступ до матеріалів школи

Мова запитів 1С 8.3 для програмістів-початківців: оператори МІЖ і В

Логічний оператор МІЖ

Оператор МІЖдозволяє перевірити, чи входить значеннявиразу, вказаного зліва від нього, в діапазон , вказаний праворуч ( разом з межами діапазону, тобто включно).

Таким чином, замість

Якщо ж необхідно навпаки вибрати всю їжу, калорійність якої не входить у діапазон, то підійде наступна форма заперечення (з'явилася частка НЕ):

Оператор МІЖможна застосовувати не лише до числових діапазонів. З датами він також добре працює:

Логічний оператор В

Перевірка збігу з одним із перерахованих

Оператор Удозволяє перевірити, чи збігається значеннявирази, зазначеного зліва від нього, з одним із значень, описаних праворуч .

Таким чином, замість

можна написати лаконічніше

А результат буде той самий:

Якщо ж необхідно навпаки вибрати всю їжу, колір якої не збігається з жодним значенням зі списку, то підійде наступна форма заперечення (з'явилася частка НЕ):

Перевірка збігу значення з одним із результатів запиту

Нехай нам потрібно вибрати з бази лише ті кольори, які є в описі їжі. Таким чином, у відібраному списку не повинен бути присутнім, наприклад, чорний колір, тому що їжі чорного кольору в нашій базі немає. Ви читаєте ознайомлювальну версію уроку, повноцінні уроки .

Один із варіантів як це можна зробити - використовувати логічний оператор У, праворуч від якого буде підзапит, що вибирає назви кольорів з усіх записів довідника Їжа:

ВИБРАТИ Найменування З Довідник. Кольори ДЕ Найменування В ( ВИБРАТИ Колір. Найменування З Довідник. Їжа )

Як відступ згадаю, що з внутрішнього запиту є можливість звертатися до полів зовнішнього запиту.

Знову ж таки, для цієї форми оператора У, також доступне використання частки НЕперед ним.

Перевірка приналежності з ієрархії для довідників

Для довідників перевірка може здійснюватися і належність з ієрархії.

Для початку розглянемо приклад ієрархічного довідника. Відкрийте довідник "Міста" у нашій базі:

Зверніть увагу, що його елементи відрізняються від інших довідників ( Їжа, кольори, Смаки) наявністю жовтих папок. Це групи довідника.

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

Щоб переглянути вміст групи, зробіть на ній подвійне клацання мишкою:

Щоб вийти на рівень вище, знову зробіть подвійне клацання по групі:

Таким чином, ієрархічний довідник може містити як звичайні елементи (наприклад, Ріо-де-Жанейро, Салвадор), так і групи (наприклад, Бразилія, Індія). Ви читаєте ознайомлювальну версію уроку, повноцінні уроки .

Кожен елемент (будь то група чи звичайний елемент) може бути батько. Наприклад, батьком елемента Ріо-де-Жанейро є група Бразилія:

І це правильно, тому що Ріо-де-Жанейро входить до складу групи Бразилія в ієрархії довідника:

Тепер давайте напишемо такий запит, який буде вимагати обрану групу-країну і всі елементи-міста, що входять до неї.

Зверніть увагу, що в тексті запиту перед ім'ям Група Країна стоїть амперсанд (&). Імена з амперсандом автоматично розпізнаються системою як параметри, значення яких має бути задано перед виконанням запиту.

Після того, як ми вставимо цей запит у консоль і натиснемо кнопку "Виконати" для оновлення, у нас з'явиться можливість задати цей параметр:

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

Якщо тепер ми натиснемо кнопку "Виконати", результат запиту буде наступним:

У результат запиту потрапила сама група (Росія) та всі елементи, що входять до її складу (Перм, Красноярськ та Воронеж).

Якщо замість Росії вибрати "Бразилія", то результат буде таким:

Таким чином, результатом оператора В ІЄРАРХІЇбуде ІСТИНА, якщо значення виразу зліва є посиланням на елемент довідника і входить до безлічі значень праворуч (Бразилія) або ієрархічно належить якійсь групі, що міститься в цій множині (Сан-Паулу, Ріо-де-Жанейро, Салвадор).

Як безліч значень, на збіг з якими виконується перевірка, може фігурувати і результат запиту. У цьому випадку праворуч від оператора Унеобхідно вказати опис запиту:

Для оператора В ІЄРАРХІЇтакож доступне використання частки НЕперед ним.

Пройдіть тест

Розпочати тест

1. Логічний оператор МІЖ перевіряє значення

2. Логічне вираження 1 МІЖ 1 І 1

3. Логічне вираження 1 НЕ МІЖ 2 І 2

4. Логічний оператор перевіряє

5. Логічний оператор дозволяє перевіряти

Конструкція "В ІЄРАРХІЇ" у запитах 1С:Підприємства 8.x дозволяє отримати підпорядковані елементи ієрархічного об'єкта конфігурації по заданому відбору. Сьогодні у статті розглянемо приклад її використання, а також дії платформи на боці СУБД та її вплив на продуктивність.

Використання

Розглянемо простий приклад використання конструкції "В ІЄРАРХІЇ". Під час виконання наступного запиту будуть отримані підпорядковані елементи ієрархічного довідника "Товари" для переданого значення змінної "Посилання".

Текст Запиту = " ВИБРАТИ | Товари . Посилання,| Товари . Артикул |З| Довідник . Товари ЯК|ДЕ | Товари . Посилання В ІЄРАРХІЇ(& Посилання)"

У тестовій базі довідник "Товари" має такі тестові дані:

Звичайно, на зображенні показані не всі записи довідника. Скріншот показує лише структуру зберігання даних у ієрархічному довіднику. У таблиці довідника зберігаються 10 груп верхнього рівня, у кожній з них міститься 5 вкладених груп із 200 елементами у кожній.

Повернемось до тестового запиту. Передаємо у параметр "&Посилання" посилання на групу "Група - 1" (див. скріншот вище). Тоді результат виконання запиту буде виглядати так:

Як бачимо, запит повернув посилання на саму верхню групу (передану параметром), і навіть вкладені групи з які у них елементами. Таким чином, використання конструкції "В Ієрархії" дозволяє зручним чином отримувати ієрархічно підпорядковані дані.

Синтаксис мови запитів 1C:Підприємства та класичного SQLдуже схожі у деяких моментах. Але для виразу "В ІЄРАРХІЇ" немає аналога в мові запитів SQL, як, наприклад, для вираження мови запитів платформи "В" є аналогічний SQL-оператор "IN". Тому цікавою є робота платформи із СУБД при використанні даного оператора.

За лаштунками

Отже, почнемо. Для прикладу використовуватимемо раніше написаний запит до довідника "Товари". Аналізувати дії платформи будемо для двох ситуація:

  1. Як параметр "&Посилання" передамо групу верхнього рівня "Група 1" (як це ми зробили раніше).
  2. У параметр передамо посилання на групу "Група 1 - 1", вкладену в групу верхнього рівня "Група 1".

Тепер по порядку. У першому випадку платформа виконає такі дії на SQL-сервері:

1. Спочатку виконується SQL-запит отримання посилання на групу довідника, передану як параметр, і всіх підлеглих їй груп. Результат міститься в часовій таблиці "#tt1".

2. На другому етапі двічі виконується однаковий запит:

На скріншоті детально прокоментовано текст SQL-запиту. Якщо коротко, запит дозволяє вибрати підпорядковані елементи для груп, посилання на які знаходяться в тимчасовій таблиці. Залишається питання: "Навіщо запит виконується двічі?" Тут відповідь проста: спочатку запит отримує підлеглі елементи для груп першого рівня, які вже містяться у тимчасовій таблиці (див. пункт 1). Потім другий запит отримує підлеглі елементи для підлеглих груп другого рівня. Оскільки на третьому рівні ієрархії не присутня жодна група довідника, цей запит більше не виконується.

У нашому випадку, другий запит поверне порожній результат, оскільки для записів, що знаходяться на 3-му рівні ієрархії, немає підлеглих елементів (там немає жодної групи).

3. Для отримання кінцевого результату запиту платформа формує наступний SQL-запит:

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

4. На останньому кроці платформа 1С:Підприємство 8.x видаляє тимчасову таблицю "#tt1", оскільки надалі вона вже не використовуватиметься.

На цьому процес виконання оператора "В ІЄРАРХІЇ" завершено.Нагадаю, що розглянута послідовність дій на SQL-сервері була виконана, коли ми запит на стороні платформи передавали посилання на групу верхнього рівня "Група - 1". Але як поведеться платформа, якщо ми як параметр "&Посилання" передамо посилання на групу другого рівня "Група - 1 - 1"? Все відбудеться аналогічним чином, крім наступного моменту: вище, у другому етапі виконання SQL-запитів платформою, було написано, що запит для отримання підлеглих елементів виконувався двічі - у разі отримання підлеглих елементів для групи "Група - 1 - 1" це не так . Запит буде виконано лише один раз.

Справа в тому, що кількість запитів на одержання підлеглих елементів залежить від кількості груп ієрархії. Іншими словами, якщо на рівні ієрархії елементів міститься хоча б одна група, то буде виконано запит із пункту 2.

Вплив на продуктивність

Неправильне використання будь-якого оператора в запиті може призвести до неоптимальної роботи системи. Розглядається оператор "В ІЄРАРХІЇ" не виняток. Його потрібно застосовувати з обережністю, оскільки він набагато ускладнює алгоритм виконання SQL-запитів до бази і цим збільшує навантаження на сервер СУБД.

Наведу приклад неоптимального запиту, який може призвести до вищеназваних сумних наслідків:

ВИБРАТИ Товари. Посилання З Довідник. Товари ЯК Товари ДЕ (Товари. Посилання В ІЄРАРХІЇ (& Посилання) АБО Товари. Посилання В ІЄРАРХІЇ (& Посилання1) АБО Товари. Посилання В ІЄРАРХІЇ (& Посилання2) )

Як можна здогадатися, запит призведе до формування безлічі SQL-запитів, що спричинить зниження продуктивності інформаційної системи.

Робіть висновки!

Висновки робити вам. Скажу лише, що оператор "В ІЄРАРХІЇ" використовується платформою для системи компонування даних, коли в умовах відбору присутні "У ГРУПІ", "У ГРУПІ З СПИСКУ" та інші. Думаю не варто пояснювати, що при неправильних маніпуляціях користувачі можуть поставити дуже складний відбір і підвищити навантаження на сервер 1С і СУБД в кілька разів. Давайте змінювати установки лише досвідченим користувачам.

Та й зрозуміло, при написанні власних механізмів звертайте увагу на оператор "В ІЄРАРХІЇ". Дуже зручний з одного боку і небезпечний з іншого.

Що таке довідник 1с і для чого він потрібний? Довідник зберігає умовно-постійну інформацію, тобто. інформація, яка на тривалому проміжку часу майже не змінюється. Наприклад, довідник "Номенклатура" містить перелік товарів, що продаються або випускаються. Також довідник може містити безліч властивостей, що описують елемент довідника.

Якщо взяти для порівняння стать людини, то тут список обмежений і не змінений, тому для нього краще підходить перерахування.

Створивши новий довідник, ми побачимо наступну картину.

Розглянемо усі його закладки.

Основні

Тут вказується ім'я (ідентифікатор в базі) і синонім (назва користувача довідника). Необов'язковим є коментар, який може пояснювати призначення довідника або описувати його особливості.

Ієрархія

На цій закладці можна налаштувати глибину вкладення елементів довідника. За допомогою цієї настройки зручно розмежовувати та деталізувати елементи за якимись критеріями. Наприклад, товари "Шафи" в одній групі, а товари "Столи" в іншій. За умовчанням під час створення довідник представляє список елементів. Якщо поставити прапорець Ієрархічний довідник, кожен елемент може бути підпорядкований іншому елементу (групі). Нижче наведено варіанти налаштування цієї закладки та зміна відображення в режимі користувача.

Вид ієрархії:

Ієрархія груп та елементів

При цьому параметрі вкладення елементів може бути тільки в групи (папки).

Тут, як Ви бачите, у всіх елементів та груп стали однакові значки, і вкладеність може бути у будь-якого елемента.

Розміщувати групи зверху

При установці цього прапорця групи завжди будуть вгорі, інакше будуть розташовані в порядку сортування, наприклад:

Обмеження кількості рівнів ієрархії

Якщо тут прапорець не встановлений, то вкладеність необмежена.

Якщо прапорець встановлено, нижче можна вказати кількість рівнів.

Власники

На закладці власники можуть бути зазначені інші довідники стосовно, до яких цей є підлеглим. Схема відносин підлеглих довідників схожа на схему відносин ієрархічного довідника, тільки тут як батько виступає інший довідник і називається власником. У типових конфігураціях хорошим прикладом є підпорядкування довідника "Договори" довіднику "Контрагенти", т.к. не може бути договору, що не належить будь-якому контрагенту.

У полі "Список власників довідника" вказується список довідників, до яких належать елементи даного довідника.

Нижче в полі «Використання підпорядкування» вказується, чому підпорядковуватимуться елементи даного довідника.

Як дізнатися програмно довідник ієрархічний чи ні

Для цього потрібно звернутися до метаданих

ЦеІєрархічнийДовідник = Метадані.Довідники.Контрагенти.Ієрархічний;

Продовження слідують…

Мова запитів у 1С 8 — це спрощений аналог широко відомої «структурованої мови програмування» (як найчастіше її називають SQL). Але в 1С він використовується тільки для читання даних, зміни даних застосовується об'єктна модель даних.

Ще одна цікава відмінність – російський синтаксис. Хоча насправді можна використовувати і англомовні конструкції.

Приклад запиту:

ВИБРАТИ
Банки.
Банки.КоррРахунок
З
Довідник. Банки ЯК Банки

Даний запит дозволить побачити нам інформацію про найменування та кореспондентський рахунок усіх існуючих у базі даних банків.

Мова запитів – найпростіший та найефективніший спосіб отримання інформації. Як очевидно з прикладу вище, у мові запитів необхідно апелювати іменами метаданих ( – це перелік об'єктів системи, у тому числі складається конфігурація, тобто довідники, документи, регістри тощо.).

Опис конструкцій мови запитів

Структура запитів

Для отримання даних достатньо використовувати конструкції "ВИБРАТИ" (select) і "З" (from). Найпростіший запит має такий вигляд:

ВИБРАТИ * З Довідники.Номенклатура

Де "*" означає вибір всіх полів таблиці, а Довідники. Номенклатура - ім'я таблиці в базі даних.

Розглянемо складніший і загальний приклад:

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

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

ЗГРУПУВАТИ ПО
<ИмяПоля1>

ВПОРЯДКУВАТИ ЗА
<ИмяПоля1>

ПІДСУМКИ
<ИмяПоля2>
ПЗ
<ИмяПоля1>

У даному запиті ми вибираємо дані полів «Ім'яПоля1» та «Ім'яПоля1» з таблиць «Ім'яТаблиці1» та «Ім'яТаблиці», присвоюємо полям синоніми за допомогою оператора «КАК», з'єднуємо їх за умовою «УмоваЗ'єднанняТаблиць».

З отриманих даних ми відбираємо тільки дані, що відповідають умові з «ДЕ» «Умова Відбору Даних». Далі ми групуємо запит по полю «Ім'яПоля1», при цьому підсумовуючи «Ім'яПоля2».

Останньою дією ми сортуємо запит за допомогою конструкції «ПОРЯДОЧИТИ ПО».

Загальні конструкції

Розглянемо загальні конструкції мови запитів 1С 8.2.

ПЕРШІn

За допомогою цього оператора можна отримати n кількість перших записів. Порядок записів визначається порядком запиту.

ВИБРАТИ ПЕРШІ 100
Банки.
Банки.Код ЯК БІК
З
Довідник. Банки ЯК Банки
ВПОРЯДКУВАТИ ЗА
Банки.Найменування

Запитом буде отримано перші 100 записів довідника «Банки», впорядкованих за абеткою.

ДОЗВОЛЕНІ

Ця конструкція актуальна для роботи з механізмом. Суть механізму обмеження читання (та інших дій) користувачам для конкретних записів у таблиці бази даних, а чи не таблиці загалом.

Якщо користувач намагається за допомогою запиту прочитати записи, недоступні йому, він отримає повідомлення про помилку. Щоб цього уникнути, слід використовувати конструкцію «ДОЗВОЛЕНІ», тобто запит читатиме лише дозволені йому записи.

ВИБРАТИ ДОЗВОЛЕНІ
СховищеДодатковоїІнформації.Посилання
З
Довідник.СховищеДодатковоїІнформації

РІЗНІ

Використання «РІЗНІ» дозволить виключити попадання рядків-дублів у результат запиту 1С. Дублювання означає збіг всіх полів запиту.

ВИБРАТИ ПЕРШІ 100
Банки.
Банки.Код ЯК БІК
З
Довідник. Банки ЯК Банки

ПорожняТаблиця

Ця конструкція використовується дуже рідко для об'єднання запитів. При об'єднанні може виникнути потреба вказати в одній із таблиць порожню вкладену таблицю. Для цього якраз підійде оператор «Порожня Таблиця»

Приклад із довідки 1С 8:

ВИБРАТИ Посилання.Номер, ПОРОЖНЯТАБЛИЦЯ.(Ном, Тов, Кол) ЯК Склад
З Документ.
ОБ'ЄДНАТИ ВСЕ
ВИБРАТИ Посилання.Номер, Склад.(НомерРядки, Товар, Кількість)
З Документ.РозхНакл Документ.ВидатковаНакладна.Склад.*

Є NULL

Дуже корисна функція, яка дозволяє уникнути багатьох помилок. ЄNULL() дозволяє замінити значення NULL на потрібне. Дуже часто використовується у перевірках на наявність значення у приєднаних таблицях, наприклад:

ВИБРАТИ
НоменклатураСпр.Посилання,
ЄNULL(ЗалишкиТовара.КількістьЗалишок,0) ЯК КількістьЗалишок
З


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

ЄNULL(РахунокФактураОтриманий.Дата, РахунокФактураВиданий.Дата)

ЯК – оператор, який дозволяє нам присвоїти ім'я (синонім) таблиці чи полю. Приклад використання ми бачили вище.

Дані конструкції дуже схожі - вони дозволяють отримати рядкове уявлення потрібного значення. Єдина відмінність у тому, що УЯВАННЯ перетворює будь-які значення в рядковий тип, а ПРЕДСТАВЛЕННЯ ПОСИЛАННЯ - тільки посилання. ПОДАННЯ ПОСИЛАННЯ рекомендується застосовувати в запитах системи компонування даних для оптимізації, якщо, звичайно, поле посилальних даних не планується використовувати у відборах .

ВИБРАТИ
Подання (Посилання) // рядок, наприклад «Авансовий звіт №123 від 10.10.2015
Подання(ПоміткаВидалення) ЯК ПоміткаВидаленняТекст, //рядок, «Так» або «Ні»
Подання Посилання(ПоміткаВидалення) ЯК ПоміткаВидаленняБулеве //булево, Істина або Брехня
З
Документ.АвансовийЗвіт

ВИРАЗИТИ

Виразити дозволяє конвертувати значення поля до потрібного типу даних. Можна перетворити значення як до примітивного типу, і до посилального типу.

Виразити для посилання типу використовується для обмеження запитуваних типів даних в полях складового типу, часто використовується для оптимізації роботи системи. Приклад:

ВИРАЗИТИ(ТаблицяВитрат.Субконто1 ЯК Довідник.СтаттіВитрат).ВідДіяльностіДля ПодатковогоОблікуВитрат

Для примітивних типів ця функція часто використовується для обмеження кількості символів на полях необмеженої довжини (з такими полями не можна порівнювати). Щоб уникнути помилки « Неправильні параметри операції порівняння. Не можна порівнювати поля
необмеженої довжини та поля несумісних типів
», необхідно виразити такі поля наступним чином:

ВИРАЗИТИ(Коментар ЯК Рядок(150))

РІЗНІСТЬДАТ

Отримайте 267 відеоуроків з 1С безкоштовно:

Приклад використання Є NULL у запиті 1С:

ВИБРАТИ * З
Спр
ЛІВОЕ З'ЄДНАННЯ РеєстрНакопичення.ТовариНаСкладах.Залишки ЯК ЗалишкиТовара
ПО НоменклатураСпр.Посилання = РеалізованіТовариКомітентівЗалишки.Номенклатура
ДЕ НЕ ЗалишкиТовара.КількістьЗалишок Є NULL

Тип даних у запиті можна визначити таким чином: за допомогою функцій ТИП() та ТИПЗНАЧЕННЯ() або за допомогою логічного оператора ПОСИЛАННЯ. Ці дві функції аналогічні.

Зумовлені значення

Крім використання у запитах переданих параметрів у мові запитів 1С можна використовувати визначені значення або . Наприклад, перерахування, зумовлені довідники, плани рахунків тощо. Для цього використовується конструкція «Значення()».

Приклад використання:

Де Номенклатура.ВидНоменклатури = Значення(Довідник.ВидиНоменклатури.Товар)

ДЕ Контрагенти.ВидКонтактноїІнформації = Значення(Перерахування.ВидиКонтактноїІнформації.Телефон)

ДЕ ЗалишкиПорахунків.РахунокОбліку = Значення(ПланРахунків.Госпрозрахунковий.ПрибуткиЗбитки)

З'єднання

З'єднання бувають 4 типи: ЛІВОЕ, ПРАВО, ПОВНЕ, ВНУТРІШНЄ.

ЛІВОЕ І ПРАВОЕ З'ЄДНАННЯ

З'єднання використовуються для зв'язку двох таблиць за певною умовою. Особливість при ЛІВОМУ З'ЄДНАННІу тому, що ми беремо першу вказану таблицю повністю та прив'язуємо за умовою другу таблицю. Поля другої таблиці, які вдалося прив'язати за умовою, заповнюються значенням NULL.

Наприклад:

Поверне всю таблицю Контрагентів і заповнить поле “Банк” лише тих місцях, де буде дотримуватися умова “Контрагенти.Найменування = Банки.Наименование”. Якщо умови не дотримуються, у полі Банк буде встановлено NULL.

ПРАВА З'ЄДНАННЯ в мові 1Сабсолютно аналогічно ЛІВОМУ з'єднанню, за винятком однієї відзнаки – у ПРАВОМУ З'ЄДНАННІ"Головна" таблиця - друга, а не перша.

ПОВНЕ З'ЄДНАННЯ

ПОВНЕ З'ЄДНАННЯвідрізняється від лівого і правого тим, що виводить усі записи із двох таблиць, з'єднує лише ті, які може з'єднати за умовою.

Наприклад:

З

ПОВНЕ З'ЄДНАННЯ
Довідник. Банки ЯК Банки

ПЗ

Мова запитів поверне обидві таблиці лише за виконаною умовою з'єднати записи. На відміну від лівого/правого з'єднання можлива поява NULL у двох полях.

ВНУТРІШНЯ З'ЄДНАННЯ

ВНУТРІШНЯ З'ЄДНАННЯвідрізняється від повного тим, що виводить ті записи, які змогли з'єднати за заданою умовою.

Наприклад:

З
Довідник.Контрагенти ЯК Клієнти

ВНУТРІШНЯ З'ЄДНАННЯ
Довідник. Банки ЯК Банки

ПЗ
Клієнти. Найменування = Банки. Найменування

Цей запит поверне лише рядки, в яких банк і контрагент мають однакову назву.

Об'єднання

Конструкція Об'єднати і об'єднати ВСЕ об'єднує два результати в один. Тобто. результат виконання двох буде «злитий» в один, загальний.

Тобто система працює так само, як і звичайні, тільки для тимчасової таблиці.

Як використовувати ІНДЕКСУВАТИ ПО

Проте слід зважити на один момент. Побудова індексу тимчасової таблиці також потребує часу виконання. Тому доцільно використовувати конструкцію ” ”, лише якщо точно відомо, що у часовій таблиці буде не 1-2 записи. В іншому випадку ефект може бути зворотним - швидкодія від індексованих полів не компенсує часу побудови індексу.

ВИБРАТИ
Валюта ЯК Валюта,
Курси Валют Зріз Останніх. Курс
ПОМІСТИТИ КурсиВалют
З
РеєстрВідомостей.КурсиВалют.ЗрізОстанніх(&Період,) ЯК КурсиВалютЗрізОстанніх
ІНДЕКСУВАТИ ПО
Валюта
;
ВИБРАТИ
ЦіниНоменклатури.
ЦіниНоменклатури.Ціна,
ЦіниНоменклатури.Валюта,
Курси Валют.Курс
З
РеєстрВідомостей.ЦіниНоменклатури.Зріз Останніх(&Період,
Номенклатура В (&Номенклатура) І ТипЦен = &ТипЦен) ЯК ЦіниНоменклатури
ЛІВОЕ З'ЄДНАННЯ Курси Валют ЯК Курси валют
ПО ЦіниНоменклатури.Валюта = КурсиВалют.Валюта

Угруповання

Мова запитів 1С дозволяє використовувати спеціальні агрегатні функції для групування результатів запитів. Угруповання можна використовувати без агрегатних функцій, для «усунення» дублів.

Існують такі функції:

Сума, Кількість, Кількість різних, Максимум, Мінімум, Середня.

Приклад №1:

ВИБРАТИ
Реалізація ТоварівПослугТовари.Номенклатура,
СУМА(РеалізаціяТоварівПослугТовари.Кількість) ЯК Кількість,
СУМА(РеалізаціяТоварівПослугТовари.Сума) ЯК Сума
З

ЗГРУПУВАТИ ПО
Реалізація ТоварівПослугТовари.Номенклатура

Запит отримує всі рядки з товарами та підсумовує їх за кількістю та сумами у розрізі номенклатури.

Приклад №2

ВИБРАТИ
Банки.
КІЛЬКІСТЬ(РІЗНІ Банки.Посилання) ЯК КількістьДублей
З
Довідник. Банки ЯК Банки
ЗГРУПУВАТИ ПО
Банки.

Даний приклад відобразить список БІКів довідника «Банки» та покаже, скільки дублів існує по кожному з них.

Підсумки

Підсумки – спосіб отримання даних із системи з ієрархічною структурою. Для підсумкових полів можуть використовуватися агрегатні функції, як угруповань.

Один із найпопулярніших способів використання підсумків у практиці – партійне списання товарів.

ВИБРАТИ




З
Документ.РеалізаціяТоварівПослуг.Товари ЯК РеалізаціяТоварівПослугТовари
ВПОРЯДКУВАТИ ЗА

ПІДСУМКИ
СУМА(Кількість),
СУМА(Сума)
ПЗ
Номенклатура

В результаті запиту вийде наступне ієрархічне:

Загальні підсумки

Якщо необхідно отримати підсумки з усіх «підсумків», використовуйте оператор «ЗАГАЛЬНІ».

ВИБРАТИ
Реалізація ТоварівПослугТовари.Номенклатура ЯК Номенклатура,
Реалізація ТоварівПослугТовари.Посилання ЯК Документ,
Реалізація ТоварівПослугТовари.Кількість ЯК Кількість,
Реалізація ТоварівПослугТовари.Сума ЯК Сума
З
Документ.РеалізаціяТоварівПослуг.Товари ЯК РеалізаціяТоварівПослугТовари
ВПОРЯДКУВАТИ ЗА
Реалізація ТоварівПослугТовари.Посилання.Дата
ПІДСУМКИ
СУМА(Кількість),
СУМА(Сума)
ПЗ
ЗАГАЛЬНІ,
Номенклатура

В результаті виконання запиту отримаємо наступний результат:

У якому 1 рівень угруповання – агрегування всіх корисних полів.

Упорядкування

Оператор ПОРЯДОЧИТИ ПО використовується для сортування результату запиту.

Сортування для примітивних типів (рядок, число, булев) відбувається за звичайними правилами. Для полів типів посилань сортування відбувається за внутрішнім поданням посилання (унікальний ідентифікатор), а не за кодом або за поданням посилання.

ВИБРАТИ

З
Довідник Номенклатура ЯК Номенклатура
ВПОРЯДКУВАТИ ЗА
Найменування

Запит виведе список найменувань довідника номенклатури, відсортованого за абеткою.

Автоупорядкування

Результат запиту без сортування є хаотично представлений набір рядків. Розробники платформи 1С не гарантують виведення рядків однакової послідовності при виконанні однакових запитів.

Якщо потрібно виводити записи таблиці в постійному порядку, необхідно використовувати конструкцію «Автоупорядкування».

ВИБРАТИ
Номенклатура.Найменування ЯК Найменування
З
Довідник Номенклатура ЯК Номенклатура
Автоупорядкування

Віртуальні таблиці

Віртуальні таблиці 1С – це унікальна особливість мови запитів 1С, якої немає в інших аналогічних синтаксисах. Віртуальна таблиця – швидкий спосіб отримання профільної інформації з регістрів.

Для кожного з типів регістрів свій набір віртуальних таблиць може відрізнятися залежно від налаштувань регістру.

  • зріз перших;
  • зріз останніх.
  • залишки;
  • обороти;
  • залишки та обороти.
  • рухи із субконто;
  • обороти;
  • обороти Дт Кт;
  • залишки;
  • залишки та обороти
  • субконто.
  • база;
  • дані графіка;
  • фактичний період дії.

Для розробника рішення дані беруться з однієї (віртуальної) таблиці, але насправді платформа 1С бере з безлічі таблиць, перетворюючи в потрібний вид.

ВИБРАТИ
ТовариНа СкладахЗалишкиІОбороти.Номенклатура,
ТовариНа СкладахЗалишкиІОбороти.КількістьПочатковийЗалишок,
ТовариНа СкладахЗалишкиІОбороти.КількістьОборот,
ТовариНа СкладахЗалишкиІОбороти.КількістьПрихід,
ТовариНа СкладахЗалишкиІОбороти.КількістьВитрата,
ТовариНа СкладахЗалишкиІОбороти.КількістьКінцевийЗалишок
З
РеєстрНакопичення.ТовариНаСкладах.ЗалишкиІОбороти ЯК ТовариНаСкладахЗалишкиІОбороти

Такий запит дозволяє швидко отримати велику кількість даних.

Параметри віртуальних таблиць

Дуже важливий аспект роботи з віртуальними таблицями використання параметрів. Параметри віртуальних таблиць – спеціалізовані параметри для відбору та налаштування.

Для таких таблиць вважається неправильним використання відбору конструкції «ДЕ». Крім того, що запит стає не оптимальним, можливе отримання неправильних даних.

Приклад використання таких параметрів:

Реєстр Накопичення.

Алгоритм роботи віртуальних таблиць

Наприклад, найбільш використовувана віртуальна таблиця типу «Залишки» зберігає дані двох фізичних таблиць – залишків та рухів.

При використанні віртуальної таблиці система виконує такі маніпуляції:

  1. Отримуємо найближче за датою та вимірами розраховане значення у таблиці підсумків.
  2. «Додаємо» суму з таблиці руху до суми з таблиці підсумків.


Такі прості дії можуть суттєво підвищити продуктивність системи загалом.

Використання конструктора запитів

Конструктор запитів- Інструмент, вбудований в систему 1С підприємство, істотно полегшує розробку запитів до бази даних.

Конструктор запиту має досить простий інтуїтивно зрозумілий інтерфейс. Проте розглянемо застосування конструктора запиту докладніше.

Запуск конструктора тексту запиту провадиться контекстним меню (правою кнопкою миші) у потрібному місці програмного коду.

Опис конструктора запиту 1С

Розглянемо кожну вкладку конструктора докладніше. Виняток – вкладка Побудовальник, це тема для окремої розмови.

Вкладка Таблиці та поля

На цій вкладці вказується джерело даних та поля, які необхідно виводити до звіту. Насправді тут описуються конструкції ВИБРАТИ.. ІЗ.

Як джерело може бути фізична таблиця бази даних, віртуальна таблиця регістрів, тимчасові таблиці, вкладені запити тощо.

У контекстному меню віртуальних таблиць можна задати параметри віртуальної таблиці:

Вкладка Зв'язку

Вкладка служить для опису з'єднань кількох таблиць, створює конструкції зі словом З'ЄДНАННЯ.

Вкладка Угруповання

На цій вкладці система дозволяє групувати та підсумовувати потрібні поля результату таблиці. Описується використання конструкцій ЗГРУПУВАТИ ПО, СУМУ, МІНІМУМ, СЕРЕДНЕ, МАКСИМУМ, КІЛЬКІСТЬ, КІЛЬКІСТЬ РІЗНИХ.

Вкладка Умови

Відповідає за все, що йде в тексті запиту після конструкції ДЕ, тобто за всі умови, що накладаються на отримані дані.

Вкладка Додатково

Вкладка Додатковорясніє всілякими параметрами, які є дуже важливими. Розглянемо кожну з властивостей.

Угруповання Вибірка записів:

  • Перші N– параметр, який повертає у запит лише N записів (оператор ПЕРШІ)
  • Без повторюваних– забезпечує унікальність отриманих записів (оператор РІЗНІ)
  • Дозволені– дозволяє вибирати тільки записи, які дозволяє вибрати система з урахуванням (конструкція ДОЗВОЛЕНІ)

Угруповання Тип запитувизначає, який буде тип запиту: вибірка даних, створення тимчасової таблиці або знищення тимчасової таблиці.

Нижче є прапор Блокувати отримані дані для подальшої зміни. Він дозволяє включити можливість встановлення блокування даних, що забезпечує збереження даних від моменту їх читання до зміни (актуально лише для Автоматичного режиму блокувань, конструкція ДЛЯ ЗМІНИ).

Вкладка Об'єднання/Псевдоніми

На цій вкладці конструктора запитів встановлюється можливість поєднання різних таблиць та псевдонімів (конструкція ЯК). У лівій частині зазначаються таблиці. Якщо встановити прапори навпроти таблиці, використовуватиметься конструкція ОБ'ЄДНАТИ, інакше – ОБ'ЄДНАТИ ВСЕ (відмінності двох способів). У правій частині вказуються відповідності полів у різних таблицях, якщо відповідність не вказана, запит повертатиме NULL.

Вкладка Порядок

Тут вказується порядок сортування значень (ПОРЯДОЧИТИ ПО) – за спаданням (УБУВАННЯ) або зростання (ВІР).

Також є цікавий прапор – Автоупорядкування(у запиті – АВТОУпорядкування). За замовчуванням система 1С виводить дані у “хаотичному” порядку. Якщо встановити цей прапор, система сортуватиме дані за внутрішніми даними.

Вкладка Пакет запитів

На вкладці конструктора запитів можна створювати нові та використовувати її в ролі навігації. У тексті запиту пакети поділяються символом “;” (кома).

Кнопка “Запит” у конструкторі запитів

У нижньому лівому куті конструктора запиту є кнопка Запит, за допомогою якого можна в будь-який момент переглянути текст запиту:

У цьому вікні можна внести корективи до запиту та виконати його.


Використання консолі запитів

Консоль запитів – простий та зручний спосіб для налагодження складних запитів та швидкого отримання інформації. У цій статті я спробую описати, як користуватися консоллю запитів, і дам посилання для завантаження консолі запитів.

Розглянемо цей інструмент докладніше.

Завантажити консоль запитів 1С

Насамперед, щоб почати роботу з консоллю запитів, її потрібно звідкись завантажити. Обробки зазвичай поділяються на два види - на керованих формах і звичайних (або іноді їх називають на 8.1 і на 8.2/8.3).

Я постарався об'єднати ці два види в одній обробці - у потрібному режимі роботи відкривається потрібна форма (у режимі, що керується, консоль працює тільки в товстому режимі).

Опис консолі запитів 1С

Почнемо розгляд консолі запитів із опису головної панелі обробки:

У шапці консолі запитів можна побачити час виконання останнього запиту з точністю до мілісекунди, що дозволяє порівнювати різні конструкції за продуктивністю.

Перша група кнопок командної панелі відповідає за збереження поточних запитів у зовнішньому файлі. Це дуже зручно, ви завжди зможете повернутися до написання складного запиту. Або, наприклад, зберігати список типових прикладів тих чи інших конструкцій.

Ліворуч, у полі “Запит”, можна створювати нові запити та зберігати їх у деревоподібній структурі. Друга група кнопок відповідає за управління списком запитів. За допомогою неї можна створити, скопіювати, видалити, перемістити запит.

  • Виконатизапит- Просте виконання та отримання результату
  • Виконати пакет– дозволяє переглянути всі проміжні запити у пакеті запитів
  • Перегляд тимчасових таблиць– дозволяє побачити результати, які повертають тимчасові запити у таблиці

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

Дозволяє встановити поточні параметри для запиту.

У вікні параметрів запиту цікаво наступне:

  • Кнопка Отримати із запитуавтоматично знаходить усі параметри у запиті для зручності розробника.
  • Прапор Єдині параметри для всіх запитів– під час встановлення його обробка не очищає параметри під час переходу від запиту на запит у загальному списку запитів.

Задати параметр списку значеньдуже просто, достатньо при виборі значення параметра натиснути кнопку очищення значення (хрестик), система запропонує вибрати тип даних, де треба вибрати “Список значення”:

Також у верхній панелі є кнопка виклику налаштувань консолі запитів:

Тут можна вказати параметри автозбереження запитів та параметри виконання запиту.

У полі запиту консолі входить текст запиту. Зробити це можна простим набором тесту запиту або викликом спеціального інструменту – конструктора запитів.

Конструктор запиту 1С8 викликається з контекстного меню (права кнопка миші) при натисканні на поле введення:

Також у цьому меню є такі корисні функції, як очищення або додавання в запит символів перенесення рядка (“|”) або отримання коду запиту ось у такому зручному вигляді:

Запит = Новий Запит;
Запит. Текст = ”
| ВИБРАТИ
| Валюти.

| Довідник. Валюти ЯК Валюти”;
РезультатЗапиту = Запрос.Выполнить();

У нижньому полі консолі запитів відображається поле результату запиту, заради чого і створена ця обробка:



Також консоль запитів, крім списку, вміє відображати дані у вигляді дерева — для запитів, що містять підсумки.

Оптимізація запитів

Одним із найважливіших пунктів у підвищенні продуктивності роботи 1С підприємства 8.3 є оптимізаціязапитів. Цей пункт також дуже важливий у здачі атестації. Нижче йтиметься про типові причини не оптимальної роботи запитів та способи оптимізації.

Відбори у віртуальній таблиці за допомогою конструкції ДЕ

Накладати фільтри на реквізити віртуальної таблиці необхідно лише за параметрами ВТ. У жодному разі для відбору у віртуальній таблиці не можна використовувати конструкцію ДЕ, це груба помилка з погляду оптимізації. У разі відбору за допомогою ДЕ за фактом система отримає ВСІ записи і потім відбере потрібні.

ПРАВИЛЬНО:

ВИБРАТИ

З
Регістр Накопичення. Взаєморозрахунки З Депонентами Організацій. Залишки (
,
Організація = &Організація
І Фізособа = &Фізособа) ЯК ВзаєморозрахункиЗДепонентамиОрганізаційЗалишки

НЕПРАВИЛЬНО:

ВИБРАТИ
ВзаєморозрахункиЗ ДепонентамиОрганізаційЗалишки.СумаЗалишок
З
Регістр Накопичення.
ДЕ
ВзаєморозрахункиЗ ДепонентамиОрганізаційЗалишки.Організація = &Організація
І Взаєморозрахунки З Депонентами Організацій Залишки. Фізособа = & Фізособа

Отримання значення поля складеного типу через точку

При отриманні даних складеного типу у запиті через точку система з'єднує лівим з'єднанням рівно стільки таблиць, скільки типів можливо в полі складеного типу.

Наприклад, украй небажано для оптимізації звертатися до поля запису регістру – реєстратор. Реєстратор має складовий тип даних, серед яких усі можливі типи документів, які можуть писати дані у регістр.

НЕПРАВИЛЬНО:

ВИБРАТИ
НабірЗаписів.Реєстратор.Дата,
Набір записів.
З
РеєстрНакопичення.ТовариОрганизации ЯК НабірЗаписів

Тобто за фактом такий запит буде звертатися не до однієї таблиці, а до 22 таблиць бази даних (у цього регістру 21 тип реєстратора).

ПРАВИЛЬНО:

ВИБРАТИ
ВИБІР
КОЛИ ТовариОрг.Реєстратор ПОСИЛАННЯ Документ.РеалізаціяТоварівПослуг
ТОДИ ВИРАЗИТИ(ТовариОрг.Реєстратор ЯК Документ.РеалізаціяТоварівПослуг).Дата
КОЛИ ТовариОрг.Реєстратор ПОСИЛАННЯ Документ.НадходженняТоварівПослуг
ТОДИ ВИРАЗИТИ (ТовариОрг.Реєстратор ЯК Документ.Надходження ТоварівПослуг).Дата
КІНЕЦЬ ЯК Дата,
ТовариОрг.Кількість
З
РеєстрНакопичення.ТовариОрганізацій ЯК ТовариОрг

Або другий варіант – додавання такої інформації до реквізиту, наприклад, у нашому випадку – додавання дати.

ПРАВИЛЬНО:

ВИБРАТИ
ТовариОрганізацій.Дата,
ТовариОрганізацій.Кількість
З
РеєстрНакопичення.ТовариОрганізацій ЯК ТовариОрганізацій

Підзапити за умови з'єднання

Для оптимізації неприпустимо використовувати підзапити в умовах з'єднання, це суттєво уповільнює роботу запиту. Бажано у разі використовувати ВТ. Для з'єднання потрібно використовувати лише об'єкти метаданих та ВТ, попередньо проіндексувавши їх по полях з'єднання.

НЕПРАВИЛЬНО:

ВИБРАТИ …

ЛІВОЕ З'ЄДНАННЯ (
ВИБРАТИ З РеєстрВідомостей.
ДЕ …
ЗГРУПУВАТИ ПО …
) ПЗ …

ПРАВИЛЬНО:

ВИБРАТИ …
ПОМІСТИТИ Ліміти
З РеєстрВідомостей.
ДЕ …
ЗГРУПУВАТИ ПО …
ІНДЕКСУВАТИ ПО …;

ВИБРАТИ …
З Документ.РеалізаціяТоварівПослуг
ЛІВОЕ З'ЄДНАННЯ Ліміти
ПЗ …;

З'єднання записів із віртуальними таблицями

Бувають ситуації, коли при з'єднанні віртуальної таблиці коїться з іншими система працює не оптимально. У такому випадку для оптимізації роботи запиту можна спробувати помістити віртуальну таблицю в тимчасову, не забувши проіндексувати поля, що з'єднуються в запиті тимчасової таблиці. Пов'язано це з тим, що ВТ часто містяться в кількох фізичних таблицях СУБД, в результаті їх вибірки складається підзапит, і проблема виходить аналогічною попередньому пункту.

Використання відборів по полям, що не індексуються.

Одна з найпоширеніших помилок при складанні запитів - використання умов по полям, що не індексуються, це суперечить правил оптимізації запитів.СУБД не може виконати запит оптимально, якщо в запиті накладається відбір по полям, що не індексуються. Якщо ж береться тимчасова таблиця – необхідно індексувати поля з'єднання.

Обов'язково для кожної умови повинен існувати відповідний індекс. Відповідним є індекс, що задовольняє наступним вимогам:

  1. Індекс містить усі поля, перелічені за умови.
  2. Ці поля знаходяться на початку індексу.
  3. Ці відбори йдуть поспіль, тобто між ними не «вклинюються» значення, які не беруть участі в запиті.

Якщо СУБД не підібрав правильні індекси, то буде просканована таблиця повністю – це дуже негативно позначиться на продуктивності та може призвести до тривалого блокування всього набору записів.

Використання логічного АБО в умовах

Ось і все, у цій статті було висвітлено основи аспектів оптимізації запитів, які повинен знати кожен експерт 1С.

Дуже корисний безкоштовний відеокурс з розробки та оптимізації запитів, категорично рекомендуюновачкам і не тільки!



Подібні публікації