Система компоновки данных (СКД). Часть 3.

Приветствую вас, дорогие мои читатели! Давайте продолжим рассматривать основы системы компоновки. Во второй части этой серии статей вы узнали различия набора данных — запрос от обычного запроса. Также вы рассмотрели параметры виртуальных таблиц и и познакомились с расширением языка запросов.  А теперь посмотрите в содержании, что вы узнаете здесь. Успехов!

  1. Функции языка выражений СКД.
  2. Особенности работы СКД.
  3. Основные настройки полей СКД.

Функции языка выражений СКД.

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

НачалоПериода(ДатаВремя(2002, 10, 12, 10, 15, 34), "Месяц")

Эта функция отличается от функции языка запросов вторым параметром. Здесь используется строка «Месяц», тогда как в функции языка запросов литерал МЕСЯЦ.

Описание функций можно найти, открыв Конфигуратор: Справка -> Содержание -> Система компоновки данных -> Язык выражений системы компоновки данных -> Функции языка выражений системы компоновки данных.

Где можно применять функции языка выражений СКД, если в языке запросов их использовать нельзя?

  • На закладке «Вычисляемые поля» в колонке «Выражение».
  • На закладке «Параметры» в колонке «Выражение».
  • На закладке «Настройки» в колонке «Пользовательские поля». Пользователь может сам создавать свои поля и писать выражения к ним.
  • На закладке «Наборы данных» в колонках «Выражения представления» и «Выражения упорядочивания».
    Это выражения, которые настраивают поля компоновки данных.

Особенности работы СКД.

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

  • Результирующий запрос сокращается в согласии с настройкой варианта отчёта,
    так как удаляются некоторые поля в результирующем запросе.
  • Кроме того из результирующего запроса могут удаляться и таблицы, если в запросе описаны временные таблицы и далее они нигде не используется.
  • То же самое относится и к наборам данных, если мы описали множество наборов данных в схеме, но используем только некоторые из них, то только по используемым наборам данных система будет получать информацию, а остальные наборы данных будут удалены из результирующего макета компоновки данных.

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

Основные настройки полей СКД.

На закладке «Наборы данных» при создании набора данных типа запрос происходит автозаполнение полей компоновки. Как видим, поля содержат большое количество настроек.

Колонка «Поле» содержит название поля, которое получается из информационной базы (ИБ).
Неизменяемое значение, которое жёстко связано с запросом. Оно соответствует псевдониму запроса.

Но есть одна особенность. Если мы поменяем псевдоним, например «Номенклатура», в Конструкторе запроса на вкладке «Объединения/Псевдонимы» в колонке «Имя поля», на «Товар», тогда на закладке «Наборы данных» компоновки появиться новое поле «Товар», но при этом осталось и поле «Номенклатура». Это связано с тем, что установлен флаг «Автозаполнение». При такой настройке система не может понять, что поле «Товар» то же самое, что и поле «Номенклатура», поэтому, на всякий случай, поле добавляется дважды.

Может ли такая конструкция повредить работе пользователя? Да. Ведь в настройках варианта отчета появится два поля «Товар» и «Номенклатура». Для пользователя будет непонятно, чем они отличаются, хотя эти отборы идентичны.

Хотя можно исключить появление поля «Номенклатура», поставив галочки в колонках «Ограничение поля»-«Условие» и «Ограничение реквизитов»-«Условие» на закладке «Наборы данных» в настройках полей. Кроме того, можно убрать галочку с флага «Автозаполнение» и в Конструкторе запроса на вкладке «Компоновка данных» заполнить все поля.

Колонка «Путь» указывает, как мы будем обращаться к полю на всех закладках компоновки данных. Значение, которое можно изменить по своему усмотрению. Допускаются пробелы в названии пути, но при этом такое название заключается в квадратные скобки. Но лучше, чтобы путь был без пробелов, так как это служебное поле. Лучше изменить заголовок, поставив галочку в колонке «Заголовок».

Зачем нужно было создавать два разных поля «Поле» и «Путь», если их названия почти всегда совпадают? Потому что используется множество наборов данных. Например, если второй набор данных будет объединение, то для того, чтобы сопоставить поля нужно иметь одинаковые пути. В остальных случаях пути можно оставить без изменения, если их названия понятны.

Можно применять следующий способ для работы с колонкой «Путь». С помощью указания пути можно создавать вложенные виртуальные реквизиты элемента. Например, поместим реквизит «Качество» внутрь реквизита «Товар». Изменим поле «Путь» реквизита «Качество» на «Товар.Качество». Теперь на закладке «Настройки» во вкладке «Выбранные поля» мы не найдём поле «Качество», но оно появится в внутри поля «Товар».

Рассмотрим подробнее настройки ограничения доступности. Как видим, существуют две строки для ограничения доступности в колонках «Ограничение поля» и «Ограничение реквизитов».

Колонки СКД «Ограничение поля» и «Ограничение реквизитов»

Колонки ограничения полей СКД

Колонка «Ограничение поля» означает, что ограничения будут наложены на само поле. Колонка «Ограничение реквизитов» означает, что ограничения будут наложены на вложенные реквизиты этого поля, если поле относится к сложному типу данных, такому как справочник или документ.

Каждая строка разбита ещё на четыре колонки. Если для поля или реквизитов этого поля установлен флаг:

  • Поле, то они не будут доступны для выбора на закладке «Настройки» во вкладке «Выбранные поля».
  • Условие, то они не будут доступны как условие на закладке «Настройки» во вкладке «Отбор».
  • Группа, то на закладке «Настройки» при создании новой группировки не будет доступна группировка по ним.
  • Упорядочивание, то они не будут доступны для упорядочивания на закладке «Настройки» во вкладке «Сортировка».

Колонка «Выражение представления» нужна для изменения представление поля в результате отчёта. Например, нужно выводить не только наименование товара, но и его артикул. Поэтому в этой колонке можно написать следующее:

Товар.Артикул + "-" + Товар.Наименование

В этом поле мы можем использовать все возможности языка СКД и обращаться к функциям общих модулей.

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

ДляСКД.ПолучитьПредставление(Товар)

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

Колонка «Выражение упорядочивания» нужна для определения нестандартной сортировки. Здесь можно использовать такие же конструкции, что и в поле «Выражение представления».

Ну вот, рассказал всё, как и обещал. Если есть вопросы, то пишите  их в комментариях. Чтобы материал закрепился у вас в уме, подготовлю тест.

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


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

ПОДПИСКА