Запросы в системе 1С.Как создать запрос?
Необходимая информативность приложений (конфигураций) на современной платформе 1С достигается за счет многих факторов, в число которых входит предоставление пользователю возможности создавать и активировать запросы к различным составляющим базы данных программы (справочники, регистры, отдельные таблицы, константы) с целью получения требуемой информации без дополнительной ее коррекции.
Нужно отметить, что данная функция относится к разделу программирования и подразумевает формирование структуры (формата) запроса с использованием соответствующего языка, который включает в себя лексические конструкции SQL.
Общая методика создания требуемого запроса
При составлении запроса обязательно указывать и заполнять следующие разделы (строки):
- Пункт«ВЫБРАТЬ» должен содержать поля, которые будут использоваться в процессе поиска необходимых данных, но при наличии в командной строке символа «*» — автоматически будут выбраны доступные поля.
- Пункт«ИЗ» служит для указания месторасположения документов, справочников, регистров, других источников, из которых предполагается осуществлять получение требуемой информации.
- Пункт«ГДЕ»предназначен для сортировки полученных данных, при этом указываются соответствующие ключевые слова или словосочетания, после чего программой производится отсеивание неинформативных строк по результатам поиска.
Вот один из примеров ранее составленных, корректных запросов:
Выше был приведен простейший принцип создания запросов с использованием минимального количества служебных слов. На самом деле, существует большое множество основных и вспомогательных специальных операторов (например, «СОЕДИНЕНИЕ», «СГРУППИРОВАТЬ», «ИТОГИ»), позволяющих формировать запросы на более высоком уровне программирования в ручном режиме.
Для упрощения работы в среде 1С без помощи узкоспециализированных работников (программистов, разработчиков компании), последние версии платформы (8.2 и 8.3) содержат встроенный конструктор запросов, который не требует прямого набора служебных команд и позволяет исключить использование клавиатуры (достаточно компьютерного манипуляторного – «мыши»).
В левом нижнем углу конструктора размещена виртуальная кнопка «Запрос», с помощью которой пользователь в любой момент просмотреть уже составленный текст запроса.
Механизм запросов
Механизм запросов — это один из способов доступа к данным, которые поддерживает платформа. Используя этот механизм, разработчик может читать и обрабатывать данные, хранящиеся в информационной базе; изменение данных с помощью запросов невозможно. Это объясняется тем, что запросы специально предназначены для быстрого получения и обработки некоторой выборки из больших массивов данных, которые могут храниться в базе данных.
Табличный способ доступа к данным
Запросы реализуют табличный способ доступа к данным, которые хранятся в базе данных. Это означает, что все данные представляются в виде совокупности связанных между собой таблиц, к которым можно обращаться как по-отдельности, так и к нескольким таблицам во взаимосвязи:

Такой способ работы с данными позволяет получать сложные выборки данных, сгруппированные и отсортированные определенным образом. Для этих выборок могут быть рассчитаны общие и промежуточные итоги, наложены ограничения на количество или состав записей и пр.
Язык запросов
Для того чтобы разработчик имел возможность использовать запросы для реализации собственных алгоритмов, в платформе реализован язык запросов. Этот язык основан на SQL, но при этом содержит значительное количество расширений, ориентированных на отражение специфики финансово-экономических задач и на максимальное сокращение усилий по разработке прикладных решений. Можно перечислить наиболее существенные возможности, реализуемые языком запросов:
Обращение к полям через точку (».»)
Если поля какой-либо таблицы имеют ссылочный тип (хранят ссылки на объекты другой таблицы), разработчик может в тексте запроса ссылаться на них через «.», при этом количество уровней вложенности таких ссылок система не ограничивает.

Обращение к вложенным таблицам (табличным частям документов и элементов справочников)
Система поддерживает обращения к вложенным табличным частям и как к отдельным таблицам, и как к целым полям одной таблицы. Например, при обращении к документу Реализация товаров (содержащему табличную часть Товары с составом отгружаемых товаров), мы можем считать табличную часть как отдельную таблицу:

Но также мы можем считать заголовочную запись документа, в которой значением поля Товары будут все записи вложенной таблицы, подчиненные этому объекту (документу):

Автоматическое упорядочивание
Для выбора наиболее правильного («естественного») порядка вывода информации на экран или в отчет разработчику в большинстве случаев достаточно задать режим автоматического упорядочивания.

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

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

Стандартные SQL операции
В языке запросов поддерживаются стандартные для SQL операции, такие, как объединение (Union), соединение (Join) и т. д.

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

Запрос, использующий временную таблицу, будет иметь вид:

Пакетные запросы
Для более удобной работы с временными таблицами в языке запросов поддерживается работа с пакетными запросами — таким образом, создание временной таблицы и ее использование помещаются в один запрос. Пакетный запрос представляет собой последовательность запросов, разделенных символом «;». Запросы исполняются один за другим. Результатом выполнения пакетного запроса в зависимости от используемого метода будет являться либо результат, возвращаемый последним запросом пакета, либо массив результатов всех запросов пакета в той последовательности, в которой следуют запросы в пакете.

Конструкторы запроса
Для облегчения труда разработчика технологическая платформа содержит два специальных конструктора. Они служат для того, чтобы помочь разработчику составить правильный текст запроса, используя только визуальные средства. Выбирая мышью нужные поля таблиц, разработчик может составить работоспособный запрос, даже не зная синтаксиса языка запросов.
- Конструктор запроса позволяет составить только текст запроса. Подробнее…
- Конструктор запроса с обработкой результата помимо текста запроса формирует фрагмент программного кода, который исполняет запрос и выводит результаты в табличный документ или диаграмму. Подробнее…
Консоль запросов
Инструмент «Консоль запросов» позволяет разработчикам конфигураций и специалистам по внедрению отлаживать запросы и просматривать результаты их выполнения в режиме «1С:Предприятие 8». Подробнее…
Как написать запрос в 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с
Программирование 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С Вы можете изучить любой существующий запрос. Для этого нажмите правой кнопкой на текст существующего запроса и выберите также конструктор запросов 1С – и запрос будет открыт в конструкторе запросов 1С.
Проголосовать за этот пост:
