Створення та робота із запитами (для початківців). Створення та робота із запитами (для початківців) 1с 8.3 якщо у запиті

Програмування 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С.

Мова запитів 1С 8 - незамінний інструмент для програміста 1С, він дозволяє писати більш лаконічний, простий, зрозумілий код, використовувати менше ресурсів системи при роботі з даними. Ця стаття відкриває серію уроків, присвячених мові запитів 1С 8. На першому уроці ми розглянь структуру головного оператора цієї мови. ВИБРАТИ.За допомогою цього оператора можна створювати вибірки таблиць бази даних. Вибрані дані таблиць можна сортувати, накладати на них умови, пов'язувати та поєднувати з даними інших таблиць, групувати за різними полями та багато іншого.

Мова запитів 1с підприємства 8 — Структура оператора ВИБРАТИ

Розглянемо структуру оператора ВИБРАТИ (у квадратних дужках вказані необов'язкові частини оператора). Мова запитів 1С надає широкий набір інструментів створення вибірок даних.

ВИБРАТИ [ДОЗВОЛЕНІ] [РІЗНІ] [ПЕРШІ A] [Поле1] [Як Псевдонім1], [Поле2] [ЯК Псевдонім2], ... [ПолеM] [Як ПсевдонімB] ТРЕННЕ З'ЄДНАННЯ ][ЛІВОЕ З'ЄДНАННЯ][ПОВНЕ З'ЄДНАННЯ] Таблиця2 ЯК ПсевдонімТаблиці2 [[ВНУТРІШНЕ З'ЄДНАННЯ][ЛІВОЕ З'ЄДНАННЯ][ПОВНЕ З'ЄДНАННЯ] ТаблицяC ЯК ПсевдонімТа... ... ... ПЗ Вираз1 [І Вираз2]...[І ВиразE]] ... [ТаблицяF ЯК ПсевдонімТаблиціF] ... ] [ЗГРУПУВАТИ ПО ГрупувальнеПоле1[,] ... [УгрупованняПолеG]] [ДЕ Вираз1 [І Вираз2] ... [І Вираз H]] [ОБ'ЄДНАТИ ВСЕ...] [; ...] [ІНДЕКСУВАТИ ЗА ПСЕВДОНІМ1 ... ПСЕВДОНІМB] [ПІДСУМКИ [АгрегатнаФункція(Поле1)][,] [АгрегатнаФункція(Поле2)][,] ... [АгрегатнаФункція(ПолеI)] ПО [ЗАГАЛЬНІ][,] [ УгрупованняПоле1][,] ... [УгрупованняПолеj]]

Ключові слова та блоки роботи з полями

  • ВИБРАТИ— ключове слово, що означає початок оператора;
  • ДОЗВОЛЕНІвказує, що у вибірку повинні потрапляти записи таблиць, доступ до читання яких дозволено даного пользователя;
  • РІЗНІвказує, що у вибірку повинні потрапляти лише різні (з усіх полів) стоки. Іншими словами, з вибірки будуть виключені рядки, що повторюються;
  • ПЕРШІ Aякщо вказати це ключове слово, то вибірку потраплять лише перші A з обраних запитом рядків, де A — натуральне число;
  • Блок полів— у цьому блоці вказуються поля, які потрібно включити у вибірку. Ці поля трапитимуть стовпцями вибірки. У найпростішому випадку поле виглядає так: ПсевдонімТаблиці.Ім'яПоляТаблиці ЯК ПсевдонімПоля

    Таким чином ми вказуємо з якої таблиці ми беремо це поле. Мова запитів 1С дозволяє вказувати будь-які псевдоніми, але вони не повинні повторюватися в одному операторі ВИБРАТИ. Поле може бути і складнішим, воно може складатися з різних комбінацій полів таблиць, функцій мови запитів та агрегатних функцій, але в цьому уроці ми не стосуватимемося цих випадків;

Ключові слова та блоки роботи з таблицями

  • ПОМІСТИТИ Ім'я Тимчасової Таблиці- ключове слово ПОМІСТИТИпризначено для створення тимчасової таблиці з певним ім'ям, яка буде зберігатися в оперативній пам'яті в даному сеансі 1С 8, доки він не завершиться або доки тимчасова таблиця не буде знищена. Слід зауважити, що імена тимчасових таблиць в одному сеансі 1С 8 не повинні повторюватися;
  • Блок таблиць та зв'язків— у блоці вказуються всі таблиці, що використовуються в даному запиті, а також зв'язки між ними. Починається блок із ключового слова З,за ним слідує ім'я та псевдонім першої таблиці. Якщо ця таблиця пов'язані з іншими таблицями, то вказуються зв'язку. Мова запитів 1С містить наступний набір типів зв'язків:
    • ВНУТРІШНЯ З'ЄДНАННЯ- Запис з лівої таблиці потрапить у вибірку тільки при виконанні умови зв'язку, запис з правої таблиці потрапить у вибірку тільки при виконанні умови зв'язку;
    • ЛІВОЕ З'ЄДНАННЯ- Запис з лівої таблиці потрапить у вибірку в будь-якому випадку, запис з правої таблиці потрапить у вибірку тільки при виконанні умови зв'язку;
    • ПОВНЕ З'ЄДНАННЯ- Запис з лівої таблиці потрапить у вибірку спочатку в будь-якому випадку, потім тільки при виконанні умови зв'язку, запис з правої таблиці потрапить у вибірку спочатку в будь-якому випадку, потім тільки при виконанні умови зв'язку. При цьому повторювані рядки, що вийшли в результаті зв'язку, виключаються з вибірки.

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

Ключові слова та блоки перетворення даних

  • Блок угруповань- Цей блок служить для групування рядків таблиці. Рядки об'єднуються в одну, якщо значення полів, зазначених після ключового слова ЗГРУПУВАТИ ПОвиявляються однаковими. У цьому решта поля підсумовуються, усереднюються, максимізуються, чи мінімізуються з допомогою агрегатних функцій. Агрегатні функції використовують у блоці полів. Приклад: Максимум(ПсевдонімТаблиці.Ім'яПоляТаблиці) ЯК ПсевдонімПоля
  • Блок умов— у цьому блоці після ключового слова ДЕвказуються умовні вирази розділені логічними операторами І, АБОДля того, щоб будь-який з обраних рядків потрапив у вибірку, необхідно, щоб усі умови в сукупності мали значення Істина.
  • ОБ'ЄДНАТИ ВСЕ— це ключове слово використовується для об'єднання запитів (операторів ВИБРАТИ). Мова запитів 1С дозволяє об'єднувати кілька запитів на один. Для того, щоб запити можна було об'єднати, у них повинен бути однаковий набір полів;
  • «;» - точка з комою використовується для поділу незалежних один від одного операторів ВИБРАТИ;
  • ІНДЕКСУВАТИ ПО- ключове слово використовується для індексації полів, зазначених після нього;
  • Блок підсумків- використовується для побудови деревоподібних вибірок. По кожному з групувальних полів, вказаних після ключового слова ПЗ,буде створено окремий рядок у вибірці. У цьому рядку за допомогою агрегатних функцій буде пораховано підсумкові значення полів, зазначених після ключового слова ПІДСУМКИ.

Бажаєте продовжити вивчати мову запитів 1с 8? Тоді прочитайте наступну статтю.

Запит .Текст = "ВИБРАТИ | усЕдиниціЗберігання.Посилання | Довідник.усединицізберігання ЯК усединицізберігання // Приклад 1. Порівняння з незаповненим булевим значенням: |ДЕ | усЕдиниціЗберігання.ДозволитиВідбірЗРезервноїЗони = Брехня // Приклад 2. але якщо це булево визначено, краще так: // умова на негативне булево: |ДЕ | НЕ усединиціЗберігання.ДозволитиВідбірЗРезервноїЗони // Приклад 3. вибірка за умовою незаповненого поля, що має тип "довідник конкретного типу" |ДЕ | усЕдиниціЗберігання.АктивнаОбластьВідбору = ЗНАЧЕННЯ(Довідник.усОбластіВідбору.ПустаПосилання) // Приклад 3а. вибірка за умовами не заповненого поля, що має тип "документ конкретного типу" |ДЕ | НашРегістрВідомостей.Документ = ЗНАЧЕННЯ(Документ.НашДокумент.ПустаПосилання) // Приклад 3б. вибірка за умовами не заповненого поля, що має тип "документи різних типів" ( складове поле) |ДЕ | (НашРегістрДом.Документ = ЗНАЧЕННЯ(Документ.НашДокумент1.ПустаПосилання) | АБО НашРегістрДом.Документ = ЗНАЧЕННЯ(Документ.НашДокумент2.ПустаПосилання) | АБО...(і т.д. - послідовно перераховуємо умови для всіх можливих типів цього складового поля) ) // Приклад 4. або навпаки, якщо потрібно вибрати заповнене значення типу "рядок", то допоможе умова: |ДЕ | усЕдиниціЗберігання. Найменування > """" // Приклад 5. якщо потрібно вибрати документи конкретного типу, при складеному типі даних, наприклад у регістрі "Завдання, що виконуються" ресурс "Завдання" має складовий тип, серед значень якого можливий документ "Відбір" |ДЕ | ВИРАЗИТИ(РеєстрВідомостейВиконуваніЗавдання.Завдання ЯК Документ.Отбор) ПОСИЛАННЯ Документ.Отбор // Приклад 5а. Ще аналогічний приклад, коли потрібно вибрати документи конкретного типу | ВИБІР | КОЛИ ВИРАЗИТИ(агВідповідністьДокументів.ДокументБУ ЯК Документ.НадходженняТоваровПослуг) ПОСИЛАННЯ Документ.НадходженняТоварівПослуг | ТОДИ "НадходженняТоварівПослуг" | КОЛИ ВИРАЗИТИ(агВідповідністьДокументів.ДокументБУ ЯК Документ.РеалізаціяТоваровПослуг) ПОСИЛАННЯ Документ.РеалізаціяТоваровПослуг | ТОДИ "Реалізація Товарів Послуг" | Інакше """ | КІНЕЦЬ ЯК ВидДокумента // Приклад 6. Вибір за умовою не певного значення: |ДЕ | ЗбереженіНалаштування.Користувач = НЕВИЗНАЧЕНО // Приклад 7. Вибір за видом руху "Прихід" регістру накопичення, "Витрата" - аналогічно): |ДЕ | РегТовариВРоздробі.ВидиРуху = ЗНАЧЕННЯ(ВідРухуНакопичення.Прихід) // Приклад 8. Як у запиті вказати, що виконувати запит не потрібно (наприклад, потрібно програмно в залежності від якоїсь умови повернути порожній результат запиту - Запит.Текст = СтрЗаменить(Запрос.Текст, "ДЕ Док. , "ДЕ БРЕХНЯ");). Для цього достатньо додати умову "Де Брехня". До речі, незалежно від обсягу даних, що запитуються у вибірці, такий запит буде виконаний миттєво. |ДЕ БРЕХНЯ // Приклад 9. Перевірка те що, що результат виконання запиту містить дані: Якщо неЗапит.Виконати().Порожній() Тоді // Приклад 10. Вибір за умовою незаповненої дати: |ДЕ | тбРядки.ДатаСкасування = ДАТАВРЕМЯ(1, 1, 1)

У цій статті ми хочемо обговорити з Вами всі функції мови запитів 1с, а також конструкції мови запитів. Чим відрізняється функція від конструкції? Функція викликається з дужками та можливими параметрами у них, а конструкція пишеться без дужок. Безумовно всі конструкції та функції мови запитів 1сроблять процес отримання даних гнучким та багатофункціональним. Дані функції та конструкції застосовні до полів запиту, а деякі також застосовні за умов.

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

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

1. Функція ДАТА ЧАС- Ця функція створює константне поле з типом "Дата".

Синтаксис: ДАТА ЧАС(<Год>,<Месяц>,<День>,<Час>,<Минута>,<Секунда>)

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

2. Функція Різноманітність- Повертає різницю двох дат в одному з вимірювань (рік, місяць, день, година, хвилина, секунда). Вимірювання передається у параметрі.

Синтаксис: РІЗНІСТЬДАТ(<Дата1>, <Дата2>, <Тип>)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

У цій статті ми розберемо таку тему як вкладені таблиці в мові запитів 1С.

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

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

Розкриємо цю таблицю

І в ній ми бачимо табличну частину послуги.

Ось усю цю табличну частину і виберемо.

Як бачите, вся таблична частина послуги повністю вибралася на поля.

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

Залишимо три поля вкладеної таблиці та додамо деякі поля із шапки документа.

Натиснемо кнопку ОК у конструкторі, і подивимося як виглядатиме наш запит.

Як бачите, у запиті після поля «Послуги» йде точка, а за нею у дужках перелічені вибрані поля.

Виконаємо запит.

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

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

Подивимося, як здійсниться такий запит.

Єдине, що ця зірочка у нас не збережеться, якщо відкрити конструктор запиту.

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

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

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


&На сервері
Процедура ЗаповнитиНа Сервері()
Запит = Новий Запит;
Запит. Текст = «ВИБРАТИ
| ПродажТовара.Посилання,
| Продаж Товари. Товари.
| Товар,
| Кількість

| Документ.ПродажаТовара ЯК ПродажТовара»
;
Вибірка = Запит. Виконати(). Вибрати();
Поки що Вибірка. Наступний() Цикл
ВерхняРядокДерева = Продаж Товарів. ОтриматиЕлементи();
НоваРядок = ВерхняРядокДерева. Додати();
НовийРядок. Посилання = Вибірка. Посилання;
ТаблТовари = Вибірка. товари;
Вибірка Товарів = ТаблТовари. Вибрати();
Поки ВибіркаТоварів. Наступний() Цикл
ДочірняРядокДерева = НоваРядок. ОтриматиЕлементи();
РядокТоварів = ДочірняРядокДерева. Додати();
РядокТоварів. Посилання = Вибірка Товарів. Товар;
РядокТоварів. Кількість = Вибірка Товарів. Кількість ;
КінецьЦикл;
КінецьЦикл;
КінецьПроцедури

Роз'ясню наведений вище код.

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

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

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

Ось який результат повертатиме цей код

Залишились питання?

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

Промо-код на знижку 20%: hrW0rl9Nnx

Підтримайте мій проект, перерахувавши будь-яку суму

Вступайте до моїх груп.