Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
1C_pr77_Lang2.doc
Скачиваний:
7
Добавлен:
20.11.2019
Размер:
2.52 Mб
Скачать

Способы оптимизации формирования отчетов

Процесс получения отчетов с использованием запросов можно условно раз­делить на две фазы: сначала формируется запрос, затем полученные данные выводятся в Таблицу. В данном разделе речь пойдет о второй фазе получения отчета — выводе данных в Таблицу.

Рассмотрим следующий пример. Допустим, требуется вывести в отчет пол­ный перечень товаров со всеми их реквизитами. Для этого сначала формирует­ся запрос с одной Группировкой — "Товар", затем полученные данные выво­дятся в Таблицу. Ниже приведены три варианта вывода данных в Таблицу.

Вариант 1

В программном модуле текст вывода данных в Таблицу следующий

Пока Запрос.Группировка("Товар") = 1 Цикл

Таб.ВывестиСекцию("Товар");

КонецЦикла;

Секция "Товар" в Таблице имеет следующий формат:

<Запрос.Товар.Наименование>

<Запрос.Товар.Артикул>

<Запрос.Товар.Цена>

<Запрос.Товар.Валюта>

В первом варианте отображаемые реквизиты товара полностью вычисляют­ся в ячейках Таблицы, причем доступ к каждому реквизиту товара происходит по полному пути: Запрос-Товар-Реквизит. Данный вариант вывода данных в Таблицу самый медленный.

Вариант 2

В программном модуле текст вывода данных в Таблицу следующий

Пока Запрос.Группировка("Товар") = 1 Цикл

ПечНаим = Запрос.Товар.Наименование;

ПечАртикул = Запрос.Товар.Артикул;

ПечЦена = Запрос.Товар.Цена;

ПечВалюта = Запрос.Товар.Валюта;

Таб.ВывестиСекцию("Товар1");

КонецЦикла;

Секция "Товар1" в Таблице имеет следующий формат:

<ПечНаим>

<ПечАртикул>

<ПсчЦена>

<ПечВалюта>

Во втором варианте отображаемые реквизиты товара вычисляются в про­граммном модуле, а в ячейках Таблицы размещены простые выражения — ссылки на идентификаторы программного модуля. Доступ к каждому реквизи­ту товара происходит по полному пути: Запрос-Товар-Реквизит. В данном ва­рианте фаза вывода данных в Таблицу работает быстрее первого варианта (вы­игрыш ~20%), т. к. в программном модуле выражения вычисляются существен­но быстрее, чем выражения, помещенные в ячейках Таблицы (программный модуль при загрузке компилируется, а выражения в ячейках таблицы интер­претируются каждый раз при выводе секций).

Вариант 3

В программном модуле текст вывода данных в Таблицу следующий

Пока Запрос.Группировка("Товар") = 1 Цикл

Тов = Запрос.Товар;

ПечНаим = Тов.Наименование;

ПечАртикул = Тов.Артикул;

ПечЦена = Тов.Цена;

ПечВалюта = Тов.Валюта;

Таб.ВывестиСекцию("Товар1");

КонецЦикла;

Секция "Товар1" в Таблице имеет следующий формат:

<ПечНаим>

<ПечАртикул>

<ПсчЦена>

<ПечВалюта>

В третьем варианте отображаемые реквизиты товара вычисляются в про­граммном модуле, а в ячейках Таблицы размещены простые выражения — ссылки на идентификаторы программного модуля. Доступ к каждому реквизи­ту товара происходит по сокращенному пути — через промежуточную перемен­ную: Товар — Реквизит. В данном варианте фаза вывода данных в Таблицу работает быстрее, чем во втором варианте (выигрыш ~20%) и существено бы­стрее, чем в первом варианте (выигрыш ~40%), т. к. вычисление значений рек­визитов объектов через «одну точку» выполняется быстрее, чем через «две (и более) точки».

Кратко суть этого раздела можно выразить так: при реализации больших отчетов, которые рассчитаны на отображение более сотни строк, следует при­держиваться следующих правил:

  • не размещайте сложных выражений в ячейках Таблицы. Лучше вычис­лить необходимые значения непосредственно в программном модуле;

  • если необходимо получить несколько реквизитов одного объекта, кото­рый сам является составной частью другого объекта, то следует восполь­зоваться промежуточной переменной, в которую сначала можно записать значение всего объекта «целиком», а затем уже от нее получать требуе­мые данные.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]