Ключевое слово ВЫБРАТЬ

Язык запросов

Синтаксис и применение Ключевое слово ВЫБРАТЬ в платформе 1С:Предприятие. Описание и примеры кода.

Полное описание, параметры и ограничения

Ключевое слово ВЫБРАТЬ

Описание запроса начинается с обязательного ключевого слова ВЫБРАТЬ.

Практические примеры

ВЫБРАТЬ, КАК и параметры: посчитать три своих книги

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

Где и как запускать

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

Подготовка

  1. В отдельной учебной базе 8.5.1.1343 создайте общий модуль УчебныйЯзык: Сервер=Истина, Глобальный=Ложь, ВызовСервера=Ложь, Привилегированный=Ложь. Клиентские и внешнее соединение отключены; ПовторноеИспользованиеВозвращаемыхЗначений=НеИспользовать.

  2. Вставьте весь приведённый текст в этот общий модуль. ВыполнитьПример — экспортная точка входа; остальные процедуры и функции располагаются рядом, а не внутри неё.

  3. В своей внешней учебной обработке создайте управляемую форму, команду Выполнить и кнопку. Клиентский обработчик Выполнить(Команда) вызывает свою процедуру ВыполнитьНаСервере(); она имеет директиву &НаСервереБезКонтекста и одну строку УчебныйЯзык.ВыполнитьПример();. Это серверный вызов общего модуля, а не разрешение клиенту прямо обращаться к серверной библиотеке.

  4. Все товары, количества и строки придуманы в этом модуле. Запись документов, подключение к чужой базе, файлы, сеть и печать не используются. В рабочие общие модули текст не вставляйте.

  5. HTML только показывает BSL. Код в 1С не запускался; перечисленные результаты и отрицательные опыты проверяйте самостоятельно в собственном стенде.

Процедура ВыполнитьПример() Экспорт
    Товар = "Книга ""Азбука""";
    Количество = 3;
    Цена = 250.50;
    Процент = 10;
    Если ТипЗнч(Количество) <> Тип("Число") Тогда
        ВызватьИсключение "Количество должно быть числом";
    КонецЕсли;
    Если Количество < 1 Или Количество > 10 Или Количество <> Цел(Количество) Тогда
        ВызватьИсключение "Количество должно быть целым от 1 до 10";
    КонецЕсли;
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
    |    &Товар КАК Товар,
    |    &Количество КАК Количество,
    |    &Цена КАК Цена,
    |    &Количество * &Цена КАК СуммаДоСкидки,
    |    (&Количество * &Цена) * (1 - &Процент / 100) КАК КОплате";
    Сообщить(Запрос.НайтиПараметры().Количество() = 4);
    Запрос.УстановитьПараметр("Товар", Товар);
    Запрос.УстановитьПараметр("Количество", Количество);
    Запрос.УстановитьПараметр("Цена", Цена);
    Запрос.УстановитьПараметр("Процент", Процент);
    Таблица = Запрос.Выполнить().Выгрузить();
    Если Таблица.Количество() <> 1 Тогда
        ВызватьИсключение "Ожидалась одна собственная строка расчёта";
    КонецЕсли;
    Сообщить(Таблица.Колонки.Количество() = 5);
    Сообщить(Таблица.Колонки.Найти("КОплате") <> Неопределено);
    Сообщить(Таблица[0].Товар = Товар И Таблица[0].Количество = 3);
    Сообщить(Таблица[0].СуммаДоСкидки = 751.50);
    Сообщить(Таблица[0].КОплате = 676.35);
    Запрос.УстановитьПараметр("Количество", 4);
    НовыйРезультат = Запрос.Выполнить().Выгрузить();
    Если НовыйРезультат.Количество() <> 1 Тогда
        ВызватьИсключение "Повторный собственный расчёт не вернул одну строку";
    КонецЕсли;
    Сообщить(НовыйРезультат[0].СуммаДоСкидки = 1002 И НовыйРезультат[0].КОплате = 901.80);
    Сообщить(Таблица[0].Количество = 3);
КонецПроцедуры

Разбор по шагам

  1. ВЫБРАТЬ — обязательное начало запроса. Здесь источника ИЗ нет: выражения из параметров всё равно формируют одну строку.

  2. В списке пять полей, разделённых запятыми. КАК задаёт уникальные имена результата; имя КОплате потом используется как реальное свойство строки таблицы.

  3. Амперсанд обозначает параметр значения. Один параметр Количество используется несколько раз, но НайтиПараметры считает его один раз: всего четыре имени.

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

  5. Выполнить вычисляет результат, Выгрузить возвращает таблицу значений. До [0] проверить, что действительно получена одна строка.

  6. Три книги стоят 751.50; десятипроцентная скидка даёт 676.35 к оплате. Затем поменять параметр количества на 4 и выполнить запрос снова: 1002 и 901.80.

  7. Первая выгруженная таблица остаётся с количеством 3. Смена параметра сама по себе не пересчитывает уже полученные данные. Это учебные суммы, не расчёт НДС и не правила округления торговой конфигурации.

Как проверить результат

  1. Восемь проверок Истина: четыре параметра, пять колонок, имя КОплате, товар/количество, две исходные суммы, повторный расчёт и сохранность первой таблицы.

  2. Замените начальное количество на 0 или строку "3": подготовительная защита остановит пример до выполнения запроса. Замена названия на другое собственное имя с кавычками не требует изменения текста запроса.

Ожидаемый результат

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

На что обратить внимание

  1. Параметр значения не подменяет имя таблицы или поля. &Количество здесь выражение, а не метаданные.

  2. Псевдоним поля не создаёт реквизит документа и сам по себе не меняет отбор. В результате нет двух полей с одним псевдонимом.

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

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.