Файл: Хрусталева Е. Ю. Язык запросов 1С-Предприятия 8 (2013).pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 12.03.2019

Просмотров: 48138

Скачиваний: 8323

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

неоптимальный план. Это может привести к значительному падению производительности
и даже к неработоспособности запроса в отдельных случаях.

Поэтому нежелательно обращаться к реквизитам регистратора регистра (например,
ТоварыНаСкладах.Регистратор.Дата).

Например, поле Регистратор регистра ТоварыНаСкладах имеет тип ссылки на любой
документ. При выполнении следующего запроса будет выполнено соединение с
таблицами всех документов, имеющихся в конфигурации (листинг 4.18).

Листинг 4.18. Получение реквизитов регистратора из регистра накопления – неправильный вариант

Если четко известно, что поле составного типа является ссылкой на конкретную таблицу,
то настоятельно рекомендуется использовать функцию ВЫРАЗИТЬ() для ограничения
количества таблиц в запросе.

Например, по условию задачи нужно отобрать только движения регистра Товары на
складах
, произведенные документом Поступление товаров. В этом случае оптимальным
будет следующий вариант (листинг 4.19).

Листинг 4.19. Получение реквизитов регистратора из регистра накопления – правильный вариант

Это позволит значительно ускорить работу запроса, ограничив количество соединений при
помощи функции приведения типа ВЫРАЗИТЬ(). В данном примере компактность и
универсальность кода пожертвована в пользу его производительности. Но в результате
будет выполнено только одно дополнительное соединение таблицы регистра с таблицей
документом Поступление товаров.

Если ограничение количества соединений в запросе таким способом некорректно, то
можно рекомендовать:


background image

1.  Избегать избыточности при создании полей составных ссылочных типов. Не следует

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

2.  Пожертвовать компактностью хранения данных ради производительности. Если в

запросе требуется значение, полученное через ссылку, то как вариант это значение
можно хранить непосредственно в самом объекте. Например, в реквизите регистра
можно хранить дополнительную информацию о дате регистратора. Это приведет к
дублированию информации и некоторому (незначительному) увеличению ее объема,
но может существенно повысить производительность и стабильность работы
запроса.

3.  Если данный запрос является универсальным и используется в нескольких разных

ситуациях (где типы ссылки могут быть разными), то можно формировать запрос
динамически, подставляя в функцию ВЫРАЗИТЬ тот тип, который необходим при
данных условиях. Это увеличит объем исходного кода и, возможно, сделает его
менее универсальным, но может существенно повысить производительность и
стабильность работы запроса.

Исключить вывод ссылочных полей в отчет

Если отчет формируется не с помощью системы компоновки данных, а с помощью
встроенного языка (например, результат запроса выводится в табличный документ), то
нежелательно выводить в отчет непосредственно сами ссылочные значения, так как это
может существенно замедлить выполнение отчета.

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

Чтобы этого избежать, следует в запросе с помощью функции Представление() получать
текстовое представление ссылочного поля и затем уже его, а не саму ссылку, выводить в
отчет или сообщение.

подробнее

О функции 

Представление()

 рассказано в разделе «

Как получить текстовое представление

ссылочного поля

».

Например, в демонстрационной конфигурации «Учет движения средств», прилагающейся
к книге, в обработке Продажи номенклатуры рассмотрен пример, представляющий
продажи товаров за каждую неделю в виде кросс-отчета.

Данные для отчета получаются при выполнении следующего запроса (листинг 4.20) и
выводятся затем в табличный документ.


background image

Листинг 4.20. Запрос для получения данных

В запросе получаются как сами ссылочные значения, так и их текстовые представления.
В табличный документ выводятся представления ссылочного поля ТоварПредставление,
а значения самой ссылки Товар помещаются в ячейку расшифровки отчета, для того
чтобы затем пользователь в отчете мог открыть запись из справочника,
соответствующую этому товару