1С 8.3 Запросы
Данные > Примеры кода 1С > 1С 8.3 Запросы
Запрос в 1С 8.3 - это конструкция кода на структурированном языке для получения информации из базы данных. Язык запросов является более простым аналогом языка SQL/T-SQL, но в отличии от своего "родителя", используется только для чтения данных. Для работы с языком запросов 1С 8.3 используется метод Выбрать, а для получения результата - метод Выполнить().
Для оптимизации кода запроса используются определенные операторы и специальные агрегатные функции: группировка, объединение, соединение, упорядочивание, итоги, параметры, условия, функции и др. Для разработчиков, имеется инструмент, встроенный в конфигуратор - это конструктор запросов, который имеет простой и интуитивно понятный интерфейс. Запуск конструктора запроса производится правой кнопкой мыши в нужном месте программного кода 1С 8.3. Для упрощения работы с запросами, можно также использовать консоль запросов. В виде картинки можно скачать Шпаргалку по языку запросов 1С.
Важно! В запросе рекомендуется проверка на пустой результат выполнения запроса: https://its.1c.ru/db/v8std/content/438/hdoc
Оглавление:
Получение запросом всех строк со значениями всех столбцов из таблицы в 1С 8.3:
&НаСервере
Процедура ПолучениеЗапросомВсехСтрокСоЗначениямиВсехСтолбцовИзТаблицы()
// Звездочка используется, когда нужно выбрать все столбцы из таблицы
Запрос = Новый Запрос("ВЫБРАТЬ
| *
|ИЗ
| Справочник.Материалы");
РезультатЗапроса = Запрос.Выполнить();
Если Не РезультатЗапроса.Пустой() Тогда // Такая проверка рекомендуется фирмой 1С
Записи = РезультатЗапроса.Выбрать();
Пока Записи.Следующий() Цикл
// Обход результата запроса по каждой записи в полученной выборке
КонецЦикла;
Иначе // Например: Сообщить("Данные отсутствуют!");
КонецЕсли;
КонецПроцедуры
Процедура ПолучениеЗапросомВсехСтрокСоЗначениямиВсехСтолбцовИзТаблицы()
// Звездочка используется, когда нужно выбрать все столбцы из таблицы
Запрос = Новый Запрос("ВЫБРАТЬ
| *
|ИЗ
| Справочник.Материалы");
РезультатЗапроса = Запрос.Выполнить();
Если Не РезультатЗапроса.Пустой() Тогда // Такая проверка рекомендуется фирмой 1С
Записи = РезультатЗапроса.Выбрать();
Пока Записи.Следующий() Цикл
// Обход результата запроса по каждой записи в полученной выборке
КонецЦикла;
Иначе // Например: Сообщить("Данные отсутствуют!");
КонецЕсли;
КонецПроцедуры
Получение запросом всех строк со значениями определенных столбцов в 1С 8.3:
&НаСервере
Процедура ПолучениеЗапросомВсехСтрокСоЗначениямиОпределенныхСтолбцов()
// У каждого столбца в таблице есть своё соответствующее имя
Запрос = Новый Запрос("ВЫБРАТЬ
| Наименование,
| Производитель,
| СрокИспользования
|ИЗ
| Справочник.Материалы");
РезультатЗапроса = Запрос.Выполнить();
Если Не РезультатЗапроса.Пустой() Тогда // Такая проверка рекомендуется фирмой 1С
Записи = РезультатЗапроса.Выбрать();
Пока Записи.Следующий() Цикл
// Обход результата запроса по каждой записи в полученной выборке
КонецЦикла;
Иначе // Сообщить("Данные отсутствуют!");
КонецЕсли;
КонецПроцедуры
Процедура ПолучениеЗапросомВсехСтрокСоЗначениямиОпределенныхСтолбцов()
// У каждого столбца в таблице есть своё соответствующее имя
Запрос = Новый Запрос("ВЫБРАТЬ
| Наименование,
| Производитель,
| СрокИспользования
|ИЗ
| Справочник.Материалы");
РезультатЗапроса = Запрос.Выполнить();
Если Не РезультатЗапроса.Пустой() Тогда // Такая проверка рекомендуется фирмой 1С
Записи = РезультатЗапроса.Выбрать();
Пока Записи.Следующий() Цикл
// Обход результата запроса по каждой записи в полученной выборке
КонецЦикла;
Иначе // Сообщить("Данные отсутствуют!");
КонецЕсли;
КонецПроцедуры
Использование псевдонимов для столбцов и таблиц в запросах в 1С 8.3:
&НаСервере
Процедура ИспользованиеПсевдонимовДляСтолбцовИТаблицВЗапросах()
// Для каждого столбца может быть назначен Псевдоним. Запрос станет более понятным
Запрос = Новый Запрос("ВЫБРАТЬ
| Запчасти.Наименование КАК НаименованиеМатериала,
| Запчасти.СрокИспользования КАК СрокИспМатериала,
| Запчасти.Производитель КАК ПроизводительМатериала
| ИЗ
| Справочник.Материалы КАК Запчасти");
РезультатЗапроса = Запрос.Выполнить();
Если Не РезультатЗапроса.Пустой() Тогда // Такая проверка рекомендуется фирмой 1С
Записи = РезультатЗапроса.Выбрать();
Пока Записи.Следующий() Цикл
// Обход результата запроса по каждой записи в полученной выборке
КонецЦикла;
Иначе // Сообщить("Данные отсутствуют!");
КонецЕсли;
КонецПроцедуры
Процедура ИспользованиеПсевдонимовДляСтолбцовИТаблицВЗапросах()
// Для каждого столбца может быть назначен Псевдоним. Запрос станет более понятным
Запрос = Новый Запрос("ВЫБРАТЬ
| Запчасти.Наименование КАК НаименованиеМатериала,
| Запчасти.СрокИспользования КАК СрокИспМатериала,
| Запчасти.Производитель КАК ПроизводительМатериала
| ИЗ
| Справочник.Материалы КАК Запчасти");
РезультатЗапроса = Запрос.Выполнить();
Если Не РезультатЗапроса.Пустой() Тогда // Такая проверка рекомендуется фирмой 1С
Записи = РезультатЗапроса.Выбрать();
Пока Записи.Следующий() Цикл
// Обход результата запроса по каждой записи в полученной выборке
КонецЦикла;
Иначе // Сообщить("Данные отсутствуют!");
КонецЕсли;
КонецПроцедуры
Удаление дубликатов из результата запроса в 1С 8.3:
&НаСервере
Процедура УдалениеДубликатовИзРезультатаЗапроса()
// В справочнике КлассификаторСроковПИ есть элементы-дубли. Строим запрос так,
// чтобы в результат попали только различные сроки использования
Запрос = Новый Запрос("ВЫБРАТЬ РАЗЛИЧНЫЕ
| Наименование
|ИЗ
| Справочник.КлассификаторСроковПИ");
РезультатЗапроса = Запрос.Выполнить();
Если Не РезультатЗапроса.Пустой() Тогда // Такая проверка рекомендуется фирмой 1С
Записи = РезультатЗапроса.Выбрать();
Пока Записи.Следующий() Цикл
// Обход результата запроса по каждой записи в полученной выборке
КонецЦикла;
Иначе // Сообщить("Данные отсутствуют!");
КонецЕсли;
КонецПроцедуры
Процедура УдалениеДубликатовИзРезультатаЗапроса()
// В справочнике КлассификаторСроковПИ есть элементы-дубли. Строим запрос так,
// чтобы в результат попали только различные сроки использования
Запрос = Новый Запрос("ВЫБРАТЬ РАЗЛИЧНЫЕ
| Наименование
|ИЗ
| Справочник.КлассификаторСроковПИ");
РезультатЗапроса = Запрос.Выполнить();
Если Не РезультатЗапроса.Пустой() Тогда // Такая проверка рекомендуется фирмой 1С
Записи = РезультатЗапроса.Выбрать();
Пока Записи.Следующий() Цикл
// Обход результата запроса по каждой записи в полученной выборке
КонецЦикла;
Иначе // Сообщить("Данные отсутствуют!");
КонецЕсли;
КонецПроцедуры
Ограничение количества строк в результате запроса в 1С 8.3:
&НаСервере
Процедура ОграничениеКоличестваСтрокВРезультатеЗапроса()
// Создание выборки первых 30 самых тяжелых материалов
Запрос = Новый Запрос("ВЫБРАТЬ ПЕРВЫЕ 30
| Наименование,
| Вес
|ИЗ
| Справочник.Материалы
|УПОРЯДОЧИТЬ ПО
| Вес УБЫВ");
РезультатЗапроса = Запрос.Выполнить();
Если Не РезультатЗапроса.Пустой() Тогда // Такая проверка рекомендуется фирмой 1С
Записи = РезультатЗапроса.Выбрать();
Пока Записи.Следующий() Цикл
// Обход результата запроса по каждой записи в полученной выборке
КонецЦикла;
Иначе // Сообщить("Данные отсутствуют!");
КонецЕсли;
КонецПроцедуры
Процедура ОграничениеКоличестваСтрокВРезультатеЗапроса()
// Создание выборки первых 30 самых тяжелых материалов
Запрос = Новый Запрос("ВЫБРАТЬ ПЕРВЫЕ 30
| Наименование,
| Вес
|ИЗ
| Справочник.Материалы
|УПОРЯДОЧИТЬ ПО
| Вес УБЫВ");
РезультатЗапроса = Запрос.Выполнить();
Если Не РезультатЗапроса.Пустой() Тогда // Такая проверка рекомендуется фирмой 1С
Записи = РезультатЗапроса.Выбрать();
Пока Записи.Следующий() Цикл
// Обход результата запроса по каждой записи в полученной выборке
КонецЦикла;
Иначе // Сообщить("Данные отсутствуют!");
КонецЕсли;
КонецПроцедуры
Вставка столбца с определенным значением в результат запроса в 1С 8.3:
&НаСервере
Процедура ВставкаСтолбцаСОпределеннымЗначениемВРезультатЗапроса()
// Добавление столбца СтавкаНДС и присвоение значения = 20
Запрос = Новый Запрос("ВЫБРАТЬ
| Наименование,
| 20 КАК СтавкаНДС,
| Вес
|ИЗ
| Справочник.Материалы");
РезультатЗапроса = Запрос.Выполнить();
Если Не РезультатЗапроса.Пустой() Тогда // Такая проверка рекомендуется фирмой 1С
Записи = РезультатЗапроса.Выбрать();
Пока Записи.Следующий() Цикл
// Обход результата запроса по каждой записи в полученной выборке
КонецЦикла;
Иначе // Сообщить("Данные отсутствуют!");
КонецЕсли;
КонецПроцедуры
Процедура ВставкаСтолбцаСОпределеннымЗначениемВРезультатЗапроса()
// Добавление столбца СтавкаНДС и присвоение значения = 20
Запрос = Новый Запрос("ВЫБРАТЬ
| Наименование,
| 20 КАК СтавкаНДС,
| Вес
|ИЗ
| Справочник.Материалы");
РезультатЗапроса = Запрос.Выполнить();
Если Не РезультатЗапроса.Пустой() Тогда // Такая проверка рекомендуется фирмой 1С
Записи = РезультатЗапроса.Выбрать();
Пока Записи.Следующий() Цикл
// Обход результата запроса по каждой записи в полученной выборке
КонецЦикла;
Иначе // Сообщить("Данные отсутствуют!");
КонецЕсли;
КонецПроцедуры
Выборка записей запроса только на которые имеются пользовательские права в 1С 8.3:
&НаСервере
Процедура ВыборкаЗаписейЗапросаТолькоНаКоторыеИмеютсяПользовательскиеПрава()
// Необходимо только для баз, в которых ограничение прав доступа работает на уровне записей (RLS)
// Данная реализация кода дает возможность выполнить запрос без ошибки
// и выбрать только те данные, на которые у пользователя есть права
Запрос = Новый Запрос("ВЫБРАТЬ РАЗРЕШЕННЫЕ
| Ссылка
|ИЗ
| Документ.ПоступлениеМатериалов");
РезультатЗапроса = Запрос.Выполнить();
Если Не РезультатЗапроса.Пустой() Тогда // Такая проверка рекомендуется фирмой 1С
Записи = РезультатЗапроса.Выбрать();
Пока Записи.Следующий() Цикл
// Обход результата запроса по каждой записи в полученной выборке
КонецЦикла;
Иначе // Сообщить("Данные отсутствуют!");
КонецЕсли;
КонецПроцедуры
Процедура ВыборкаЗаписейЗапросаТолькоНаКоторыеИмеютсяПользовательскиеПрава()
// Необходимо только для баз, в которых ограничение прав доступа работает на уровне записей (RLS)
// Данная реализация кода дает возможность выполнить запрос без ошибки
// и выбрать только те данные, на которые у пользователя есть права
Запрос = Новый Запрос("ВЫБРАТЬ РАЗРЕШЕННЫЕ
| Ссылка
|ИЗ
| Документ.ПоступлениеМатериалов");
РезультатЗапроса = Запрос.Выполнить();
Если Не РезультатЗапроса.Пустой() Тогда // Такая проверка рекомендуется фирмой 1С
Записи = РезультатЗапроса.Выбрать();
Пока Записи.Следующий() Цикл
// Обход результата запроса по каждой записи в полученной выборке
КонецЦикла;
Иначе // Сообщить("Данные отсутствуют!");
КонецЕсли;
КонецПроцедуры
💡 Шаблоны (готовые модели) кода 1С 8.3 с тегом #Запросы:
📰 Актуальные новости с тегом #Запросы:
- В версии 8.3.29 произведена оптимизация запросов с использованием В ИЕРАРХИИ в клиент-серверном варианте работы и пакетное выполнение запросов на стороне СУБД.
- В версии 8.3.26 в менеджер объектов добавлен метод ВыбратьПоСсылкам.
- В версии 8.3.25 можно добавлять данные в существующую временную таблицу, создавать несколько индексов для нее, включая уникальный. В версиях платформы до 8.3.24 (включительно) функция добавления данных в уже сформированную временную таблицу отсутствует. Если нужно условно сложить в ВТ_Товары дополнительно данные справочника Услуги, то выскочит ошибка "Временная таблица уже существует". При несоблюдении единой структуры запросов (состав колонок и их типы) в ходе добавления данных со структурой временной таблицы всплывет соответствующая ошибка.
- В версию 8.3.22 добавлена новая возможность языка запросов: получать в запросе УникальныйИдентификатор от ссылки.
0
комментарии
____________________
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник