1с как работать с запросами

Обновлено: 05.07.2024

Запросы предназначены для извлечения и обработки информации из базы данных для предоставления пользователю в требуемом виде. Под обработкой здесь подразумевается группировка полей, сортировка строк, расчет итогов и т.д. Изменять данные с помощью запросов в 1С нельзя!

Схема работы с запросом

Общая схема работы с запросом состоит из нескольких последовательных этапов:

  1. Создание объекта Запрос и установка текста запроса;
  2. Установка параметров запроса;
  3. Выполнение запроса и получение результата;
  4. Обход результата запроса и обработка полученных данных.

1. Объект Запрос имеет свойство Текст, которому необходимо присвоить текст запроса.

3. После присвоения текста и установки параметров запрос необходимо выполнить и получить результат выполнения. Выполнение производится методом Выполнить () , который возвращает объект РезультатЗапроса. Из результата запроса можно:

  • получить выборку с помощью метода Выбрать (< ТипОбхода >, < Группировки >, < ГруппировкиДляЗначенийГруппировок >) ;
  • выгрузить значения в таблицу значений или дерево значений с помощью метода Выгрузить (< ТипОбхода >) .

// Получение выборки
РезультатЗапроса = Запрос . Выполнить ();
Выборка = РезультатЗапроса . Выбрать ();

// Получение таблицы значений
РезультатЗапроса = Запрос . Выполнить ();
Таблица = РезультатЗапроса . Выгрузить ();

4. Обойти выборку результата запроса можно с помощью цикла:

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

Полный пример работы с запросом может выглядеть так:

Состав текста запроса

Текст запроса состоит из нескольких секций:

Обязательной является только первая секция.

Временные таблицы и пакетные запросы

Часто можно столкнуться с ситуацией, когда в качестве источника запроса нужно использовать не таблицы базы данных, а результат выполнения другого запроса. Эту задачу можно решить с помощью вложенных запросов или временных таблиц. Применение временных таблиц позволяет упростить текст сложного запроса, разделив его на составные части, а также, в некоторых случаях, ускорить выполнение запроса и уменьшить количество блокировок. Для работы с временными таблицами используется объект МенеджерВременныхТаблиц. Создание временной таблицы производится при помощи ключевого слова ПОМЕСТИТЬ, за которым следует наименование временной таблицы.

Виртуальные таблицы

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

При работе с виртуальными таблицами следует накладывать отборы в параметрах виртуальных таблиц, а не в условии ГДЕ. От этого сильно зависит время выполнения запроса.

Конструктор запроса

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

Вызов конструктора запроса

Также конструкторы можно вызвать из главного меню Текст.

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

Конструктор запроса с обработкой результата кроме формирования текста запроса создает готовый фрагмент кода для получения и обработки данных.

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

Объект СхемаЗапроса

Платформа позволяет программно создавать и редактировать текст запроса при помощи объекта СхемаЗапроса. Объект имеет единственное свойство ПакетЗапросов, в котором объекта хранятся свойства всех запросов, редактируемых в данный момент. Объект СхемаЗапроса поддерживает следующие методы:

Рассмотрим пример работы с объектом СхемаЗапроса. Для программного формирования текста запроса

ВЫБРАТЬ
Валюты.Ссылка КАК Валюта,
Валюты.Код
ИЗ
Справочник.Валюты КАК Валюты
ГДЕ
НЕ Валюты.ПометкаУдаления

УПОРЯДОЧИТЬ ПО
Валюты.Код

Код на встроенном языке может выглядеть так:

Остались вопросы?
Спросите в комментариях к статье.

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

1. 1.Обработка пустого результата в самом запросе.

Что это даёт: в результате работы запрос может возвращать значение типа «Null». В этом случае работа с результатом запроса выдаст ошибку, т.к. значение типа "Null" не может быть преоблазовано к значению другого вида (число, строка и др.). Функция ЕСТЬNULL() прямо в запросе произведёт проверку возвращаемого результата. Такой приём позволяет несколько разгрузить клиентскую часть, в случае многократного использования запроса вынесенного в общий модуль позволит сократить строки кода.

2.Построение многовариантного запроса.

Что это даёт: выполнение над текстом запроса операции «СтрЗаменить» до команды «Запрос.Выполнить()» позволяет сделать универсальный и легко читаемый запрос над разными схожими по структуре регистрами. Конечно, можно было вынести имя регистра в переменную ну например «ИмяРегистра» тогда-бы запрос имел вид :

Но в этом случае мы теряем возможность правки текста запроса посредством конструктора запросов, что в случае сложных запросов является серьёзным недостатком

3. Использование функции Значение.

Что это даёт: если этот запрос отбирает только один вид контакта, то нет необходимости передавать вид контакта в качестве параметра в запрос.

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

4. Выгрузка результатов запроса в табличную часть.

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

5. Добавление необходимых значений в результат запроса.

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

Что это даёт: читабьельность не теряется, запрос удобнее читается «с экрана», за счёт ухода от использования в запросе обращения к дополнительным таблицам, время выполнения запроса меньше.

6. Передача массива в качестве параметра.

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

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

Текст, демонстрирующий сразу несколько приёмов, текст кода находится в модуле объекта документа (естественно в оригинале код немного сложнее и движения выполняются по нескольким регистрам), код написан для платформы 1С8.2 :

Что делает этот код: процедура "ОбработкаПроведения" вызывает процедуру "ВыполнитьДвиженияОстаткиНоменклатуры" (Далее просто процедура) . Процедура выполняет запрос, с единственным параметром "Ссылка" (это ссылка на наш документ - выполняющий функцию регистратора движений регистра ). Запрос возвращет весь перечень номенклатуры документа кроме номеклатуры имеющей тип "Услуга", результат запроса выгружается в таблицу и из таблицы загружается в регистр " РегистрыНакопления.ОстаткиНоменклатуры "(вид регистра - регистр остатков).

Справочно, структура регистра:

Количество - Число 15.3


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

ОплатаНаСчет = Документы . ОплатаНаСчет . СоздатьДокумент ( ) ;

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

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

Язык запросов 1С и SQL

Язык запросов 1С очень сильно похож на язык SQL, если вы уже знакомы с языком SQL, то вам легко будет разобраться в языке запросов 1С.

Рассмотрим основные отличия:

  • В языке запросов 1С можно только выбирать данные из базы. Грубо говоря из SQL реализована только конструкция SELECT
  • В 1С в качестве выходного поля нельзя использовать другой запрос, зато можно выбрать табличную часть (будет представлена в виде вложенной таблицы)
  • Из языка запросов 1С нельзя обращаться к хранимым процедурам (stored procedure) и представлениям (view) СУБД
  • Зато в языке запросов 1С можно разыменовывать поля, например: Оплата.Контрагент.Наименование
  • В 1С добавлена конструкция ИТОГИ
  • Из языка запросов 1С нет доступа к таблицам СУБД. Есть только доступ к таблицам, которые предоставляет платформа 1С. А уже платформа транслирует запрос на языке запросов 1С в запрос на языке SQL.
  • В языке запросов 1С можно использовать как русский язык, так и английский.

Консоль запросов

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

Консоль запросов выглядит так:


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



Мы не будем им пользоваться, чтобы лучше разобраться в языке запросов. Хотя на практике им очень удобно пользоваться. Но выучив язык запросов вы без труда разберетесь с ним сами.

Ссылки на консоль запросов:

Привет мир

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

Как применять конструктор запросов 1С

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


В конфигураторе поочередно выполняются следующие действия:

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


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

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


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


«Группировка». В этом разделе строки группируются по определенным полям, а с числовыми реквизитами проводятся простые арифметические операции. В тексте запроса данные расположены в разделе «Сгруппировать по».


«Условия». В этом разделе выставляются дополнительные условия на данные, которые оказываются в результате выборки. В тексте присутствует после оператора «Где».


  • «первые» предоставляет возможность выбирать конкретное количество записей (в тексте определяется, как «Первые N»);
  • «без повторяющихся» - исключает в конечной выборке наличие повторяющихся строк (в тексте определяется, как «Различные»);
  • «разрешенные» - запускает учет настроенных прав доступа в случае выполнения запроса (оператор «Разрешенные»);
  • определение типа запроса из трех возможных вариантов – обычной выборки, формирования или ликвидации временной таблицы;
  • блокировка данных (предназначается для автоматического режима блокировок в целях сохранения целостности информации на период от чтения до записи).


«Объединения/Псевдонимы». С левой стороны пользователь видит перечень запросов, а с правой он может менять имя реквизита или совмещать данные из группы запросов. Эти настройки находятся в виде текста по операторам «Как» и «Объединить».


В этом разделе сортируются итоговые записи. Он связан с оператором «Упорядочить по».


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

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


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

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


У конструктора есть еще одна опция, но используется она сравнительно редко. Это вывод итогов. В разделе «Итоги» пользователь задает необходимые ему арифметические расчеты с числовыми полями. В текстовом виде эта настройка отображается в виде оператора «Итоги по».


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

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


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

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

Читайте также: