Порядок роботи з об'єктом вбудованої мови. Для чого призначений об'єкт конфігурації "Мова"

Розробка прикладного рішення в системі «1С: Підприємство» полягає у двох основних діях: візуальному конструюванні об'єктів конфігурації та описі специфічної поведінки системи з використанням вбудованої мови та мови запитів.

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

· М'яка типізація (тип змінної визначається типом значення, яке вона містить, і може змінюватися в процесі роботи);

· Відсутність програмного опису прикладних типів (вони створюються при додаванні об'єктів конфігурації);

· Подієва орієнтованість вбудованої мови;

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

Модулі конфігурації

Для розміщення тексту програми вбудованою мовою призначені модулі прикладного рішення. Ці модулі розташовуються у різних місцях конфігурації та мають різне призначення. Більшість модулів «прив'язано» до певних об'єктів конфігурації або до прикладного рішення.

Розрізняють такі види програмних модулів:

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

· Модуль програми. У конфігурації завжди існує єдиний модуль програми. Він виконується під час запуску системи в режимі «1С: Підприємство» та призначений для відпрацювання дій, пов'язаних із сеансом роботи кінцевого користувача. Основними подіями, які можуть оброблятися в модулі програми, є події початку та закінчення роботи програми. Послідовність із виклику представлена ​​на Мал. 1. Подія ПередПочаткомРоботиСистемивиникає під час запуску системи до відкриття головного вікна. Обробляючи цю подію, розробник, наприклад, може відмовитися від запуску, якщо будь-які умови не виконані. Подія ПриПочаткуРоботиСистемиз'являється після відкриття головного вікна. В обробнику цієї події можна, наприклад, вивести відомості про іменинників та ін.

· Модуль зовнішнього з'єднання. У конфігурації завжди існує єдиний модуль зовнішнього з'єднання. Він виконується при зверненні до програми як COM-серверу (в режимі зовнішнього з'єднання). У режимі зовнішнього з'єднання запускається не повноцінний додаток «1С: Підприємства», а «полегшений варіант», в якому недоступні всі функції, так чи інакше пов'язані з організацією інтерфейсу користувача.

· Модулі прикладних об'єктів. Кожен прикладний об'єкт конфігурації (наприклад документ ПКО або довідник), дані якого можуть бути модифіковані в режимі «1С: Підприємство», має свій модуль. Крім опису змінних та основної програми, модуль об'єкта може містити опис процедур – обробників подій, пов'язаних із даним об'єктом конфігурації. Є дві події, які викликаються для всіх об'єктів. ПередЗаписомі ПріЗаписи.

· Модулі форм. Кожна форма має свій модуль, в якому визначається поведінка форми та дії, що виконуються з неї, наприклад, відкриття інших форм. Для всіх форм викликаються події ПередВідкриттям, ПриВідкритті, ПередЗакриттямі При Закритті.

Контекст

У системі «1С: Підприємство» контекст означає оточення модуля, тобто. доступні йому змінні, об'єкти, властивості, методи та події. Можна виділити такі види контекстів, і, відповідно, правила видимості змінних, що експортуються, процедур і функцій:

· Глобальний контекст, доступний у всіх інших контекстах, складається з наступних частин:

§ властивості, методи та події глобального контексту (наприклад, властивість РобочаДата);

§ системні перерахування та системні набори значень (наприклад, КодПоверненняДіалогуі Символи).

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

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

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

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

Схематично взаємозв'язок контекстів зображено на Мал. 2.на Мал. 3зображено можливу взаємодію модуля форми журналу та модуля документа.


Процедури та функції

Процедури та функції є блоками програми, які можна викликати на ім'я з іншого місця, наприклад, з іншої процедури. Функції відрізняються від процедур лише тим, що мають значення, що повертається. У 8-й версії порядок дотримання процедур та функцій не важливий. Це означає, що процедура може розташовуватися нижче за місце її виклику.

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

Приклад 1:

Процедура Розрахунок()

Сума=Ціна*Кількість;

КінецьПроцедури

Розрахунок (); // Виклик процедури

Приклад 2:

Перем Глоб;

// Опис процедури

Процедура Розрахунок (Пар1, Пар2, ПарЗ) Експорт

Глоб = Глоб + Пар1 + Пар2 + ПарЗ;

КінецьПроцедури

Розрахунок (5, 6, 7); // Виклик процедури

Приклад 3:

Перем Глоб;

// Опис функції

Функція Розрахунок (Пар1, Пар2, ПарЗ) Експорт

Лок = Глоб + Пар1 + Пар2 + ПарЗ;

Повернення Лок;

КінецьФункції

Різ = Розрахунок (5, 6, 7); // Виклик функції

Типи даних

Число, Рядок, Дата, Бульово, значення Невизначено, значення Null (для неуказаних значень у таблицях бази даних)

Тип.Значення спеціального типу «Тип» потрібні для представлення та порівняння типів даних, наприклад:

Оголошення змінних

Змінні з'являються у програмі в таких випадках:

· після їх оголошення за допомогою оператора Перем.

Перем<Имя_переменной>[експорт];

Перем А,В;

· Після першого розміщення імені змінної в лівій частині оператора присвоєння.

Приклад:

· При визначенні імен ідентифікаторів елементів діалогу, що редагуються;

· При завданні формальних параметрів процедур.

Приведення типів

Приведення типів може бути явним і неявним.

Для явного приведення існують такі функції: Число, Рядок, Дата, Бульово. Неявне приведення типів здійснюється системою автоматично при обчисленні виразів.

Приклад: числова змінна Номер Місяця неявно перетворюється на рядок і приєднується до іншого рядка:

А = "Місяць" + Номер Місяця;

Довідники

Робота з довідниками здійснюється за допомогою наступних об'єктів:

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

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

· ДовідникПосилання.Однозначно ідентифікує елемент (групу) довідника і дозволяє звертатися до нього як «тільки читання». Через властивості та методи цього об'єкта можна прочитати реквізити елемента (групи), звернутися до його табличних частин. Значення цього типу зберігається у реквізитах, які посилаються на елементи даного довідника, наприклад, у реквізиті Співробітникдокумента Прийом на роботузберігається посилання на конкретний елемент довідника Співробітники.

· ДовідникОб'єкт.Надає доступ до елемента із можливістю запису. Цей об'єкт містить методи, що впливають на елемент у базі даних, наприклад, методи Записатиі видалити.

· ДовідникВибірка.Надає можливість перебору елементів довідника. Вибірка може бути прямою чи ієрархічною.

· Довідник Список.Об'єкт для керування списком елементів у табличному полі. Дозволяє керувати колонками, відбором та сортуванням у списку.

У системі 1С:Підприємство?

1. Тексти конфігурації та бази даних зберігаються у форматіUNICODE

3. Немає правильної відповіді

6.75 З якою метою тексти конфігурації та бази даних зберігаються у форматіUNICODE?

1. Формат UNICODE забезпечує незмінність (незалежність від програмної платформи операційної системи) подання інформації

2. ФорматіUNICODE дозволяє підтримувати різні мови в системі 1С: Підприємство

3. Немає правильної відповіді

6.76 Механізми інтернаціоналізації, закладені. ..

1. технологічну платформу 1С: Підприємства

2. прикладні рішення

3. вірні відповіді 1 та 2

4. немає правильної відповіді

6.77 Що таке код локалізації?

1. Рядок, що складається з коду мови та коду країни та ідентифікує деякий регіон світу

2. Код програмного продукту (вказується на реєстраційній анкеті, документації з комплекту постачання)

3. Параметр форматування рядка для перетворення

4. Her правильної відповіді

6.78 Чи правильно що в 1С:Підприємство 8 будь-яка текстова інформація може включати одночасно символи різних мов?

1. Так, оскільки всі тексти конфігурації та бази даних зберігаються у форматіUNICODE

2. Залежно від налаштувань, заданих під час створення інформаційної бази

3. Тільки якщо це передбачено конфігурацією

6.79 Навіщо об'єкт конфігурації " Мова " ?

1. Для створення інтерфейсу програми різними мовами

2. Для створення текстових документів різними мовами

3. Такого об'єкта в 1С: Підприємство 8 не існує

6.80 Як можна змінити мову перегляду (редагування) конфігурації?

1. За допомогою кнопки вибору мови, розташованої в рядку стану праворуч від кнопки "NUM"

2. Через пункт меню "Конфігурація - Мова редагування конфігурації"

3. У 1 С: Підприємство такої можливості не існує

4. Верпи відповіді 1 та 2

6.81 Яке написання мають оператори вбудованої мови?

1. Лише російське написання

3.

6.82 Чи можливе використання в одному вихідному тексті операторів вбудованої мови в російському та англійському написанні?

1. Тільки при спеціальних налаштуваннях конфігуратора

2. Так, для цього не потрібно змінити будь-які налаштування конфігуратора.

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

6.83 З якою метою використовується вбудована мова?

1. Для визначення інтерфейсу програми за замовчуванням

2. Для опису (на стадії розробки конфігурації) алгоритмів функціонування прикладного завдання

3. Немає правильної відповіді

6.84 Які написання мають функції вбудованої мови?

1. Лише російське написання

2. Тільки англійське написання

3. Російське та англійське написання

4. Залежно від установок конфігуратора

6.85 Що означає параметр Л(L) у форматному рядку функції форматування ЧислоПрописом()?

1. Ознака "дрібну частину виводити числом/прописом"

2. Кількість знаків після коми

3. Код локалізації

7. Таблична модель прикладного рішення

7.1 При налаштуванні обмеження доступу до даних допускається встановлення кількох (за кількістю полів) обмежень:

1. Для права "Читання"

2. Для права "Зміна"

3. Для права "Додавання"

4. Для права "Видалення"

5. Для всіх вищезазначених прав

6. Для всіх можливих прав

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

1. Тільки значення параметрів сеансу

2. Тільки дані з таблиць (запитів)

3. Значення параметрів сеансу та дані з таблиць (запитів)

4. Тільки значення мають типи: Число, Рядок, Бульово, Дата

7.3 Яким із перерахованих вище способів можна скористатися, щоб у розділі "Поля" конструктора запитів з'явилися код і найменування довідника?

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

2. Не заповнюючи розділ "Таблиці", одразу вибирати потрібні об'єкти з таблиць - джерел даних розділу "База даних", переносячи їх у розділ "Поля", використовуючи технологію Drag & Drop. Розділ "Таблиці" заповнюється автоматично

3. Спочатку заповнити розділ "Таблиці", а потім, вибираючи потрібні об'єкти з цього розділу, перенести їх у розділ "Поля", використовуючи кнопки па формі ">" """

4. Вірні відповіді I та 3

5. Вірні відповіді I, 2 та 3

7.4 Для підвищення швидкості виконання запиту необхідно:

1. Задавати параметри більшості реальних таблиць

2. Задавати параметри більшості віртуальних таблиць

3. Замість завдання параметрів реальної чи віртуальної таблиці використовувати відбір, заданий конструкцією мови запитів "ДЕ"

4. Вірні відповіді I та 2

7.5 Чи можна при виборі таблиці-джерела до розділу "Таблиці" конструктора запитів задавати для неї нове ім'я (псевдонім)?

1. Так можна

2. Так, можна, але тільки якщо як джерело даних виступає вкладений запит

3. Так, можна, але тільки якщо як джерело даних виступає віртуальна таблиця

4. Вірні відповіді 1 та 2

5. Вірні відповіді 1 та 3

7.6 Вкладений запит може використовуватись:

1. Як таблиця-джерела даних

2. Як операнда операцій порівняння "В" або "НЕ В" при заданні параметрів віртуальної таблиці

3. Як операнда операцій порівняння "В" або "НЕ В" при заданні конструкції мови запитів "ДЕ"

4. Верпи відповіді 1, 2 та 3

7.7 Чи можна, використовуючи конструктор запиту, отримати результати з ієрархії?

1. Можна, якщо для групувального поля вказати тип підсумків "Елементи та ієрархія"

2. Можна, якщо для групувального поля вказати тип підсумків "Тільки ієрархія"

3. Верпи відповіді 1 та 2

7.8 На закладці "Умови" конструктора запитів окремий рядок списку умов може бути сформований:

1. За допомогою подвійного натискання лівою клавішею миші на потрібному полі у списку доступних полів

2. Шляхом перенесення потрібного поля до списку, використовуючи технологію Drag&Drop

3. Натиснути кнопку "Додати". Якщо умова довільна, текст умови можна ввести "вручну"

4. Викликавши контекстне меню, вибрати в ньому пункт "Додати". Можливе використання довільного виразу

5. Вірні всі вищенаведені відповіді

7.9 На закладці "Зв'язки" конструктора запитів можна визначити:

1. З'єднання таблиць-джерел даних та зв'язку між ними

2. Об'єднання таблиць-джерел даних та зв'язку між ними

3. Зв'язки між полями таблиці, яка отримується в результаті виконання запиту

4. Зв'язки між полями таблиці-джерела даних та таблиці, що отримується в результаті виконання запиту

7.10 При з'єднанні таблиць-джерел даних у конструкторі запитів можна:

1. Призначити з'єднання без зазначення умови зв'язку

2. Призначити з'єднання із зазначенням умови зв'язку, причому ця умова може бути лише одна

3. Призначити з'єднання із зазначенням умови зв'язку, причому ця умова може бути простою

4. Призначити необхідну кількість сполук із зазначенням необхідної кількості умов зв'язку, причому ці умови можуть бути як прості, так і довільні

7.11 Створення з'єднання таблиць-джерел даних у конструкторі запитів допускає:

1. З'єднання лише двох таблиць-джерел даних

2. З'єднання необхідної кількості таблиць-джерел даних

3. З'єднання лише двох таблиць-джерел даних, причому прапорець "Все" обов'язково має бути проставлений хоча б в одній з таблиць

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

Ось лише деякі, найбільш значущі особливості вбудованої мови:

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

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

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

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

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

Визначені типи даних

Платформа 1С:Підприємства 8.0 дозволяє розробнику використовувати різні типи даних.

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


Опис примітивних типів даних:

  • NULL- Відсутнє значення. Використовується, наприклад, у запитах.
  • НЕ визначено- Порожнє, невизначене значення. Використовується, наприклад, при оцінці передачі параметрів, у разі, якщо під час виклику процедури чи функції цей параметр опущено. Реквізити, що мають складовий тип даних, мають тип "Невизначено".
  • Бульово- Містить два значення: Істина або Брехня. Використовується, наприклад, у логічних виразах - логічний вираз має тип "Булеве".
  • Дата- Містить дату і час. За умовчанням має значення – 01.01.01 00:00:00 дата початку нашої ери. Час вимірюється з початку дня. Запис виразу, що має літерал типу "дата", здійснюється наступним чином - "00010101000000". Спочатку записується рік, потім місяць, потім число і потім час. Можливий наступний запис: "20041031". Час за замовчуванням – початок дня.
  • Рядок- буває змінної, фіксованої та необмеженої довжини. Загалом рекомендується використовувати рядки змінної довжини.
  • Число- Збільшено розрядність числа до 38 розрядів.
  • Тип- служить визначення типів значень. Використовується, наприклад, порівняння типів даних. Немає літералів і повертається функціями Тип(<Имя типа>) або ТипЗнч(<Значение>).

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


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

Масив. Є пронумерованою колекцією значень довільного типу. До елемента масиву можна звертатися за його індексом. Як елементи масиву можуть виступати, зокрема, інші масиви. Це дозволяє створювати багатовимірні масиви.

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

Відповідність. Також як і Структура, є колекцією пар Ключ - Значення . Однак, на відміну від структури, ключ може бути практично будь-якого типу.

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

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

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

COMSafeArray. Є об'єктною оболонкою над багатовимірним масивом SAFEARRAY з

Процедура ВибратиІзФайлуНатискання(Елемент) // Вибір файлу з переглядом ДіалогВиборуФайлу = Новий ДіалогВиборуФайлу(РежимДіалогуВиборуФайлу.Відкриття); ДіалогВиборуФайла.Каталог = ""; ДіалогВиборуФайла.ПопереднійПерегляд = Істина; ДіалогВиборуФайла.ІндексФільтра = 0; Якщо ДіалогВиборуФайлу.Вибрати() Тоді Файл = Новий Файл(ДіалогВиборуФайлу.ПовнеІм'яФайлу); Картинка = Новий СховищеЗначення(Новий Картинка(ДіалогВиборуФайлу.ПовнеІм'яФайлу)); ПоказуватиКартинку(); КінецьЯкщо; КінецьПроцедури

ЦЕ_КЛЮЧОВЕ_СЛОВО
<Это конструкция языка>,
<Это конструкция языка>
ЦЕ_ФУНКЦІЯ(<Это конструкция языка>)

У правилах, що описують мову запитів, конструкції мови вказуються у кутових дужках. Ключові слова та назви функцій описуються великими літерами.

Конструкції мови можуть містити необов'язкові елементи – ключові слова та інше. У правилах, що описують мову запитів, необов'язкові елементи укладені у квадратні дужки «[» та «]»:

[ЦЕ_НЕОБОВ'ЯЗКОВЕ_СЛОВО] [<Это необязательная конструкция>]

У деяких випадках у конструкції мови може використовуватися одна з кількох альтернативних елементів. Такі елементи в правилах перераховуються через вертикальну межу «|»:

ЛИБО_ЦЕ_СЛОВО | ЛИБО_ЦЕ_СЛОВО
<Либо эта конструкция> | <Либо эта конструкция>

Описи всіх конструкцій супроводжуються прикладами, що пояснюють порядок їх використання у мові запитів.

Коментарі у мові запитів

Текст запиту може містити коментарі. Коментар вважається частину рядка, що починається з послідовності символів // і триває до кінця рядка:

// Це коментар.

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

Двомовне подання ключових слів

Однією із суттєвих особливостей мови запитів 1C: Підприємства є те, що як і у вбудованій мові, всі ключові слова мають два варіанти написання: російською та англійською мовами. Далі у цьому розділі вказуються російські варіанти написання ключових слів. Нижче наведено таблицю, в якій наведено відповідності російської та англійської та варіантів написання ключових слів мови запитів...... (пропущено)

Основні секції тексту запиту

Текст запиту можна описати таким правилом:

<Описание запроса>
[<Объединение запросов>]
[<Упорядочивание результатов>]
[АВТОПОРУДАВАННЯ]
[<Описание итогов>]

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

У секції<Упорядочивание результатов>можна визначити умови упорядкування рядків у результаті запиту. Упорядкування результату запиту розглядається на сторінці 324 .

Автоупорядкування дозволяє увімкнути режим автоматичного впорядкування рядків в результаті запиту. Цей режим описано на сторінці 331 .

У секції<Описание итогов>можна вказати, які результати необхідно розраховувати у запиті. Опис цієї секції наведено на сторінці 332 .

Опис запиту

Як уже було сказано, у тексті запиту повинна обов'язково бути присутня секція опису запиту, в якій визначаються:

Поля, які утримуються в результаті запиту;

Джерела даних запиту – вихідні таблиці;

Умови, що впливають вибірку даних у запиті;

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

Секція опису запиту складається з кількох взаємозалежних речень:

ВИБРАТИ [РІЗНІ] [ПЕРШІ<Количество>]
<Список полей выборки>
[З<Список источников>]
[ДЕ<Условие отбора>]
[ЗГРУПУВАТИ ПО<Поля группировки>]
[МАЮЧІ<Условие отбора>]
[ДЛЯ ЗМІНИ [<Список таблиц верхнего уровня>]]

Опис запиту починається з обов'язкового ключового слова ВИБРАТИ.

Пропозиція ДЕ<Условие отбора> дозволяє фільтрувати результат запиту. У результаті потрапляють лише записи, котрим зазначена умова виявляється істинним. Правила опису умов відбору розглядаються на сторінці 315 .

Пропозиція ДЛЯ ЗМІНИпризначено для вказівки необхідності блокування даних, що зчитуються в транзакції.

Пропозиція ЗГРУПУВАТИдозволяє описати порядок угруповання результатів запиту. Детально угруповання розглядається на сторінці 316 .

Пропозиція МАЮЧІдозволяє накладати умови на результати угруповання. стор. 318 .

У всіх прикладах запитів у цьому розділі наводиться текст запиту та результат запиту. Мається на увазі, що текст запиту передається як параметр методу Виконати об'єкт Запит.

Наведемо приклад досить простого запиту, що складається з одного оператора ВИБРАТИ та списку полів вибірки.

//У звіт необхідно вивести список товарних накладних.

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

Використання слова РІЗНІ

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

// Необхідно дізнатися, яким взагалі контрагентам
// відвантажувався товар у період.
Вибрати Документ.ВитратнаНакладна.Контрагент

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

Видно, що в результаті запиту багато рядків, що повторюються, що знижує його наочність. Щоб уникнути повторень, слід вказати ключове слово РІЗНІ в описі запиту.

Вибрати Різні Документ.ВитратнаНакладна.Контрагент

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

Використання слова ПЕРШІ

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

// Необхідно відібрати п'ять найдорожчих товарів.
// Вибірка повинна здійснюватися в порядку зменшення ціни товару.
Вибрати Перші 5
Довідник.Номенклатура.Найменування,
Довідник.Номенклатура.ЗакупівельнаЦіна
Упорядкувати По Довідник.Номенклатура.

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

Опис полів вибірки

Після обов'язкового ключового слова ВИБРАТИ (і уточнюючих слів РІЗНІ та ПЕРШІ) у тексті запиту задається список полів вибірки. Ці поля будуть оброблятися під час вибірки даних у запиті. Результат запиту також матиме набір полів, визначених у цьому списку. Поля вибірки описуються за такими правилами:

<Описание поля>[[ЯК]<Псевдоним поля>]

<Выражение>[.<Группа полей>]

Список полів вибірки складається з одного або декількох елементів, розділених комами. кожне<Поле выборки>складається з опису поля вибірки та необов'язкового псевдоніма поля.

Замість переліку полів у списку вибірки можна вказати зірочку *. Це означатиме, що результат запиту повинен містити всі поля, які є у вихідних таблицях – джерелах даних запиту, які описані у списку джерел.

Зауваження!При вказівці зірочки "*" у списку полів вибірки до результату не включаються віртуальні поля вихідних таблиць.

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

У загальному випадку поле вибірки може бути не тільки посиланням на поле вихідної таблиці, а деяке<Выражение>. Детально вирази розглянуті на сторінці 344 .

Результати запиту можуть бути згруповані за допомогою агрегатних функцій, зазначених як вирази в полях вибірки. Угрупування результатів запиту розглядається на сторінці 316 . Агрегатні функції описані на сторінці 345 .

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

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

Псевдоніми полів у списку вибірки

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

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

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

Призначення псевдонімів полям саме собою ніяк не впливає вибірку даних у запиті.

// Необхідно вибрати із довідника товарів
// найменування товарів та найменування груп.
Вибрати
Довідник Номенклатура.Найменування Як Товар,
Довідник Номенклатура.Батько.Найменування Як Група
з
Довідник.Номенклатура

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

Зверніть увагу, що поля в результаті запиту поля називаються "Товар" та "Група". Якби псевдоніми полів не були вказані, поля в результаті запиту називалися б «Найменування» та «Найменування1» (назви полів у результаті запиту не можуть збігатися, тому до назви другого поля автоматично додано «1»), що набагато менш наочно.

Вкладені таблиці у списку полів вибірки

Поле у ​​списку вибірки може посилатися на вкладену таблицю джерела запиту. І тут поле результату запиту матиме тип РезультатЗапроса, тобто містити вкладений результат запиту, сформований з урахуванням вкладеної таблиці - джерела.

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

(<Список вложенных полей>) | *

<Вложенное поле [, <Вложенное поле>[, ...] ]

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

Замість перерахування вкладених полів можна вказати зірочку "*"; це означатиме, що у вкладений результат запиту має містити всі поля, які є у вкладеній таблиці.

<Выражение>[[ЯК]<Псевдоним поля>]

<Вложенное поле>може представляти деякий вираз. У найпростішому випадку<Выражение>- це посилання полі вкладеної таблиці. Детально вирази розглянуті на сторінці 344 .

Кожному вкладеному полю може бути призначено псевдонім. Надалі<Псевдоним поля>може використовуватися для більш зручного звернення до даного поля, аналогічно псевдонімам полів списку вибірки - див. «Псевдоніми полів у списку вибірки» на

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

//У звіт необхідно вивести специфікацію товарних накладних,
// Сам документ, номенклатуру та кількість.
Вибрати

Документ.ВитратнаНакладна.Склад.(Номенклатура Як Товар, Кількість)

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

Посилання склад
Товар Кількість
Джинси жіночі 4
Джинси жіночі 5
Сорочка «Ковбойка» 5
Витратна накладна 00005 від 24.02.2002 0:00:00 Джинси жіночі 1
Джинси жіночі 1
Мийдодір «Акваріум» 5
Раковина «Лілія» 8
Змішувач «Ультра» 10

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

//У звіт вивести всі поля табличної частини накладної.
Вибрати
Документ.ВитратнаНакладна.Посилання,
Документ.ВидатковаНакладна.Склад.*

Завдання пропозиції ІЗ полягає в тому, щоб позначити список вихідних таблиць - джерел даних, що використовуються в цьому операторі ВИБРАТИ.

Слід зазначити, що пропозиція ІЗ мовою запитів є опціональним. Воно може бути опущене у тому випадку, якщо джерела даних повністю кваліфіковані в описі списку полів вибірки, що міститься у реченні ВИБРАТИ. Зверніть увагу, що низка прикладів у попередніх розділах не містила пропозиції ІЗ.

Після ключового слова ІЗ вказується список джерел. У випадку список джерел описується наступним набором правил:

<Источник>[, <Источник>[, ...]]

Джерела даних запиту перераховуються у списку джерел через кому. Кожен<Источник>у списку джерел обов'язково включає опис джерела; крім того, може бути вказано<Перечень соединений>- Правила з'єднань джерела з іншими джерелами. Специфікації сполук описуються.

<Описание источника> [ <Перечень соединений> ]

Якщо джерелом даних виступає таблиця інформаційної бази,<Описание источника>містить<Имя таблицы>.

<Таблица>[[ЯК]<Псевдоним источника>]

Якщо вихідна таблиця віртуальна, може бути вказано<Параметры>її формування. Докладно параметри віртуальних таблиць описані у розділі «Джерела даних запитів».

<Имя таблицы> [(<Параметры>)] | <Описание запроса>

Як джерело даних запиту може виступати також вкладений запит; у цьому випадку опис джерела містить<Описание запроса>. Використання вкладених запитів описано.

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

Специфікації з'єднань

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

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

Контрагент Банк
Постачальники АКБ ІвестБанк
Постачальники АКБ ПромБудБанк
Трикотажна фабрика «Зоря» АКБ ІвестБанк
Трикотажна фабрика «Зоря» АКБ ПромБудБанк
Фабрика джинсового одягу АКБ ІвестБанк
Фабрика джинсового одягу АКБ ПромБудБанк
Покупці АКБ ІвестБанк
Покупці АКБ ПромБудБанк
Ярмарок одягу АКБ ІвестБанк
Ярмарок одягу АКБ ПромБудБанк
Торговий дім «Буденівський» АКБ ІвестБанк
Торговий дім «Буденівський» АКБ ПромБудБанк
Павільйон 45 на оптовому ринку АКБ ІвестБанк
Павільйон 45 на оптовому ринку АКБ ПромБудБанк
Баварія - порцеляна АКБ ІвестБанк
Баварія - порцеляна АКБ ПромБудБанк
Фабрика джинсового одягу АКБ ІвестБанк
Фабрика джинсового одягу АКБ ПромБудБанк
АКБ ПромБудБанк АКБ ІвестБанк
АКБ ПромБудБанк АКБ ПромБудБанк

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

Сполуки бувають декількох видів, вони описуються такими правилами:

<Соединение> [<Перечень соединений>]

У загальному випадку<Перечень соединений>може містити і описувати як одне з'єднання (двох джерел), а й кілька з'єднань кількох джерел відразу.

[ВНУТРІШНІЙ] З'ЄДНАННЯ<Описание источника>ПЗ<Условие отбора> |

ЛІВА [ЗОВНІШНЯ] З'ЄДНАННЯ<Описание источника>ПЗ<Условие отбора> |

ПРАВА [ЗОВНІШНЯ] З'ЄДНАННЯ<Описание источника>ПЗ<Условие отбора> |

ПОВНЕ (ЗОВНІШнє) З'ЄДНАННЯ<Описание источника>ПЗ<Условие отбора>

<Условие отбора>містить умови, відповідно до яких у вибірці необхідно з'єднати дані із вихідних таблиць - джерел запиту. Правила опису умов у мові запитів розглядаються на сторінці 357 .

Ключові слова ЛІВО, ПРАВО та ПОВНЕ уточнюють характер з'єднання. Слова ВНУТРІШНІЙ або ЗОВНІШНІЙ можна не вказувати взагалі, вони підвищують наочність і зручність читання тексту запиту.

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

[ВНУТРІШНЯ] З'ЄДНАННЯ означає, що з обох вихідних таблиць - джерел даних у результат запиту необхідно включити тільки ті комбінації записів, які відповідають зазначеній умові. Інші записи до результату не потрапляють.

// Необхідно з'ясувати, які банки є одночасно
// контрагентами (однакові назви присутні
//і у довіднику Контрагенти, і у довіднику Банки).
Вибрати

Банки.Посилання Як Банк
З

Внутрішнє З'єднання
Довідник. Банки Як Банки
за

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

Контрагент Банк
АКБ ПромБудБанк АКБ ПромБудБанк

ЛІВА [ЗОВНІШНЯ] З'ЄДНАННЯ означає, що в результат запиту треба включити комбінації записів з обох вихідних таблиць, які відповідають зазначеній умові. Але, на відміну від внутрішнього з'єднання, в результат запиту треба включити ще й записи з першого (вказаного зліва від слова З'ЄДНАННЯ) джерела, для яких не знайдено відповідних умов записів з другого джерела.

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

//У звіт необхідно вивести всіх контрагентів, а для тих,
// Хто є також банком - вказати посилання банк.
Вибрати
Контрагенти.Посилання Як Контрагент,
Банки.Посилання Як Банк
З
Довідник.Контрагенти Як Контрагенти
Ліве Зовнішнє З'єднання
Довідник. Банки Як Банки
за
Контрагенти. Найменування = Банки. Найменування

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

ПРАВА [ЗОВНІШНЯ] З'ЄДНАННЯ означає, що результат запиту треба включити комбінації записів з обох вихідних таблиць, які відповідають зазначеній умові. Крім того, в результат запиту треба включити ще й записи з другого (вказаного праворуч від слова З'ЄДНАННЯ) джерела, для яких не знайдено відповідних умов записів з першого джерела.

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

//У звіт необхідно вивести всі банки, а для тих,
// хто є також контрагентом - вказати посилання контрагента.
ВИБРАТИ
Контрагенти.Посилання Як Контрагент,
Банки.Ссылха Як Банк
З
Довідник.Контрагенти Як Контрагенти
Права Зовнішнє З'єднання
Довідник. Банки Як Банки
за
Контрагенти. Найменування = Банки. Найменування

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

Контрагент Банк
NULL АКБ ІвестБанк
АКБ ПромБудБанк АКБ ПромБудБанк

ПОВНЕ [ЗОВНІШнє] З'ЄДНАННЯ означає, що результат запиту треба включити комбінації записів з обох вихідних таблиць, які відповідають зазначеній умові. Крім того, в результат запиту треба включити ще й ті записи з обох джерел, для яких не знайдено відповідності.

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

// У звіт необхідно вивести всіх контрагентів та всі банки,
// а. тих, хто є і тим, і іншим – вивести в одному рядку.
Вибрати
Контрагенти.Посилання Як Контрагент,
Банки.Посилання Як Банк
З
Довідник.Контрагенти Як Контрагенти
Повне Зовнішнє З'єднання
Довідник. Банки Як Банки
за
Контрагенти. Найменування = Банки. Найменування

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

Псевдоніми джерел даних

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

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

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

Призначення псевдонімів джерел само по собі ніяк не впливає на вибірку даних у запиті.

// Цей приклад демонструє використання
// у списку полів вибірки псевдоніма Товар,
// Призначеного вихідної таблиці Довідник.
Вибрати
Товар.Найменування,
Товар.Батько
З
Довідник.Номенклатура.Товар

Вкладені таблиці у списку джерел

У списку джерел можуть фігурувати і вкладені таблиці – табличні частини довідників та документів.

//У звіт необхідно вивести специфікацію товарних накладних -
// показати сам документ, номенклатуру та кількість.
//У списку джерел зазначена вкладена таблиця «Склад» -
// Таблична частина накладної.
// Вибірка обмежена вісьмома записами, ніж перевантажувати приклад.
Вибрати Перші 8
Посилання, Номенклатура, Кількість
З
Документ.ВидатковаНакладна.Склад

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

Посилання Номенклатура Кількість
Витратна накладна 00007 від 25.02.2002 21:03:21 Джинси жіночі 4
Витратна накладна 00006 від 25.02.2002 0:00:00 Джинси жіночі 5
Витратна накладна 00006 від 25.02.2002 0:00:00 Сорочка «Ковбойка» 5
Витратна накладна 00005 від 01.03.2002 20:58:28 Джинси жіночі 1
Витратна накладна 00004 від 01.03.2002 20:50:40 Джинси жіночі 1
Витратна накладна 00003 від 23.02.2002 0:00:00 Мийдодір «Акваріум» 5
Витратна накладна 00003 від 23.02.2002 0:00:00 Раковина «Лілія» 8
Витратна накладна 00003 від 23.02.2002 0:00:00 Змішувач «Ультра» 10

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

Вкладені запити у списку джерел

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

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

Результат буде таким самим, як і в попередньому прикладі.

Створення звітів

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

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

Джерела даних запитів

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

Реальні таблиці, своєю чергою, може бути об'єктними (посилальними) чи об'єктними (не посилальними):

Відмінною рисою реальних таблиць і те, що вони містять дані будь-якої однієї реальної таблиці, що у базі даних. Наприклад, реальними таблицями є таблиця «Довідник.Клієнти», що відповідає довіднику «Клієнти» або таблиця «РегістрНакопичення.ЗалишкиМатеріалів», що відповідає регістру накопичення «ЗалишкиМатеріалів».

Віртуальні таблиці формуються, переважно, з даних кількох таблиць бази даних. Наприклад, віртуальною таблицею є таблиця «РегістрНакопичення. Залишки Матеріалів. Іноді віртуальні таблиці можуть формуватися з однієї реальної таблиці (наприклад, віртуальна таблиця «Цены.СрезОпоследних» формується з урахуванням таблиці регістру відомостей «Ціни»). Однак загальним для всіх віртуальних таблиць є те, що їм можна задати ряд параметрів, які будуть визначати, які дані будуть включені до цих віртуальних таблиць. Набір таких параметрів може бути різним для різних віртуальних таблиць і визначається даними, що зберігаються у вихідних таблицях бази даних.

Реальні таблиці поділяються на об'єктні (посилальні) і об'єктні (не посилальні).

В об'єктних (посилальних) таблицях представлена ​​інформація типів даних посилань (довідники, документи, плани видів характеристик і т.д.). А не об'єктних (не посилальних) - всіх інших типів даних (константи, регістри тощо.).

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

Мова запитів

Алгоритм, яким дані будуть обрані з вихідних таблиць запиту, описується у тексті запиту спеціальною мовою - мовою запитів.Текст запиту складається з кількох частин:

    опис запиту,

    об'єднання запитів,

    впорядкування результатів,

    автоупорядкування,

    опис результатів.

Обов'язковою частиною запиту є перша - опис запиту. Решта присутні за потребою.

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

Об'єднання запитіввизначає, як буде об'єднано результати виконання кількох запитів.

Упорядкування результатіввизначає умови упорядкування рядків результатів запиту.

Автоупорядкуваннядозволяє увімкнути режим автоматичного впорядкування рядків результату запиту.

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

Звіт РеєстрДокументівНаданняПослуги

Першим звітом, на основі якого ми почнемо ознайомлюватись з мовою запитів, буде звіт «РеєстрДокументівНаданняПослуги». Цей звіт просто виводитиме список існуючих у базі даних документів «Надання послуги» у порядку їх дат та номерів.

У конфігураторі створимо новий об'єкт конфігурації Звіт «РеєстрДокументівНаданняПослуги». Перейдемо на закладку «Макет» та запустимо конструктор вихідної форми.

Як джерело даних для запиту виберемо об'єктну (посилальну) таблицю документів «Надання послуги». З цієї таблиці виберемо такі поля:

  • «Майстер»,

    "Клієнт":

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

Після цього перейдемо на закладку «Порядок» та вкажемо, що результат запиту має бути спочатку впорядкований за значенням поля «Дата», а потім – за значенням поля «НаданняПослуги.Посилання»:

Перейдемо на закладку «Звіт» та скинемо прапор «Використовувати будівельник звіту»:

Скинемо прапор «Використовувати будівельник звіту»...

Натиснемо "ОК". Конструктор сформує форму звіту та макет. Відкриємо модуль форми та знайдемо у ньому процедуру «РеєстрДокументівНаданняПослуги». У цій процедурі як розформується текст запиту, який буде використаний для отримання даних, що цікавлять нас:

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

НаданняПослуги.Дата ЯК Дата,

Номер КАК Номер,

НаданняПослуги.Склад,

НаданняПослуги.Склад.Представлення,

НаданняПослуги.Майстер,

НаданняПослуги.Майстер.Представлення,

НаданняПослуги.Клієнт,

НаданняПослуги.Клієнт.Представлення

Документ.НаданняПослуги ЯК НаданняПослуги

ВПОРЯДКУВАТИ ЗА

Текст запиту починається, як ми говорили вище, з опису запиту:

I НаданняПослуги.Дата ЯК Дата,

I НаданняПослуги.Номер ЯК Номер,

I НаданняПослуги.Склад,

I НаданняПослуги.Склад.Представлення,

I НаданняПослуги.Майстер,

I НаданняПослуги.Майстер.Уявлення,

I НаданняПослуги.Клієнт,

1 НаданняПослуги.Клієїт.Представлення

I Документ.Наданняпослуг ЯК НаданняПослуги

Опис запиту починається з обов'язкового ключового слова ВИБРАТИ.Потім слідує список полів вибірки, в якому описуються поля, які повинні утримуватися в результаті запиту. Цей список може містити власне поля, і деякі вирази, обчислювані з урахуванням значень полів.

Після ключового слова ІЗ вказуються джерела даних – вихідні таблиці запиту, вміст яких обробляється у запиті. У разі це об'єктна (посилальна) таблиця «Документ.НаданняПослуги». Після ключового слова ЯКвказується псевдонімджерела даних. У нашому випадку це «Надання послуги». Надалі до цього джерела даних можна буде звертатись у тексті запиту, використовуючи псевдонім.

Таке звернення бачимо у описі полів вибірки:

| НаданняПослуги.Дата ЯК Дата,

| Номер КАК Номер,

| НаданняПослуги.Склад,

| НаданняПослуги.Склад.Представлення,

| НаданняПослуги.Майстер,

| НаданняПослуги.Майстер.Представлення,

| НаданняПослуги.Клієнт,

| НаданняПослуги.Клієнт.Представлення

Поля вибірки також можуть мати псевдоніми, за якими надалі у тексті запиту можна звертатися до цього поля. У нашому випадку це псевдоніми «Дата» та «Номер».

Після частини опису запиту в нашому прикладі слідує частина упорядкування результатів:

|Упорядкувати за

| Дата, | Номер";

Пропозиція ВПОРЯДКУВАТИ ЗАдозволяє сортувати рядки внаслідок запиту. Після цього ключового речення розташовується вираз упорядкування, яке, у випадку, є перерахування полів (виразів) і порядку виведення. У нашому випадку впорядкування виконуватиметься спочатку По полю вибірки, звернення до якого виконується через псевдонім – «Код», а потім по полю – «Номер». В обох випадках порядок сортування буде за зростанням, який є Порядком сортування за умовчанням.

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

Процедура РеєстрДокументівНаданняПослуги(ТабДок) Експорт

//((КОНСТРУКТОР_ВИХІДНЬК_ФОРМ(РеєстрДокументівНаданняПослуг))// Цей фрагмент побудований конструктором.// При повторному використанні конструктора,// внесенівручну змінибудуть втрачені!

Макет = ОтриматиМакет("РеєстрДокументівНаданняПослуги"); Запит = Новий Запит;

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

Область Заголовок = Макет.Отримати Область ("Заголовок"); ОбластьПодвал =

Макет.ОтриматиОбласть("ПідвалТаблиці"); ОбластьДетальнихЗаписів =

ТабДок.Вивести(ОбластьШапкаТаблиці); ТабДок.ПочатиАвтогрутшировкуРядок();

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

Поки ВибіркаДеталі.Следукцій() Цикл

ОбластьДетальнихЗаписів.Параметри.Заповнити(ВибіркаДеталі);

Вивести(ОбластьДетальньпсЗаписів, ВибіркаДеталі.Рівень()); КінецьЦикл;

/Л)КОНСТРУКТОР_ВИХІДНИХ_ФОРМ КінецьПроцедури

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

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

ОбластьЗаголовок = Макет.ОтриматиОбласть("Заголовок"); ОбластьПодвал =

Макет.ОтриматиОбласть("Підвал"); ОбластьШапкаТаблиці =

Макет.ОтриматиОбласть("ШапкаТаблиці"); ОбластьПодвалТаблиці =

Макет.Отримати Область("ПодвалТаблицы""); ОбластьДетальнихЗаписів =

Макет.Отримати Область("Деталі");

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

ТабДок.Очистити(); ТабДок.Вивести(ОбластьЗаголовок);

ТабДок.Вивести(ОбластьШапкаТаблиці); ТабДок.ПочатиАвтоугрупованняРядок();

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

Після цього ми отримуємо вибірку з результату запиту, яку перебираємо у циклі:

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

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

ТабДок.ЗакінчитиАвтоугрупованняСторок();

ТабДок.Вивести(ОбластьПодвалТаблиці);

ТабДок.Вивести(ОбластьПодвал);

Тепер запустимо 1С:Підприємство в режимі налагодження та подивимося на результат роботи нашого звіту:

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

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

Створимо новий об'єкт конфігурації Звіт «Рейтинг Послуг». Перейдемо на закладку «Макети» та викличемо конструктор вихідної форми.

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

Потім встановимо курсор на таблицю «ПродажіОбороти» та викличемо діалог введення параметрів віртуальної таблиці:

Відкриємо діалог уведення параметрів віртуальної таблиці

Вкажемо, що початок та кінець періоду будуть передані у відповідних параметрах «ДатаПочатку» та «ДатаЗакінчення» (символ «&» перед ім'ям вказує, що це параметр запиту):

Потім виберемо з таблиць поля «СпрНоменклатура.Посилання» та «ПродажіОбороти.ВиручкаОборот»:

СпрНоменклатура.Представлення

ПродажіОборотиВиручкаОборот

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

Єдине, що нам залишиться зробити, це скинути прапор "Все" біля таблиці регістру та встановити його у таблиці довідника.

Вибиратимемо всі елементи з довідника «Номенклатура»

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

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

Другою умовою має бути те, що обраний елемент є послугою (це - "Проста умова"):

Надалі, перед виконанням запиту, ми передамо параметр «ВидНоменклатури» - відповідне значення перерахування.

Перейдемо на закладку «Об'єднання/Псевдоніми» та вкажемо, що представлення елемента довідника матиме псевдонім «Послуга», а поле регістру матиме псевдонім «Виручка»:

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

На закладці «Підсумки» визначимо, що потрібно виводити загальні підсумки, і вони повинні бути сумою значень поля «Виручка»:

На закладці «Звіт» скинемо прапорець «Використовувати будівельник звіту».

Тепер перейдемо на закладку "Вихідна форма". Вкажемо, що параметри «ДатаЗакінчення» та «ДатаПочатку» редагуватимуться у формі в полях введення типу «Дата». Для параметра «Вид номенклатури» ми навпаки знімемо ознаку редагування у формі:

Натиснемо "ОК". Платформа сформує макет та форму звіту Відкриємо модуль форми та знайдемо в ньому процедуру «РейтингПослуг».

У цій процедурі, в тій частині, де виконується встановлення параметрів запиту, визначимо значення параметра «Вид номенклатури» (виправлення виділені жирним шрифтом):

| ЛІВОЕ З'ЄДНАННЯ РегістрНакопичення.Продажі,Обороти(&ДатаПочатку,

| &Дата закінчення,)

| ЯК ПродажіОбороти

|Упорядкувати за | ВиручкаУБИВ

|ПІДСУМКИ СУМА(Виручка) ПО | ЗАГАЛЬНІ";

ЗапитУстановитиПараметрС"Вид Номенклатури",

Перерахування.ВидиНоменклатури.Послуга);

Запит.ВстановитиПараметр("ДатаПочатку",ДатаПочатку); Запит.ВстановитиПараметрС"ДатаЗакінчення", ДатаЗакінчення);

Тепер розглянемо текст запиту, сформований конструктором:

| СпрНоменклатура.Представление ЯК Представлення,

|ПродажіОбороти.ВиручкаОборот ЯК Виручка

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

ЛІВОЕ З'ЄДНАННЯ РеєстрНакопичення.Продажі.Обороти(&ДатаПочатку,

| ЯК ПродажіОбороти

| ПО ПродажіОбороти.Номенклатура = СпрНоменклатура.Посилання

| (СпрНоменклатура.ЦеГрупа = Брехня) І

| СпрНоменклатура.ВидНоменклатури = &ВидНоменклатури

|Упорядкувати за

| ВиручкаУБИВ

|ПІДСУМКИ СУМА(Виручка) ПО

Спочатку, як завжди, йде частина опису запиту і в ній є нові конструкції.

При описі джерел запиту (після ключового слова ІЗ) використана можливість визначення декількох джерел запиту:

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

|&ДатаЗакінчення,)

| ЯК ПродажіОбороти

| ПО ПродажіОбороти.Номенклатура = СпрНоменклатура.Посилання

В даному випадку вибираються записи з двох джерел: «СпрНоменклатура» та «ПродажіОбороти», причому ключовою пропозицією ЛІВОЕ З'ЄДНАННЯ... ПЗописаний спосіб, яким будуть скомбіновані між собою запис цих двох джерел.

ЛІВОЕ З'ЄДНАННЯозначає, що результат запиту треба включити комбінації записів з обох джерел, які відповідають зазначеному після ключового слова ПО умові. Крім цього, у результат запиту треба включити ще й записи з першого (зазначеного ліворуч від слова З'ЄДНАННЯ)джерела, для яких не знайдено відповідних умов записів з другого джерела.

В описі першого джерела та умови з'єднання немає для нас нічого нового, а ось при описі другого джерела використовується можливість завдання параметрів віртуальної таблиці запиту:

| РегістрНакопичення.Продажі.Обороти(&ДатаПочатку, &ДатаЗакінчення,)

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

Якщо заздалегідь відомо, що користувача не цікавитимуть результати роботи звіту в періодах, вказаних з точністю до секунд, слід врахувати таку особливість: за замовчуванням час у даті встановлено о 00:00:00. Тому, якщо не вжити спеціальних заходів, вийде, що коли користувач задасть період звіту з 01.03.2004 до 31.03.2004, підсумки регістру будуть розраховані з початку дня 01.03.2004 00:00:00 до початку дня 31.03.20 00. Таким чином, дані за 31 число, відмінні від початку дня, до уваги не увійдуть, що сильно здивує користувача.

Щоб виключити цю ситуацію, слід зробити дві речі.

По-перше, у формі звіту обмежити користувача у можливостях введення дати початку та дати закінчення, встановивши для відповідних полів введення склад дати як «Дата»:

Визначимо склад дати...

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

ПроцедураДіїФормиРейтингПослугСформувати(Кнопка) //((КОНСТРУКТОР_ВИХІДНИХ_ФОРМ_ПРОЦЕДУРА_ВИКЛИКУ)(РейтингПослуг) //Цей фрагмент побудований конструктором.// При повторному використанні конструктора, // внесені вручну зміни будуть втрачені!!!

ТабДок = ЕлементиФорми.ТаблічнеПоле;

//)) КОНСТРУКТОР_ВИХІДНИХ_ФОРМ_ПРОЦЕДУРА_ВИКЛИКУ

До нецПроцедури

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

| СпрНоменклатура.Представление ЯК Представлення,

| ПродажіОбороти.ВиручкаОборот ЯК Виручка

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

| ЛІВОЕ З'ЄДНАННЯ РеєстрНакопичення.Продажі.Обороти(&ДатаПочатку,

| &Дата закінчення,

| ЯК ПродажіОбороти

| ПО ПродажіОбороти.Номенклатура = СпрНоменклатура.Ссьшка

| СпрНоменклатура.ЦеГрупа = Брехня І

| СпрНоменклатура.ВидНоменклатури = &ВидНоменклатури

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

ПІДСУМКИ СУМА(Виручка) ПО

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

Тепер, коли ми перестали знайомитися з текстом запиту, запустимо 1С:Підприємство в режимі налагодження і подивимося, як працює наш звіт.

Задамо період звіту з 01.03.2004 до 30.04.2004. Результат буде виглядати так:

Тепер змінимо дату закінчення на 31.03.2004 та переконаємося, що дані за 31 березня потрапляють до звіту: