Программная настройка сводной таблицы

В данном разделе рассказывается, каким образом, при помощи встроенного языка 1С:Предприятие, можно настроить начальное отображение сводной таблицы.

Установка источника данных сводной таблицы

Сводная таблица позволяет работать с объектами ПостроительОтчета и РезультатЗапроса. Для того чтобы сводная таблица начала работать с данными объектами, достаточно установить объект в свойство сводной таблицы ИсточникДанных.

Пример установки построителя отчета в качестве источника сводной таблицы:

Копировать в буфер обмена
ЭлементыФормы.СводнаяТаблица.ВстроенныеТаблицы[0].ИсточникДанных = ПостроительОтчетаОтчет;

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

Заполнение сводной таблицы

Для того чтобы пользователь при открытии отчета сразу получал заполненную таблицу, следует при открытии отчета заполнить оси сводной таблицы.

Для того чтобы поместить некоторое измерение в строки таблицы, следует поместить поле, соответствующее измерению в коллекцию полей Строки. Для того чтобы разместить некоторое измерение в колонках, необходимо поместить соответствующее поле в коллекцию Колонки.

Пример:

Копировать в буфер обмена
ЭлементыФормы.СводнаяТаблица.ВстроенныеТаблицы[0].Строки.Добавить("Номенклатура");
ЭлементыФормы.СводнаяТаблица.ВстроенныеТаблицы[0].Колонки.Добавить("Контрагент");

В данном примере, в строки сводной таблицы помещается поле "Номенклатура", а в колонки - поле "Контрагент".

  Контрагент  
Номенклатура Поставщики Покупатели
Клавиатура Keyboard PS/2    
Программное обеспечение    
Услуги    
Клавиатуры    
Принтеры    
Мониторы    
Мыши    
Ноутбуки    
Системные блоки и комплектующие    

Для того чтобы сводная таблица отображала ресурсы, необходимо добавить соответствующие поля в коллекцию Данные.

Пример:

Копировать в буфер обмена
ЭлементыФормы.СводнаяТаблица.ВстроенныеТаблицы[0].Данные.Добавить("Количество");
ЭлементыФормы.СводнаяТаблица.ВстроенныеТаблицы[0].Данные.Добавить("Сумма");

В данном примере сводной таблице сообщается, что в ней необходимо отображать ресурсы "Количество" и "Сумма".

  Контрагент Данные        
  Поставщики Покупатели Количество Итог Сумма Итог
Номенклатура Количество Сумма Количество Сумма
Клавиатура Keyboard PS/2 2 6 100 077 500 377,5 100 079 500 383,5
Программное обеспечение     59 9 155 59 9 155
Услуги     52 400 52 400
Клавиатуры 4 13 203 6 485 207 6 498
Принтеры     73 45 918 73 45 918
Мониторы 6 1 229 85 36 527 91 37 756
Мыши 6 7,1 387 507,7 393 514,8
Ноутбуки     14 21 686 14 21 686
Системные блоки и комплектующие 6 8 064 59 98 185 65 106 249
Итог 24 9 319,1 101 009 719 241,2 101 033 728 560,3

При необходимости размещения ресурсов по горизонтали, следует поместить в коллекцию Строки коллекцию Данные.

Пример:

Копировать в буфер обмена
ЭлементыФормы.СводнаяТаблица.ВстроенныеТаблицы[0].Строки.Добавить(ЭлементыФормы.СводнаяТаблица.ВстроенныеТаблицы[0].Данные);

В данном примере ресурсы будут располагаться вертикально.

    Контрагент    
Номенклатура Данные Поставщики Покупатели Итог
Клавиатура Keyboard PS/2 Количество 2 100 077 100 079
Сумма 6 500 377,5 500 383,5
Программное обеспечение Количество   59 59
Сумма   9 155 9 155
Услуги Количество   52 52
Сумма   400 400
Клавиатуры Количество 4 203 207
Сумма 13 6 485 6 498
Принтеры Количество   73 73
Сумма   45 918 45 918
Мониторы Количество 6 85 91
Сумма 1 229 36 527 37 756
Мыши Количество 6 387 393
Сумма 7,1 507,7 514,8
Ноутбуки Количество   14 14
Сумма   21 686 21 686
Системные блоки и комплектующие Количество 6 59 65
Сумма 8 064 98 185 106 249
Количество Итог 24 101 009 101 033
Сумма Итог 9 319,1 719 241,2 728 560,3

При необходимости отображения данных по измерениям для каждого ресурса по отдельности, следует помещать коллекцию Данные в коллекцию Строки или коллекцию Колонки перед измерениями, которые требуется отображать отдельно для каждого ресурса.

Пример:

Копировать в буфер обмена
ЭлементыФормы.СводнаяТаблица.ВстроенныеТаблицы[0].Данные.Добавить("Количество");
ЭлементыФормы.СводнаяТаблица.ВстроенныеТаблицы[0].Данные.Добавить("Сумма");
ЭлементыФормы.СводнаяТаблица.ВстроенныеТаблицы[0].Строки.Добавить(ЭлементыФормы.СводнаяТаблица.ВстроенныеТаблицы[0].Данные);
ЭлементыФормы.СводнаяТаблица.ВстроенныеТаблицы[0].Строки.Добавить("Номенклатура");

В данном примере, в сводной таблице данные по номенклатуре будут отображаться отдельно для ресурсов "Количество" и "Сумма".

    Контрагент    
Данные Номенклатура Поставщики Покупатели Итог
Количество Клавиатура Keyboard PS/2 2 100 077 100 079
Программное обеспечение   59 59
Услуги   52 52
Клавиатуры 4 203 207
Принтеры   73 73
Мониторы 6 85 91
Мыши 6 387 393
Ноутбуки   14 14
Системные блоки и комплектующие 6 59 65
Сумма Клавиатура Keyboard PS/2 6 500 377,5 500 383,5
Программное обеспечение   9 155 9 155
Услуги   400 400
Клавиатуры 13 6 485 6 498
Принтеры   45 918 45 918
Мониторы 1 229 36 527 37 756
Мыши 7,1 507,7 514,8
Ноутбуки   21 686 21 686
Системные блоки и комплектующие 8 064 98 185 106 249
Количество Итог 24 101 009 101 033
Сумма Итог 9 319,1 719 241,2 728 560,3

В случае если источник данных содержит описание реквизитов измерений, возможно программное добавление данных полей в коллекцию Реквизиты.

Пример:

Копировать в буфер обмена
ЭлементыФормы.СводнаяТаблица.ВстроенныеТаблицы[0].Строки.Добавить("Номенклатура");
ЭлементыФормы.СводнаяТаблица.ВстроенныеТаблицы[0].Реквизиты.Добавить("Номенклатура.Код");

В данном примере сводной таблице сказано, что необходимо дополнительно отображать реквизит "Номенклатура.Код".

    Контрагент Данные        
    Поставщики Покупатели Количество Итог Сумма Итог
Номенклатура Код Количество Сумма Количество Сумма
Клавиатура Keyboard PS/2 00017 2 6 100 077 500 377,5 100 079 500 383,5
Программное обеспечение 00007     59 9 155 59 9 155
Услуги 00008     52 400 52 400
Клавиатуры 00005 4 13 203 6 485 207 6 498
Принтеры 00003     73 45 918 73 45 918
Мониторы 00001 6 1 229 85 36 527 91 37 756
Мыши 00004 6 7,1 387 507,7 393 514,8
Ноутбуки 00033     14 21 686 14 21 686
Системные блоки и комплектующие 00002 6 8 064 59 98 185 65 106 249
Итог 24 9 319,1 101 009 719 241,2 101 033 728 560,3

Заметим, что при изменении состава коллекций Строки, Колонки, Данные, Реквизиты, сводная таблица автоматически заполняет содержимое табличного документа, в котором она расположена.

Для повышения производительности данных операций, следует перед заполнением настроек сводной таблицы запретить ее обновление, и разрешить обновление после заполнения настроек. При разрешении обновления сводной таблицы, в случае, если настройки сводной таблицы изменялись, содержимое сводной таблицы будет обновлено. Данная возможность реализуется при помощи свойства Обновление.

Пример:

Копировать в буфер обмена
// Запретим обновление сводной таблицы
ЭлементыФормы.СводнаяТаблица.ВстроенныеТаблицы[0].Обновление = Ложь;
// Заполним сводную таблицу
ЭлементыФормы.СводнаяТаблица.ВстроенныеТаблицы[0].Строки.Добавить("Номенклатура");
ЭлементыФормы.СводнаяТаблица.ВстроенныеТаблицы[0].Реквизиты.Добавить("Номенклатура.Код");
ЭлементыФормы.СводнаяТаблица.ВстроенныеТаблицы[0].Колонки.Добавить("Контрагент");
ЭлементыФормы.СводнаяТаблица.ВстроенныеТаблицы[0].Данные.Добавить("Количество");
ЭлементыФормы.СводнаяТаблица.ВстроенныеТаблицы[0].Данные.Добавить("Сумма");
// Разрешим обновление сводной таблицы
ЭлементыФормы.СводнаяТаблица.ВстроенныеТаблицы[0].Обновление = Истина;

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