Синтаксис и применение Бинарные операции в платформе 1С:Предприятие. Описание и примеры кода.
Полное описание, параметры и ограничения
Бинарные операции
Бинарными (арифметическими) операциями являются операции:
+ | – | * | /
Бинарные операции используются для типов ЧИСЛО.
Для типа СТРОКА может использоваться бинарная операция +.
см. также: Использование выражений в языке запросов
Практические примеры
ВЫБРАТЬ, КАК и параметры: посчитать три своих книги
Запрос без ИЗ вычисляет одну строку из явно переданных значений. Псевдонимы задают имена результата, а параметры позволяют передать название с кавычками без склейки текста.
Где и как запускать
Полный серверный общий модуль учебной базы. Собственные значения в памяти, без чтения или записи рабочих данных.
Подготовка
В отдельной учебной базе 8.5.1.1343 создайте общий модуль УчебныйЯзык: Сервер=Истина, Глобальный=Ложь, ВызовСервера=Ложь, Привилегированный=Ложь. Клиентские и внешнее соединение отключены; ПовторноеИспользованиеВозвращаемыхЗначений=НеИспользовать.
Вставьте весь приведённый текст в этот общий модуль. ВыполнитьПример — экспортная точка входа; остальные процедуры и функции располагаются рядом, а не внутри неё.
В своей внешней учебной обработке создайте управляемую форму, команду Выполнить и кнопку. Клиентский обработчик Выполнить(Команда) вызывает свою процедуру ВыполнитьНаСервере(); она имеет директиву &НаСервереБезКонтекста и одну строку УчебныйЯзык.ВыполнитьПример();. Это серверный вызов общего модуля, а не разрешение клиенту прямо обращаться к серверной библиотеке.
Все товары, количества и строки придуманы в этом модуле. Запись документов, подключение к чужой базе, файлы, сеть и печать не используются. В рабочие общие модули текст не вставляйте.
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);
КонецПроцедурыРазбор по шагам
ВЫБРАТЬ — обязательное начало запроса. Здесь источника ИЗ нет: выражения из параметров всё равно формируют одну строку.
В списке пять полей, разделённых запятыми. КАК задаёт уникальные имена результата; имя КОплате потом используется как реальное свойство строки таблицы.
Амперсанд обозначает параметр значения. Один параметр Количество используется несколько раз, но НайтиПараметры считает его один раз: всего четыре имени.
УстановитьПараметр получает имя без & и отдельное типизированное значение. Кавычки в названии товара остаются данными и не дописывают операторы запроса.
Выполнить вычисляет результат, Выгрузить возвращает таблицу значений. До [0] проверить, что действительно получена одна строка.
Три книги стоят 751.50; десятипроцентная скидка даёт 676.35 к оплате. Затем поменять параметр количества на 4 и выполнить запрос снова: 1002 и 901.80.
Первая выгруженная таблица остаётся с количеством 3. Смена параметра сама по себе не пересчитывает уже полученные данные. Это учебные суммы, не расчёт НДС и не правила округления торговой конфигурации.
Как проверить результат
Восемь проверок Истина: четыре параметра, пять колонок, имя КОплате, товар/количество, две исходные суммы, повторный расчёт и сохранность первой таблицы.
Замените начальное количество на 0 или строку "3": подготовительная защита остановит пример до выполнения запроса. Замена названия на другое собственное имя с кавычками не требует изменения текста запроса.
Ожидаемый результат
Полный учебный модуль показывает язык запроса, передачу значений, псевдонимы и чтение фактически вычисленного результата без данных конфигурации.
На что обратить внимание
Параметр значения не подменяет имя таблицы или поля. &Количество здесь выражение, а не метаданные.
Псевдоним поля не создаёт реквизит документа и сам по себе не меняет отбор. В результате нет двух полей с одним псевдонимом.
НайтиПараметры находит имена, но не проверяет бизнес-правила цены и скидки. Цена и процент в этом уроке фиксированные собственные числа; для неизвестного ввода нужны отдельные проверки.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.