Робота побудовника звіту та побудовника запиту з довільним джерелом даних. Робота будівельника звіту та будівельника запиту з довільним джерелом даних А тепер цікаві речі

1. Що таке будівельник звіту?

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

Налаштування будівельника звіту включають:

  • угруповання (приклад: “Номенклатура”, “Контрагент”…),
  • показники (приклад: “Кількість”, “Сума”…),
  • додаткові поля (приклад: “Номенклатура.Послуга”, “Контрагент.Код”…),
  • фільтр (приклад: за конкретною номенклатурою, групою контрагентів…) і
  • сортування (приклад: "Номенклатура.Код", "Контрагент.Найменування"...)

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

Перед виведенням макет звіту можна оформити за допомогою макета оформлення.

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

2. Де можна використовувати будівельник звіту?

За допомогою будівельника звіту можна проектувати основну масу звітів (приклад: “Залишки товарів”, “Продажі за період”…). При цьому час на їх розробку та програмний код суттєво скоротяться, а якість оформлення та функціональність – підвищаться.

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

Оскільки будівельник звіту недоступний на сервері 1С:Підприємства і не використовується в модулі зовнішнього з'єднання, то в цих випадках необхідно використовувати будівельник запиту, який аналогічний до будівельника звіту, але не має візуальних властивостей та методів (“Макет”, “Виводити Заголовок Звіту”, “Вивести()”, “ОформитиМакет()”…).

3. Трохи про поняття

У порівнянні з версією 7.7 у версії 8.0 відбулася невелика зміна понять, тому варто зупинитися на цьому.

Концепція

Опис

Вимірювання рядка Список угруповань, за якими здійснюватиметься висновок за рядками (приклад: “Номенклатура”, “Контрагент”…)
Вимірювання колонки Список угруповань, якими здійснюватиметься висновок по колонках (приклад: “Склад”, “Місяць”…).
Відбір Набір різних фільтрів (приклад: по групі контрагентів, заданої організації…).
Порядок Набір полів сортування (приклад: “Номенклатура.Код”, “ДокументПродажи.Ответственный”…).
Поле Один із полів вибірки запиту (приклад: “Номенклатура”, “Контрагент.Код”, “Кількість”, “Сума”…).
Вибрані поля Список обраних полів, включає показники (приклад: “Кількість”, “Сума”…) та додаткові поля (реквізити угруповань) (приклад: “Номенклатура.Група”, “Контрагент.Код”…).
Доступні поля Список полів, доступних для додавання до групування, фільтр, сортування та вибрані поля. Заповнюється зазвичай списком полів вибірки запиту, але може бути програмно відредагований (можна додавати, змінювати та видаляти доступні поля).

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

Головна відмінність полягає в тому, що доступне поле не має властивості "ШляхКДаним" (приклад: "Номенклатура.Код", "Кількість"), так як це просто своєрідний опис поля, за яким буде зроблена спроба знайти відповідність серед полів вибірки запиту в момент додавання його до списку угруповань, фільтра, сортування або вибраних полів.

При цьому немає можливості програмно додати одне з доступних полів в будь-який з перелічених вище списків, так як, з одного боку, у доступного поля немає методів а-ля “Додати ВІдбір ()” або “Додати Вибрані Поля ()”, а, з іншого боку , при додаванні нового елемента в будь-який з перелічених списків потрібно вказати властивість “ШляхКДанним”, яка не завжди збігається з ім'ям поля (приклад: поля “Номенклатура.Батько” та “Номенклатура.Батько.Батько” мають однакове ім'я “Батько”).

4. Типовий варіант використання будівельника звіту

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

  1. Створити новий об'єкт “ПобудівникЗвіту”;
  2. Присвоїти властивості "Текст" текст запиту;
  3. Якщо в тексті запиту не було встановлено налаштування будівельника звіту, то виконати метод “ЗаповнитиНалаштування()”;
  4. Надати користувачеві можливість зміни налаштувань будівельника звіту;
  5. При необхідності можна відмовитися від автогенерації макета будівельником звіту та присвоїти властивості “Макет” фіксований макет;
  6. При необхідності можна привласнити властивості “МакетОформлення” один із стандартних або свій макет, при цьому, якщо макет, що автогенерується, побудова звіту був замінений на фіксований, то виконати метод “ОформитиМакет()”;
  7. Викликати метод “Виконати()”;
  8. Викликати метод “Вивести()”.
Побудовач = Новий "ПобудівникЗвіту"; Побудовник.Текст = "ВИБРАТИ ДОЗВОЛЕНІ | Грошові КоштиКомпаніїЗалишки.СтруктурнаЄдиниця, |СУМА(ГрошовіКоштиКомпаніїЗалишки.СумаЗалишок) ЯК Сума | |З | ОВАТЬ ПО | Грошові КоштиКомпанії (Сума) ПО | ЗАГАЛЬНІ, | Построитель.ЗаполнитьНастройки(); //Тут можна дати користувачеві можливість //змінити налаштування будівельника звіту Побудівник.Макет = ОтриматиМакет("СвійМакет");
Побудівник.МакетОформлення = ОтриматиМакетОформлення(СтандартнеОформлення.Класика);
Побудівник.ОформитиМакет();
Построитель.Выполнить();
Будівник.Вивести();

5. Опис деяких властивостей будівельника звіту

Властивість

Опис

Текст Містить текст запиту на будівничого звіту. Якщо текст запиту постачальника звіту не містить елементів налаштування “(…)”, можна за допомогою методу “ЗаповнитиНастройки()” автоматично заповнити налаштування на основі тексту запиту.
ТекстЗаголовка Текст, який виводитиметься у заголовку звіту (приклад: “Залишки товарів на 01.01.2004”, “Продажі за січень 2004 року”…).
ВиводитиЗаголовокЗвіту
Виводити Шапку Таблиці
Виводити Загальні Підсумки
Виводити Підвал Таблиці
Виводити Підвал Звіту
Ці властивості визначають, чи виводитимуться, відповідно, заголовок звіту, шапка таблиці, загальні підсумки, підвал таблиці та підвал звіту.
ВиводитиДетальніЗаписи Властивість відповідає за примусове виведення або заборону виведення детальних записів.
АвтоДетальніЗаписи Якщо властивість "АвтоДетальніЗаписи" встановити в Істина, то кожен детальний запис буде виводитися тільки в тому випадку, якщо він відрізняється від групового.
ДоступніПоля Містить список полів, доступних для додавання до групування, фільтр, вибрані поля та сортування.
ВимірюванняРядки
ВимірюванняКолонки
Містять список угруповань, відповідно, по рядках та колонках.
Відбір Містить список фільтрів, заданих виробнику звіту.
ВибраніПоля містить список вибраних показників та реквізитів угруповань.
Порядок містить перелік полів сортування.
Параметри Містить список параметрів виробника (оголошених у тексті запиту виробника за допомогою символу “&”).
Результат Містить результати виконання запиту будівельника звіту (об'єкт типу Результат Запиту).

6. Обробка Розшифрування за допомогою побудовника звіту

Властивість "Заповнення Розшифровки" містить один із трьох варіантів заповнення розшифровки при виведенні:

Перший варіант: не заповнювати (не використовувати розшифровку).

Другий варіант: значення угруповань (при розшифровці осередку буде відкриватися значення угруповання, виведене в ній).

Третій варіант: розшифровка (розшифровка буде заповнюватися структурою, що містить значення всіх угруповань). У цьому випадку потрібно обробляти подію табличного документа "Обробка розшифрування", де потрібно аналізувати передану структуру та виконувати ті чи інші дії.

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

Якщо використовується третій варіант заповнення розшифровки, можна використовувати метод “НалаштуватиРозшифровку()”, призначений для того, щоб виконати та вивести звіт з урахуванням розшифровки, виконаної користувачем.

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

7. Оформлення звіту

Властивість “Макет” містить макет, який використовується під час виведення результату в табличний документ. Якщо невизначено, то макет генерується автоматично.

Властивості "МакетЗаголовкаЗвіту", "МакетШапкиТаблиці", "МакетДетальнихЗаписів", "МакетЗагальнихІтогов", "МакетПодвалаТаблиці" і "МакетПодвалаЗвіту" містять ім'я області в макеті будівельника звіту або окремі макети, використовувані загальних підсумків, підвалу таблиці та підвалу звіту до табличного документа. Якщо імена областей відповідають іменам у макеті будівельника звіту, то властивості заповнювати не потрібно.

Властивість “МакетОформлення” містить макет, який використовується для оформлення макету побудовника звіту. Оформлення осередків у макеті оформлення буде застосовано до осередків макета будівельника звіту.

Для отримання одного із стандартних варіантів оформлення можна використовувати метод глобального контексту “ОтриматиМакетОформлення()”.

У разі, якщо властивості “Макет” побудовника звіту було присвоєно фіксований макет, його оформлення потрібно виконати метод “ОформитиМакет()”.

Властивість “Розміщення Вимірювань В рядках визначає один із трьох варіантів виведення угруповань по рядках.
Перший варіант: разом (в одній колонці).
Приклад:

Другий варіант: окремо (у різних колонках).
Приклад:


Приклад:

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

Другий варіант: окремо (у різних рядках).
Приклад:

Третій варіант: окремо і лише в підсумках.
Приклад:

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

Другий варіант: у заголовку та підвалі (вище і нижче наступних угруповань і детальних записів).

Третій варіант: у підвалі (нижче наступних угруповань і детальних записів, вище них виводиться лише опис угруповання).

Четвертий варіант: тільки в підвалі (тільки нижче наступних угруповань та детальних записів).

Властивість “ РозміщенняПідсумківВКолонках” визначає один із чотирьох способів виведення підсумків у колонках.

Перший варіант: у заголовку (тільки лівіше наступних угруповань і детальних записів).

Другий варіант: в заголовку і підвалі (лівіше і правіше наступних угруповань і детальних записів).

Третій варіант: у підвалі (правіше наступних угруповань і детальних записів, лівіше за них виводиться лише опис угруповання).

Четвертий варіант: тільки в підвалі (тільки правіше наступних угруповань і детальних записів).

Властивість “ РозміщенняРеквізитівВимірюваньВрядках” визначає один із трьох варіантів виведення реквізитів угруповань по рядках.

Перший варіант: разом (в одній додатковій колонці).
Приклад:

Другий варіант: разом з вимірами (у колонках з угрупованнями).
Приклад:

Третій варіант: окремо (у різних додаткових колонках).
Приклад:

Властивість “ РозміщенняРеквізитівВимірюваньВолонках” визначає один із трьох варіантів виведення реквізитів угруповань по колонках.

Перший варіант: разом (в одному додатковому рядку).
Приклад:

Другий варіант: разом з вимірами (у рядках з угрупованнями).
Приклад:

Третій варіант: окремо (у різних додаткових рядках).
Приклад:

8. Висновок будівельника звіту

Метод “Виконати()” виконує запит будівельника звіту та заповнює властивість “Результат”.
За допомогою методу “Отримати Запит()” можна отримати запит побудовника звіту, який виконується під час виклику методу “Виконати()”.

Метод “Вивести()” виводить результат у табличний документ чи діаграму. Якщо не вказати об'єкт, у який потрібно виконати висновок, то буде створено новий табличний документ.

Приклад виведення нового табличного документа:
Будівник.Вивести();

Приклад виведення в існуючий табличний документ:
Будівник.Вивести(ЕлементиФорми.РезультатТаблиця);

Приклад виведення у діаграму:
Будівник.Вивести(ЕлементиФорми.РезультатДіаграма, "Кількість");

Якщо потрібно вивести результат побудовника звіту в зведену таблицю чи зведену діаграму, тоді необхідно використовувати метод “Вивести()”, а заповнювати властивість зведеної таблиці чи зведеної діаграми “ДжерельникДанных”. Як джерело можна вказати результат будівельника звіту або сам будівельник звіту. Результат будівельника звіту не вимагає перевиконання запиту, зате будівельник звіту дозволяє змінювати склад угруповань.

9. Збереження та відновлення налаштувань будівельника

Метод “ОтриматиНастройки()” дозволяє отримати поточні налаштування будівельника звіту з можливістю вказівки, які саме (приклад: тільки фільтр, фільтр та сортування…).

Метод “УстановитиНастройки()” дозволяє завантажити налаштування будівельника звіту з можливістю вказівки, які саме (приклад: тільки фільтр, фільтр та сортування…).

10. Угруповання та поля будівельника звіту

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

Основними реквізитами угруповання є

  • “Ім'я” (ідентифікатор реквізиту) (приклад: “Номенклатура”, “Контрагент”…),
  • “Подання” (подання під час висновку) (приклад: “Документ продажу”, “Одиниця виміру”…),
  • “ШляхКДаним” (шлях до поля вибірки запиту) (приклад: “Номенклатура”, “ДокументПродажи.Організація”…)

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

  • “Тип Вимірювання” (один із варіантів фільтра за значеннями поля: ієрархія (елементи та групи), лише ієрархія (тільки групи) або елементи (тільки елементи)).

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

  • "Макет" - ім'я області в макеті будівельника звіту або окремий макет, який використовується під час виведення групування.
  • "МакетІєрархії" - ім'я області в макеті будівельника звіту або окремий макет, який використовується при виведенні ієрархії угруповання.
  • "МакетПідвалу" - ім'я області в макеті будівельника або окремий макет, що використовується при виведенні підвалу угруповання.
  • "МакетПідвалуІєрархії" - ім'я області в макеті будівельника або окремий макет, що використовується при виведенні підвалу ієрархії угруповання.
  • "МакетиПодваловУровней" - масив макетів підвалів для різних рівнів угруповань.
  • "МакетиРівнів" - масив макетів для різних рівнів угруповань.

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

  • “Ім'я” (ідентифікатор поля) (приклад: “Кількість”, “Код Номенклатури”, “Період”…),
  • “Уявлення” (подання під час висновку) (приклад: “У”, “Код”, “Період”…) і
  • "ШляхКДаним" (шлях до поля вибірки запиту) (приклад: "Кількість", "Номенклатура. Код", "Період" ...).

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

  • “Вставити()“ - додати групування/поле у ​​вказану позицію.
  • “Додати()“ - додати групування/поле до кінця списку.
  • “Індекс()“ – отримати індекс групування/поля у списку.
  • “Кількість()“ – отримати кількість угруповань/полів у списку.
  • “Знайти()“ – знайти угруповання/поле у ​​списку на ім'я.
  • “Очистити()“ – очистити список угруповань/полів.
  • "Отримати()" - отримати угруповання/поле за індексом.
  • “Зсунути()“ – зсунути угруповання/поле на вказану кількість позицій.
  • “Видалити()“ – видалити групування/поле зі списку.

11. Мова будівельника

Побудовник звіту має власну мову. Це звичайна мова запитів, доповнена конструкціями “(…)”. За допомогою цих конструкцій можна відмовитися від методу “ЗаповнитиНастройки()” та налаштувати будівельник звіту у тексті запиту.
Таким чином можна налаштувати елементи "ВИБРАТИ", "ДЕ", "Упорядкувати ПО", "ПІДСУМКИ ПО", а також зробити ще кілька цікавих речей. У цьому випадку основний текст запиту будівельника буде налаштуваннями за умовчанням, тоді як конструкції (…) описуватимуть доступні налаштування.

Якщо поле вибірки дозволяє отримати щось через точку, можна вказати “.*” після поля, тоді користувач зможе вибирати реквізити поля. Наприклад, “Номенклатура.*” дозволяє зробити сортування за “Номенклатурою.Код” або відбір за “Номенклатурою.Послуга”. А ось “Кількість.*” сенсу не має, тому що поле “Кількість” реквізитів не має, а отже, достатньо вказати просто “Кількість”.

Поля, вказані у конструкції “ВИБРАТИ”, обмежують список полів, доступних користувачеві.
Поля, вказані у конструкції “ДЕ”, обмежують список полів, які можна використовувати у фільтрі.
Поля, вказані в конструкції "Упорядкувати ПО", обмежують список полів для сортування.
Поля, зазначені в конструкції “ПІДСУМКИ ПО”, обмежують список полів для угруповання підсумків.

А зараз цікаві речі.

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

| РегістрНакопичення.ЗалишкиТоварівКомпанії.Залишки(&ДатаЗакінчення)
вказати

| РегістрНакопичення.ЗалишкиТоварівКомпанії.Залишки((&ДатаЗакінчення))
то в цьому випадку можна буде задати фільтр по полю "ДатаЗакінчення".

При цьому, у першому випадку обов'язково потрібно встановити параметр будівельника звіту "ДатаЗакінчення", у другому випадку цього не потрібно, крім того, якщо відбір по полю "ДатаЗакінчення" не буде заданий, то цей параметр таблиці "РегістрНакопичення. Залишки Товарів Компанії. Залишки" взагалі не враховуватиметься.

По-друге, джерела у тексті запиту можна позначати як необов'язкові, поміщаючи в конструкцію “(…)”. Наприклад, якщо скласти такий текст запиту

| ВИБРАТИ


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

| РеєстрНакопичення.Залишки ТоварівКомпанії.Залишки ЯК ЗалишкиТоварів
| (ЛІВОЕ З'ЄДНАННЯ РеєстрНакопичення.ПартіїТоварівКомпанії.Залишки ЯК ПартіїТоварівКомпаніїЗалишки
| ПО ЗалишкиТоварівКомпаніїЗалишки.Номенклатура = ПартіїТоварівКомпаніїЗалишки.Номенклатура)
|ПІДСУМКИ СУМА(Кількість), СУМА(КількістьПоПартіям) ПО
| ЗАГАЛЬНІ,
| Номенклатура

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

По-третє, у параметрах джерел можна вказати, що у разі завдання фільтрів по можливості застосовувати їх не до результату виконання запиту за допомогою елемента "ДЕ", а до самого джерела. Таким чином, замість
| РеєстрНакопичення.ЗалишкиТоварівКомпанії.Залишки()

має сенс писати

| РегістрНакопичення. Залишки Товарів Компанії. Залишки (, (Номенклатура. *, Склад Компанії. *, Замовлення.

Ну і, по-четверте, Найсмачніше, на мій погляд. У разі вказівки в джерелі параметра “Періодичність” (для таблиць, що дозволяють отримувати обороти), його також можна задати як “(…)”, і в результаті невеликої маніпуляції з текстом запиту будівельника ми можемо використовувати угруповання за періодами.

Приклад: |ВИБРАТИ ДОЗВОЛЕНІ | Партії ТоварівКомпаніїОбороти.Номенклатура, | СУМА(Партії ТоварівКомпаніїОбороти.ВартістьПрихід) ЯК ВартістьПрихід, | СУМА(Партії ТоварівКомпаніїОбороти.ВартістьВитрата) ЯК ВартістьВитрата | |З | РеєстрНакопичення.ПартіїТоварівКомпанії.Обороти(, (&Періодичність), | |ЗГРУПУВАТИ ПО | Партії ТоварівКомпаніїОбороти.Номенклатура | |ПІДСУМКИ СУМА(ВартістьПриход), СУМА(ВартістьВитрата) ПО | ЗАГАЛЬНІ, | Номенклатура |(ВИБРАТИ | Партії ТоварівКомпаніїОбороти.Номенклатура.*, | Реєстратор.*, | ПочатокПеріоду(Період, День) ЯК ПеріодДень, | ПочатокПеріоду(Період, Тиждень) ЯК ПеріодТиждень, | ПочатокПеріоду(Період) йод, Місяць) ЯК ПеріодМісяць, | Початок Періоду (Період, Квартал) КАК Період Прихід, | СУМА (Партії товарів Компании Вартість Витрата) ЯК Вартість Витрата) | |(ВОРЯДОЧИТИ ПО | Партії ТоварівКомпаніїОбороти.Номенклатура.*, | Реєстратор.*, | ВартістьПрихід, | ВартістьВитрата) | |(ДЕ | Партії ТоварівКомпаніїОбороти.Номенклатура.*, | Реєстратор.*, | СУМА(ПартіїТоварівКомпаніїОбороти.ВартістьПрихід) ЯК ВартістьПрихід, | СУМА(ПартіїТоварівКомпаніїОбороти.Витрата)ЯК | |(ПІДСУМКИ ПО | Номенклатура.*, | Реєстратор.*, | ПочатокПеріоду(Період, День) ЯК ПеріодДень, | ПочатокПеріоду(Період, Тиждень) ЯК ПеріодТиждень, | ПочатокПеріоду(Період, Декада) ЯК ПеріодДеок ) ЯК ПеріодМісяць, |

Є один нюанс, щоб угруповання за періодами працювало, необхідно додати фільтр за параметром “Періодичність”. Щоб не робити це вручну, для зручності можна перед виконанням будівельника звіту програмно його додавати, а після виконання видаляти, щоб він не бентежив, оскільки з погляду здорового глузду зрозуміти такий фільтр неможливо. Робиться це приблизно так

Якщо ПобудовникЗвіту.ДоступніПоля.Знайти("Періодичність")<>Невизначено Тоді Періодичність = Невизначено; Якщо БудівникЗвіту.ВимірюванняРядки.Знайти<>Невизначено АБО Побудовник Звіту. Вимірювання Колонки.<>Невизначено тоді періодичність = 9; КінецьЯкщо; Якщо БудівникЗвіту.ВимірюванняРядки.Знайти<>Невизначено АБО Побудовник Звіту. Вимірювання Колонки.<>Невизначено тоді періодичність = 8; КінецьЯкщо; Якщо БудівникЗвіту.ВимірюванняРядки.Знайти("ПеріодКвартал")<>Невизначено АБО ПобудовникЗвіту.ВимірюванняКолонки.Знайти("ПеріодКвартал")<>Невизначено тоді періодичність = 7; КінецьЯкщо; Якщо БудівникЗвіту.ВимірюванняРядки.Знайти("ПеріодМісяць")<>Невизначено АБО Побудовник Звіту. Вимірювання Колонки.<>Невизначено тоді періодичність = 6; КінецьЯкщо; Якщо БудівникЗвіту.ВимірюванняРядки.Знайти("ПеріодДекада")<>Невизначено АБО ПобудовникЗвіту.ВимірюванняКолонки.Знайти("ПеріодДекада")<>Невизначено тоді періодичність = 5; КінецьЯкщо; Якщо БудівникЗвіту.ВимірюванняРядки.Знайти("ПеріодТиждень")<>Невизначено АБО ПобудовникЗвіту.ВимірюванняКолонки.Знайти("ПеріодТиждень")<>Невизначено тоді періодичність = 4; КінецьЯкщо; Якщо БудівникЗвіту.ВимірюванняРядки.Знайти("ПеріодДень")<>Невизначено АБО ПобудовникЗвіту.ВимірюванняКолонки.Знайти("ПеріодДень")<>Невизначено тоді періодичність = 3; КінецьЯкщо; Якщо БудівникЗвіту.ВимірюванняРядки.Знайти("Реєстратор")<>Невизначено АБО ПобудовникЗвіту.ВимірюванняКолонки.Знайти("Реєстратор")<>Невизначено АБО ПобудовникЗвіту.ВибраніПоля.Знайти("Реєстратор")<>Невизначено тоді періодичність = 2; КінецьЯкщо; Якщо періодичність<>Невизначено Тоді ПолеОтборуПоПеріодичності = ПобудовачЗвіту.Отбор.Додати("Періодичність"); ПолеОтбораПоПеріодичності.Значення = Періодичність; ПолеОтбораПоПеріодичності.Використання = Істина; КінецьЯкщо; КінецьЯкщо; Построитель.Выполнить(); Якщо ПолеОтборуПоПеріодичності<>Невизначено Тоді Побудовник Звіту. КінецьЯкщо;

12. Налаштування користувача будівельника

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

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

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

Побудовник звіту у 1С – що це?

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

  1. Результат виконання запиту;
  2. Область осередків табличного документа;
  3. Таблична частина документа чи довідника;
  4. Набір записів регістра.

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

На Рис.1 представлена ​​ділянка коду, яка дозволяє за допомогою «Побудовника звіту» вивести на екран довільну таблицю значень

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

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

Рис.2

Налаштування будівельника

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

Як і СКД будівельник включає:

  • Групування (рівні ієрархії під час виведення інформації);
  • Показники (значення, якими необхідно отримати результат);
  • Додаткові поля, що розраховуються (реквізити елементів, результати дій зі значеннями);
  • Фільтри (відбори);
  • Сортування.

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

Алгоритм використання будівельника

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

  1. Оголошуємо створення нового об'єкта типу «ПобудівникЗвіту»;
  2. На цьому етапі можна або використовувати Побудовач Запиту для створення тексту вибірки, або, використовуючи об'єкт ОписДжерела Даних скористатися існуючою вибіркою;
  3. Налаштування постачальника звіту можна задати, використовуючи метод об'єкта постачальника ЗаповнитиНалаштування();
  4. Відмовитись від використання стандартного макета оформлення, що створюється методом автогенерації, можна визначивши властивість об'єкта Макет у будівельника;
  5. Якщо не використовується опис джерела даних, на цьому етапі необхідно виконати запит, використовуючи метод Виконати ();
  6. Останнім етапом є запуск методу Вивести(), висновок можна здійснити у табличний документ, або у відповідний елемент форми.

Використання розшифровки в будівнику

Третій рядок на Рис.1 включає розшифровку осередків результату виконання будівельника.

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

  1. Значення угруповань – при активізації осередку буде використовуватися значення вказаної в ній угруповання;
  2. НеЗаповнювати – значення за замовчуванням, що означає, що для кінцевого результату розшифровка не використовуватиметься;
  3. Розшифрування – структура розшифровки буде заповнена значеннями всіх угруповань вихідної вибірки.

Крім цього, користувач має можливість самостійно задати розшифровку, використовуючи метод НалаштуватиРасшифровку(). Ділянка коду, що запускає цей метод, представлений на Рис.3

Рис.3

Приклад використання будівельника для включення відборів у звіті

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

  1. Почнемо зі створення зовнішнього звіту та додавання до нього реквізиту з довільним ім'ям та типізацією ПобудователяЗвіту (Рис.4);

Рис.4

  1. Створюємо форму звіту та розміщуємо на ній інтерфейсний об'єкт.

Рис.5

  1. Створюємо процедуру ПріВідкриття(), пов'язану з відповідною подією нашої форми;

Рис.6

  1. Код, прописаний у ній обов'язково повинен містити запит будівельника звіту, приклад коду наведено на Рис.6, для створення тексту будівельника можна скористатися конструктором запиту, у конструкторі умови будівельника та додаткові його налаштування вказуються на відповідній закладці Мал.7;

Рис.7

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

  2. Процедура, що виводить результат будівельника, представлена ​​на Рис.8 і пов'язана з натисканням на кнопку Сформувати;

Рис.8

  1. Зберігаємо наш звіт.

Зовнішній вигляд створеного нами звіту та його результат показано на Рис.9

Рис.9

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

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

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

Основна частина звіту – це запит 1С. Що стосується звіту СКД – це більшість звіту.

Сядьте. Зітхніть. Заспокойтесь. Зараз я вам скажу новину.

Щоб програмувати в 1С недостатньо знати мову програмування 1С. Потрібно знати мову запитів 1С.

Мова запитів 1С – це окрема мова, яка дозволяє вказати які дані нам потрібно дістати з бази даних.

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

Як використовуються Запити 1С

Коли користувач запускає 1С у режимі Підприємство – у запущеному клієнті немає жодної грами даних. Тому коли потрібно відкрити довідник – 1С запитує дані із бази даних, тобто робить запит 1С.

Запити 1С бувають:

  • Автоматичні запити 1С
    Формуються автоматично системою. Ви створили форму списку документів. Додали стовпчик. Це означає, що при відкритті цієї форми в режимі Підприємство буде запит і будуть запитані дані щодо цієї колонки.
  • Напівавтоматичні запити 1С
    Існує безліч методів (функцій) у мові 1С, при зверненні до яких відбувається запит до бази даних. Наприклад.ОтриматиОб'єкт()
  • Ручні запити 1С (написані програмістом спеціально як запит)
    Ви можете написати запит 1С самостійно у коді та виконати його.

Створення та виконання запитів 1С

Запит 1С – це текст запиту мовою запитів 1С.
Текст можна написати ручками. Тобто взяти та написати (якщо знаєш цю мову).

Так як 1С просуває концепцію візуального програмування, де багато чи багато можна зробити без написання коду ручками – є спеціальний об'єкт Конструктор запиту, який дозволяє без знання мови запитів намалювати текст запиту. Однак чудес не буває – для цього потрібно знати, як працювати з конструктором.

Після того, як готовий текст запиту 1С, його потрібно виконати. Для цього є об'єкт у коді 1С Запит(). Ось приклад:

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

| Довідник Номенклатура ЯК Номенклатура
|ДЕ
| Номенклатура.Послуга";
Вибірка = Запит.Виконати().Вибрати();

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

Як Ви бачите у прикладі – після виконання запиту 1С до нас приходить результат і ми маємо його обробити. Результат - це один або кілька рядків таблиці (у спеціальному вигляді).

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

Або просто обійти по рядках.
Вибірка = Запит.Виконати().Вибрати();
Поки Вибірка.Наступний() Цикл
//Щось робимо з результатами запиту
КінецьЦикл;

Робота із запитами 1С

Основні принципи запитів 1С

Основні засади побудови запиту 1С –
ВИБРАТИ СписокПолів З НазваТаблиці ДЕ Умови

Приклад побудови такого запиту 1С:

ВИБРАТИ
//Список полів, які треба вибрати
Посилання,
Найменування,
Код
З
//Найменування таблиці, звідки вибираємо дані
//Список таблиць - це список об'єктів у вікні конфігуратора
Довідник.Номенклатура
ДЕ
//Вказуємо відбір
ВидТовара = &Послуга //відбір за зовнішнім значенням
Або Послуга // «Послуга» – реквізит типу Бульово, відбір за значенням Істина
ВПОРЯДКУВАТИ ЗА
//Сортування
Найменування

Список таблиць 1С

Назви таблиць Ви дивитеся у вікні конфігуратора. Тільки необхідно замість «Довідники» писати «Довідник», наприклад, «Довідник.Номенклатура» або «Документ.Реалізація ТоварівПослуг» або «РегістрНакопичення.Продажі».

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

Регістр Відомостей. Ім'я Реєстру.

РегістрНакопичення.Ім'яРегістра.Залишки(&Дата) – запит 1С з регістру залишків на певну дату

РегістрНакопичення.Ім'яРегістра.Обороти(&ДатаПочатку, &ДатаЗакінчення) – запит 1С з регістру оборотів за період з дати початку по дату закінчення.

Додаткові принципи

Коли ми запитуємо список якихось даних – працюють основні засади. Але ми можемо запитати також цифри і запит може їх порахувати (скласти наприклад).

ВИБРАТИ
//Кількість(Ім'яПоля) – вважає кількість
//Поле ЯК ІншеІм'я - перейменовує поле
Кількість(Посилання) ЯК КількістьПроведенихДокументів
З

ДЕ
Проведено

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

ВИБРАТИ
//просто поле документа
Організація,
//Вважаємо кількість
Кількість(Посилання) ЯК КількістьПо Організаціям
З
Документ.РеалізаціяТоварівПослуг
ДЕ
Проведено
ЗГРУПУВАТИ ПО

Організація

Цей запит 1С поверне нам кількість документів щодо кожної організації (також говорять «у розрізі організацій»).

Порахуємо додатково за допомогою запиту 1С суму цих документів:

ВИБРАТИ
//просто поле документа
Організація,
//Вважаємо кількість

//вважаємо суму

З
Документ.РеалізаціяТоварівПослуг
ДЕ
Проведено
ЗГРУПУВАТИ ПО
//необхідно використовувати, якщо у списку полів є функція підрахунку() і одночасно одне або кілька полів - тоді потрібно групувати по цих полях
Організація

Цей запит 1С поверне нам суму документів.

ВИБРАТИ
//просто поле документа
Організація,
//Вважаємо кількість
Кількість(Посилання) ЯК КількістьПо Організаціям,
//вважаємо суму
Сума(СумаДокументу) ЯК Сума
З
Документ.РеалізаціяТоварівПослуг
ДЕ
Проведено
ЗГРУПУВАТИ ПО
//необхідно використовувати, якщо у списку полів є функція підрахунку() і одночасно одне або кілька полів - тоді потрібно групувати по цих полях
Організація
ПІДСУМКИ ЗА Загальні

Мова запитів 1С велика і складна і ми не будемо розглядати в одному уроці всі його можливості – читайте наші наступні уроки.

Коротко про додаткові можливості мови запитів 1С:

  • З'єднання даних із кількох таблиць
  • Вкладені запити
  • Пакетний запит
  • Створення власних віртуальних таблиць
  • Запит із таблиці значень
  • Використання вбудованих функцій отримання значення та маніпулювання значеннями.

Конструктор запитів 1С

Щоб не писати текст запиту руками існує конструктор запитів 1С. Просто натисніть правою кнопкою миші в будь-якому місці модуля та виберіть Конструктор запиту 1С.

Виберіть у конструкторі запитів 1С потрібну таблицю зліва і перетягніть правіше.

Виберіть у конструкторі запитів 1С з таблиці потрібні поля та перетягніть правіше. Якщо Ви хотіли б не просто вибрати поле, а застосувати до нього якусь функцію підсумовування – після перетягування клацніть по полю двічі мишкою. На закладці Угруповання після цього потрібно буде вибрати (перетягнути) потрібні поля для угруповання.

На закладці Умови в конструкторі запитів 1С Ви можете вибрати потрібні відбори таким же способом (перетягнувши поля, якими Ви будете робити відбір). Не забудьте вибрати правильну умову.

На закладці Порядок – вказується сортування. Підсумки – підсумовування підсумків.

За допомогою конструктора запитів 1С Ви можете вивчити будь-який запит. Для цього натисніть правою кнопкою на текст існуючого запиту та виберіть конструктор запитів 1С – і запит буде відкритий у конструкторі запитів 1С.

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

  • ТаблицяЗначень,
  • РезультатЗапиту,
  • ОбластьКомірокТабличногоДокументу,
  • Таблична частина,
  • РеєстрНакопиченняНабірЗаписів,
  • РеєстрВідомостейНабірЗаписів,
  • РеєстрБухгалтеріїНабірЗаписів,
  • РеєстрРозрахункуНабірЗаписів.
Для того, щоб будівельник звіту виводив звіт для довільного джерела даних, достатньо встановити опис джерела даних як будівник ДжерелоДаних. Властивість будівельника звіту ДжерелоДаних може містити значення типу ОписДжерелаДаних. Об'єкт Опис Джерела Даних містить саме джерело даних, а також містить опис колонок джерела даних. Кожен опис колонки джерела даних містить:
  • Ім'я містить ім'я колонки в джерелі даних,
  • ШляхКДаним - містить опис залежності колонок один від одного. Колонка, чий шлях до даних отримано через точку від шляху до даних іншого поля, вважається реквізитом іншої колонки. Якщо поле містить через точку слово Подання, то це поле вважається поданням для колонки, від шляху до даних якого виходить подання. приклади. Якщо колонка "Номенклатура" має шлях до даних "Номенклатура", а колонка "Код" має шлях до даних "Номенклатура.Код", то ця колонка вважатиметься реквізитом колонки "Номенклатура". Колонка шляхом до даних "Номенклатура.Представлення" буде вважатися поданням для колонки "Номенклатура",
  • Поле - ознака того, що дана колонка може бути використана як поле звіту,
  • Порядок - ознака того, що за цією колонкою можливе впорядкування,
  • Відбір - ознака того, що на цю колонку можна накладати вибір,
  • Вимір - ознака того, що дана колонка може бути використана як угруповання звіту,
  • Підсумок - рядок, що містить вираз для розрахунку підсумку. Для побудовника звіту вираз цього рядка відповідає виразу для обчислення результату, що використовується в мові запитів,
При установці джерела даних об'єкту Опис ДжерелоДаних, описи колонок створюються та заповнюються автоматично.

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

Приклад встановлення джерела даних виробнику звіту:

БудівникЗвіту.ДжерелоДаних = Новий ОписДжерелівДанних(ТаблицяЗначеньРезультат);

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

Робота будівельника запиту з довільним джерелом даних ідентична роботі з довільним джерелом звіту.



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