Інтернет Windows Android

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

Довідники 1С - спеціалізований об'єкт древа метаданих, який служить для зберігання статичної інформації довідкового характеру. Наприклад, в типових конфігураціях можна побачити такі види:, Номенклатура, Співробітники, Основні засоби та т.д. Інформація в довідниках, як правило, часто не змінюється. Довідники надалі використовуються практично у всіх об'єктах обліку як розріз обліку або довідкова інформація.

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

Вкладка «Основні»

На вкладці «Основні» вказується ім'я, синонім, уявлення об'єктів, опис призначення.

Вкладка «Ієрархія довідника»

Тут встановлюється ієрархічність довідника.

Ієрархія в 1С 8.3 буває двох типів - « груп і елементів»І« елементів«. Відрізняється тим, що в першому випадку батьком (папкою) може бути тільки папка (група), а в другому випадку батьком може бути і елемент.

«Розміщувати групи зверху» - прапор відповідає за відображення груп в формі списку.

Також в налаштуваннях можна обмежити кількість груп ієрархії довідника відповідної настроюванням.

Вкладка «Власники»

Довідник може бути підпорядкований іншому довіднику. З точки зору конфігурації 1С 8.3 це означає, що у підлеглого елемента стає обов'язковим реквізит «Власник». Приклад такого зв'язку довідників в типових конфігураціях «Номенклатура - Одиниці Вимірювання», «Контрагенти-Договори Контрагентів».

Власником довідника можуть також бути наступні об'єкти метаданих:,.

Вкладка «Дані»

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

Найважливіша вкладка з точки зору програміста. На ній вказуються реквізити довідника.

У довідника є набір стандартних реквізитів, які не редагуються програмістом 1С 8.2, список їх можна побачити, натиснувши кнопку «Стандартні реквізити»:

Зупинюся на кожному докладніше:

  • Це група - реквізит з типом булево, що показує, група це або елемент. Доступний тільки в ієрархічному довіднику. Зверніть увагу, значення цього реквізиту неможливо змінити в режимі 1С: Підприємство.
  • код - реквізит, тип число або рядок (як правило рядок). Номер, який присвоюється системою автоматично. Як правило, розраховується як (попередній код + 1). Рекомендую використовувати саме строковий тип, тому як сортування числових значень відбувається не так, як потрібно. Можна використовувати як уявлення довідника в списку і в полях введення. Як правило, використовується для пошуку елемента при введенні по рядку. Якщо Вам потрібно прибрати поле Код, вкажіть в довжині рядка нуль.
  • Найменування - реквізит, обов'язковий до заповнення, строкового типу. Максимальна довжина рядки - 150 символів. Можна використовувати як уявлення довідника в списку і в полях введення. Як правило, використовується для пошуку елемента при введенні по рядку. Якщо Вам потрібно прибрати поле Найменування, вкажіть в довжині рядка нуль.
  • батько - реквізит, що має тип СправочнікСсилка.<ИмяТекущегоСправочника>. Доступний тільки в ієрархічному довіднику. Вказує на вищого батька в ієрархії. Якщо Елемент або Група знаходяться в корені довідника, вказується значення Довідник.<ИмяТекущегоСправочника>.ПустаяСсилка.
  • власник - посилання на елемент-власник поточного елемента (групи) довідника. доступний тільки в підпорядкованому довіднику 1С.
  • ПометкаУдаленія - реквізит з типом булево. Відповідає за відображення «позначки видалення» в системі. Позначений на видалення елемент вважається непридатним до використання, однак на ньому можуть залишатися старі руху в документах.
  • Посилання - поле строкового типу. У цьому реквізиті зберігається унікальний ідентифікатор об'єкта - GUID. Те, що в системі ми бачимо в візуальному відображенні під назву «посилання», - це всього лише уявлення об'єкта. Неможливо змінити.
  • зумовлений - тип булево, відображає, чи є елемент визначеним, про це пізніше. Неможливо змінити.

На вкладці «Дані» так само вказується уявлення довідника в системі, до версії 8.2.16 уявлення могло бути лише Кодом або Найменуванням. В свіжих версіях платформи (починаючи з 8.3) уявлення можна описати самостійно в модулі менеджера за допомогою процесора «ОбработкаПолученіяПредставленія».

Вкладка «Нумерація»

Тут вказуються настройки довідника по частині нумерації. Рекомендується використовувати саме автонумерацію. Контроль унікальності - прапор, який допомагає, якщо потрібно, зробити код унікальним. Якщо до встановленого прапором Ви спробуєте записати елемент довідника з неунікальним кодом, в 1С Ви отримаєте повідомлення «Код довідника став неунікальним».

Серія кодів - визначає, як нумерувати довідник, можна ввести нумерацію довідника в розрізі власника. Наприклад, у контрагента «Роги і копита» буде матися своя нумерація договорів - «1, 2, 3» і тд.

Вкладка «Форми»

Тут описуються форми для довідника. Якщо конфігурація запускається як в звичайному, так і керованому режимі, тоді вкладок з формами за замовчуванням буде дві: «основні» і «додаткові» - для звичайного і керованого застосування різні.

На цій сторінці є важлива властивість довідника - ««. Це дуже зручна функція 1С 8, що дозволяє при заповненні даних в поле введення не заходити до довідник, а набрати його найменування, код або т.п. і вибрати зі списку потрібний елемент. Виглядає це так:

Вкладка «Інше»

На вкладці можна отримати швидкий доступ до основних модулів довідника - модулю об'єкта і модулю менеджера.

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

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

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

Функції мови запитів 1с

Оскільки зрозумілий опис функцій мови запитів 1с зустрічається набагато рідше, ніж опис конструкцій, ми вирішили почати розглядати саме функції. Тепер давайте розберемо кожну окремо, описавши її призначення, синтаксис і приклад використання, отже:

1. функція ДАТА ЧАС - дана функція створює константне поле з типом "Дата".

синтаксис: ДАТА ЧАС(<Год>,<Месяц>,<День>,<Час>,<Минута>,<Секунда>)

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

2. функція РАЗНОСТЬДАТ - повертає різницю двох дат в одному з вимірів (рік, місяць, день, година, хвилина, секунда). Вимірювання передається в параметрі.

синтаксис: РАЗНОСТЬДАТ (<Дата1>, <Дата2>, <Тип>)

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

Запрос.Текст \u003d "ВИБРАТИ | РАЗНОСТЬДАТ (ДАТАВРЕМЯ (2015-го, 4, 17), ДАТАВРЕМЯ (2015-го, 2, 1), ДЕНЬ) | ЯК КолвоДней";

3. функція ЗНАЧЕННЯ - задає константне поле з певною записом з бази даних, також можна отримати порожню посилання будь-якого типу.

Синтаксис: ЗНАЧЕННЯ (<Имя>)

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

Запрос.Текст \u003d "ВИБРАТИ // зумовлений елемент | ЗНАЧЕННЯ (Справочнік.Валюти.Доллар) ЯК Долар, // порожня посилання | ЗНАЧЕННЯ (Документ.ПоступленіеТоваровУслуг.ПустаяСсилка) ЯК Надходження, // знач. перерахування | ЗНАЧЕННЯ (Перечісленіе.ЮрФізЛіцо.ФізЛіцо) і фізособи, // зумовлений рахунок | ЗНАЧЕННЯ (ПланСчетов.Хозрасчетний.Матеріали) ЯК Счет_10 ";

4. функція ВИБІР - перед нами аналог конструкції ЯКЩО який використовується в коді, тільки ця використовується в запитах 1С.

синтаксис: ВИБІР КОЛИ<Выражение> ТОДІ<Выражение> ІНАКШЕ<Выражение> КІНЕЦЬ

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

Запрос.Текст \u003d // якщо сума більше 7500, тоді повинна бути знижка 300 рублів, // тому якщо умова спрацьовує то функція // повертає Сума - 300 // в іншому випадку запит поверне просто Сума "ВИБРАТИ | ВИБІР | КОЛИ ТЧПоступленія.Сумма \u003e 7500 | ТОДІ ТЧПоступленія.Сумма - 300 | ІНАКШЕ ТЧПоступленія.Сумма | КІНЕЦЬ ЯК СуммаСоСкідкой | З | Документ.ПоступленіеТоваровУслуг.Товари ЯК ТЧПоступленія ";

5. функція ВИРАЗИТИ - дозволяє висловити константне поле певним типом.

синтаксис: ВИРАЗИТИ (НазваніеПоля ЯК НазваніеТіпа)

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

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

Ще є варіант використання функції ВИРАЗИТИ в полях змішаних типах, де такі зустрічаються? Найпростіший приклад це "Реєстратор" у будь-якого регістра. Так навіщо нам може знадобитися уточнювати тип в реєстраторі? Давайте розглянемо ситуацію коли ми з реєстратора вибираємо поле "Номер", з якої таблиці буде обраний номер? Правильна відповідь з усіх! Тому щоб наш запит працював швидко слід вказувати явний тип за допомогою функції ВИРАЗИТИ

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

Запрос.Текст \u003d "ВИБРАТИ | ВИРАЗИТИ (Номенклатура.Комментарій ЯК Рядок (300)) ЯК Коментар, | ВИРАЗИТИ (Номенклатура.Сумма ЯК Число (15,2)) ЯК Сума | З | Справочнік.Номенклатура ЯК Номенклатура";

6. функція ISNULL (Альтернативне написання ЕСТЬNULL) - якщо поле має тип NULL, то воно замінюється на другий параметр функції.

синтаксис: ЕСТЬNULL (<Поле>, <ПодставляемоеЗначение>)

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

Також відзначимо що тип NULL бажано ЗАВЖДИ замінювати на якесь значення, тому що порівняння з типом NULL завжди дає БРЕХНЯ навіть якщо ви порівнюєте NULL з NULL. Найчастіше значення NULL утворюються в результаті з'єднання таблиць (всі види з'єднань крім внутрішнього).

Запрос.Текст \u003d // Вибираємо всю номенклатуру і залишки по ній // якщо остатокв але якийсь номенклатурі немає то буде поле // NULL яке заміниться значенням 0 "ВИБРАТИ | Ном.Ссилка, | ЕСТЬNULL (ТовариНаСкладахОстаткі.ВНалічііОстаток, 0) ЯК залишок | З | Справочнік.Номенклатура ЯК Ном | ЛІВЕ З'ЄДНАННЯ РегістрНакопленія.ТовариНаСкладах.Остаткі ЯК ТовариНаСкладахОстаткі | ПО (ТовариНаСкладахОстаткі.Номенклатура \u003d Ном.Ссилка) ";

7. функція ПОДАННЯ - дозволяє отримати уявлення поля запиту.

синтаксис: ПОДАННЯ (<НаименованиеПоля>)

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

Запрос.Текст \u003d "ВИБРАТИ | ПОДАННЯ (СвободниеОстаткіОстаткі.Номенклатура) ЯК Номенклатура, | ПОДАННЯ (СвободниеОстаткіОстаткі.Склад) ЯК Склад, | СвободниеОстаткіОстаткі.ВНалічііОстаток | З | РегістрНакопленія.СвободниеОстаткі.Остаткі ЯК СвободниеОстаткіОстаткі";

Конструкції в мові запитів 1с

Вище ми розглянули з Вами функції мови запитів 1с, Тепер настав час розглянути конструкції в мові запитів 1с, Вони не менш важливі і корисні, приступаємо.

1. конструкція ПОСИЛАННЯ - вдає із себе логічний оператор перевірки посилального типу. Найбільш часто зустрічається при перевірки поля складеного типу на конкретний тип. синтаксис: ПОСИЛАННЯ<Имя таблицы>

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

Запрос.Текст \u003d // якщо тип значення реєстратора документ Прибуткова, // тоді запит поверне "Надходження товарів", інакше "Реалізація товарів" "ВИБРАТИ | ВИБІР | КОЛИ Остаткі.Регістратор ПОСИЛАННЯ Документ.ПоступленіеТоваровУслуг | ТОДІ" "Прихід" "| ІНАКШЕ "" Витрата "" | КІНЕЦЬ ЯК ВідДвіженія | З | РегістрНакопленія.ОстаткіТоваровНаСкладах ЯК Залишки ";

2. конструкція МІЖ - даний оператор перевіряє чи входить значення в зазначений діапазон.

синтаксис: МІЖ<Выражение> І<Выражение>

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

Запрос.Текст \u003d // отримаємо всю номенклатуру код якої лежить в діапазоні від 1 до 100 "ВИБРАТИ | Номенклатура.Ссилка | З | Справочнік.Номенклатура ЯК Номенклатура | ДЕ | Номенклатура.Код МІЖ 1 І 100";

3. Конструкція В і В ІЄРАРХІЇ - перевіряють чи знаходиться значення в переданому списку (в якості списку можуть передаватися масиви, таблиці значень і т.д.). Оператор В ІЄРАРХІЇ дозволяє переглядати ієрархію (приклад використання ПланСчетов).

синтаксис: В (<СписокЗначений>), В ІЄРАРХІЇ (<СписокЗначений>)

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

Запрос.Текст \u003d // вибираємо все субрахунку рахунку "ВИБРАТИ | Хозрасчетний.Ссилка ЯК Рахунок | З | ПланСчетов.Хозрасчетний ЯК Госпрозрахунковий | ДЕ | Хозрасчетний.Ссилка В ІЄРАРХІЇ ЗНАЧЕННЯ (ПланСчетов.Хозрасчетний.Товари)";

4. конструкція ПОДІБНО - ця функція дозволяє нам порівнювати рядок з шаблоном рядки.

синтаксис: ПОДІБНО "<ТекстШаблона>"

Варіанти шаблону рядки:

% - послідовність, що містить будь-яку кількість довільних символів.

Один довільний символ.

[...] - будь-який одиночний символ, або послідовність символів з перерахованих всередині квадратних дужок. У перерахуванні можуть задаватися діапазони, наприклад a-z, які означають довільний символ, що входить в діапазон, включаючи кінці діапазону.

[^ ...] - будь-який одиночний символ, або послідовність символів з перерахованих всередині квадратних дужок крім тих, які перераховані слідом за значком заперечення.

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

Запрос.Текст \u003d // знайдемо всю номенклатуру яка містить корінь табуром і починається // або з маленькою або з великої літери т "ВИБРАТИ | Номенклатура.Ссилка | З | Справочнік.Номенклатура ЯК Номенклатура | ДЕ | Товари.Наіменованіе ПОДІБНО" "[Тт ] абура% "" ";

5. конструкція ДОЗВОЛЕНІ - цей оператор дозволяє вибрати тільки ті записи з БД, на які викликає має право читання. Дані права налаштовуються на рівні записів (RLS).

синтаксис: ДОЗВОЛЕНІ пишеться після ключового слова ВИБРАТИ

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

Запрос.Текст \u003d "ВИБРАТИ ДОЗВОЛЕНІ | Контрагенти.Ссилка | З | Справочнік.Контрагенти ЯК Контрагенти";

6. конструкція РІЗНІ - дозволяє вибрати записи в яких відсутні повторні записи.

синтаксис: РІЗНІ пишеться після ключового слова ВИБРАТИ

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

Запрос.Текст \u003d // вибирає записи на які є права у читає "ВИБРАТИ РІЗНІ | Контрагенти.Наіменованіе | З | Справочнік.Контрагенти ЯК Контрагенти";

Також Конструкція РІЗНІ може використовуватися з оператором ДОЗВОЛЕНІ і іншими операторами.

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

Запрос.Текст \u003d // вибирає різні записи на які є права у читає "ВИБРАТИ ДОЗВОЛЕНІ РІЗНІ | Контрагенти.Наіменованіе | З | Справочнік.Контрагенти ЯК Контрагенти";

7. конструкція ПЕРШІ - вибирає вказане в параметрі число записів з результату запиту.

Синтаксис: ПЕРШІ<число>

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

Запрос.Текст \u003d // вибирають перші 4 номери ВМД з довідника "ВИБРАТИ ПЕРШІ 4 | НомераГТД.Ссилка | З | Справочнік.НомераГТД ЯК НомераГТД";

8. Конструкція ДЛЯ ЗМІНИ - дозволяє заблокувати таблицю, працює тільки в транзакціях (актуально тільки для автоматичних блокувань).

синтаксис: ДЛЯ ЗМІНИ<НаименованиеТаблицы>

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

Запрос.Текст \u003d "ВИБРАТИ | СвободниеОстаткіОстаткі.Номенклатура, | СвободниеОстаткіОстаткі.Склад, | СвободниеОстаткіОстаткі.ВНалічііОстаток | З | РегістрНакопленія.СвободниеОстаткі.Остаткі ЯК СвободниеОстаткіОстаткі | ДЛЯ ЗМІНИ | РегістрНакопленія.СвободниеОстаткі.Остаткі";

9. Конструкція УПОРЯДОЧИТЬ ПО - впорядковує дані за певним полю. Якщо полем є посилання то при установці прапора АВТОУПОРЯДОЧІВАНІЕ буде відбуватися сортування за поданням посилання, якщо прапор вимкнений то посилання упорядковано відповідно до старшинством адреси посилання в пам'яті.

синтаксис: ВПОРЯДКУВАТИ ЗА<НаименованиеПоля> АВТОУПОРЯДОЧІВАНІЕ

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

Запрос.Текст \u003d "ВИБРАТИ | СвободниеОстаткіОстаткі.Номенклатура ЯК Номенклатура, | СвободниеОстаткіОстаткі.Склад ЯК Склад, | СвободниеОстаткіОстаткі.ВНалічііОстаток | З | РегістрНакопленія.СвободниеОстаткі.Остаткі ЯК СвободниеОстаткіОстаткі | | УПОРЯДОЧИТЬ ПО | Номенклатура | АВТОУПОРЯДОЧІВАНІЕ";

10. Конструкція згруповані за - використовується для угруповання рядків запиту за певними полях. Числові поля повинні використовуватися з будь-агрегатної функцією.

синтаксис: згруповані за<НаименованиеПоля1>, .... , <НаименованиеПоляN>

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

Запрос.Текст \u003d "ВИБРАТИ | ТовариНаСкладах.Номенклатура ЯК Номенклатура, | ТовариНаСкладах.Склад, | СУМА (ТовариНаСкладах.ВНалічіі) ЯК Вналичии | З | РегістрНакопленія.ТовариНаСкладах ЯК ТовариНаСкладах | | згруповані за | ТовариНаСкладах.Номенклатура, | ТовариНаСкладах.Склад";

11. конструкція МАЮТЬ - дозволяє застосувати агрегатную функцію до умові вибірки даних, схожа на конструкцію ДЕ.

синтаксис: МАЮТЬ<агрегатная функция с условием>

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

Запрос.Текст \u003d // вибирає згруповані записи де поле Вналичии більше 3 "ВИБРАТИ | ТовариНаСкладах.Номенклатура ЯК Номенклатура, | ТовариНаСкладах.Склад, | СУМА (ТовариНаСкладах.ВНалічіі) ЯК Вналичии | З | РегістрНакопленія.ТовариНаСкладах ЯК ТовариНаСкладах | | згруповані за | ТовариНаСкладах.Номенклатура, | ТовариНаСкладах.Склад | | МАЮТЬ | СУМА (ТовариНаСкладах.ВНалічіі)\u003e 3 ";

12. Конструкція індексувати за - використовується для індексації поле запиту. Запит з індексацією довше виконується, але прискорює пошук по індексованих полях. Можна використовувати тільки в віртуальних таблицях.

синтаксис: індексувати за<Поле1, ... , ПолеN>

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

Запрос.Текст \u003d "ВИБРАТИ | Тз.НаіменованіеОС, | Тз.НомерПапкі, | Тз.КодОС, | Тз.Срок, | Тз.Тіп | помістити ДанниеТз | З | & Тз ЯК Тз | | індексувати за | Тз.НаіменованіеОС, | Тз .КодОС ";

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

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

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

Запрос.Текст \u003d // вибираються всі записи у яких КомпенсаціяОстаток<> 0 і // СуммаДляРасчКомпОстаток\u003e 100 "ВИБРАТИ | КомпенсаціяРПОстаткі.Контрагент, | КомпенсаціяРПОстаткі.Ребенок, | КомпенсаціяРПОстаткі.КомпенсаціяОстаток, | КомпенсаціяРПОстаткі.СуммаДляРасчКомпОстаток | помістити ДанниеТз | З | РегістрНакопленія.КомпенсаціяРП.Остаткі ЯК КомпенсаціяРПОстаткі | ДЕ | КомпенсаціяРПОстаткі.КомпенсаціяОстаток<> 0 | І КомпенсаціяРПОстаткі.СуммаДляРасчКомпОстаток\u003e 100 ";

14. Конструкція ПІДСУМКИ ... ПО ЗАГАЛЬНІ - застосовується для підрахунку підсумків, в конструкції вказуються поля за якими будуть вважатися підсумки і агрегатні функції застосовуються до підсумкових полях. При використанні підсумків на кожне поле наступне після конструкції ПІДСУМКИ проводиться групування даних. Є необов'язкова конструкція ЗАГАЛЬНІ, її використання також забезпечує додаткову угруповання. Приклад результату запиту ви побачите нижче.

синтаксис: ПІДСУМКИ<АгрегатнаяФункция1, ... , АгрегатнаяФункцияN> ПО<ОБЩИЕ> <Поле1, ... , ПолеN>

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

Запрос.Текст \u003d "ВИБРАТИ | Расчети.ДоговорКонтрагента.ВідДоговора ЯК ВідДоговора, | Расчети.ДоговорКонтрагента ЯК Договір, | Расчети.Контрагент, | Расчети.СуммаВзаіморасчетовОстаток ЯК Залишок | З | РегістрНакопленія.ВзаіморасчетиСКонтрагентамі.Остаткі ЯК Розрахунки | ПІДСУМКИ | СУМА (Залишок) | ПО | ЗАГАЛЬНІ, | ВідДоговора ";

На малюнку обведені угруповання які утворилися в ході виконання запиту, сама верхня відноситься до секції ЗАГАЛЬНІ, а друга до полю ДоговорКонтрагентаВідДоговора.

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

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

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

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

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

Звичайно, на зображенні показані не всі записи довідника. Скріншот показує лише структуру зберігання даних в ієрархічному довіднику. У таблиці довідника зберігаються 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с і для чого він потрібен? Довідник зберігає умовно-постійну інформацію, тобто інформація, яка на тривалому проміжку часу майже не змінюється. Наприклад, довідник "Номенклатура" містить перелік продаваних або товарів, що випускаються. Також довідник може містити безліч властивостей описують елемент довідника.

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

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

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

Основні

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

ієрархія

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

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

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

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

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

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

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

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

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

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

власники

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

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

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

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

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

ЕтоІерархіческійСправочнік \u003d Метаданние.Справочнікі.Контрагенти.Іерархіческій;

Продовження следут ...

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

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

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

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

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

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

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

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

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

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

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

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

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

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

А результат буде один і той же:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

почати тест

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

2. логічний вираз 1 МІЖ 1 І 1

3. Логічний вираз 1 НЕ МІЖ 2 І 2

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

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