1С 8.3 Запросы - Программист 1С Минск. Автоматизация бизнеса.

Перейти к контенту

1С 8.3 Запросы

Данные > Примеры кода 1С > 1С 8.3 Запросы
Запрос в 1С 8.3 - это конструкция кода на структурированном языке для получения информации из базы данных. Язык запросов является более простым аналогом языка SQL/T-SQL, но в отличии от своего "родителя", используется только для чтения данных. Для работы с языком запросов 1С 8.3 используется метод Выбрать, а для получения результата - метод Выполнить().

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

Важно! В запросе рекомендуется проверка на пустой результат выполнения запроса: https://its.1c.ru/db/v8std/content/438/hdoc
Получение запросом всех строк со значениями всех столбцов из таблицы в 1С 8.3:
&НаСервере
Процедура ПолучениеЗапросомВсехСтрокСоЗначениямиВсехСтолбцовИзТаблицы()

   // Звездочка используется, когда нужно выбрать все столбцы из таблицы
   Запрос = Новый Запрос("ВЫБРАТЬ
   |  *
   |ИЗ
   |  Справочник.Материалы");

 РезультатЗапроса = Запрос.Выполнить();
  Если Не РезультатЗапроса.Пустой() Тогда // Такая проверка рекомендуется фирмой 1С
       Записи = РезультатЗапроса.Выбрать();
       Пока Записи.Следующий() Цикл
           // Обход результата запроса по каждой записи в полученной выборке
       КонецЦикла;
   Иначе // Например: Сообщить("Данные отсутствуют!");
   КонецЕсли;

КонецПроцедуры

Получение запросом всех строк со значениями определенных столбцов в 1С 8.3:
&НаСервере
Процедура ПолучениеЗапросомВсехСтрокСоЗначениямиОпределенныхСтолбцов()

   // У каждого столбца в таблице есть своё соответствующее имя
   Запрос = Новый Запрос("ВЫБРАТЬ
   |  Наименование,
   |  Производитель,
   |  СрокИспользования
   |ИЗ
   |  Справочник.Материалы");

   РезультатЗапроса = Запрос.Выполнить();
   Если Не РезультатЗапроса.Пустой() Тогда // Такая проверка рекомендуется фирмой 1С
       Записи = РезультатЗапроса.Выбрать();
       Пока Записи.Следующий() Цикл
           // Обход результата запроса по каждой записи в полученной выборке
       КонецЦикла;
   Иначе // Сообщить("Данные отсутствуют!");
   КонецЕсли;

КонецПроцедуры

Использование псевдонимов для столбцов и таблиц в запросах в 1С 8.3:
&НаСервере
Процедура ИспользованиеПсевдонимовДляСтолбцовИТаблицВЗапросах()

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

   РезультатЗапроса = Запрос.Выполнить();
   Если Не РезультатЗапроса.Пустой() Тогда // Такая проверка рекомендуется фирмой 1С
       Записи = РезультатЗапроса.Выбрать();
       Пока Записи.Следующий() Цикл
           // Обход результата запроса по каждой записи в полученной выборке
       КонецЦикла;
   Иначе // Сообщить("Данные отсутствуют!");
   КонецЕсли;

КонецПроцедуры

Удаление дубликатов из результата запроса в 1С 8.3:
&НаСервере
Процедура УдалениеДубликатовИзРезультатаЗапроса()

   // В справочнике КлассификаторСроковПИ есть элементы-дубли. Строим запрос так,
   // чтобы в результат попали только различные сроки использования
   Запрос = Новый Запрос("ВЫБРАТЬ РАЗЛИЧНЫЕ
   |  Наименование
   |ИЗ
   |  Справочник.КлассификаторСроковПИ");

   РезультатЗапроса = Запрос.Выполнить();
   Если Не РезультатЗапроса.Пустой() Тогда // Такая проверка рекомендуется фирмой 1С
       Записи = РезультатЗапроса.Выбрать();
       Пока Записи.Следующий() Цикл
           // Обход результата запроса по каждой записи в полученной выборке
       КонецЦикла;
   Иначе // Сообщить("Данные отсутствуют!");
   КонецЕсли;

КонецПроцедуры
Ограничение количества строк в результате запроса в 1С 8.3:
&НаСервере
Процедура ОграничениеКоличестваСтрокВРезультатеЗапроса()

   // Создание выборки первых 30 самых тяжелых материалов
   Запрос = Новый Запрос("ВЫБРАТЬ ПЕРВЫЕ 30
   |  Наименование,
   |  Вес
   |ИЗ
   |  Справочник.Материалы
   |УПОРЯДОЧИТЬ ПО
   |   Вес УБЫВ");

   РезультатЗапроса = Запрос.Выполнить();
   Если Не РезультатЗапроса.Пустой() Тогда // Такая проверка рекомендуется фирмой 1С
       Записи = РезультатЗапроса.Выбрать();
       Пока Записи.Следующий() Цикл
           // Обход результата запроса по каждой записи в полученной выборке
       КонецЦикла;
   Иначе // Сообщить("Данные отсутствуют!");
   КонецЕсли;

КонецПроцедуры
Вставка столбца с определенным значением в результат запроса в 1С 8.3:
&НаСервере
Процедура ВставкаСтолбцаСОпределеннымЗначениемВРезультатЗапроса()

   // Добавление столбца СтавкаНДС и присвоение значения = 20
   Запрос = Новый Запрос("ВЫБРАТЬ
   |  Наименование,
   |  20 КАК СтавкаНДС,
   |  Вес
   |ИЗ
   |  Справочник.Материалы");

   РезультатЗапроса = Запрос.Выполнить();
   Если Не РезультатЗапроса.Пустой() Тогда // Такая проверка рекомендуется фирмой 1С
       Записи = РезультатЗапроса.Выбрать();
       Пока Записи.Следующий() Цикл
           // Обход результата запроса по каждой записи в полученной выборке
       КонецЦикла;
   Иначе // Сообщить("Данные отсутствуют!");
   КонецЕсли;

КонецПроцедуры
Выборка записей запроса только на которые имеются пользовательские права в 1С 8.3:
&НаСервере
Процедура ВыборкаЗаписейЗапросаТолькоНаКоторыеИмеютсяПользовательскиеПрава()

   // Необходимо только для баз, в которых ограничение прав доступа работает на уровне записей (RLS)
   // Данная реализация кода дает возможность выполнить запрос без ошибки
   // и выбрать только те данные, на которые у пользователя есть права
   Запрос = Новый Запрос("ВЫБРАТЬ РАЗРЕШЕННЫЕ
   |   Ссылка
   |ИЗ
   |   Документ.ПоступлениеМатериалов");

   РезультатЗапроса = Запрос.Выполнить();
   Если Не РезультатЗапроса.Пустой() Тогда // Такая проверка рекомендуется фирмой 1С
       Записи = РезультатЗапроса.Выбрать();
       Пока Записи.Следующий() Цикл
           // Обход результата запроса по каждой записи в полученной выборке
       КонецЦикла;
   Иначе // Сообщить("Данные отсутствуют!");
   КонецЕсли;

КонецПроцедуры
📰 Актуальные новости с тегом #Запросы:
  • В версии 8.3.25 можно добавлять данные в существующую временную таблицу, создавать несколько индексов для нее, включая уникальный. В версиях платформы до 8.3.24 (включительно) функция добавления данных в уже сформированную временную таблицу отсутствует. Если нужно условно сложить в ВТ_Товары дополнительно данные справочника Услуги, то выскочит ошибка "Временная таблица уже существует". При несоблюдении единой структуры запросов (состав колонок и их типы) в ходе добавления данных со структурой временной таблицы всплывет соответствующая ошибка.
  • В версию 8.3.22 добавлена новая возможность языка запросов: получать в запросе УникальныйИдентификатор от ссылки.
0
комментарии
____________________
Copyright©, «Программист 1С в г.Минске», 05.08.2021
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник
Яндекс.Метрика
Защищенное соединение ssl
visa
mastercard
Maestro
Яндекс деньги
Назад к содержимому