- •8.1. Назначение. Основные объекты , предназначенные для организации запросов
- •Выполнение запроса
- •8.2. Язык запросов
- •Поля из вложенных таблиц
- •Псевдонимы источников как/as
- •Запросы к табличным частям
- •Вложенные запросы в списке источников
- •Конструкция соединение...По/join...On
- •Левое внешнее соединение
- •Правое внешнее соединение
- •Полное внешнее соединение
- •Логические операторы и, или, не
- •Параметры в языке запросов
- •Проверка вхождения значения в список (в/in)
- •Проверка ссылочного значения (ссылка/ref)
- •Проверка пустых значений (есть null / is null)
- •Сравнение строк (подобно / like)
- •Упорядочивание по иерархии
- •Упорядочивание во вложенных таблицах
- •Автоупорядочивание /autoorder
- •Агрегатные функции в запросе
- •Общие итоги
- •Итоги по группировкам
- •Итоги по иерархии
- •Несколько итогов в запросе
- •Встроенные функции языка запросов
- •Операции выбора в языке запросов (выбор / case)
- •Приведение типов в языке запросов
- •Литералы и параметры в языке запросов
- •8.4. Обработка результата запроса
- •8.5. Выборка из результата запроса
- •Линейный обход
- •Иерархический обход
- •Обход по группировкам
- •Другие полезные методы
- •8.6. Выгрузка результата запроса
- •8.7. Запросы к регистрам сведений
- •Основная таблица регистра сведений
- •8.8. Запросы к регистрам накопления
- •Основная таблица регистра накопления
- •Сводные таблицы
Общие итоги
Рассмотрим сначала общие итоги, как более простые для понимания. Следующий запрос выбирает из регистра накопления Продажи все записи за заданный период и рассчитывает общий объем продаж:
ВЫБРАТЬ Номенклатура, Сумма
ИЗ РегистрНакопления.Продажи
ИТОГИ СУММА(Сумма) ПО Общие
В результате запроса появляется дополнительная итоговая строка:
Номенклатура |
Сумма |
|
445 |
1С:Бухгалтерия 7.7 Базовая версия |
140 |
1С:Бухгалтерия 7.7 Стандартная версия |
280 |
Мышь ОК-720 Mouse A4Tech PS/2 |
3 |
Клавиатура Keyboard PS/2 |
22 |
При обходе результата запроса итоговые строки можно отличить от обычных с помощью метода ТипЗаписи().
Например, выведем результат данного запроса в окно сообщений, а итоговую строку выделим заглавными буквами:
Запрос = Новый Запрос("
| ВЫБРАТЬ Номенклатура, Сумма
| ИЗ РегистрНакопления.Продажи
| ИТОГИ СУММА(Сумма) ПО Общие");
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Если Выборка.ТипЗаписи() = ТипЗаписиЗапроса.ОбщийИтог Тогда
Сообщить("ОБЩИЙ ИТОГ: " + Выборка.СуммаПродажи);
Иначе
Сообщить("Товар/услуга: " + Выборка.Номенклатура +
"Сумма: " + Выборка.СуммаПродажи);
КонецЕсли;
КонецЦикла;
Итоги по группировкам
При расчете итогов по группировкам вычисляются значения агрегатных функций по выборкам с одинаковыми значениями полей, по которым производится группировка.
Простой запрос с итогами по группировкам выглядит следующим образом:
ВЫБРАТЬ Номенклатура, Период, Сумма
ИЗ РегистрНакопления.Продажи
ИТОГИ СУММА(Сумма) ПО Номенклатура
АВТОУПОРЯДОЧИВАНИЕ
Результат запроса включает в себя обычные записи из регистра и итоги по каждому товару:
Товар |
Период |
Сумма |
1C: Аспект 7.7 |
|
720 |
1C: Аспект 7.7 |
11.01.200221:56:07 |
90 |
1C: Аспект 7.7 |
24.02.2002 12:00:00 |
180 |
1С:Аспект 7.7 |
26.02.2002 12:00:00 |
180 |
1С:Аспект 7.7 |
04.08.2002 12:00:00 |
270 |
1С:Бухгалтерия 7.7 |
|
350 |
1C: Бухгалтерия 7.7 |
10.01.2002 12:00:01 |
140 |
1С:Бухгалтерия 7.7 |
04.08.2002 12:00:00 |
210 |
Обратите внимание, что запрос с итогами по группировкам отличается от обычной группировки (свертки) с помощью предложения СГРУППИРОВАТЬ ПО с агрегатными функциями. В последнем случае в результат запроса не включаются исходные записи, а остаются только итоговые строки.
Например, следующий запрос выводит объем продаж, сгруппированный по каждой номенклатуре, и не выводит детальные записи регистра накопления:
ВЫБРАТЬ Номенклатура, СУММА(Сумма) КАК Сумма
ИЗ РегистрНакопления.Продажи
СГРУППИРОВАТЬ ПО Номенклатура
АВТОУПОРЯДОЧИВАНИЕ
Номенклатура |
Сумма |
1C: Аспект 7.7 |
720 |
1С:Бухгалтерия 7.7 Базовая версия |
350 |
1C: Бухгалтерия 7.7 Стандартная версия |
280 |
1С:Бухгалтерия ПРОФ версия 7.7 |
1 320 |
1С:Торговля и Склад 7.7 Проф |
1 540 |
Можно рассчитать итоги по комбинации группировок, перечислив их через запятую:
ВЫБРАТЬ Контрагент, Номенклатура, Сумма
И3 РегистрНакопления.Продажи
ИТОГИ СУММА(Сумма)
ПО Контрагент, Номенклатура
АВТОУПОРЯДОЧИВАНИЕ
В данном запросе будет рассчитан объем продаж по каждой комбинации подразделения и номенклатуры. Кроме того, в запрос будут включены исходные записи из регистра накоплений:
Контрагент |
Номенклатура |
Сумма |
Алекс-2002 |
|
780 |
Алекс-2002 |
1С:Аспект 7.7 |
270 |
Алекс-2002 |
1C: Аспект 7.7 |
90 |
Алекс-2002 |
1C: Аспект 7.7 |
180 |
Алекс-2002 |
Windows XP Ноmе |
510 |
Алекс-2002 |
Windows XP Ноmе |
170 |
Алекс-2002 |
Windows XP Home |
340 |
Эльбрус |
|
85 |
Эльбрус |
1C: Аспект 7.7 |
85 |
Эльбрус |
1C: Аспект 7.7 |
20 |
Эльбрус |
1С:Аспект 7.7 |
25 |
Эльбрус |
1C: Аспект 7.7 |
40 |
Порядок группировок в тексте запроса имеет довольно важное значение, поскольку сначала рассчитываются итоги по первому группировочному полю, затем по второму и т.д.
Если в предыдущем примере поменять местами контрагента и номенклатуру, то получим следующий результат:
выбрать Контрагент, Номенклатура, Сумма
ИЗ РегистрНакопления.Продажи
ИТОГИ СУММА(Сумма) ПО Номенклатура, Контрагент
АВТОУПОРЯДОЧИВАНИЕ
Результат запроса показан ниже:
Номенклатура |
Контрагент |
Сумма |
1C: Аспект 7.7 |
|
355 |
1С:Аспект 7.7 |
Алекс-2002 |
270 |
1С:Аспект 7.7 |
Алекс-2002 |
90 |
1С:Аспект 7.7 |
Алекс-2002 |
180 |
1C: Аспект 7.7 |
Эльбрус |
85 |
1C: Аспект 7.7 |
Эльбрус |
20 |
1C: Аспект 7.7 |
Эльбрус |
25 |
1C: Аспект 7.7 |
Эльбрус |
40 |
Windows XP Home Edition |
|
510 |
Windows XP Home Edition |
Алекс-2002 |
510 |
Windows XP Home Edition |
Алекс-2002 |
170 |
Windows XP Home Edition |
Алекс-2002 |
340 |
В 1С:Предприятии 8 реализована возможность обхода группировок в произвольном порядке. То есть из одного результата запроса возможно получать отчеты с различной последовательностью группировок. Например, в отчете на основе одного результата запроса могут выводиться сначала группировки по товарам, а затем по поставщикам.
