Как использовать конструктор запросов в 1с 8.3. Язык запросов – быстро и легко! Конструктор запросов. Кнопка «Запрос» в конструкторе запросов

Конструктор запроса состоит из следующих закладок:

1. «Таблицы и поля» - на закладке три иерархических списка:
a. «База данных» - перечислены все доступные объекта, к которым можно сделать за-прос. Также кнопка «Отображать таблицы изменений» , с помощью которой можно получить доступ к таблицам изменений объектов ИБ, если они регистрируются для какого либо плана обмена.
b. «Таблицы» - список выбранных таблиц, к которым будет выполнен запрос. Также в этом окне можно удалить таблицу, переименовать или заменить таблицу, а также добавить внутренний запрос.

Для виртуальных таблиц можно назначать параметры, нажав на кнопку «Параметры виртуальных таблиц»:

Рекомендуется активно использовать параметры виртуальных таблиц для отборов по тем или иным измерениям, поскольку при этом увеличивается скорость выполнения запроса. В параметрах можно использовать внешние переменные, название которых предваряется знаком «&».
c. «Поля» - список полей, которые выбираются из таблиц. Также можно добавить вычисляемые поля, для этого при нажатии кнопки «Добавить» открывается конструктор произвольного выражения:

Слева окно с доступными в выражении полями. Справа подсказку используемых функций. Внизу конструируемое произвольное выражение. В выражениях можно использовать внешние параметры, для их обозначения используется знак «&», например: &Период, &ДатаНач
Нужно быть внимательным, если в окне будет набрано длинное и сложное выра-жение, в котором будет небольшая синтаксическая ошибка, то после нажатия кноп-ки «ОК» система выдаст предупреждение и закроет окно. Весь набранный код бу-дет потерян, поэтому рекомендую, если нет уверены в правильности выражения, то перед закрытием конструктора всегда сохраняйте содержимое в буфер обмена (Ctrl-C).

2. «Связи» - на закладке указываются связи между таблицами.

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

3. «Группировка» - на закладке указываются, какие поля группируются, а какие агрегируются (суммируются).

4. Закладка «Условия» - перечисляются условия которые накладываются на запрос.
В условиях тоже можно писать сложные выражения с помощью конструктора простых выражения и ис-пользованием внешних переменных:

5. «Дополнительно»
Дополнительные параметры, накладываемые на запрос

6. «Объединения и псевдонимы»
На этой закладке можно назначать псевдонимы для полей, а также управлять запросами которые соединяется через конструкции «ОБЪЕДИНИТЬ» или «ОБЪЕДИНИТЬ ВСЕ»

7. «Порядок»
В каком порядке будут выводиться получаться результаты запроса

Внимание! В низу закладки можно видеть галочку «Автоупорядочивание» - в текущей версии 1С 8.1 в СКД она бесполезна, более того при установленной галочке при записи СКД выдает ошибку, так что ею пользоваться не стоит.

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

A. На закладке «Таблицы» - перечислены таблицы, используемые в запросе, можно указать обязательность включения таблицы в запрос, галочкой «Обязательная». Т.е. если никакие поля в выборку не попадают, то данная таблица в запросе вообще не участвует. Также можно указать параметры для таблиц.

В процессе настройки СКД, мы задаем, какие либо отборы, то все значения отборов будут подставлены в параметры виртуальных таблиц, что снова нам поможет оптимизировать и ускорить запрос.
b. На закладке «Поля» - перечислены поля и их псевдонимы, которые будут добавляться в список полей СКД.
c. «Условия» - в случае указания отборов в настройках СКД, все значения отборов будут добавляться как дополнительные условия, в условия можно также добавлять сложные выражения.

9. «Характеристики»
Закладка, не имеющая аналога в обычном конструкторе выходной фор-мы.

Даная закладка обеспечивает расширение работы запросов с характеристиками. Таблица на закладке состоит из нескольких полей:
a. «Тип значения» - тип для которого будут выбираться характеристики. Например если указать «СправочникСсылка.Номенклатура», то в запросе будут выбираться все характеристики для номенклатуры.
b. «Источник» - источник для свойств видов характеристик, может быть запрос или таблица. В данном поле мы можем написать запрос выборки только тех свойств, которые нам нужны.
c. «Список характеристик» - поле в котором указывается источник для свойств характери-стик. Чаще всего это план видов характеристик или запрос. Также нужно указать поля, которые отвечают за «Идентификатор», «Имя» и «Тип» свойства.
d. «Источник» - следующее поле, в котором указываем источник значений характеристик, тоже может быть или таблица или запрос.
e. «Значение характеристик» - таблица или запрос, которые получает значения характери-стик. Например, таблицей значений характеристик может служить регистр сведений «ЗначенияСвойствОбъектов». Мы также должны указать те поля из таблицы (или запро-са), что отвечают за «Объект», «Свойство» и «Значение» характеристики.
После редактирования запроса, текст запроса можно видеть в окне под список полей. Ниже галочкой «Автозаполнение» мы можем регулировать заполнение дополнительных параметров для полей определенных в запросе. Следует обратить внимание, что состав полей определяется только в самом запросе.

Информация взята с сайта

Запросы в 1С – эффективный способ получения данных в v8 известного программного продукта. Получить данные можно не только в удобном виде, но и в короткий срок. Оптимизация – один из способов улучшения показателя быстродействия обработки запросов в системе. Удобно то, что язык запросов 1С поддерживает и латиницу, и кириллицу.

Небольшие профессиональные хитрости языка запросов

Запрос в системе пишется на специальным языке, а отлаживать его параметры можно с использованием консоли в 1С. Ключевым словом в языке запросов является «ВЫБРАТЬ».

В сочетании с конструкцией ВЫБРАТЬ могут выступать конструкции:

  • «ДЛЯ ИЗМЕНЕНИЯ» — на срок выполнения процедуры транзакции все записи таблицы блокируются;
  • «РАЗЛИЧНЫЕ» — в результате обработки запроса не должно быть одинаковых строк;
  • «РАЗРЕШЕННЫЕ» — отбор, согласно которому текущий пользователь получит только ту информацию, на которую у него есть пользовательские права;
  • «ПЕРВЫЕ 3 (или любое значение n) – на языке запросов это означает, что система сделает отбор по первым 3-м записям.

Грамотный запрос – эффективная оптимизация работы

Программисты знают, что в программе 1С v8 получить актуальные данные можно двумя действенными методами:

  • Объектный вариант получения информации;
  • Табличный способ извлечения данных.

Объектная модель используется тогда, когда цель – получить простой набор данных простым набором кода. Язык запросов в 1С работает для всех случаев, в этом его универсальность. Но неграмотно созданный запрос ухудшает быстродействие и не всегда даёт возможность получить корректные данные. Но чтобы быть хорошим программистом в 1С недостаточно изучить язык запросов , нужно научиться грамотно применять его правила.

Оптимальный запрос, с чего начинать новичкам в 1С

Ещё немного о системе базовых конструкций на языке 1С, к примеру, имеем таблицу данных:

Таблица «Номенклатура».

Задача: получить данные по столбцам Код и Сорт в табличном виде.

На языке запросов это выглядит следующим образом:

Запрос.Текст = »
|ВЫБРАТЬ
| Номенклатура.Код,
| Номенклатура.Сорт
|ИЗ
| Справочник.Номенклатура КАК Номенклатура»;

И получим следующее:

Код Сорт
00001 сезонные
00002 дюшес
00003 мейер

Для тех, у кого конструкции базового уровня языка запросов не вызывают сложностей, имеет смысл переходить к группировке. Здесь ключевой будет конструкция «СГРУППИРОВАТЬ ПО», которая поможет выполнить группировку идентичных полей базы данных. Фактически способ группировки сводит поля с идентичной информацией в одно. В результативной таблице получается меньше строк, что удобно и для текущей деятельности, и для анализа. Но важно, чтобы предварительно все поля базы данных имели разбивку: группируем, не группируем.

Рассмотрим конструкцию «СГРУППИРОВАТЬ ПО» на примере.

Товар Склад Количество
Мыло Основной 1 520
Порошок Основной 750
Шампунь Основной 830
Паста Оптовый 17
Порошок Оптовый 2 586
Шампунь Оптовый 22

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

Чтобы узнать, сколько имеется товара без учёта склада, нужно:

Запрос.Текст = »
|ВЫБРАТЬ
| Товары.Товар,
| СУММА(Товары.Количество) КАК Количество
|ИЗ
| Справочник.Товары КАК Товары
|СГРУППИРОВАТЬ ПО
| Товары.Товар»;

Группировка производится по значению поля Товар, группируемым видом поля является Количество. Сумма в данном конкретном примере представляет собой некую агрегатную функцию. Именно она обозначает, что именно надо сделать с количеством одинаковых товаров.

В результате получим таблицу со следующей информацией:

Специальная обработка «Консоль запроса» в v8.1/8.2/8.3 позволяет осуществлять запуск в режиме Предприятия и формулировать сами запросы в ручном режиме или через вызов функции через консоль. Предварительно можно уже оценить, каким будет итог выполнения, файлы можно сохранять.

Конструктор запроса имеет достаточно простой, интуитивно понятный интерфейс. Тем не менее рассмотрим применение конструктора запроса подробнее.

Запуск конструктора текста запроса производится контекстным меню (правой кнопкой мыши) в нужном месте программного кода.

Рассмотрим каждую вкладку конструктора подробнее. Исключение — вкладка Построитель, это тема для отдельного разговора.

Вкладка Таблицы и поля

На этой вкладке указывается источник данных и поля, которые необходимо выводить в отчет. По сути, тут описываются конструкции ВЫБРАТЬ … ИЗ.

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

В контекстном меню виртуальных таблиц можно задать параметры этих таблиц:

Вкладка Связи

Вкладка служит для описания соединений нескольких таблиц, создает конструкции со словом СОЕДИНЕНИЕ.

Вкладка Группировка

На данной вкладке система позволяет группировать и суммировать нужные поля результата таблицы. Описывается использование конструкций СГРУППИРОВАТЬ ПО, СУММА, МИНИМУМ, СРЕДНЕЕ, МАКСИМУМ, КОЛИЧЕСТВО, КОЛИЧЕСТВО РАЗЛИЧНЫХ.

Получите 267 видеоуроков по 1С бесплатно:

Вкладка Условия

Отвечает за всё, что идёт в тексте запроса после конструкции ГДЕ, т.е. за все условия, накладываемые на получаемые данные.

Вкладка Дополнительно

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

Группировка Выборка записей :

  • Первые N — параметр, возвращающий в запрос только N записей (оператор ПЕРВЫЕ)
  • Без повторяющихся — обеспечивает уникальность полученных записей (оператор РАЗЛИЧНЫЕ )
  • Разрешенные — позволяет выбирать только те записи, которые позволяет выбрать система с учетом (конструкция РАЗРЕШЕННЫЕ )

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

Ниже существует флаг Блокировать полученные данные для последующего изменения . Он позволяет включить возможность установки блокировки данных, которая обеспечивает сохранность данных от момента их чтения до изменения (актуально только для Автоматического режима блокировок, конструкция ).

Вкладка Объединения/Псевдонимы

На этой вкладке конструктора запросов устанавливается возможность объединения разных таблиц и псевдонимы (конструкция КАК). В левой части указываются таблицы, если установить флаги напротив таблицы, будут использоваться конструкции ОБЪЕДИНИТЬ, иначе — ОБЪЕДИНИТЬ ВСЕ (отличия двух способов ). В правой части указываются соответствия полей в разных таблицах, если соответствие не указано, запрос будет возвращать NULL.

Вкладка Порядок

Здесь указывается порядок сортировки значений (УПОРЯДОЧИТЬ ПО) — по убыванию (УБЫВ) или возрастанию(ВОЗР).

Также есть интересный флаг — Автоупорядочивание (в запросе — АВТОУПОРЯДОЧИВАНИЕ). По умолчанию, система 1С 8.3 выводит данные в «хаотичном» порядке. Если установить этот флаг, система будет сортировать данные по внутренним данным.

Вкладка Пакет запросов

На вкладке конструктора запросов можно , а также использовать её в роли навигации. В тексте запроса пакеты разделяются символом «;»(точка с запятой).

Кнопка «Запрос» в конструкторе запросов

В левом нижнем углу конструктора запроса есть кнопка Запрос, с помощью которого можно в любой момент просмотреть текст запроса:

В данном окне можно внести коррективы в запрос и выполнить его.

Умение писать текст запроса «вручную» никогда не являлось «лишним», но удобнее использовать конструктор запросов.

Замечание.

К сожалению, в управляемом приложении в обработке «ЗнакомствоСЗапросом» нельзя пользоваться конструктором запроса. Можно им воспользоваться в этой обработке перейдя в обычный режим, но делать этого не будем.

Создадим обработку «КонструкторЗапроса» и определяем ее в подсистему «ОтчетыИОбработки».

Создадим форму обработки и в ней добавляем реквизит формы «ТабДок» типа «Табличный документ», а так же команду «ВыполнитьЗапрос» с действием «ВыполнитьЗапрос». Далее, перетаскиваем их на форму.

В модуле формы, для работы команды, пишем процедуру:

&НаКлиенте

Процедура ВыполнитьЗапрос(Команда)

ВыполнитьЗапросСервер();

КонецПроцедуры

&НаСервере

КонецПроцедуры

Становимся внутри процедуры вызываемой на сервере и из контекстного меню вызываем «Конструктор запроса с обработкой результата» (рисунок 2.65).

Рисунок 2.65 Конструктор запроса с обработкой результата

Ставим тип обработки «Вывод в табличный документ» и нажимаем либо кнопку «Далее», либо закладку «Таблицы и поля».

На закладке «Таблицы и поля» конструктора можно просмотреть существующие на данный момент таблицы в системе (левая часть озаглавленная «База данных») (Рисунок 2.66).

Рисунок 2.67 Конструктор запроса

Таблицы, данные из которых будут получаться запросом, переносятся в область «Таблицы», необходимые запросу поля переносятся в область «Поля». Сделаем это как на рисунке 2.68.

Рис 2.68 Конструктор запроса

Здесь мы убрали, создаваемое по умолчанию, поле представления - «ПРЕДСТАВЛЕНИЕ (ПоступлениеТоваровТовары.Номенклатура)»

В любой момент работы с конструктором можно смотреть получаемый текст запроса. Для выполнения этой задачи необходимо нажать кнопку «Запрос», расположенную в левом нижнем углу формы конструктора (рисунок 2.69).

Можно вручную отредактировать текст запроса, нажав на кнопку «Редактировать» .

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

Возвращаемся в процедуру ВыполнитьЗапросСервер() в обработке «КонструкторЗапроса» и из контекстного меню опять вызываем «Конструктор запроса с обработкой результата» .

Если требуется «свернуть» результат запроса, то для этой цели можно использовать закладку «Группировка» конструктора запроса.

При определении группировок необходимо придерживаться следующего правила: все поля выборки запроса делятся на поля, по которым производится группировка (свертка), поля вложенных таблиц (суммируемые поля относительно тех, по которым ведется группировка) и на агрегатные функции. Определим группировки (Рисунок 2.70).

Рисунок 2.70 Конструктор запроса

Если данные, получаемые запросом должны выбираться по какому-либо условию, то в этом случае может потребоваться задействовать закладку «Условия». Выберем ПоступлениеТоваровТовары.Количество=10 (Рисунок 2.71).

Рисунок 2.71 Условие конструктора запроса.

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

Исправить ситуацию можно двумя способами:

    Переопределив условие, отметив флаг «П...»;

    Воспользовавшись возможностью изменения самого текста запроса (получаемого при нажатии на кнопку «Редактировать Запрос»).

Само изменение вручную будет заключаться в том, что необходимо перед числом «10» убрать символ «&». Этим символом в тексте запроса определяются параметры запроса, в которые в дальнейшем (но перед выполнением запроса) должны быть записаны какие-либо значения. Нажмем на кнопку «РедактироватьЗапрос» и правим (Рисунок 2.72).

Рисунок 2.73 Редактирование запроса

На закладке «Дополнительно» можно отметить ряд флагов (касающихся ключевого слова «Выбрать» языка запросов) и определить состав таблиц предназначенных для изменения запроса (Рисунок 2.74).

Рисунок 2.74 Дополнительные функции запроса

На закладке «Объединения/Псевдонимы» можно изменить имена полей задав «Псевдонимы», но мы этого делать не будем.

На закладке «Порядок» можно определить порядок сортировки записей в результате запроса (Рисунок 2.75).

Рисунок 2.75 Порядок сортировки записей

Обратите внимание на флаг «Автоупорядочивание», он может использоваться для упорядочивания по полям ссылочного типа.

При определении раздела «Итоги» следует быть готовым к тому, что в результате запроса появится «дополнительные» итоговые записи. Вместе с этими записями результат запроса становится иерархическим (Рисунок 2.76).

Рисунок 2.76.Итоги конструктора запроса.

Допустимо указание нескольких типов итогов:

    Элементы (в выборке результата запроса присутствуют итоги по группировкам и детальные записи);

    Иерархия (в выборке результата запроса в общем случае присутствуют итоговые записи по иерархии, итоговые записи по группировке, детальные записи);

    Только иерархия (в выборке результата запроса в общем случае присутствуют итоговые записи по иерархии).

После нажатия на кнопку «Ок» конструктора, будет сформирован «Макет» и в модуле формы пропишется код процедуры ВыполнитьЗапросСервер():

&НаСервере

Процедура ВыполнитьЗапросСервер()

//{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА

// Данный фрагмент построен конструктором.

// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!

Макет = Обработки.КонструкторЗапросов.ПолучитьМакет("Макет");

Запрос = Новый Запрос;

Запрос.Текст =

| ПоступлениеТоваровТовары.Номенклатура КАК Номенклатура,

| СУММА(ПоступлениеТоваровТовары.Количество) КАК Количество,

| СУММА(ПоступлениеТоваровТовары.Сумма) КАК Сумма

| Документ.ПоступлениеТоваров.Товары

| КАК ПоступлениеТоваровТовары

| ПоступлениеТоваровТовары.Количество > 1

|СГРУППИРОВАТЬ ПО

| ПоступлениеТоваровТовары.Номенклатура

|УПОРЯДОЧИТЬ ПО

| Количество,

| Сумма УБЫВ

| СУММА(Количество),

| СУММА(Сумма)

| Номенклатура ИЕРАРХИЯ";

Результат = Запрос.Выполнить();

ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");

ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");

ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы");

ОбластьПодвалТаблицы = Макет.ПолучитьОбласть("ПодвалТаблицы");

ОбластьНоменклатураИерархия = Макет.ПолучитьОбласть("НоменклатураИерархия");

ОбластьНоменклатура = Макет.ПолучитьОбласть("Номенклатура");

ТабДок.Очистить();

ТабДок.Вывести(ОбластьЗаголовок);

ТабДок.Вывести(ОбластьШапкаТаблицы);

ТабДок.НачатьАвтогруппировкуСтрок();

ВыборкаНоменклатура = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

Пока ВыборкаНоменклатура.Следующий() Цикл

Если ВыборкаНоменклатура.ТипЗаписи() = ТипЗаписиЗапроса.ИтогПоИерархии Тогда

Область = ОбластьНоменклатураИерархия;

Область = ОбластьНоменклатура;

КонецЕсли;

Область.Параметры.Заполнить(ВыборкаНоменклатура);

ТабДок.Вывести(Область, ВыборкаНоменклатура.Уровень());

КонецЦикла;

ТабДок.ЗакончитьАвтогруппировкуСтрок();

ТабДок.Вывести(ОбластьПодвалТаблицы);

ТабДок.Вывести(ОбластьПодвал);

//}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА

Конструктор запроса - это один из инструментов разработки. Он позволяет составить текст запроса на языке запросов исключительно визуальными средствами.

С помощью кнопок Далее и Назад можно перемещаться по закладкам конструктора и указывать, какие данные должны присутствовать в результате запроса, как они связаны, сгруппированы, какие итоги следует рассчитать, работать с временными таблицами, редактировать пакет запросов:

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

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