Конструктор запросов 1с 8.3 как запустить. Язык запросов – быстро и легко! Конструктор запросов. Грамотный запрос – эффективная оптимизация работы

Программирование 1С состоит не только из написания программы. 1С это слиток действий пользователя и данных с которыми он работает.

Данные хранятся в базе данных. Запросы 1С – это способ доставать данные из базы данных для того, чтобы показать пользователю в форме или чтобы обработать их.

Основополагающая часть отчета – это запрос 1С. В случае отчета СКД – это большая часть отчета.

Сядьте. Вздохните. Успокойтесь. Сейчас я скажу Вам новость.

Чтобы программировать в 1С недостаточно знать язык программирования 1С. Нужно еще знать язык запросов 1С.

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

Он тоже двуязычен – то есть можно писать на русском или на английском. Он исключительно похож на язык запросов SQL и тем, кто знает такой – можно расслабиться.

Как используются Запросы 1С

Когда пользователь запускает 1С в режиме Предприятие – в запущенном клиенте нет ни грамма данных. Поэтому когда нужно открыть справочник – 1С запрашивает данные из базы данных, то есть делает запрос 1С.

Запросы 1С бывают:

  • Автоматические запросы 1С
    Формируются автоматически системой. Вы создали форму списка документов. Добавили колонку. Это значит, что при открытии этой формы в режиме Предприятие будет запрос и будут запрошены данные по этой колонке.
  • Полуавтоматические запросы 1С
    Есть множество методов (функций) в языке 1С, при обращении к которым происходит запрос к базе данных. Например.ПолучитьОбъект()
  • Ручные запросы 1С (написанные программистом специально как запрос)
    Вы можете написать запрос 1С самостоятельно в коде и выполнить его.

Создание и выполнение запросов 1С

Запрос 1С – это собственно текст запроса на языке запросов 1С.
Текст можно написать ручками. То есть взять и написать (если знаешь этот язык).

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

После того как готов текст запроса 1С – его нужно выполнить. Для этого есть объект в коде 1С Запрос(). Вот пример:

Запрос = Новый Запрос();
Запрос.Текст = "ВЫБРАТЬ
| Номенклатура.Ссылка
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.Услуга";
Выборка = Запрос.Выполнить().Выбрать();

Сообщить(Выборка.Ссылка);
КонецЦикла;

Как Вы видите в примере – после выполнения запроса 1С к нам приходит результат и мы должны его обработать. Результат – это одна или несколько строчек таблицы (в специальном виде).

Результат можно выгрузить в обычную таблицу:
Выборка = Запрос.Выполнить().Выгрузить(); //Результат – таблица значений

Или просто обойти по строчкам.
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
//Что-то делаем с результатами запроса
КонецЦикла;

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

Основные принципы запросов 1С

Основные принципы построения запроса 1С –
ВЫБРАТЬ СписокПолей ИЗ НазваниеТаблицы ГДЕ Условия

Пример построения такого запроса 1С:

ВЫБРАТЬ
//список полей, которые надо выбрать
Ссылка,
Наименование,
Код
ИЗ
//наименование таблицы, откуда выбираем данные
//список таблиц – это список объектов в окне конфигуратора
Справочник.Номенклатура
ГДЕ
//указываем отбор
ВидТовара = &Услуга //отбор по внешнему значению
Или Услуга // «Услуга» реквизит типа Булево, отбор по значению Истина
УПОРЯДОЧИТЬ ПО
//Сортировка
Наименование

Список таблиц 1С

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

Для регистров есть дополнительные таблицы (виртуальные), которые позволяют получить итоговые цифры.

РегистрСведений.ИмяРегистра.СрезПоследних(&Дата) – запрос 1С из регистра сведений, если он является периодическим, на определенную дату

РегистрНакопления.ИмяРегистра.Остатки(&Дата) – запрос 1С из регистра остатков на определенную дату

РегистрНакопления.ИмяРегистра.Обороты(&ДатаНачала, &ДатаОкончания) – запрос 1С из регистра оборотов за период с даты начала по дату окончания.

Дополнительные принципы

Когда мы запрашиваем список каких то данных – работают основные принципы. Но мы можем запросить также цифры и запрос может нам их посчитать (сложить например).

ВЫБРАТЬ
//Количество(ИмяПоля) – считает количество
//Поле КАК ДругоеИмя – переименовывает поле
Количество(Ссылка) КАК КоличествоПроведенныхДокументов
ИЗ

ГДЕ
Проведен

Этот запрос 1С вернет нам общее количество документов. Однако в каждом документе есть поле Организация. Допустим мы хотим посчитать с помощью запроса 1С количество документов по каждой организации.

ВЫБРАТЬ
//просто поле документа
Организация,
//считаем количество
Количество(Ссылка) КАК КоличествоПоОрганизациям
ИЗ
Документ.РеализацияТоваровУслуг
ГДЕ
Проведен
СГРУППИРОВАТЬ ПО

Организация

Этот запрос 1С вернет нам количество документов по каждой организации (также говорят «в разрезе организаций»).

Посчитаем дополнительно с помощью запроса 1С сумму этих документов:

ВЫБРАТЬ
//просто поле документа
Организация,
//считаем количество

//считаем сумму

ИЗ
Документ.РеализацияТоваровУслуг
ГДЕ
Проведен
СГРУППИРОВАТЬ ПО
//необходимо использовать, если в списке полей есть функция подсчета() и одновременно одно или несколько полей – тогда нужно группировать по этим полям
Организация

Этот запрос 1С вернет нам также сумму документов.

ВЫБРАТЬ
//просто поле документа
Организация,
//считаем количество
Количество(Ссылка) КАК КоличествоПоОрганизациям,
//считаем сумму
Сумма(СуммаДокумента) КАК Сумма
ИЗ
Документ.РеализацияТоваровУслуг
ГДЕ
Проведен
СГРУППИРОВАТЬ ПО
//необходимо использовать, если в списке полей есть функция подсчета() и одновременно одно или несколько полей – тогда нужно группировать по этим полям
Организация
ИТОГИ ПО Общие

Язык запросов 1С обширен и сложен и мы не будем рассматривать в одном уроке все его возможности – читайте наши следующие уроки.

Кратко о дополнительных возможностях языка запросов 1С:

  • Соединение данных из нескольких таблиц
  • Вложенные запросы
  • Пакетный запрос
  • Создание собственных виртуальных таблиц
  • Запрос из таблицы значений
  • Использование встроенных функций получения значения и манипулирования значениями.

Конструктор запросов 1С

Чтобы не писать текст запроса руками – существует конструктор запросов 1С. Просто нажмите правой кнопкой мыши в любом месте модуля и выберите Конструктор запроса 1С.

Выберите в конструкторе запросов 1С нужную таблицу слева и перетащите правее.

Выберите в конструкторе запросов 1С из таблицы нужные поля и перетащите правее. Если Вы хотели бы не просто выбрать поле, а применить к нему какую либо функцию суммирования – после перетаскивания щелкните по полю два раза мышкой. На закладке Группировка после этого нужно будет выбрать (перетащить) для группировки нужные поля.

На закладке Условия в конструкторе запросов 1С Вы можете выбрать нужные отборы таким же способом (перетащив поля, по которым Вы будете делать отбор). Не забудьте выбрать верное условие.

На закладке Порядок – указывается сортировка. На закладке Итоги – суммирование итогов.

С помощью конструктора запросов 1С Вы можете изучить любой существующий запрос. Для этого нажмите правой кнопкой на текст существующего запроса и выберите также конструктор запросов 1С – и запрос будет открыт в конструкторе запросов 1С.

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

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

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

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

Одним из самых мощных инструментов 1С Предприятия 8, без сомнения, является Конструктор запросов. Конструктор является визуальным средством для работы с запросами на языке 1С. Но конструктор имеет один большой недостаток – он не показывает результат выполнения запросов. Данный недостаток особенно ощущается начинающими разработчиками прикладных решений на платформе 1С:Предприятие 8.3 и 8.2.

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

Для всех этих и многих других случаев мы рады вам предложить внешнюю обработку Консоль запросов с возможностью обработки результатов для 1С 8.3 и 1С 8.2 !


Основные возможности Консоли запросов для 1С 8.3 и 1С 8.2 :

Универсальная обработка, запускается на любой конфигурации платформ 1С: Предприятие 8.1 – 8.3;
- запускается в режиме 1С:Предприятие;
- запрос можно писать вручную, а можно вызвать Конструктор запроса;
- показывает результат выполнения запроса;
- можно указывать параметры отчета непосредственно в Консоли запросов;
- умеет сохранять и загружать файлы запросов.

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


Внешняя обработка Консоль запросовповторяет привычный интерфейс и большинство функциональных возможностей стандартного инструментария составления запросов системы 1С:Предприятия 8.3 и 8.2. Она также позволяет получать результаты запросов, пакетных запросов и временных таблиц.

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

ВАЖНО! Конструктор запроса в тонком клиенте не работает, данный пункт меню открытия Конструктора недоступен. В толстом клиенте Конструктор запроса доступен!


В тонком клиенте мы можем только писать запросы руками, все остальные функции работают без изменений.

Конструктор запросов в 1С 8.3 и 8.2 — мощнейший инструмент разработки. Он позволяет составить текст запроса при помощи специальной визуальной среды. Таким образом, чтобы создать запрос 1с не обязательно знать встроенный язык запросов, достаточно ориентироваться в не сложном и интуитивно понятном интерфейсе конструктора.

Конструктор запросов представляет из себя набор вкладок, каждая из которых отвечает за свою часть запроса. Так заполняя вкладку Таблицы и поля мы выбираем таблицы из которых запрос 1с будет получать данные и поля этих таблиц необходимые для решения конкретной задачи. Заполняя в кладку Условия мы накладываем условия на выбранные таблицы, для того чтобы выбрать из них только нужные нам данные и так далее.

Описание конструктора запросов на официальном сайте 1С 8: v8.1c.ru

Таблицы и поля; ; ; ; ; ; Вложенные запросы (в разработке).

Для того чтобы вызвать конструктор запросов 1с 8 в программном коде необходимо:

  • Создать новый запрос
Запрос = Новый Запрос;
  • Задать пустую строку текста запроса
Запрос.Текст = "";
  • Поставить курсор мышки между кавычками, нажать правую кнопку мыши. В открывшемся контекстном меню выбрать пункт Конструктор запроса и ответить Да на вопрос о создании нового запроса. Если текст запроса уже записан, то необходимо щелкнуть на любом месте внутри него и вызвать конструктор;

Рассмотрим на небольших примерах с возрастающей сложностью все основные вкладки конструктора запросов. Такой подход позволит начинающему программисту 1с более эффективно изучить конструктор и все его возможности. Для примеров будем использовать конфигурацию Бухгалтерия 3.0.

Урок №1. Конструктор запросов — простейший пример использования.

Задача: написать запрос к справочнику номенклатура, выбрать всю номенклатуру справочника.

Новые вкладки: Таблицы и поля.

Новые механизмы: просмотр и редактирование текста запроса при помощи кнопки «Запрос».

Для начала создания запроса создадим новый запрос и вызовем конструктор (как это делается написано несколькими абзацами выше). После этого откроется окно конструктора на вкладке Таблицы и поля.

Теоретическая часть урока №1

Вкладка Таблицы и поля состоит из трех разделов:

База данных . В данном разделе представлены все таблицы базы данных, которые можно использовать для построения запроса;

Таблицы . В данный раздел выбираются таблицы необходимые для данного запроса. Для тогда чтобы переместить их из раздела база данных нужно:

  • Либо дважды щелкнуть по таблице;
  • Либо воспользоваться кнопками «>» или «>>».

Над разделом Таблицы присутствует ряд кнопок. Про большинство из них будет подробнее рассказано в следующих уроках. А пока дам только краткие пояснения.

  • Создать вложенный запрос (красная линия). Предназначена для создания нового вложенного запроса;
  • Создать описание временной таблицы (желтая линия). Позволяет задать имя временной таблицы, которая расположена вне данного запроса, также можно использовать для передачи в запрос таблицы значений;
  • Изменить текущий элемент (зеленая линия). Позволяет перейти в выделенный вложенный запрос, временную таблицу или описание временной таблицы;
  • Удалить текущий элемент (голубая линия). Удаляет выделенную таблицу из выбранных таблиц;
  • Заменить таблицу (синяя линия). Открывает диалог замены выделенной таблицы. Полезно, если вы неверно выбрали виртуальную таблицу регистра, так как происходит позиционирование на текущей выбранной таблице в списке.
  • Параметры виртуальной таблицы (фиолетовая линия). Открывает параметры виртуальной таблицы регистра.

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

  • Либо дважды щелкнуть по полю;
  • Либо воспользоваться кнопками «>» или «>>»;
  • Также можно добавить новое поле самостоятельно, используя произвольное выражение из полей выбранных таблиц и функций языка запросов.

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

  • Добавить (зеленая линия). Предназначена для добавления нового поля при помощи редактора произвольных выражений;
  • Изменить текущий элемент (красная линия). Позволяет изменить выделенное поле при помощи редактора;
  • Удалить текущий (синяя линия). Удаляет выделенное поле из списка.

Практическая часть урока №1

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

Приступим к созданию запроса по номенклатуре:

  • Создадим новый запрос и откроем конструктор методом указанным в начале урока;
  • В разделе База данных , откроем ветку Справочники и найдем там справочник Номенклатура;
  • Выделим его и при помощи кнопки «>» перенесем в раздел Таблицы;
  • В разделе Таблицы раскроем справочник номенклатура при помощи значка «+»;
  • В раскрывшемся списке полей найдем поле Ссылка и перенесем его в раздел Поля при помощи кнопки «>»
  • Запрос по номенклатуре готов, нажимаем кнопку «ОК» в нижней части окна конструктора.

Запросы в 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 позволяет осуществлять запуск в режиме Предприятия и формулировать сами запросы в ручном режиме или через вызов функции через консоль. Предварительно можно уже оценить, каким будет итог выполнения, файлы можно сохранять.