- •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. Запросы к регистрам накопления
- •Основная таблица регистра накопления
- •Сводные таблицы
Сводные таблицы
Система 1C:Предприятие 8 содержит новый механизм для анализа данных - сводные таблицы. С их помощью можно легко выводить многомерные данные, например, объем продаж в разрезе контрагентов и наименований номенклатуры.
Значения измерений отображаются в верхней или боковой шапке сводной таблицы, а ячейки области данных содержат сводную информацию на пересечении измерений. Пользователь имеет возможность добавить или удалить измерения и ресурсы, поменять их расположение.
Для создания сводной таблицы нужны минимальные усилия от программиста, поэтому это самый простой путь для анализа данных.
Всегда нужно помнить, что сводная таблица размещается в табличном документе. Добавить ее в табличный документ можно интерактивно или программно. Чтобы вставить сводную таблицу в макет в режиме "Конфигуратор" нужно установить курсор на ячейку макета и выбрать пункт меню
"Таблица => Встроенные таблицы => Вставить сводную таблицу". Сводную таблицу можно также добавить в табличный документ программно, как, например, в следующем фрагменте:
ТабДок = ЭлементыФормы.ПолеТабличногоДокумента; НашаСводнаяТаблица = ТабДок.ВстроенныеТаблицы.Добавить(Тип("СводнаяТаблица"));
Чтобы обратиться к сводной таблице средствами встроенного языка, нужно воспользоваться свойством-коллекцией ВстроенныеТаблицы объекта ТабличныйДокумент, например:
ТабДок = ЭлементыФормы.ПолеТабличногоДокумента; НашаСводнаяТаблица = ТабДок.ВстроенныеТаблицы.СводнаяТаблица1
Через эту коллекцию можно добавлять и удалять сводные таблицы при выполнении программы.
Самое главное свойство сводной таблицы - это ИсточникДанных, которое имеет тип РезультатЗапроса или ПостроительОтчета. Это свойство определяет, откуда сводная таблиц будет черпать данные для отображения. При использовании результата запроса его итоги становятся ресурсами (отображаются в области данных), а группировочные поля, по которым они подсчитываются, становятся измерениями.
В специальном окне «Поля сводной таблицы», которое отображается при активизации сводной таблицы, можно включать и выключать измерения и ресурсы. Если оно не отображается, то щелкните правой кнопкой на ячейке сводной таблицы и в контекстном меню выберите пункт «Отображать поля».
Следующий пример выбирает данные из регистра накопления Продажи, подсчитывает общее количество и сумму по каждому контрагенту (с учетом иерархии), номенклатуре (с учетом иерархии), периодам и странам. Результат запроса помещается в сводную таблицу для анализа:
Запрос = Новый Запрос (" | ВЫБРАТЬ | Номенклатура, | ПодразделениеКомпании, | СуммаПродажи | ИЗ | РегистрНакопления.ПродажиКомпании | | ИТОГИ СУММА(СуммаПродажи) ПО | Номенклатура ИЕРАРХИЯ, | ПодразделениеКомпании ИЕРАРХИЯ | ");
РезультатЗапроса = Запрос.Выполнить(); ТабДок = ЭлементыФормы.ПолеТабличногоДокумента1; СводТаб = ТабДок.ВстроенныеТаблицы.СводнаяТаблица1; СводТаб.ИсточникДанных = РезультатЗапроса; //самое важное! СводТаб.ОтображатьПоля = Истина;
В предыдущем примере выполнялся запрос и его результат назначался в качестве источника данных для сводной таблицы. Далее пользователь должен был самостоятельно включить нужные ему измерения и ресурсы, расположить их в строках или колонках и т.д. В 1С:Предприятии 8 есть возможность управлять сводной таблицей средствами встроенного языка.
Следующий фрагмент включает измерение "Номенклатура" (по строкам), измерение "ПодразделениеКомпании" (по колонкам) и ресурс "СуммаПродажи" (область данных):
СводТаб.Строки.Добавить(СводТаб.Поля.Номенклатура); СводТаб.Колонки.Добавить(СводТаб.Поля.ПодразделениеКомпании); СводТаб.Данные.Добавить(СводТаб.Поля.СуммаПродажи);
Здесь мы воспользовались следующими свойствами-коллекциями объекта "СводнаяТаблица":
Свойство-коллекция |
Описание |
Поля |
Коллекция всех доступных полей сводной таблицы, включая все измерения и ресурсы (в том числе выключенные). Эта коллекция заполняется при назначении источника данных на основе итогов в запросе. Функции из предложения ИТОГИ становятся ресурсами, а группировочные поля, по которым они подсчитываются, становятся измерениями. Используя свойства объекта "ПолеСводнойТаблицы" можно определить тип поля (измерение или ресурс), тип значения (объект "ОписаниеТипов"), прочитать или установить количество открытых уровней. |
Строки |
Коллекция отображаемых полей сводной таблицы, расположенных в строках (сверху вниз). |
Колонки |
Коллекция отображаемых полей сводной таблицы, расположенных в колонках (слева направо). |
Данные |
Коллекция отображаемых полей сводной таблицы, расположенных в области данных. |
Обычно при каждом программном изменении состава отображаемых измерений или ресурсов сводная таблица обновляет свое содержимое, на что требуется некоторое время. Чтобы ускорить это процесс, можно временно отключить автоматическое обновление, установить строки, колонки и данные, а потом опять его включить, например:
СводТаб.Обновление = Ложь; СводТаб.Строки.Добавить(СводТаб.Поля.ПодразделениеКомпании); СводТаб.Строки.Добавить(СводТаб.Поля.Номенклатура); СводТаб.Данные.Добавить(СводТаб.Поля.СуммаПродажи); СводТаб.Обновление = Истина;
В любой момент содержимое сводной таблицы можно принудительно обновить с помощью специального метода Обновить(), но необходимо понимать, что при этом запрос заново не выполняется, а обновляется только экранное отображение сводной таблицы.
Следующие свойства позволяют управлять внешним видом сводной таблицы:
ОтображатьПодписиИтогов (отображать строку типа "Отдел розничной торговли Итог")
ПоложениеИтоговСтрок (сверху или снизу)
ПоложениеИтоговКолонок (слева или справа)
Автофиксация (фиксация названий строк и колонок при прокрутке)
Последняя группа свойств, которую мы рассмотрим, позволяет обращаться к областям сводной таблицы. Они содержат объекты типа ОбластьЯчеекТабличногоДокумента, через которые можно управлять форматированием этих областей:
Свойство |
Описание |
Область |
Область табличного документа, в которой располагается сводная таблица. |
ОбластьДанных |
Область ячеек табличного документа, в которой располагаются данные сводной таблицы, т.е. ресурсы. |
ОбластьЗаголовковКолонок |
Область ячеек табличного документа, в которой располагаются заголовки колонок. |
ОбластьЗаголовковСтрок |
Область ячеек табличного документа, в которой располагаются заголовки строк. |
Рассмотрим и последний метод объекта СводнаяТаблица — это метод ПолучитьЗначения. Данный метод принимает в качестве параметра область ячеек, а возвращает структуру, содержащую данные сводной таблицы, расположенные в этой области, например:
СтруктураДанных = СводТаб.ПолучитьЗначения(ТабДок.Область("R4C3:R4C3")); При этом ключи структуры будут содержать имена полей (измерений и ресурсов), а значения структуры — значения измерений и ресурсов, как показано на следующем рисунке:
