СводнаяТаблица

Типы · PivotTable

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

Полное описание, параметры и ограничения

СводнаяТаблица (PivotTable)

СводнаяТаблица (PivotTable)

Доступен, начиная с версии 8.1.

Свойства:
АвтоФиксация (AutoFixation)
Данные (Data)
Имя (Name)
ИсточникДанных (DataSource)
Колонки (Columns)
МакетОформления (AppearanceTemplate)
Область (Area)
ОбластьДанных (DataArea)
ОбластьЗаголовковКолонок (ColumnsHeadersArea)
ОбластьЗаголовковСтрок (RowHeaderArea)
Обновление (RefreshEnabled)
ОтображатьЛинии (ShowLines)
ОтображатьПодписиИтогов (ShowTotalLabels)
ОтображатьПоля (ShowFields)
ПоложениеИтоговКолонок (ColumnsTotalsPosition)
ПоложениеИтоговСтрок (RowTotalPosition)
Поля (Fields)
РазмещениеИзмеренийВКолонках (DimensionsPlacementOnColumns)
РазмещениеИзмеренийВСтроках (DimensionsPlacementOnRows)
РазмещениеРеквизитовИзмеренийВКолонках (DimensionAttributePlacementInColumns)
РазмещениеРеквизитовИзмеренийВСтроках (DimensionAttributePlacementInRows)
Реквизиты (Attributes)
Строки (Rows)

Методы:
Обновить (Refresh)
ПолучитьЗначения (GetValues)

Описание:

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

Доступность:

Сервер, толстый клиент, внешнее соединение.

См. также:
КоллекцияВстроенныхТаблиц
КоллекцияВстроенныхТаблиц, свойство <Имя встроенной таблицы>
КоллекцияВстроенныхТаблиц, метод Получить
КоллекцияВстроенныхТаблиц, метод Добавить
КоллекцияВстроенныхТаблиц, метод Найти
КоллекцияВстроенныхТаблиц, метод Удалить
КоллекцияВстроенныхТаблиц, метод Индекс

Использование в версии:

Доступен, начиная с версии 8.1.

Методическая информация

Практические примеры

Переставить ресурсы сводной и вернуть исходный состав

Все действия относятся к полям одной собственной сводной таблицы. Удаление поля данных не удаляет товар из источника.

Где и как запускать

Полный модуль управляемой формы собственной учебной внешней обработки. Построение выполняется на сервере без контекста; показ — на клиенте. Вставляйте на уровне модуля.

Подготовка

  1. Создайте новую внешнюю обработку с управляемой основной формой в учебной базе. Каждый урок — отдельная копия модуля.

  2. На форме создайте команду УчебныйПример и перетащите её на форму как кнопку. В действии команды выберите процедуру УчебныйПример(Команда).

  3. Вставьте весь модуль из примера: УчебныйПример, ПостроитьУчебныйДокумент и УчебнаяТаблица. Серверный вызов возвращает собственный табличный документ клиенту; директивы не удаляйте.

  4. Никакие макеты, документы и справочники конфигурации не нужны. Всё построение — в памяти, без печати, записи файлов и отправки в сервисы.

  5. Показ и ручную проверку выполняйте в тонком клиенте Windows 8.5.1.1343. Каждый урок — отдельная копия формы с пустым модулем до вставки.

&НаКлиенте
Процедура УчебныйПример(Команда)
    ТабДок = ПостроитьУчебныйДокумент();

    ТабДок.Показать("Учебный документ — без печати и сохранения");
КонецПроцедуры

&НаСервереБезКонтекста
Функция ПостроитьУчебныйДокумент()
    ТабДок = Новый ТабличныйДокумент;
    Источник = Новый ТаблицаЗначений;
    Источник.Колонки.Добавить("Товар", Новый ОписаниеТипов("Строка"));
    Источник.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число"));
    Источник.Колонки.Добавить("Сумма", Новый ОписаниеТипов("Число"));
    СтрокаТовара = Источник.Добавить();
    СтрокаТовара.Товар = "Книга";
    СтрокаТовара.Количество = 3;
    СтрокаТовара.Сумма = 750;
    СтрокаТовара = Источник.Добавить();
    СтрокаТовара.Товар = "Ручка";
    СтрокаТовара.Количество = 1;
    СтрокаТовара.Сумма = 50;
    Менеджер = Новый МенеджерВременныхТаблиц;
    Запрос = Новый Запрос;
    Запрос.МенеджерВременныхТаблиц = Менеджер;
    Запрос.УстановитьПараметр("Источник", Источник);
    Запрос.Текст = "ВЫБРАТЬ Д.Товар, Д.Количество, Д.Сумма
    |ПОМЕСТИТЬ ВТУчебныеТовары ИЗ &Источник КАК Д;
    |ВЫБРАТЬ Д.Товар, Д.Количество, Д.Сумма
    |ИЗ ВТУчебныеТовары КАК Д
    |ИТОГИ СУММА(Количество), СУММА(Сумма) ПО Товар";
    Попытка
        Пакет = Запрос.ВыполнитьПакет();
        Результат = Пакет.Получить(1);
    Исключение
        Менеджер.Закрыть();
        ВызватьИсключение;
    КонецПопытки;
    Менеджер.Закрыть();
    Сводная = ТабДок.ВстроенныеТаблицы.Добавить(Тип("СводнаяТаблица"), ТабДок.Область(2, 1));
    Сводная.Имя = "УчебныеТовары";
    Сводная.ИсточникДанных = Результат;
    Сводная.Строки.Добавить("Товар");
    Сводная.Данные.Добавить("Количество");
    Сводная.Данные.Добавить("Сумма");
    Сводная.Обновить();
    Сумма = Сводная.Данные.Найти("Сумма");
    Если Сумма = Неопределено Тогда
        ВызватьИсключение "Не найден ресурс Сумма";
    КонецЕсли;
    Индекс = Сводная.Данные.Индекс(Сумма);
    Сообщить(Индекс = 1);
    Сводная.Данные.Сдвинуть(Сумма, -1);
    Сообщить(Сводная.Данные.Получить(0).Имя = "Сумма");
    Сводная.Данные.Удалить("Количество");
    Сообщить(Сводная.Данные.Количество() = 1);
    Сводная.Данные.Вставить("Количество", 0);
    Сообщить(Сводная.Данные.Получить(0).Имя = "Количество");
    Сводная.Данные.Очистить();
    Сообщить(Сводная.Данные.Количество() = 0);
    Сводная.Данные.Добавить("Количество");
    Сводная.Данные.Добавить("Сумма");
    Сводная.Обновить();
    Сообщить(Сводная.Данные.Количество() = 2);
    Сообщить(Источник.Итог("Сумма") = 800);
    Сообщить(Сводная.Колонки.Количество() = 0);
    Сообщить(Сводная.Реквизиты.Количество() = 0);
    Возврат ТабДок;
КонецФункции

Разбор по шагам

  1. Перед Индекс проверяем найденное поле; исходный порядок двух ресурсов известен из подготовки.

  2. Сдвиг -1 переносит Сумма перед Количество; удаляем Количество только из роли Данные.

  3. Вставляем удалённое поле в начало; не пытаемся вставлять дубликат существующего ресурса.

  4. Очистить очищает выбранные поля отображения; после этого явно восстанавливаем оба и обновляем сводную.

Как проверить результат

  1. Девять сравнений Истина: последовательные составы, порядок, восстановленные два ресурса и неизменный итог 800.

  2. В источнике всё ещё две записи — книга и ручка.

Ожидаемый результат

Показан полный жизненный цикл коллекции выбранных полей с восстановлением.

На что обратить внимание

  1. Очистить коллекцию Данные не равно удалению строк запроса или объектов базы.

  2. Позиции коллекции начинаются с 0; Сдвинуть принимает смещение, не конечный индекс.

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

Прочитать роль, тип и уровни полей сводной таблицы

Имя поля приходит из запроса, а не из подписи ячейки. Сравниваем измерение Товар и ресурс Сумма, проверяя наличие до обращения к свойствам.

Где и как запускать

Полный модуль управляемой формы собственной учебной внешней обработки. Построение выполняется на сервере без контекста; показ — на клиенте. Вставляйте на уровне модуля.

Подготовка

  1. Создайте новую внешнюю обработку с управляемой основной формой в учебной базе. Каждый урок — отдельная копия модуля.

  2. На форме создайте команду УчебныйПример и перетащите её на форму как кнопку. В действии команды выберите процедуру УчебныйПример(Команда).

  3. Вставьте весь модуль из примера: УчебныйПример, ПостроитьУчебныйДокумент и УчебнаяТаблица. Серверный вызов возвращает собственный табличный документ клиенту; директивы не удаляйте.

  4. Никакие макеты, документы и справочники конфигурации не нужны. Всё построение — в памяти, без печати, записи файлов и отправки в сервисы.

  5. Показ и ручную проверку выполняйте в тонком клиенте Windows 8.5.1.1343. Каждый урок — отдельная копия формы с пустым модулем до вставки.

&НаКлиенте
Процедура УчебныйПример(Команда)
    ТабДок = ПостроитьУчебныйДокумент();

    ТабДок.Показать("Учебный документ — без печати и сохранения");
КонецПроцедуры

&НаСервереБезКонтекста
Функция ПостроитьУчебныйДокумент()
    ТабДок = Новый ТабличныйДокумент;
    Источник = Новый ТаблицаЗначений;
    Источник.Колонки.Добавить("Товар", Новый ОписаниеТипов("Строка"));
    Источник.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число"));
    Источник.Колонки.Добавить("Сумма", Новый ОписаниеТипов("Число"));
    СтрокаТовара = Источник.Добавить();
    СтрокаТовара.Товар = "Книга";
    СтрокаТовара.Количество = 3;
    СтрокаТовара.Сумма = 750;
    СтрокаТовара = Источник.Добавить();
    СтрокаТовара.Товар = "Ручка";
    СтрокаТовара.Количество = 1;
    СтрокаТовара.Сумма = 50;
    Менеджер = Новый МенеджерВременныхТаблиц;
    Запрос = Новый Запрос;
    Запрос.МенеджерВременныхТаблиц = Менеджер;
    Запрос.УстановитьПараметр("Источник", Источник);
    Запрос.Текст = "ВЫБРАТЬ Д.Товар, Д.Количество, Д.Сумма
    |ПОМЕСТИТЬ ВТУчебныеТовары ИЗ &Источник КАК Д;
    |ВЫБРАТЬ Д.Товар, Д.Количество, Д.Сумма
    |ИЗ ВТУчебныеТовары КАК Д
    |ИТОГИ СУММА(Количество), СУММА(Сумма) ПО Товар";
    Попытка
        Пакет = Запрос.ВыполнитьПакет();
        Результат = Пакет.Получить(1);
    Исключение
        Менеджер.Закрыть();
        ВызватьИсключение;
    КонецПопытки;
    Менеджер.Закрыть();
    Сводная = ТабДок.ВстроенныеТаблицы.Добавить(Тип("СводнаяТаблица"), ТабДок.Область(2, 1));
    Сводная.Имя = "УчебныеТовары";
    Сводная.ИсточникДанных = Результат;
    Сводная.Строки.Добавить("Товар");
    Сводная.Данные.Добавить("Количество");
    Сводная.Данные.Добавить("Сумма");
    Сводная.Обновить();
    Товар = Сводная.Поля.Найти("Товар");
    Сумма = Сводная.Поля.Найти("Сумма");
    Если Товар = Неопределено Или Сумма = Неопределено Тогда
        ВызватьИсключение "В собственном результате ожидаются Товар и Сумма";
    КонецЕсли;
    Сообщить(Товар.Имя = "Товар");
    Сообщить(Товар.Измерение);
    Сообщить(Сумма.Ресурс);
    Сообщить(Не Товар.Реквизит);
    Сообщить(Товар.ТипЗначения.СодержитТип(Тип("Строка")));
    Сообщить(Сумма.ТипЗначения.СодержитТип(Тип("Число")));
    Сообщить("Уровней товара: " + Строка(Товар.КоличествоУровней()));
    Сообщить("Открытых уровней: " + Строка(Товар.КоличествоОткрытыхУровней));
    Сообщить("Реквизитов товара: " + Строка(Товар.Реквизиты.Количество()));
    Сообщить(Сводная.Поля.Найти("НесуществующееПоле") = Неопределено);
    Возврат ТабДок;
КонецФункции

Разбор по шагам

  1. Коллекция Поля описывает все поля источника, а Строки/Данные — выбранные роли отображения.

  2. Найти может вернуть Неопределено; сначала проверяем оба поля.

  3. ИТОГИ запроса сделали Сумма ресурсом, а Товар измерением; реквизит — отдельная роль.

  4. Уровни и открытые уровни читаем из фактического объекта, не принимаем строку товара за иерархический справочник.

Как проверить результат

  1. Семь сравнений Истина: имена/роли/типы и отсутствие неизвестного поля.

  2. Числа уровней и реквизитов изучите в выводе; собственный Товар — обычная строка, не ссылка.

Ожидаемый результат

Понятны разные роли поля запроса и его типизированное значение.

На что обратить внимание

  1. Роль ресурса задаётся итогами запроса, не названием Сумма самим по себе.

  2. Найти ищет имя поля запроса, а не текст произвольной ячейки.

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

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.