Как создать запрос в 1с
Перейти к содержимому

Как создать запрос в 1с

  • автор:

Общая схема выполнения запросов

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

Язык запросов 1С:Предприятия 8 основан на стандартном SQL, но при этом содержит значительное количество расширений, ориентированных на финансово-экономические задачи, и значительно облегчает разработку бизнес-приложений.

Для работы с запросами в системе «1С:Предприятие 8» предусмотрено несколько специальных объектов, а именно:

  • Запрос
  • РезультатЗапроса
  • ВыборкаИзРезультатаЗапроса.

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

  1. Создание объекта «Запрос» с нужным текстом запроса на специальном языке запросов.
  2. Установка параметров запроса с помощью метода УстановитьПараметр.
  3. Выполнение запроса, получение результата.
  4. Получение выборки из результата запроса или выгрузка результата в таблицу значений / дерево значений. Также есть возможность использовать результат запроса для формирования сводной таблицы.
  5. Обработка выборки или таблицы значений (например, перебор строк) и выполнение действий, для которых был нужен запрос, например, вывод области при формировании отчета

Графически это можно представить следующим образом:

Цифрами на схеме обозначены следующие действия:

1. Установка текста запроса

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

1-й вариант:

Копировать в буфер обмена

НашЗапрос   2-й вариант (с другим текстом запроса):

Копировать в буфер обмена
НашЗапрос 

2. Установка параметров запроса

Объект "Запрос" имеет метод "УстановитьПараметр", с помощью которого в запрос передаются значения параметров. Параметры запроса обычно используются в условиях отбора (конструкции ГДЕ, ИМЕЮЩИЕ) или в качестве параметров вызова виртуальных таблиц. В тексте запроса параметры обозначаются знаком "&" (например, параметр "ВыбГруппа" в первом запросе).

В качестве параметров используются значения, которые указываются пользователем в диалоге или значения типов, для которых нет литералов, например, пустых ссылок на элементы справочников. Литералы же есть только у примитивных типов данных, а именно, число, строка, дата, булево, Null, Неопределено.

  НашЗапрос 

3. Выполнение запроса

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

Копировать в буфер обмена

РезультатЗапроса 

Далее возможны три варианта:

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

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

Объект "РезультатЗапроса" имеет метод "Выбрать()", который возвращает новый объект "ВыборкаИзРезультатаЗапроса". В зависимости от параметра метода "Выбрать()" выборка будет линейной (по умолчанию), иерархической или по группировкам. Далее выборка обходится с помощью цикла "Пока Выборка.Следующий() Цикл", а в теле цикла производятся какие-то действия, например, вывод областей в табличный документ.

Копировать в буфер обмена
Выборка   Сообщить  

5. Выгрузка результата запроса в таблицу или дерево значений

Объект "РезультатЗапроса" имеет метод "Выгрузить()", который возвращает таблицу значений или дерево значений, в зависимости от переданного параметра . Если устанавливается прямой тип обхода (по умолчанию), то будет создана таблица значений, иначе — дерево значений. Далее таблица значений (дерево значений) может быть обработана средствами встроенного языка или показана пользователю в табличном поле.

ТабЗнач ДеревоЗнач 

6. Формирование сводной таблицы

Результат запроса может быть использован как источник данных для сводной таблицы. При этом итоги (см. предложение ИТОГИ в тексте запроса) становятся ресурсами (отображаются в области данных), а группировочные поля, по которым они подсчитываются, становятся измерениями сводной таблицы. В качестве источника данных для сводной таблицы может быть также использован объект "ПостроительОтчета", но ему на вход тоже подается запрос, поэтому можно сказать, что основа любой сводной таблицы — это запрос к базе данных.

ТД СводнаяТаблица

Резюме

  • Язык запросов 1С:Предприятия 8 значительно изменился по сравнению с версией 7.7 и стал похож на стандартный SQL.
  • Для работы с запросами применяются программные объекты типа Запрос, РезультатЗапроса и ВыборкаИзРезультатаЗапроса.
  • В запросе могут быть использованы параметры, которые нужно явно передавать в запрос с помощью метода УстановитьПараметр() объекта "Запрос".
  • При выполнении запроса мы получаем объект типа "РезультатЗапроса", из которого обычно производится выборка.
  • Результат запроса может быть также выгружен в таблицу / дерево значений или использован для формирования сводной таблицы.

Как создать запрос в 1с

Вступайте в мою группу помощник программиста.
В ней мы обсуждаем программирование в 1С.

Оглавление (нажмите, чтобы раскрыть)

  • Как запросить все строки со значениями всех столбцов из таблицы
  • Как запросить все строки со значениями определенных столбцов
  • Как использовать в запросах псевдонимы для столбцов и таблиц
  • Как добавить в результат запроса столбец с определенным значением
  • Как убрать дубликаты из результата запроса
  • Как ограничить количество строк в результате запроса
  • Как отобрать из таблицы только те строки, на чтение которых у пользователя есть права
  • Скачать и выполнить эти примеры на компьютере
/// Как запросить все строки со значениями всех столбцов /// из таблицы в 1с 8.3, 8.2 &НаСервере Процедура КакЗапроситьВсеСтрокиИВсеСтолбцыИзТаблицыНаСервере() // Если нужно выбрать абсолютно все столбцы // из таблицы - используем звёздочку. Запрос = Новый Запрос( "ВЫБРАТЬ | * |ИЗ | Справочник.Номенклатура" ); ВыполнитьЗапросИВывестиНаФорму(Запрос); КонецПроцедуры /// Как запросить все строки со значениями определенных столбцов /// в 1с 8.3, 8.2 &НаСервере Процедура КакЗапроситьВсеСтрокиСЗначениямиОпределенныхСтолбцовНаСервере() // У каждого столбца в таблице есть своё имя. Запрос = Новый Запрос( "ВЫБРАТЬ | Наименование, | Вкус, | Цвет |ИЗ | Справочник.Номенклатура" ); ВыполнитьЗапросИВывестиНаФорму(Запрос); КонецПроцедуры /// Как использовать в запросах псевдонимы для столбцов и таблиц /// в 1с 8.3, 8.2 &НаСервере Процедура КакИспользоватьПсевдонимыВЗапросахНаСервере() // Псевдонимы делают текст запроса более лаконичным // и понятным. Запрос = Новый Запрос( "ВЫБРАТЬ | Продукты.Наименование КАК ИмяПродукта, | Продукты.Вкус КАК ВкусПродукта | ИЗ | Справочник.Номенклатура КАК Продукты" ); ВыполнитьЗапросИВывестиНаФорму(Запрос); КонецПроцедуры /// Как добавить в результат запроса столбец с определенным /// значением в 1с 8.3, 8.2 &НаСервере Процедура КакДобавитьВРезультатЗапросаСтолбецСОпределеннымЗначениемНаСервере() Запрос = Новый Запрос( "ВЫБРАТЬ | Наименование, | 1000 КАК Цена, | Калорийность |ИЗ | Справочник.Номенклатура" ); ВыполнитьЗапросИВывестиНаФорму(Запрос); КонецПроцедуры /// Как убрать дубликаты из результата запроса в 1с 8.3, 8.2 &НаСервере Процедура КакУбратьДубликатыИзРезультатаЗапросаНаСервере() // В справочнике Цвета есть повторящиеся элементы. // Построим запрос так, чтобы в результат попали // только различные цвета. Запрос = Новый Запрос( "ВЫБРАТЬ РАЗЛИЧНЫЕ | Наименование |ИЗ | Справочник.Цвета" ); ВыполнитьЗапросИВывестиНаФорму(Запрос); КонецПроцедуры /// Как ограничить количество строк в результате запроса /// в 1с 8.3, 8.2 &НаСервере Процедура КакОграничитьКоличествоСтрокВРезультатеЗапросаНаСервере() // Сделаем выборку первых 5 самых каллорийных продуктов. Запрос = Новый Запрос( "ВЫБРАТЬ ПЕРВЫЕ 5 | Наименование, | Калорийность |ИЗ | Справочник.Номенклатура |УПОРЯДОЧИТЬ ПО | Калорийность УБЫВ" ); ВыполнитьЗапросИВывестиНаФорму(Запрос); КонецПроцедуры /// Как отобрать из таблицы только те строки, /// на чтение которых у пользователя есть права в 1с 8.3, 8.2 &НаСервере Процедура КакВыбратьТолькоРазрешенныеСтрокиНаСервере() // Эта возможность нужна для баз, в которых // включено ограничение прав на уровне записей (RLS). // Например, мы хотим, чтобы конкретный пользователь ни // при каких условиях не смог прочитать документы // другой организации, которые хранятся в этой же базе. // Вот и получается, что на некоторые записи (строки) таблицы // документов ему надо дать права на чтение, а не некоторые нет. // Если данное слово не указать, то в случае, когда запрос // выберет записи, на которые у пользователя нет прав, // запрос отработает с ошибкой. Запрос = Новый Запрос( "ВЫБРАТЬ РАЗРЕШЕННЫЕ | Ссылка | ИЗ | Документ.ПродажаЕды" ); ВыполнитьЗапросИВывестиНаФорму(Запрос); КонецПроцедуры /// Скачать и выполнить эти примеры на компьютере

Основы запросов в языке 1С 8.3, 8.2 (в примерах)

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

Создание и работа с запросами (для начинающих)

Сегодня хочу вам рассказать о том, как начать работать с запросами и научиться (конечно постепенно) – работе с запросами в 1С. Тем, кто знаком с запросами MS
SQL будет конечно намного проще.

Итак, давайте откроем конфигуратор и создадим новую внешнюю обработку.

После чего мы получим окошко с нашей обработкой. Давайте приступим непосредственно к экспериментам по запросам, для этого создадим в нашей обработке – новую форму – а для этого в списке (белое поле) выберите Формы – и нажмите (+) Добавить, соглашайтесь со всеми предложенными параметрами формы по умолчанию, и нажимайте готово.

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

и пишем следующий код:

Процедура КнопкаВыполнитьНажатие(Кнопка) Запрос = Новый Запрос(); Запрос.Текст = "ВЫБРАТЬ | *  | ИЗ  | Документ.СчетНаОплатуПокупателю"; Результат = Запрос.Выполнить().Выгрузить(); КонецПроцедуры 

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

Ключевым словом «Выбрать» мы приказываем нашему запросу выбрать все поля(*) (реквизиты документа) из документа «СчетНаОплатуПокупателю».

Важно:
Хочу заметить также, что при написании языка запроса – обращаться к объектам конфигурации следует в единственном, а не во множественном числе. В данном
случае объект Документы в конфигурации (ветка Документы) – в запросе написан Документ. Также к составу документов – мы добираемся через точку(.) – и название документа.

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

Далее сохраняем нашу обработку в файл, для этого нажимаем Файл->Сохранить как и пишем имя файла, для своей обработки я задал имя «ВнешняяОбработка1Демо», чтобы долго не искать обработку можете сохранить ее на рабочий стол, дальше нам придется ее открывать)).

Теперь давайте изучим немного основы отладки. Для этого сейчас на поле рядом с текстом Результат = … дважды щелкните левой клавишей мыши, чтобы появилась красный кружок, у вас должно получиться нечто следующее:

Итак, мы сейчас с вами установили точку останова на строке с результатом, теперь давайте запустим конфигурацию на отладку, нажав клавишу ( F 5) либо кнопку
на панели инструментов:

Теперь в запущенном нами режиме 1С:Предприятия откроем нашу сохраненную обработку Файл->Открыть и найдите то место, куда вы сохраняли файл обработки, выберите его и нажмите открыть. Жмем в нашей обработки кнопку «Выполнить». Если вы все сделали правильно – вы автоматически перейдете в режим конфигуратора и в месте установки нашей точки останова увидите следующее:

На нашем кружке появилась стрелочка – мы перешли в пошаговое выполнение нашего кода, и далее мы увидим самое интересное. Если вы все правильно сделали – сейчас вы сможете получить результат выполнения запроса.

Для наглядного представления запроса сделаем следующее: В верхнем меню конфигуратора находим меню Отладка и выбираем команду Табло.

Внизу окна конфигуратора откроется пустое окошечко ->Табло. В этом окне есть строки, пустые. Дважды щелкните на пустую подсвеченную строку и напишите слово Результат. У вас должно получиться следующее:

Итак, в указанном нами окне мы должны получить результат выполнения нашего кода, а именно сейчас – переменной «Результат», так как мы сейчас еще не выполнили данную строку кода – мы имеем пустое значение и тип данных переменной – «Неопределено».

Давайте сделаем шаг – для выполнения указанной строки кода. Для этого нажмите клавишу , либо в меню Отладка->Шагнуть через…( F 10).

И что же мы видим в нашем Табло:

Мы видим с вами – значение переменной и тип переменной. Теперь также мы можем просмотреть содержание нашей таблицы значений, для этого подведите курсор мыши к полю результат, нажмите правую клавишу мыши и выберите пункт «Показать значение в отдельном окне»

Получаем окно с выбранными нами документами, которые находятся в переменной Результат

Резюмирую:

Вы научились создавать простейший запрос, а также поучаствовали в отладке своего кода и даже посмотрели результат нашего запроса в конфигураторе.

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

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

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

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

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

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

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

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *