Предыдущие статьи можно посмотреть по ссылкам ниже:
- СКД – основные понятия и элементы
- СКД - Настройки вариантов отчетов
- Работа с пользовательскими настройками
Продолжаем рассмотрение различных возможностей системы компоновки данных. В текущей статье поговорим о расширениях языка запросов для СКД. Это конструкции, которые в тексте запроса обернуты в фигурные скобки:
{……}
И так, для чего же необходимы расширения языка запросов?
СКД использует расширения для настройки полей компоновки и формирования запроса итогового макета компоновки. А я напомню, запрос итогового макета компоновки может существенно отличаться от запроса источника данных заданного в схеме компоновки.
Понимание, и грамотное использование расширений языка запросов позволяет более гибко управлять формированием итогового запроса макета компоновки:
Оглавление
- Секция ВЫБРАТЬ
- Секция ГДЕ
- Параметры виртуальных таблиц
- Выделение в расширение отдельных таблиц запроса
Автоматическое заполнение полей компоновки данных
Перед тем, как начинать говорить о расширениях языка запросов, нужно понимать, что означает флаг «Автозаполнение», который расположен на закладке полей компоновки:
Если флаг установлен, поля компоновки данных заполняются автоматически для всех полей, указанных на верхнем уровне запроса источника данных (не зависимо от наличия секций с расширениями в тексте запроса).
Также, при установленном флаге, в список полей компоновки попадают все измерения виртуальных таблиц, используемых в запросе. Если измерения не указаны в секции ВЫБРАТЬ в запросе набора данных, они будут доступны только для отбора данных в отчете. Их использование во всех остальных разделах настроек компоновки будет отключено:
Дополнительно, для виртуальных таблиц, флаг «Автозаполнение» неявно формирует отбор по периоду, создавая стандартные параметры: «Период» для таблиц остатков, «НачалоПериода» и «КонецПериода» для таблиц оборотов. Причем, указание значений этих параметров в настройках компоновки не является обязательным. В итоговый запрос макета компоновки параметры попадут только в том случае, если они заданы в настройках.
На заметку. Если для виртуальной таблицы заданы параметры отбора по периоду непосредственно в запросе схемы компоновки, и их имена отличаются от стандартных, этот отбор будет работать только в том случае, если не используются стандартные параметры отбора по периоду. Заполнение этих параметров является обязательным.
Если флаг «Автозаполнение» - отключен, автоматического формирования полей компоновки и стандартных параметров виртуальных таблиц по данным запроса источника данных не происходит. Заполнение будет происходить таким образом, как это описано в секциях расширений.
Еще несколько моментов при использовании флага «Автозаполнение»:
- Если в запросе источника данных используется виртуальная таблица, и в настройках компоновки добавлен отбор по какому-либо измерению, в итоговом запросе макета, СКД будет накладывать отбор на параметры виртуальных таблиц, если это возможно. Если кроме виртуальных таблиц, в запросе присутствуют и другие таблицы (не виртуальные), в итоговом запросе будет добавлен дополнительный отбор в секции ГДЕ всего запроса. То-есть будет присутствовать два отбора.
- Если в наборе данных используется пакет запросов, СКД будет пытаться наложить отбор на все запросы пакета, если это возможно.
Есть еще один флаг, который может влиять на итоговый запрос макета компоновки «Использовать группировки запроса если возможно». Если флаг установлен, СКД будет пытаться использовать агрегатные функции на уровне запроса к базе данных.
Происходит это следующим образом. Если в настройках компоновки добавлены только группировки и ресурсы (без детальных записей), в итоговом запросе макета компоновки данные будут сгруппированы по выбранным в настройках группировкам.
Расширение языка запроса для СКД
Начнем с того, где именно можно использовать секции с расширениями?
Расширения языка запросов можно использовать в секциях: ВЫБРАТЬ, ГДЕ, ХАРАКТЕРИСТИКИ, и в параметрах виртуальных таблиц.
Также выделить как расширение можно целиком таблицу запроса.
Конструкции, добавленные в расширение в итоговом тексте запроса находятся в фигурных скобках «{…}». Для работы с расширениями в конструкторе запроса существует специальная закладка – «Компоновка данных»:
Рассмотрим более подробно использование каждой секции.
Настройка выполняется на закладке «Поля» в окне редактирования расширений:
Выбранные на этой закладке поля попадут в список полей компоновки, если отключена галка «Автозаполнение». Можно указать, нужно ли включать вложенные реквизиты полей – флаг «Использовать реквизиты». Можно изменить псевдонимы полей, если это необходимо.
Обратите внимание, если в основном запросе уже используются псевдонимы для полей, в расширении отображаются именно они, а не имена самих полей:
Если в запросе используется объединение нескольких таблиц, расширение секции ВЫБРАТЬ необходимо задавать только для первой таблицы.
Настройка выполняется на закладке «Условия» в окне редактирования расширений:
Указываются поля, на которые пользователь сможет накладывать отбор, если отключен флаг «Автозаполнение». Вне зависимости от использования псевдонимов полей в основном запросе, в расширении отборов указываются имена самих полей. Можно задать псевдонимы для выбранных полей отборов. Можно указать использование вложенных реквизитов.
Если в запросе источника данных используется объединение нескольких таблиц или пакет запросов, расширение секции ГДЕ можно указать для каждой таблицы объединения или пакета отдельно.
Важно. Если в запросе источника данных используются виртуальные таблицы, в итоговом запросе макета компоновки отбор будет указан на уровне всего запроса в целом, в секции ГДЕ, а не на уровне параметров виртуальных таблиц.
В данной секции, можно сконструировать произвольный отбор с указанием параметров:
ТоварныеЗапасыОстатки.Товар = &Товар
Если параметры, указанные в расширении, не будут заполнены в настройках компоновки, они не будут включены в итоговый запрос макета компоновки и сообщение о необходимости заполнения параметра выведено не будет (в отличии от параметров указанных в основном запросе).
Существует одна особенность указания отборов с параметрами. Если указать несколько отборов и соединить их логическим оператором, при формировании отчета нужно будет обязательно задавать оба параметра. Для того, чтобы была возможность указания одного параметра, необходимо разделить отборы запятой. В этом случае, на странице отборов они будут находиться в разных строках.
В расширении языка запросов можно указать параметры для виртуальных таблиц запроса. Данные указываются на закладке «Таблицы», непосредственно для каждой виртуальной таблицы:
Можно указать следующие параметры:
- Период, НачалоПериода, КонецПериода – задается отбор по периоду для виртуальных таблиц.
Если флаг «Автозаполнение» включен, данные параметры будут заполнены автоматически неявно. То-есть, в тексте запроса их нет, но фактически они будут присутствовать. Можно явно указать в качестве этих параметров произвольные имена:
РегистрНакопления.ТоварныеЗапасы.Обороты({(&ДатаНачала)}, {(&ДатаОкончания)}, , ) КАК ТоварныеЗапасыОбороты
Тогда «неявно» заданные параметры действовать не будут. Это может быть необходимо, если в запросе уже встречаются параметры отбора по периоду, и нужно привести все остальные отборы к существующим.
Если флаг «Автозаполнение» отключен, параметры не будут заполнены неявно. Если требуется отбор по периоду, необходимо их указывать явно.
- Периодичность – можно указать параметр, с помощью которого можно будет задавать периодичность в настройках компоновки. Для параметра будет создан список выбора периода.
- Метод дополнения – можно указать параметр, для задания в настройках компоновки метода дополнения: «Движения», «Движения и границы периода».
- Условие – используется для выбора полей, по которым можно будет указывать отбор в настройках компоновки (аналогично секции ГДЕ). Отличие в том, что указанные пользователем отборы, в итоговом запросе макета компоновки будут наложены в параметрах виртуальных таблиц, а не в секции ГДЕ на уровне всего запроса.
Выделение в расширение отдельных таблиц запроса
Есть возможность выделить в расширение (заключить в фигурные скобки) целиком таблицу запроса источника данных. Выполняются эти действия также на закладке «Таблицы». Для выделения таблицы необходимо убрать флаг «Обязательная» и указать параметр «Номер группы»:
Таблицы с одним и тем же номером группы будут включаться или исключаться из итогового запроса макета компоновки одновременно. В тексте запроса схемы компоновки таблицы одной группы будут включены в одну группу фигурных скобок.
«Не обязательные» таблицы или группы таблиц будут исключены из итогового запроса макета компоновки, если в настройках компоновки не будет выбрано ни одного поля из этих таблиц, в любой группе настроек: поля, отборы, сортировка, оформление.
Использование дополнительных данных, секция ХАРАКТЕРИСТИКИ
Что такое дополнительные реквизиты и сведенья, думаю, знают все. Этот механизм активно используется еще с конфигураций прошлого поколения.
Так вот, значения этих дополнительных реквизитов или сведений можно АВТОМАТИЗИРОВАНО включать в схему компоновки данных. Вы конечно можете сделать это в ручную, добавив нужное количество соединений в запрос источника данных:
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДополнительныеСвойства КАК ДопСвойства1
ПО (ДопСвойства.Номенклатура = Номенклатура.Ссылка
И ДопСвойства.ВидСвойства = &Свойство1)
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДополнительныеСвойства КАК ДопСвойства2
ПО (ДопСвойства1.Номенклатура = Номенклатура.Ссылка
И ДопСвойства1.ВидСвойства = &Свойство2)
Но, во-первых, это не так удобно. Во вторых, структура хранения дополнительных данных может быть сложной и отличатся от типовой. Настроев получение этой информации один раз, потом можно получать все необходимые дополнительные данные в настройках компоновки, простым обращением через точку:
Номенклатура.ДопРеквизит
Механизмы СКД скрывают от пользователей всю структуру хранения дополнительных данных, и позволяют работать с ними, непосредственно, как с реквизитами объектов. В итоговый запрос макета компоновки автоматически будут добавлены все необходимые таблицы и связи.
Так вот, для автоматизации использования дополнительных данных (дополнительных реквизитов, сведений и прочей информации) существует специальная закладка конструктора запросов «Характеристики»:
На этой закладке в таблице указывается вся необходимая информация о структуре хранения дополнительных данных. Рассмотрим поля этой таблицы подробнее:
- Тип – вид объектов метаданных, для которых необходимо выводить характеристики (то-есть, через точку от которого они будут доступны),
- Источник видов – способ получения видов дополнительных данных (характеристик): отдельная таблица или произвольный запрос (запрос можно использовать, если требуется наложить на таблицу дополнительные отборы),
- Источник значений – способ получения значений дополнительных данных (характеристик): отдельная таблица или произвольный запрос.
Группа полей с описанием видов дополнительных данных (Виды характеристик)
- Поле ключа – ссылка на элемент дополнительных данных (в случае с дополнительными реквизитами, это ссылка на элемента плана видов характеристик),
- Поле имени – поле для определения имени дополнительных данных (как они будет доступны через точку от основного объекта),
- Поле типа значений – поле для определения типа дополнительных данных (необходимо указать для корректного определения вложенных реквизитов дополнительных данных).
Группа полей с описанием значений дополнительных данных (Значения характеристик)
- Поле объекта – ссылка на основной объект, для которого получаются дополнительные данные,
- Поле вида – ссылка на элемент вида дополнительных данных (в случае с дополнительными реквизитами, это ссылка на элемент плана видов характеристик),
- Поле значения – значения дополнительных данных.
В случае, если значение поля «Значение характеристик (поле значения)» не указано, тип значения дополнительного реквизита считается «булево». Реквизит будет принимать значение «Истина» в том случае, если в значениях характеристик будет хотя бы одна строка для указанного объекта и вида дополнительных данных. Таким образом настроен вывод в отчеты категорий объектов в конфигурациях: УТ 10.3, УПП.
После заполнения структуры хранения дополнительных данных, система добавит в нижнюю часть запроса секцию ХАРАКТЕРИСТИКИ, следующего вида:
{ХАРАКТЕРИСТИКИ
ТИП(ПланВидовХарактеристик.ВидыХарактеристик)
ВИДЫХАРАКТЕРИСТИК ПланВидовХарактеристик.ВидыХарактеристик
ПОЛЕКЛЮЧА Ссылка
ПОЛЕИМЕНИ Наименование
ПОЛЕТИПАЗНАЧЕНИЯ ТипЗначения
ЗНАЧЕНИЯХАРАКТЕРИСТИК РегистрСведений.Характеристики
ПОЛЕОБЪЕКТА Объект
ПОЛЕВИДА ВидХарактеристики
ПОЛЕЗНАЧЕНИЯ Значение }
По сути, перечисляются все, указанные выше настройки. Данную секцию можно описать вручную, без использования конструктора.
Следует иметь в виду, что дополнительные данные в настройках компоновки можно увидеть только в пользовательском режиме. Это связано с тем, что для определения значений дополнительных реквизитов или сведений требуется обращение к таблицам данных системы.
Использование дополнительных характеристик для объектов можно настроить непосредственно в конфигураторе для каждого объекта метаданных:
В этом случае, в запрос не нужно будет включать секцию «Характеристики», дополнительные данные будут доступны по умолчанию (также только в режиме 1С Предприятие).
В механизме настроек характеристик для объектов источники видов и значений – это всегда таблицы. Так что нельзя указать запрос с произвольным отборам необходимых видов. Однако, отбор значений все-таки можно указать, заполнив поля: «Поле отборов видов» и «Значение отборов видов»:
Вроде бы ничего не забыл про расширения. Но, если все-таки, что-то упустил, пишите в комментариях к статье, добавлю.
В следующих статьях рассмотрены следующие темы:
- Использование нескольких наборов данных и связей между ними, cоздание собственной иерархии,
- Функции СКД: ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив,
- Агрегатные функции СКД, о которых мало кто знает,
- Программная работа с отчетом на СКД.
Для ознакомления с предыдущими статьями можно перейти по ссылкам:
Спасибо а внимание.