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