Мої шаблони
Часто потрібно отримати всіх батьків групи елементів. Не люблю використовувати цикли та рекурсію без крайньої потреби. Давно хотілося знайти універсальний спосіб, бажано через запит.
Рішення з сайту 1с має суттєве обмеження: потрібно заздалегідь знати кількість рівнів.
Перший спосіб позбавлений цього недоліку, однак має інші:
1. Результат запиту не можна вивантажити до тимчасової таблиці, т.к. запит будується за підсумками
2. У результуючому запиті є задубльовані рядки, тому потрібно виконувати додаткову обробку, щоб усунути цей ефект.
Однак, я часто використовую саме цей спосіб, через брак більш простого рішення. Він підходить для невеликих ієрархічних довідників.
Другий спосіб є модифікацією методу, запропонованого 1с. Недоліком цього методу:
1. Низька продуктивність, т.к. виконується велика кількість з'єднань, а також використовується умова АБО
2. Жорстко задається кількість рівнів
Тому він також підходить лише для довідників з невеликою кількістю елементів
Спеціальні пропозиції












Як би ні. Просто вибірка йде по 5 рівнів, але кількість рівнів не обмежена. Інша річ, що запит у циклі.
Всім дякую за критику.
Чи може хтось підказати варіант, щоб це завдання вирішувалося виключно засобами запитів з можливістю поміщення результату в тимчасову таблицю. Наприклад, це було б дуже корисно дляформування звітів на СКД.
Рішення з використанням вбудованої мови очевидні, прохання їх не пропонувати.
Якщо ви вже бачили цю статтю або статтю «Рівні, глибина, прабатьки, цикли та аналоги запитом», але не вважали наведене там рішення відповідним, то, можливо, вас збентежило те, що там наведені не самі запити, а функції для їх побудови. Але насправді я припускав очевидним те, що замість функції можна використати заздалегідь побудований їй запит.
Наприклад, для довідника "Номенклатура" за принципами, описаними у статті, можна використати запит:
Тут передбачається, що довідник "Номенклатура" має НЕ БІЛЬШЕ 32 рівні вкладеності (у житті навряд чи бувають довідники більшої глибини вкладеності). А фрагментів, що повторюються, в запиті всього 5! Якщо раптом рівнів більше, до тисячі, наприклад, можна додати ще всього 5 однотипних фрагментів в пропонований пакетний запит. Наведений запит – це не запит у циклі. Він будується не динамічно, а може бути записаний повністю заздалегідь. Його можна використовувати на будь-якому етапі складнішого запиту. І структурою він досить простий.