Комп'ютери та сучасні гаджети

Мова запитів у 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 засноване на базі стандартного SQL, але має деякі відмінності та розширення.

Схема роботи із запитом

Загальна схема роботи із запитом складається з кількох послідовних етапів:

  1. Створення об'єкта Запит та встановлення тексту запиту;
  2. встановлення параметрів запиту;
  3. Виконання запиту та отримання результату;
  4. Обхід результату запиту та обробка отриманих даних.

1. Об'єкт Запитмає властивість Текст, якому необхідно надати текст запиту.

// Варіант 1
Запит = Новий Запит;
Запит . Текст =
«ВИБРАТИ
| Курси Валют.
| Курси Валют.
| Курси Валют.Курс


|ДЕ
;

// Варіант 2
Запит = Новий Запит(«ВИБРАТИ
| Курси Валют.
| Курси Валют.
| Курси Валют.Курс

| РеєстрВідомостей.КурсиВалют ЯК КурсиВалют
|ДЕ
| КурсиВалют.Валюта = &Валюта»);

2. Встановлення значень параметрів здійснюється методом ВстановитиПараметр(< Имя>, < Значение>) . Параметри тексту запиту позначаються символом « & і зазвичай використовуються в умовах відбору (секція ДДЕ) і в параметрах віртуальних таблиць.

Запит);

3. Після надання тексту та встановлення параметрів запит необхідно виконати та отримати результат виконання. Виконання здійснюється методом Виконати () , який повертає об'єкт РезультатЗапиту. З результату запиту можна:

  • отримати вибірку за допомогою методу Вибрати (< ТипОбхода>, < Группировки>, < ГруппировкиДляЗначенийГруппировок>) ;
  • вивантажити значення у таблицю значень або дерево значень за допомогою методу Вивантажити (< ТипОбхода>) .

// Отримання вибірки

Вибірка = Результат Запиту. Вибрати();

// Отримання таблиці значень
Результат Запит = Запит. Виконати();
Таблиця = Результат Запиту. Вивантажити();

4. Обійти вибірку результату запиту можна за допомогою циклу:

Бувай Вибірка .Наступний () Цикл
Повідомити (Вибірка .Курс);
КінецьЦикл;

Повний приклад роботи із запитом може виглядати так:

// Етап 1. Створення запиту та встановлення тексту запиту
Запит = Новий Запит;
Запит . Текст =
«ВИБРАТИ
| Курси Валют.
| Курси Валют.
| Курси Валют.Курс

| РеєстрВідомостей.КурсиВалют ЯК КурсиВалют
|ДЕ
| КурсиВалют.Валюта = &Валюта»;

// Етап 2. Встановлення параметрів
Запит . ВстановитиПараметр(«Валюта» , ВибранаВалюта);

// Етап 3. Виконання запиту та отримання вибірки
Результат Запит = Запит. Виконати();
Вибірка = Результат Запиту. Вибрати();

// Обхід вибірки
Бувай Вибірка .Наступний () Цикл
Повідомити (Вибірка .Курс);
КінецьЦикл;

Склад тексту запиту

Текст запиту складається з кількох секцій:

  1. Опис запиту- Перелік полів і джерел даних, що вибираються;
  2. Об'єднання запитів- Вирази «ОБ'ЄДНАТИ» і «ОБ'ЄДНАТИ ВСЕ»;
  3. Упорядкування результатів- Вираз «Упорядкувати по …»;
  4. Автоупорядкування- Вираз «АВТОПОРЯДОЧУВАННЯ»;
  5. Опис підсумків- Вираз «ПІДСУМКИ … ПО …».

Обов'язковою є лише перша секція.

Тимчасові таблиці та пакетні запити

Мова запитів 1С підтримує використання тимчасових таблиць- таблиць, отриманих в результаті виконання запиту та збережених на тимчасовій основі.

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

Менеджер ВТ = Новий Менеджер Тимчасових Таблиць;
Запит = Новий Запит;
Запит . Менеджер Тимчасових Таблиць = Менеджер ВТ;

Запит . Текст =
«ВИБРАТИ
| Валюти.
| Валюти.
|ПОМІСТИТИ ТВАлюти

| Довідник. Валюти ЯК Валюти »;

Результат Запит = Запит. Виконати();

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

Пакетний запит— це запит, де міститься кілька запитів, розділених символом «;». При виконанні пакетного запиту всі запити, що входять до нього, виконуються послідовно, причому результати всіх тимчасових таблиць доступні всім наступним запитам. Явне присвоєння менеджера тимчасових таблиць пакетним запитам необов'язково. Якщо менеджер тимчасових таблиць не присвоєно, всі тимчасові таблиці видаляться відразу після виконання запиту.

Для пакетних запитів доступний метод Виконати Пакет (), який виконує всі запити та повертає масив результатів. Тимчасові таблиці в пакетному запиті будуть представлені таблицею з одним рядком і одним колонкою «Кількість», де зберігається кількість записів. Для налагодження пакетних запитів можна використовувати метод ВиконатиПакетСПроміжнимиДаними() : він повертає реальний вміст тимчасових таблиць, а не кількість записів.

// Приклад роботи з пакетним запитом
Запит = Новий Запит;
Запит . Текст =
«ВИБРАТИ
| Валюти.

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

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

РезультатПакет = Запит. Виконати Пакет();

ТЗВалюти = Результат Пакету [0]. Вивантажити();
ТЗНоменклатура = Результат Пакету [1]. Вивантажити();

// Приклад використання тимчасових таблиць у пакетному запиті
Запит = Новий Запит;
Запит . Текст =
«ВИБРАТИ
| Товари.Посилання ЯК Товар
|ПОМІСТИТИ ВТтовари

| Довідник.Номенклатура ЯК
|ДЕ
| Товари.Виробник = &Виробник
|;
| ВИБРАТИ
| ВТТовари.Товар,
| ПТУ.Кількість,
| ПТУ.Ціна,
| ПТУ.Посилання ЯК ДокументНадходження

| ВТТовари ЯК ВТТовари
| ЛІВОЕ З'ЄДНАННЯ Документ.НадходженняТоварівПослуг.Товари ЯК ПТУ
| ПО ВТТовари.Товар = ПТУ.Номенклатура»
;

Запит . ВстановитиПараметр( «Виробник», Виробник);

Результат Запит = Запит. Виконати();
Вибірка = Результат Запиту. Вибрати();

Бувай Вибірка .Наступний () Цикл

КінецьЦикл;

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

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

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

  • Для регістрів відомостей:
    • Зріз Перших (<Период>, <Условие>) - Найбільш ранні записи на зазначену дату;
    • Зріз Останніх(<Период>, <Условие>) - Найбільш пізні записи на зазначену дату;
  • Для регістрів накопичення:
    • Залишки(<Период>, <Условие>) - залишки на зазначену дату;
    • Обороти(<НачалоПериода>, <КонецПериода>, <Периодичность>, <Условие>) - Обороти за період;
    • ЗалишкиІОобороти(<НачалоПериода>, <КонецПериода>, <Периодичность>, <МетодДополненияПериодов>, <Условие>) - залишки та обороти за період;
  • Для регістрів бухгалтерії:
    • Залишки(<Период>, <УсловиеСчета>, <Субконто>, <Условие>) - залишки на зазначену дату в розрізі рахунку, вимірювань та субконто;
    • Обороти(<НачалоПериода>, <КонецПериода>, <Периодичность>, <УсловиеСчета>, <Субконто>, <Условие>, <УсловиеКорСчета>, <КорСубконто>) - обороти за період у розрізі рахунку, вимірювань, кор. рахунки, субконто, кор. субконто;
    • ЗалишківІОоборотів(<НачалоПериода>, <КонецПериода>, <Периодичность>, <МетодДополненияПериодов>, <УсловиеСчета>, <Субконто>, <Условие>) - залишки та оборотів у розрізі рахунку, вимірювань та субконто;
    • ОборотиДтКт(<НачалоПериода>, <КонецПериода>, <Периодичность>, <УсловиеСчетаДт>, <СубконтоДт>, <УсловиеСчетаКт>, <СубконтоКт>, <Условие>) - обороти за період у розрізі рахунки Дт, рахунки Кт, Субконто Дт, Субконто Кт;
    • РухиСубконто(<НачалоПериода>, <КонецПериода>, <Условие>, <Порядок>, <Первые>) - Рухи разом зі значеннями субконто;
  • Для регістрів розрахунку:
    • База (<ИзмеренияОсновногоРегистра>, <ИзмеренияБазовогоРегистра>, <Разрезы>, <Условие>) - базові дані регістру розрахунку;
    • ДаніГрафіка(<Условие>) - Дані графіка;
    • ФактичнийПеріодДії(<Условие>) - Фактичний період дії.

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

Конструктор запиту

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

Також конструктори можна викликати із головного меню Текст.

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

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

Об'єкт Схема Запиту

Платформа дозволяє програмно створювати та редагувати текст запиту за допомогою об'єкта Схема Запиту. Об'єкт має єдину властивість ПакетЗапитів, в якому об'єкт зберігається властивості всіх запитів, що редагуються в даний момент. Об'єкт Схема Запиту підтримує такі методи:

  • ВстановитиТекстЗапиту(< Текст>) - Заповнює властивість ПакетЗапитів на підставі переданого тексту запиту;
  • ОтриматиТекстЗапиту() – повертає сформований на підставі властивості ПакетЗапитів текст запиту;
  • ЗнайтиПараметри () — Повертає параметри запиту.

Розглянемо приклад роботи з об'єктом Схема Запиту. Для програмного формування тексту запиту

ВПОРЯДКУВАТИ ЗА
Валюти.

Код вбудованою мовою може виглядати так:

Схема Запиту = Новий Схема Запиту;
Пакет1 = Схема Запиту. Пакет Запитів [0];
Оператор1 = Пакет1. Оператори [0];
// додавання джерела
ТаблицяРегістра = Оператор1. Джерела. Додати( «Довідник.Валюти», "Валюти");
// додавання полів
ПолеПосилання = Оператор1. Обираються Поля. Додати («Валюти.Посилання», 0);
ПолеКод = Оператор1. Обираються Поля. Додати («Валюти.Код», 1);
// Вказівка ​​псевдонімів полів
Пакет1 . Колонки [0]. Псевдонім = "Валюта";
Пакет1 . Колонки [1]. Псевдонім = «Код»;
// додавання умови
Оператор1 . Відбір. Додати( «НЕ Помітка Видалення»);
// додавання впорядкування
Пакет1 . Порядок. Додати(ПолеКод);
Текст Запиту = Схема Запиту. ОтриматиТекстЗапиту();

Нехай у нас є довідник Номенклатураз реквізитами: "Код", "Найменування", "Артикул". Цей довідник можна подати у вигляді таблиці, з однойменними полями:

Номенклатура

Мета запиту повідомити БД, що хочемо вибрати і звідки. На даному етапі будемо припускати, що результатом виконання запиту є таблиця. Допустимо наша мета отримати всі реквізити з довідника "Номенклатура", тоді текст запиту набуде наступного вигляду:

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

Результат запиту

Невеликі пояснення. У секції ВИБРАТИ(SELECT) ми перераховуємо, які поля конкретних таблиць хочемо бачити на виході. В розділі З(FROM) ми говоримо з яких таблиць їх взяти. Зверніть увагу, що ключовим словом ЯК(AS) ми оголошуємо псевдонім для таблиці Довідник.Номенклатура, Ви можете використовувати практично будь-яку назву, за винятком ключових слів мови запитів 1С 8 і цифр. Псевдонім можна оголосити і для полів:

Запит.Текст = "
| ВИБРАТИ
| Goods.Код ЯК Code,
| Goods.Найменування ЯК Description,
| Goods.Артикул ЯК Article

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

На виході отримаємо таблицю виду:

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

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

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

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

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

| Довідник.Номенклатура";

У принципі, у запиті може і не бути секції. З,але як правило, так ніхто не пише:

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

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

Запит.Текст = "
| ВИБРАТИ
| Номенклатура.
| Номенклатура.
| Номенклатура.
// число
| 3000 ЯК Максимальна Вартість,
//дата
| ДАТАВРЕМЯ(2013, 1, 1) ЯК ДатаПоставки,
// Бульово
| ІСТИНА ЯК Оплачено,
//Рядок
| ""МебліБуд"" ЯК Виробник

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

Директиви секції ВИБРАТИ

РІЗНІ- вказує на те, що в результаті запиту ми хочемо бачити тільки записи з різними полями, що повторюються просто відкинуті:

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

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

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

ПЕРШІ -вказує на те, що в результаті запиту ми хочемо бачити лише перші n записів:

Запит.Текст = "
| ВИБРАТИ ПЕРШІ 100
| Номенклатура. Найменування

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

ДОЗВОЛЕНІ- обмежує вибірку відповідно до прав користувача. Рекомендую завжди користуватися цим ключовим словом, чи мало, коли вам захочеться прописати права користувачам.

; Вкладені запити (у розробці).

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

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

Теоретична частина уроку №4

Конструктор запитів 1с дозволяє створювати об'єднання запитів. З їхньою допомогою можна послідовно виводити результати дані, отримані з кількох запитів, не використовуючи у своїй зв'язку. Єдиною умовою для об'єднання є однаковий набір полів у кожному окремому запиті.

У конструкторі перейдемо на вкладку Об'єднання/Псевдоніми. Вона призначена для створення об'єднань запитів та завдання псевдонімів для полів запиту. Псевдоніми полів необхідні, якщо вас не влаштовують стандартні імена полів бази даних. Якщо поле запиту складається з поля таблиці бази даних, то псевдонім йому необов'язковий. Якщо під час створення поля ви використовували функції мови запитів, то псевдонім для такого поля є обов'язковим. Для таких полів конструктор запитів створює стандартні псевдоніми. Поле1…ПолеNЦі псевдоніми можна замінити на ті, які зручні для вас.

Розглянемо розділи вкладки Об'єднання/Псевдоніми:

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

  • В таблиці Запитидві колонки:
    • Ім'я. Задається автоматично у форматі Запит 1 … Запит N;
    • Без дублікатів. Встановлюється у разі, якщо необхідно виключити рядки, що повторюються, при об'єднанні з попереднім запитом. Варто зазначити, що цей прапор діятиме лише на об'єднання запиту, в якому він встановлений з попереднім запитом.

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

Практична частина уроку №4

Розберемо розв'язання задачі, наведеної на початку уроку. Нагадаю умови:

Завдання: вибрати запитом усі проведені документи Надходження товарів та послугі Повернення товарів постачальникуза вказаний період.

  1. Створимо новий запит;
  2. Запустимо конструктор запитів;
  3. Виберемо таблицю НадходженняТоварівПослугз гілки Документи;
  4. З таблиці НадходженняТоварівПослугвиберемо поле Посилання;
  5. Перейдемо на вкладку Умови;
  6. В розділі Поля, розкриємо гілку НадходженняТоварівПослугза допомогою кнопки "+";
  7. Знайдемо реквізит Датаі перетягнемо його в розділ умови, виберемо оператор порівняння міжі вкажемо параметри початку та закінчення періоду, наприклад Початок періодуі ЗакінченняПеріоду;
  8. Перейдемо на вкладку Об'єднання / Псевдоніми.
  9. Додамо новий запит, прапор Без дублікатівпіднімати не потрібно, оскільки ми використовуємо різні типи документів;

  10. Конструктор запитів 1с автоматично перейде на вкладку Таблиці та поля. У правій частині вікна буде видно, що активним є другий запит об'єднання;


  11. Повторимо пункти 1 - 7, для таблиці ПоверненняТоварівПостачальнику;
  12. Знову перейдемо на вкладку Об'єднання / Псевдоніми. У таблиці псевдонімів видно, що поля Посиланняобох таблиць стоять в одному рядку, а значить посилання на обидва документи будуть перебувати в результаті запиту в одній колонці;
  13. Змінимо ім'я колонки з Посиланняна Документ(Задамо псевдонім поля). Для цього двічі клацніть лівою кнопкою миші на ім'я поля. Після чого можна задати своє ім'я, впишемо туди Документ;

  14. Запит готовий, натискаємо кнопку «ОК» у нижній частині вікна конструктора.

У результаті ми отримаємо запит з наступним текстом.

Якщо помітили помилку, виділіть фрагмент тексту та натисніть Ctrl+Enter
ПОДІЛИТИСЯ:
Комп'ютери та сучасні гаджети