Для чего нужны роли полей СКД в 1С?

Доброго времени суток, уважаемые читатели блога SoftMaker.kz! В прошлый раз мы уже затрагивали тему СКД, которая рассказывала о применении функции Массив (Array) и СоединитьСтроки (JoinStrings). А сегодня в первой из этой серии статей, мы узнаем для чего нужны роли полей компоновки данных, а также рассмотрим примеры заполнения этих ролей. Приступим!

Роль поля СКД указывает, что из себя представляет данное поле. Каждая роль поля может содержать свое свойство. Например, свойство «Период» имеет числовое значение и содержит номер периода, если поле период. Если значение свойство «Период» равно 0 (ноль), то это означает, что данное поле периодом не является. Или свойство «Измерение» – содержит признак того, что поле является измерением. Если поле является измерением, то эта информация используется при расчете итогов по полям остатка.

Для каждого поля схемы компоновки данных можно указывать роль. Роли влияют на корректность расчета остатков. В частности, начального и конечного остатка по некоторой таблице. Если в запросе выбрана виртуальная таблица «ОстаткиИОбороты», то начальные и конечные остатки считаются по сложному алгоритму, особенно если у нас используются дополнительные развороты по периоду.

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

Добавим набор данных запрос. Для этого нам нужно сделать активным корневой элемент «Конструктор запроса». Давайте обратимся к виртуальной таблице «ОстаткиИОбороты» регистра накопления. Что мы видим?

Вкладка набора данных в СКД, заполнение ролей полей компоновки

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

Предположим, что в запросе мы используем вычисляемое поле, например, применяем оператор языка запросов «ВЫБОР». Опишем такое условие:

ВЫБОР
	КОГДА
	ОстаткиТоваровОстаткиИОбороты.Номенклатура =
		Значение(Справочник.Номенклатура.ПустаяСсылка)
	ТОГДА
		Значение(Справочник.Номенклатура.Шампунь)
	ИНАЧЕ
		ОстаткиТоваровОстаткиИОбороты.Номенклатура
КОНЕЦ

Эта запись означает что, если номенклатура соответствует пустой ссылке (обращаемся к функции значение справочник «Номенклатура», пустая ссылка), то тогда буден возвращено значение предопределенного элемента. Предположим, что в нашей конфигурации есть такой предопределенный элемент и он называется «Шампунь». В противном случае, возвращаем значение самой номенклатуры. Получаем следующее:

Влияние вычисляемого поля на заполнение полей СКД

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

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

Также у вас есть возможность скачать книгу по основам СКД