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

Список – невід'ємний атрибут відображення інформації у будь-якій конфігурації, створеній на платформі "1С:Підприємство 8.1". Для ефективної роботи зі списками, що містять різноманітні дані, у програмах на платформі "1С:Підприємство 8.1" реалізовано зручні та потужні механізми відбору та сортування. Про особливості їх використання розповідає В.В. Риболовля, фірма "1С".


Мал. 1

Списки

З якими списками стикаються користувачі? Це можуть бути списки документів у відповідних журналах. Практично будь-який довідник, заповнений даними, подається у вигляді списку, в якому, як правило, є ієрархія (групи-папки чи підлеглі елементи). Нерідко для вибору будь-якого елемента програма формує списки автоматично або підкоряючись закладеної логікою розробниками.

Практично у всіх списках можна використовувати механізми відбору (якщо це явно не заборонено розробником) та різноманітного сортування (рис. 1). У програмі ці механізми нерозривно пов'язані друг з одним. Розглянемо, як їх використовувати правильно та ефективно.

Мал. 1

Механізм сортування

Навіщо потрібен механізм сортування? По-перше, він, як випливає з назви, дозволяє відсортувати список за потрібним критерієм.

По-друге, у платформі "1С:Підприємство 8.1" активно використовується механізм швидкого пошуку. Цей механізм дозволяє швидко знайти у списку потрібний елемент, набравши перші символи (рис. 2). Але в динамічних списках (наприклад, список елементів довідника або список документів) швидкий пошук працює тільки за реквізитами, за якими можна сортувати.

Мал. 2

Переглянути всі доступні для сортування реквізити списку можна, відкривши вікно "Відбір та сортування". Це вікно, як правило, доступне на панелі дій (рис. 3) або в контекстному меню списку, що відкривається правою кнопкою миші (рис. 4). У вікні "Відбір та сортування" потрібно перейти на закладку "Сортування", де показані всі доступні реквізити, за якими можливе сортування.

Мал. 3

Мал. 4

На малюнку 3 видно, що для списку документів "Реалізації товарів та послуг" доступне сортування за двома реквізитами: "Дата" та "Номер". Однак інформативність вікна сортування цим не обмежується. Тут можна подивитися, яке сортування включено в даний момент (ліва частина вікна) та список усіх доступних для сортування реквізитів (права частина). Тут же можна налаштувати потрібне сортування та його порядок. Зверніть увагу: поточний реквізит сортування буде позначений у списку спеціальним символом – стрілочкою, що позначає напрямок сортування. Три приклади різного сортування (у т. ч. комбінованого) та способи його відображення у списку показані на малюнку 5.

Мал. 5

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

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

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

Наприклад, у нашому випадку, можна клацнути по реквізиту "Дата" (включиться сортування дат за зростанням, і можна буде використовувати швидкий пошук за датою) або за реквізитом "Номер" (переключається сортування за номерами за зростанням, після чого можна швидко шукати по номеру). Інвертувати сортування теж просто - достатньо повторно натиснути на той же реквізит у шапці списку.

Механізм відбору

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

Практично скрізь, де є список (як правило, у вигляді таблиці), можна використовувати механізм відбору, який активується або відповідною кнопкою на панелі дій, або контекстно-залежному меню списку (рис. 3 і 4). Якщо вибрано потрібний список, відкриється вікно "Відбір та сортування". У ньому буде відображено всі можливі види доступних для відбору реквізитів. Список доступних елементів відбору залежить від того, де цей вибір буде використаний. Загалом потрібно знайти один або кілька необхідних елементів для відбору, вказати значення та активувати налаштовану комбінацію критеріїв.

Список можливих умов того чи іншого виду відбору залежить від типу елементів, які у ньому. Наприклад, для чисел і дат буде доступна вказівка ​​діапазонів, для рядків - пошук підрядка (умови "Утримує"/"Не містить"), а для елементів довідників - заповнення списків та аналіз ієрархії.

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

Механізми відбору та сортування на прикладах

Спробуємо вирішити кілька завдань у демонстраційній базі ("Бухгалтерія підприємства", редакція 1.6). Наприклад, відобразимо документи, сформовані для контрагента "Саймон та Шустер ТОВ" у журналі "Документи покупців". Відразу обмовимося, що описуватимемо стандартні для платформи "1С:Підприємство 8.1" правила та логіку ведення відбору, без прив'язки до будь-якої конкретної конфігурації та додаткових сервісних можливостей, в ній реалізованих.

Отже, відкриваємо журнал документів "Документи покупців". У стандартному стані без увімкненого відбору на екран виводяться всі документи всіх покупців (навіть у демонстраційній базі це займає не одну сторінку).

Нам потрібно швидко подивитися всі документи контрагента "Саймон та Шустер ТОВ". Реалізується завдання в такий спосіб - відкривається вікно відбору, у елементі " Контрагент " вибирається контрагент " Саймон і Шустер ТОВ " з довідника (рис. 6) і натискається " ОК " . Завдання вирішене (рис. 7).

Мал. 6

Мал. 7

Для швидкого використання необхідного відбору досить відразу приступати до вибору необхідного критерію. Ставити галочку навпроти використовуваного відбору не потрібно. Програма зробить це сама після того, як буде вказано потрібний критерій. Швидко застосувати налаштовані критерії відбору можна за допомогою комбінації клавіш Ctrl+Enter*.

Зверніть увагу ще й на те, що при вказівці значень в елементах відбору (у нашому прикладі - контрагент "Саймон та Шустер ТОВ"), у більшості випадків працюватиме механізм швидкого підбору, широко розповсюджений у платформі "1С:Підприємство 8.1". У нашому прикладі достатньо було набрати перші символи назви контрагента або його код прямо в полі значення відбору, натиснути Enter або Tab і система автоматично "вгадала" потрібний нам елемент довідника.

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

Відобразимо список номенклатури, в назвах яких міститься слово "Чайник". Для цього відкриваємо довідник "Номенклатура", викликаємо вікно відбору, в елементі "Найменування" вибираємо умову порівняння "Містить" та вказуємо необхідне слово (рис. 8).

Мал. 8

Вигляд порівняння "Вміст" вибраний не випадково. Саме він дозволяє знайти потрібне слово (або його частину) у будь-якому місці найменування номенклатури. Якщо залишити вигляд порівняння "Рівне", у списку будуть відображені лише такі елементи номенклатури, які називаються точно так, як написано запит. А таких у нашій демобазі немає (тобто не було відображено жодного елемента).

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

Якщо шукати не за найменуванням, а за повним найменуванням, галочку використання відбору за найменуванням краще зняти. Інакше відбір буде використаний і за найменуванням, і за повним найменуванням, що не завжди може виявитися необхідним (рис. 9).

Мал. 9

Для зручності роботи з елементами довідника при використанні відборів краще на якийсь час відключати відображення ієрархії (рис. 10).

Мал. 10

Як третє завдання переглянемо в журналі документів "Документи покупців" лише документи "Реалізація товарів та послуг". Вирішення цього завдання продемонструє особливість одного з видів відбору, доступного лише в журналах документів.

Відкриваємо журнал "Документи покупців" та вказуємо в елементі відбору "Вигляд документа" документ "Реалізація товарів та послуг". Програма сама надає можливість вибору певного виду документа з тих, що включені до цього журналу. Для цього є персональна кнопочка на панелі дій (рис. 11).

Мал. 11

Аналогічно відбору за видом документів платформа автоматично запропонує елемент відбору "Структура підпорядкованості", якщо конфігурації налаштовані взаємозв'язки між документами.

Спробуємо переглянути в журналі документів "Документи покупців" лише документи "Рахунок-фактура" для контрагентів, які перебувають у групі "Покупці" довідника. Це завдання схоже на першу з тим лише відмінністю, що ми не вказуємо конкретного контрагента, а аналізуємо рахунки-фактури цілої групи контрагентів, які знаходяться у групі "Покупці".

Завдання існує кілька способів реалізації. Розглянемо найефективніший. Відкриваємо журнал "Документи покупців", вказуємо в елементі відбору "Вигляд документа" документ "Рахунок-фактура виданий". Після цього елементі відбору " Контрагент " вказуємо вид порівняння " У групі " . Вибираємо тип значення "Контрагенти" та відкриваємо форму вибору контрагентів. У ній обираємо групу "Покупці" (рис. 12).

Мал. 12

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

А тепер ускладнимо завдання: переглянемо в журналі документів "Документи покупців" лише документи "Рахунок-фактура", але при цьому потрібно переглянути документи і для покупців, і для постачальників. Вирішуємо її аналогічно попередньої, за винятком одного критерію відбору, що накладається.

Людською мовою завдання формулюється так: "відобразити всі необхідні документи за всіма контрагентами, що знаходяться в групах довідника Покупці, Постачальники, Постачальники на реалізацію". Реалізується це просто - за умови відбору "Контрагент" вибираємо "У групі зі списку" (рис. 13). Після цього стає доступним механізм заповнення списку, який можна додати потрібні групи (або елементи) довідника. При цьому список можна заповнити вручну. За аналогією з рішенням попередньої задачі знайти потрібну групу і вибрати її, повторивши це для кожного нового елемента списку. Однак доцільніше скористатися зручним механізмом підбору, що автоматично реалізується програмою. За допомогою підбору набагато простіше та швидше заповнити список потрібними складовими. Після того, як список заповнений, натискаємо "ОК" та активуємо налаштовані критерії відбору. Завдання вирішено.

Мал. 13

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

Умови відбору "Не у списку" та "Не в групі зі списку" дозволяють вказати потрібні набори даних, які не повинні потрапляти у відбір. Тобто вирішувати завдання можна було б і від зворотного – вказати "Не в групі зі списку" і додати туди всі групи довідника, крім трьох необхідних (Покупці, Постачальники, Постачальники на реалізацію).

І, нарешті, відобразимо у документі "Реалізація товарів та послуг" з номером ТДН00002 у табличній частині лише номенклатуру, що містить у найменуваннях слово "СТИНОЛ". Це завдання дозволить побачити універсальність самого механізму відбору, а також наскільки різноманітним може бути його використання. Завдання ґрунтується на реальних ситуаціях, коли, наприклад, у табличній частині накладної кілька сотень (а то й тисяч) рядків і треба швидко проаналізувати її склад. У нашій демобазі є документ "Реалізація товарів та послуг" з номером ТДН00002, який має в табличній частині кілька рядків. Незважаючи на те, що в документі кнопок використання відборів немає, виклик відбору доступний через контекстне меню (права кнопка миші).

Далі накладаємо критерії відбору у розрізі Номенклатури. Тут виникає інше питання - як відібрати "СТИНОЛ", якщо умови вибору номенклатури досить сильно обмежені (доступно "Рівне", "Не рівно", "У списку" і "Не в списку"). Вирішити завдання можна і за таких умов. Вибираємо умову "У списку", відкриваємо вже знайоме вікно заповнення списку, використовуємо добір номенклатури (рис. 14, 1). У списку номенклатури може бути велика кількість елементів, тому шукатимемо очима потрібні позиції. Скористайтеся відбором у списку номенклатури, вказавши умову відбору "Утримує" для найменування номенклатури (рис. 14, 2).

Мал. 14

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

Корисні функції механізму відбору

Розглянемо ще кілька моментів, пов'язаних так чи інакше з відборами у системі "1С:Підприємство 8.1".

У списках конфігураційних об'єктів, де використовується прив'язка до дат (наприклад, списки документів), і в журналах документів можна використовувати швидкий відбір по діапазону дат. Для цього достатньо натиснути відповідну кнопку "Параметри періоду" на панелі дій (або вибрати в контекстному меню) (мал. 15). У такий спосіб можна в кожному списку індивідуально регулювати критерій відображення елементів за датами.

Мал. 15

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

Мал. 16

Ще одна корисна властивість механізму відборів – ведення історії відборів (рис. 17). Програма запам'ятовує, які відбори були встановлені, тому можна швидко повернутися до будь-якого з них, просто вибравши його зі списку, що випадає. До речі, у вікні "Відбір та сортування" зверніть увагу на кнопку "Відбори" (рис. 6). Натиснувши на цю кнопку, ви потрапите в інтерфейс, в якому можна зберігати та відновлювати налаштування відборів, щоб можна було до них повернутися (мал. 18).

Мал. 17

Мал. 18

І остання функція – це скасування всіх відборів (рис. 19). Натисканням кнопки "Вимкнути відбір" вимикаються всі відбори, встановлені у списку. Аналогічної дії можна досягти, відкривши вікно "Відбір та сортування" та знявши галочки навпроти всіх активних елементів.

Мал. 19

У програмі також є можливість швидкого пошуку за номером документа у списках документів чи журналах. Викликається ця можливість кнопкою "Пошук за номером" (рис. 20) та дозволяє знайти потрібний документ, гнучко налаштувавши параметри пошуку. Знайдені документи за вказаними критеріями відображаються у нижній частині вікна цього сервісу, і можна перейти до потрібного документа.

Мова запитів у 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С.

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

Довідники 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>, <Тип>)

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

Запит.Текст = "ВИБРАТИ | РІЗНЕСТЬДАТ(ДАТАВРЕМЯ(2015, 4, 17), ДАТАВРЕМЯ(2015, 2, 1), ДЕНЬ) | ЯК Колводнів";

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

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

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

Запит.Текст = "ВИБРАТИ //зумовлений елемент | ЗНАЧЕННЯ(Довідник.Валюти.Долар) ЯК Долар, //порожнє посилання | ФізОсоба) ЯК ФізОбличчя, / / ​​зумовлений рахунок |

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

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

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

Запрос.Текст = //якщо сума більше 7500, тоді має бути знижка 300 рублів, //тому якщо умова спрацьовує то функція //повертає Сума - 300 //інакше запит поверне просто Сума "ВИБРАТИ | ВИБІР | КОЛИ ТЧ Надходження.Сума > 7500 | ТОДІ ТЧНадходження.Сума - 300 | Інакше ТЧНадходження.Сума |

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

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

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

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

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

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

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

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

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

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

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

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

7. Функція ПРЕДСТАВЛЕННЯ- дозволяє одержати подання поля запиту.

Синтаксис: ПРЕДСТАВЛЕННЯ(<НаименованиеПоля>)

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

Запит.Текст = "ВИБРАТИ | ПРЕДСТАВЛЕННЯ(ВільніЗалишкиЗалишки.Номенклатура) ЯК Номенклатура, | ПРЕДСТАВЛЕННЯ(ВільніЗалишкиЗалишки.Склад) ЯК Склад, |

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

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

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

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

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

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

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

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

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

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

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

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

Запрос.Текст = // вибираємо всі субрахунки рахунку "ВИБРАТИ | Госпрозрахунковий. Посилання ЯК Рахунок | З | План Рахунок.Госпрозрахунковий ЯК Хозрозрахунковий | ДЕ | Госпрозрахунковий.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Запит. Текст = // Вибирають перші 4 номери ВМД з довідника "ВИБРАТИ ПЕРШІ 4 | Номери ВМД. Посилання | З | Довідник.

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

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

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

Запит.Текст = "ОБРАТИ |

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

Синтаксис: ВПОРЯДКУВАТИ ЗА<НаименованиеПоля>Автоупорядкування

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

Запит.Текст = "ВИБРАТИ | Вільні Залишки Залишки. Номенклатура ЯК Номенклатура, | Вільні Залишки Залишки. ЧИВАННЯ";

10. Конструкція ЗГРУПУВАТИ ПО- використовується для угрупування рядків запиту за певними полями. Числові поля повинні використовуватись із будь-якою агрегатною функцією.

Синтаксис: ЗГРУПУВАТИ ПО<НаименованиеПоля1>, .... , <НаименованиеПоляN>

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

Запит.Текст = "ВИБРАТИ | ТовариНа Складах.Номенклатура ЯК Номенклатура, | ТовариНаСкладах.Склад, | кладах.Склад";

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

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

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

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

12. Конструкція ІНДЕКСУВАТИ ПО- Використовується для індексації поле запиту. Запит з індексацією довше виконується, але прискорює пошук індексованих полів. Можна використовувати лише у віртуальних таблицях.

Синтаксис: ІНДЕКСУВАТИ ПО<Поле1, ... , ПолеN>

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

Запрос.Текст = " ВИБРАТИ | Тз. Найменування ОС, | Тз. Номер Папки, | Тз. КодОС, | Тз. Термін, | Тз. Тип | ПОМІСТИТИ Дані Тз | .КодОС";

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

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

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

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

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

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

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

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

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

Конструкція "В ІЄРАРХІЇ" у запитах 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С і СУБД в кілька разів. Давайте змінювати установки лише досвідченим користувачам.

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