Подводные камни в использовании параметров компоновки данных

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

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

Начнем с простого примера, напишем запрос обращения к виртуальной таблице оборотов регистра бухгалтерии:


на закладке параметры появятся два параметра «НачалоПериода» и «КонецПериода», система их сформировала автоматически и при задании значений , эти параметры будут передаваться в виртуальную таблицу.


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

Эта «автоматика» имеет минусы:

1.  Если мы в запросе захотим использовать две схожие по параметрам виртуальные таблицы, но в каждую передать свой интервал дат. Например так:

ВЫБРАТЬ
 регистратор
ИЗ
 РегистрБухгалтерии.Хозрасчетный.Обороты(,, Регистратор, , , , , ) КАК Регистр
		
ОБЪЕДИНИТЬ ВСЕ
	
ВЫБРАТЬ
 регистратор
ИЗ
 РегистрБухгалтерии.Хозрасчетный.Обороты(,, Регистратор, , , , , ) КАК Регистр1

То весьма огорчимся, так как система на закладке параметры, по прежнему будет предоставлять нам только один набор начала и окончания периодов (что естественно в нашем случае не приемлемо).

2.  Продолжая наш пример с двумя виртуальными таблицами мы по обыкновению поставим свои параметры.

ВЫБРАТЬ
 регистратор
ИЗ
 РегистрБухгалтерии.Хозрасчетный.Обороты(,, Регистратор, , , , , ) КАК Регистр
		
ОБЪЕДИНИТЬ ВСЕ
	
ВЫБРАТЬ
 регистратор
ИЗ
 РегистрБухгалтерии.Хозрасчетный.Обороты(,, Регистратор, , , , , ) КАК Регистр1

Параметры появятся на закладке «параметры», на ряду со стандартными параметрами компоновки данных:

Но и тут окажется, что без дополнительных настроек различных флажков у нас ничего не выйдет (СКД упорно будет игнорировать наши параметры и подставлять свой).

Далее рассмотрим на конкретных примерах рецепты по настройке параметров.
Приведу все варианты возможного использования параметров:

1)  Использование параметров компоновки данных.

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

2)  Использование только своих параметров.

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

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

Для этого достаточно прописать имена своих полей в фигурных скобках, таким образом:

ВЫБРАТЬ
 регистратор
ИЗ
 РегистрБухгалтерии.Хозрасчетный.Обороты({},{}, Регистратор, , , , , ) КАК Регистр
		
ОБЪЕДИНИТЬ ВСЕ
	
ВЫБРАТЬ
 регистратор
ИЗ
 РегистрБухгалтерии.Хозрасчетный.Обороты({},{}, Регистратор, , , , , ) КАК Регистр1

{ } - это инструкция для компоновки данных, которая в данном случае, по сути переобозначает имена параметров компоновки данных. Таким образом на закладке параметры будут, только те параметры которые мы задали:

Соответственно можно задавать для каждой виртуальной таблицы свои параметры (если бы во второй виртуальной таблице, мы бы задали другие имена, то на закладке параметров появилось уже четыре параметра).

Далее пользуемся параметрами как обычно. Благодаря этому подходу, мы быстро и без лишних действий достигли результата.

3)  Использование совместно и параметров компоновки данных и параметров запроса.

Если в запросе указано и выражение параметра и параметр компоновки данных, то значение параметра компоновки данных используется в случае, если значение данного параметра установлено в настройках компоновки . В противном случае в качестве значения параметра используется результат выражения , указанного в параметре виртуальной функции.

ВЫБРАТЬ
 регистратор
ИЗ
 РегистрБухгалтерии.Хозрасчетный.Обороты(&начало{},&окончание{}, Регистратор, , , , , ) КАК Регистр
		
ОБЪЕДИНИТЬ ВСЕ
	
ВЫБРАТЬ
 регистратор
ИЗ
 РегистрБухгалтерии.Хозрасчетный.Обороты(&начало{},&окончание{}, Регистратор, , , , , ) КАК Регистр1

Данный пример отражает полноту картины использования параметров, но на практике редко используется.


Автор: Андрей Баринов

Дата публикации: 30.09.2010