Можно ли используя конструктор запроса получить итоги по иерархии
Запросы в 1С обеспечивают табличный способ доступа к данным. Язык запросов заточен под удобное чтение и преобразование больших массивов информации; изменять данные с его помощью нельзя. Язык запросов - это отдельный язык, не являющийся частью встроенного языка 1С:Предприятие; он достаточно сходен с SQL.
Запрос всегда начинается с ключевого слова ВЫБРАТЬ; собственно кроме него в запросе может и не быть других ключевых слов, если секция ВЫБРАТЬ полностью описывает источник и результат запроса, например:
- группировка
- объединения разных таблиц-источников
- условия, ограничивающие выборку
- порядок представления результата
- расчет итогов по каким-либо полям
Запросы можно набирать просто вручную, но намного удобнее использовать специальный инструмент - конструктор запросов:
Вопрос 07.04 экзамена 1С:Профессионал по платформе. Для повышения скорости выполнения запроса необходимо:
- Задавать параметры большинства реальных таблиц
- Задавать параметры большинства виртуальных таблиц
- Вместо задания параметров у реальной или виртуальной таблицы использовать отбор, заданный конструкцией языка запросов "ГДЕ"
- Верны ответы 1 и 2
Верный ответ второй. Правильно параметризованный запрос работает с таблицей итогов регистра, а не с основной таблицей, такой способ доступа быстрее.
Вопрос 07.15 экзамена 1С:Профессионал по платформе. Можно ли, используя конструктор запроса, повлиять на порядок записей в результирующей таблице запроса?
- Нельзя
- Это можно сделать на закладке "Порядок"
- Это можно сделать на закладке "Объединения/Псевдонимы"
- Верны ответы 2 и 3
Правильный ответ четвертый. Закладка Порядок для этого предназначена очевидно; поля тут можно двигать стрелками, либо включить Автоупорядочивание (по основному представлению объекта):
- Все поля должны делиться на те, по которым производится группировка, и на агрегатные функции (рассчитываемые поля)
- Все поля должны делиться на те, по которым производится группировка, на агрегатные функции (рассчитываемые поля) и на поля вложенных таблиц
- Чем выше определяется группировка, тем выше должно определяться поле в запросе
- Перечисленные ограничения не действуют
Вопрос 07.35 экзамена 1С:Профессионал по платформе. Левое внешнее соединение означает, что в результат соединения войдут:
- Все данные из таблицы №2 и они будут дополнены данными из таблицы №1, для которых выполняется условие соединения
- Данные из обеих таблиц, для которых выполняется условие соединения, но поля, которые берутся из таблицы №1, будут идти первыми (слева)
- Все данные из таблицы №1 и они будут дополнены данными из таблицы №2, для которых выполняется условие соединения
Правильный ответ первый. Из левой таблицы будет выбрано все, из правой - только совпадающее по ключу с левой.
Вопрос 07.36 экзамена 1С:Профессионал по платформе. С помощью какой агрегатной функции можно узнать количество записей в результате запроса?
- КОЛИЧЕСТВО()
- КОЛИЧЕСТВО(*)
- КОЛИЧЕСТВО(Различные …)
- СУММА
Правильный ответ второй - функция КОЛИЧЕСТВО, и в ней нужно специфицировать, по каким полям считать количество (в примере по всем).
В случае, если справочник иерархичен, среди его стандартных реквизитов доступен Родитель, то есть вышестоящий элемент:
По нему-то и нужно вести отбор, если требуется выбрать позиции в пределах подчинения. Возможны два варианта построения запроса с ограничением выборки по иерархии:
- Выбор элементов на уровне "Родитель минус один". При этом если внутри родителя есть дальнейшие уровни вложенности, в выборку они не попадут. Для этого, достаточно указать, в пределах какого родителя нужна выборка:
- .Выбор всех элементов всех уровней вложенности в пределах родителя. Для этого используется оператор В ИЕРАРХИИ:
При этом, в качестве аргумента оператора можно задать как одно значение, так и список; но в качестве источника списка должен выступать вложенный запрос:
ГДЕ
Справочник.Номенклатура.Ссылка В ИЕРАРХИИ
(
ВЫБРАТЬ
Справочник.Номенклатура.Ссылка
ГДЕ
Справочник.Номенклатура.Наименование = "Одежда"
)
В зависимости от иерархии справочника, можно выводить итоги каких-то связанных таблиц. Для этого предназначена закладка Итоги конструктора запросов:
- Поле, по которому группируем, и тип его итогов (элементы - итоги только по конечным элементам, иерахия - только по папкам, эелемнты и иерархия - все вместе)
- Общие итоги (да/нет) - нужно суммировать все-все полученные запросом строки на самом верхнем уровне
- Итоговое поле - по чем собственно считаем итоги.
Вопрос 07.07 экзамена 1С:Профессионал по платформе. Можно ли, используя конструктор запроса, получить итоги по иерархии?
- Можно, если для группировочного поля указать тип итогов "Элементы и иерархия"
- Можно, если для группировочного поля указать тип итогов "Только иерархия"
- Верны ответы 1 и 2
- Нельзя
Вопрос 07.33 экзамена 1С:Профессионал по платформе. Как изменится количество записей в результате запроса при использовании секции "ИТОГИ ПО"?
Платформа предлагает разработчику собственно Конструктор запроса и Конструктор запроса с обработкой результата. В первом случае, конструктор позволяет чисто визуальными средствами определить выборку данных из таблиц системы:
Конструктор запросов работает как в режиме Предприятие (как обработка Консоль запросов), так и в Конфигураторе. Использование в режиме Предприятие позволяет квалифицированным пользователям самостоятельно получать выборки данных, для которых нет типовых отчетов.
- Сформировать текст нового запроса
- Сформировать программный код, содержащий создание объекта встроенного языка Запрос, текста запроса и получение результата выполнения запроса
- Отредактировать текст имеющегося запроса
- Верны ответы 1 и 3
- Все вышеперечисленное
Вопрос 04.42 экзамена 1С:Профессионал по платформе. Использование конструктора запроса с обработкой результата позволяет:
- Сформировать текст нового запроса
- Сформировать программный код, содержащий создание объекта встроенного языка Запрос, текста запроса, получение и обработку результата выполнения запроса
- Отредактировать текст имеющегося запроса
- Все вышеперечисленное
- Верны ответы 1 и 3
Вопрос 04.43 экзамена 1С:Профессионал по платформе. При сохранении текста запроса, открытого повторно с помощью конструктора запроса, без внесения в этот текст изменений:
- Весь первоначальный текст остается без изменений
- Из первоначального текста будут удалены только комментарии
- В первоначальном тексте комментарии останутся, а будут удалены только конструкции языка запросов построителя отчетов
- Из первоначального текста будут удалены и комментарии, и конструкции языка запросов построителя отчетов
- С помощью пункта главного меню "Текст - Конструктор запроса…"
- С помощью кнопки "Конструкторы - Конструктор запросов" на закладке "Макеты" из окна редактирования объекта
- С помощью пункта всплывающего контекстного меню "Конструктор запроса…", появляющегося при нажатии в тексте модуля правой клавиши мыши
- Верно все вышеперечисленное
- Верны ответы 1 и 3
- Разработчиками, так как необходимо знание языка запросов
- Квалифицированными пользователями без использования конфигуратора
- Верно все вышеперечисленное
- Нет верного ответа
Вопрос 04.46 экзамена 1С:Профессионал по платформе. На закладке "Таблицы и поля" конструктора запросов задают:
- Источники данных запросов, в качестве которых могут выступать реальные и виртуальные таблицы
- Набор полей из таблиц - источников данных запроса
- Поля в виде произвольного выражения
- Верны ответы 1 и 2
- Верно все вышеперечисленное
Вопрос 04.47 экзамена 1С:Профессионал по платформе. Для создания в конструкторе запросов вложенного запроса необходимо:
- Открыть закладку "Таблицы и поля". В командной панели над деревом "База данных" нажать кнопку "Добавить" или выбрать одноименный пункт контекстного меню
- Открыть закладку "Таблицы и поля". В командной панели над деревом "Таблицы" нажать кнопку "Добавить" или выбрать одноименный пункт контекстного меню
- Открыть закладку "Таблицы и поля". В командной панели над деревом "Поля" нажать кнопку "Добавить" или выбрать одноименный пункт контекстного меню
- В конструкторе запросов создать вложенный запрос нельзя
Вопрос 04.48 экзамена 1С:Профессионал по платформе. Для создания в конструкторе запросов вычисляемого поля необходимо:
- Открыть закладку "Таблицы и поля". В командной панели над деревом "Таблицы" нажать кнопку "Изменить текущий элемент". В открывшемся окне добавить новое поле
- Открыть закладку "Таблицы и поля". В командной панели над деревом "Поля" нажать кнопку "Добавить" или выбрать одноименный пункт контекстного меню
- Открыть закладку "Объединения/Псевдонимы". В командной панели над списком полей нажать кнопку "Добавить" или выбрать одноименный пункт контекстного меню
- Создать вычисляемое поле, можно только изменив текст запроса "вручную"
Вопрос 04.49 экзамена 1С:Профессионал по платформе. Для создания в запросе строк, сгруппированных с помощью агрегатных функций, на закладке "Группировка" конструктора запросов обязательно должны быть заполнены:
- Только список групповых полей. Указание суммируемых полей не обязательно
- Только список суммируемых полей, при этом остальные поля автоматически попадут в секцию СГРУППИРОВАТЬ ПО в тексте запроса
- Обязательным является указание как групповых, так и суммируемых полей
Вопрос 04.50 экзамена 1С:Профессионал по платформе. В конструкторе запросов условия на значения агрегатных функций можно накладывать:
Команда ИТОГИ ПО предназначена для получения итогов по выбранным полям, затем позволяет производить иерархическую выборку результата запроса, а также выгрузку его сразу в ДеревоЗначений.
Обычный же результат выгружается как таблица значений (помимо линейной выборки).
Синтаксис блока ИТОГИ
Пример:
ИТОГИ
МАКСИМУМ(СуммаОборот)
ПО
ОБЩИЕ,
Ссылка ИЕРАРХИЯ
Конструктор запроса
Управление итогами производится на одноименной вкладке «Итоги»
- Доступно выбор группировочного поля
- Типа итогов (Элементы, Элементы и иерархия, Только иерархия)
- Указания наличия/отсутствия общего итога по всей выборке
- Выбор итоговых полей и выражений аналогичных по синтаксису группировке
Иерархия выборки
Выборка запроса по группировкам была рассмотрена в этой статье.
Приведем фрагмент кода:
Тонкости итогов
Если вызвать команду выгрузить с обходом по группировкам, она вернет ДеревоЗначений:
Есть интересный механизм получения аккуратного и компактного дерева через использования ВЫБОР в разделе ИТОГИ
Имя поля в итоге должно совпадать с одним из полей выборки иначе будет ошибка «Невозможно определить поле для записи результата»
Поля в итогах также должны быть в выборке, в противном случае выйдет ошибка: «Поле, по которому рассчитываются итоги, должно присутствовать в списке выборки»
ВЫБРАТЬ
4 КАК Четыре,
3 КАК Три,
2 КАК Два,
1 КАК Один
ИТОГИ
ВЫБОР
КОГДА Два ЕСТЬ NULL
ТОГДА Один
КОГДА Три ЕСТЬ NULL
ТОГДА Два
ИНАЧЕ Три
КОНЕЦ КАК Четыре
ПО
Один,
Два,
Три
На Выходе будет вот такая дерево:
- Осталось удалить лишние колонки и можно сразу выводить на форму
Восторженное отношение жены к работе мужа — лучшая реклама его деятельности.
— Дороти Карнеги
Обход результата запроса по группировкам доступен при использовании конструкции Итоги Итоговое поле> по Поля итогов> языка запросов.
При этом итоговые поля (суммы, количество), могут отсутствовать — производится просто группировка по нужным полям, либо по общим итогам — служебное поле «ОБЩИЕ»( флажок «Общие итоги»)
Конструктор запроса
Группировка добавляется на вкладке «Итоги», обратите внимание на флажок «Общие итоги», здесь же можно задать функцию итогов.
Не стоит путать функции группировки на вкладке «Группировки» с вкладкой «Итоги» (в общем случае для получения итогов группировка может не производится, либо производится по другому полю и с использованием другой функции) — это расчет итоговых показателей над готовой выборкой, а не группировка входных данных.
Не стоит использовать итоги, если в этом нет необходимости:
- это замедляет выполнение запроса
- при выборке доступны все поля запроса, но значение незадействованных на вкладке полей равно «Неопределено», что может быть не верно истолковано в процессе отладки и работы
Для использования механизма сводной таблицы платформы
- наоборот обязательно необходимы итоги запроса (определяет доступные поля группировки и ресурсы) иначе конструктор сводной таблицы будет пустым
В тексте запроса конструкция находится в нижней части:
Группировки могут быт вложенные, поэтому для выборки из запросов необходимо последовательно вызывать метод Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам).
Последняя группировка будет данными выборки, для которой вызов идет без параметра, либо с параметром ОбходРезультатаЗапроса.Прямой (по умолчанию).
Для примера, вывод результата произведем в табличный документ.
Чтобы вывести группировки в табличном документе, воспользуемся методом НачатьАвтогруппировкуСтрок(). После завершения вывода вызывается ЗакончитьАвтоГруппировкуСтрок() иначе группировка не сработает. Уровень группировки определяет второй параметр метода Вывести() табличного документа
Пример кода
Результат будет выглядеть вот так:
Для того, чтобы свернуть табличный документ можно вызывать метод ПоказатьУровеньГруппировокСтрок()
Фараоны рекламировали себя при помощи пирамид
— Рамон Гомес де ла Серна
Читайте также: