Top.Mail.Ru
25 июля в 17:00 по МСК
Регистрируйся!
Онлайн-митап по 1С «Типовой механизм многопоточности БСП»

Работа с запросами в 1С СКД

Большинство отчетов в 1С на сегодня разрабатывается с помощью механизма системы компоновки данных, или СКД сокращенно. Для того чтобы «объяснить» СКД, откуда нужно брать данные для отчета, используются наборы данных. Есть всего три вида набора данных:

  • Набор данных запрос
  • Набор данных объект
  • Набор данных объединение

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

В этой статье я постараюсь разобрать, в чем заключается разница при работе с запросами в СКД и при работе с обычными запросами.

Ограничения в СКД при работе с запросами

Для начала давайте посмотрим, какие есть ограничения в СКД при работе с запросами:

  • В запросах нельзя использовать секцию «ИТОГИ». Итоги в СКД вы будете получать, определяя структуру настроек отчета с помощью группировок и прочих объектов структуры (таблица, вложенная схема)
  • В запросах не используется предложение «АВТОУПОРЯДОЧИВАНИЕ». Порядок в СКД настраивается на закладке «Сортировка»

Все остальные возможности запросов 1С можно использовать в СКД: временные таблицы, предложения запроса «СГРУППИРОВАТЬ», «ГДЕ», «ИМЕЮЩИЕ» и прочие, параметры запроса и так далее.

В любом наборе данных в СКД необходимо заполнять описание полей набора данных. Используя набор данных запрос с установленной опцией «Автозаполнение», вы получаете описания этих полей автоматически. При этом СКД анализирует текст запроса и выбирает список полей из последнего пакета из секции «ВЫБРАТЬ». Также происходит анализ текста запроса, чтобы определить, какие поля можно использовать в отборах или в группировках.

Если вы не используете опцию «Автозаполнение», то в тексте запроса необходимо указывать специальные управляющие конструкции, которые подскажут СКД: как сформировать список полей набора, какие поля использовать в отборах и где эти отборы применять и так далее.

Дополнения языка запросов в СКД

Здесь мы переходим от ограничений к дополнениям. В запросах, используемых в СКД, часто встречаются участки кода, заключенные внутрь фигурных скобок «{}». Эти элементы являются частью расширения языка запросов системы компоновки данных. Короткое описание элементов данного расширения можно найти в справке к платформе (открывается через F1) в разделе «Система компоновки данных – Расширение языка запросов для системы компоновки данных».

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

Как видно на этой закладке можно добавлять управляющие элементы:

  • На закладке «Таблицы». Для указания, какие таблицы в запросе являются обязательными, а какие нет.
  • На закладке «Поля» можно указать, какие поля должны попасть в набор данных. Заполнение этой закладки имеет смысл только для последнего пакета в запросе. Каждому полю можно указать, будут ли в СКД использоваться его реквизиты.
  • На закладке «Условия» есть возможность указать, какие поля в запросе могут быть использованы для отборов.
  • Для параметров виртуальных таблиц есть возможность добавлять управляющие конструкции (на картинке кнопка выделена красной рамкой)

С помощью вышеописанных управляющих элементов также можно добавлять:

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

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

Во втором случае мы можем сделать необязательным условие, в котором используется какой-либо параметр. Опять же стандартно при незаполненном параметре в момент выполнения отчета будет выдано сообщение об ошибке. Если мы заключаем такое условие в фигурные скобки, то данное условие будет выброшено из запроса.

Также с помощью данного расширения в запросе можно подключить характеристики объектов:

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

Преобразование запросов в СКД

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

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

Язык выражений в СКД

Также я хотел бы коротко упомянуть еще о том, что в СКД есть свой язык выражений. Пусть это не язык запросов, но тем не менее при построении отчетов вы часто будете встречать элементы этого языка – в выражениях вычисляемых полей, параметров, ресурсов. В этом языке есть простые операторы и функции, в том числе агрегатные. Например, простой можно назвать функцию «НачалоПериода», с помощью которой можно получить начало какого-либо периода. Простой можно назвать агрегатную функцию «Сумма», которая по умолчанию подставляется в выражение числового ресурса. Но также в этом языке выражений есть и более сложные функции, такие как «ВычислитьВыражение» или «ВычислитьВыражениеСГруппировкойМассив». С помощью этих функций в своем отчете вы можете реализовать некоторые возможности, которые было бы сложно реализовать с помощью языка запросов. Об этих функциях мы рассказывали в одном из наших курсов по СКД.

Полезные ссылки по теме статьи:

https://learn.programstore.ru/skd2-intensiv

https://its.1c.ru/db/metod8dev#content:3206:hdoc

https://infostart.ru/1c/articles/1600909/

https://infostart.ru/1c/articles/1219807/

https://infostart.ru/1c/articles/1600909/

Comments

So empty here ... leave a comment!

Добавить комментарий

Sidebar