Язык запросов 1с если тогда

«ВЫБОР КОГДА … ТОГДА …» в запросе 1С 8.3

При работе с языком запросов 1С, иногда возникает ситуация, когда требуется проверить выражение, является ли оно ЛОЖЬ или Истина. В случае положительного результата присвоить ему значение выражения для замены.

Конструкция оператора ВЫБОР

Несколько примеров

Пример №1

Есть таблица «Таблица1», в которой перечислены все дни с понедельника по воскресенье.

ДеньНедели
Понедельник
Вторник
Среда
Четверг
Пятница
Суббота
Воскресенье

Необходимо, для строк со значениями «Суббота» и «Воскресенье» в отдельном поле указать, что это выходной. Во всех остальных случаях, рабочий день. Реализуем поставленную задачу в виде запроса к исходной таблице.

Текст запроса может выглядеть так:

КОГДА ДеньНедели =»Суббота »

ИЛИ ДеньНедели = «Воскресенье »

ИНАЧЕ «Рабочий день»

Таблица1. ДеньНедели КАК ДеньНедели

ДеньНеделиВидДня
ПонедельникРабочий день
ВторникРабочий день
СредаРабочий день
ЧетвергРабочий день
ПятницаРабочий день
СубботаВыходной
ВоскресеньеВыходной

В данном примере, используя оператор ВЫБОР, мы перебираем все строки из «Таблица1». Параллельно проверяя каждую на соответствие условию.

ИЛИ ДеньНедели = «Воскресенье «

Если сработает одно из них, то в колонку «ВидДня» произойдёт запись выражения замены, расположенного после ключевого слова ТОГДА. Во всех остальных случаях будет записано выражение расположенное после слова ИНАЧЕ. Причём если убрать секцию ИНАЧЕ, программа примет такую конструкцию и не выдаст ошибку. Однако если проверяемое выражение вернёт ЛОЖЬ, тогда строки, в которые должно было подставится выражение замены, получать значение NULL. Рассмотрим подробнее подобную ситуацию.

Пример №2

Возьмём уже известную нам таблицу из первого примера.

ДеньНедели
Понедельник
Вторник
Среда
Четверг
Пятница
Суббота
Воскресенье

Необходимо вывести в отдельную таблицу количество выходных дней. Причём информацию о количестве рабочих дней, будем считать излишней. Для наглядности решим задачу в несколько этапов. За основу возьмём запрос из примера №1. Уберём из него секцию ИНАЧЕ, а поле для вывода оставим только то, которое получаем конструкцией оператора ВЫБОР.

КОГДА ДеньНедели =»Суббота »

ИЛИ ДеньНедели = «Воскресенье »

Таблица1. ДеньНедели КАК ДеньНедели

Текст запроса может выглядеть так:

КОГДА ДеньНедели =»Суббота »

ИЛИ ДеньНедели = «Воскресенье »

Таблица1. ДеньНедели КАК ДеньНедели

В заключении хочется сказать, что оператор ВЫБОР хоть и не часто находит свое применение при написании запросов в 1С, но в некоторых ситуациях является незаменимым инструментом для разработчика.

Источник

Язык запросов 1с если тогда

Войдите как ученик, чтобы получить доступ к материалам школы

Язык запросов 1С 8.3 для начинающих программистов: условный оператор

Автор уроков и преподаватель школы: Владимир Милькин

Условный оператор в запросе

Давайте напишем запрос, который получает названия и калорийность еды:

Язык запросов 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с если тогда

Более сложные результаты условного оператора

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

Источник

Условия в запросе

Условия в запросе

Условия в запросе могут быть расположены в 4 местах:

Особенности использования условных операторов:

Эти операторы возможно использовать во всех 4 ситуациях, но контекст (окружаемые переменные у них отличаются).

В первых двух случаях условия накладываются на поля выборки, например:

ВЫБРАТЬ Ссылка ИЗ Справочник.Контрагенты КАК СпрКонтрагенты ГДЕ СпрКонтрагенты.ИНН<>«»

Обращение идет через имя таблицы (в простых запросах может опускаться, но в сложных может вызывать неоднозначность поля).

Данное условие вызывает ограничение выборки (обычно уменьшает ее)

В конструкторе запроса находятся на вкладке условия:

Язык запросов 1с если тогда. Смотреть фото Язык запросов 1с если тогда. Смотреть картинку Язык запросов 1с если тогда. Картинка про Язык запросов 1с если тогда. Фото Язык запросов 1с если тогда

В произвольном варианте пишется текстом, в обычном выбирается поле, оператор сравнения и значение: Язык запросов 1с если тогда. Смотреть фото Язык запросов 1с если тогда. Смотреть картинку Язык запросов 1с если тогда. Картинка про Язык запросов 1с если тогда. Фото Язык запросов 1с если тогда

ВЫБОР КОГДА

Этот условный оператор используется для преобразования значения, ограничивает же выборку только когда расположен после служебного слова ГДЕ.
Допустимо несколько подчиненных условий. Может находится в полях выборки, полях условий ГДЕ, группировок, итогов (универсальный оператор для сложных условий)

Например, так выглядит вариант преобразования:

ВЫБРАТЬ
ВЫБОР
КОГДА 1 = 2
ТОГДА «Никогда не будет истиной»
КОГДА 1 = 1
ТОГДА «Всегда будет истиной»
ИНАЧЕ ДАТАВРЕМЯ(1, 1, 1)
КОНЕЦ КАК ПолеПредставленияЗначения

Вариант использования в условии ГДЕ, результат выборки должен возвращать булево значение либо сравниваться с чем-то еще

Пример № 1

ВЫБРАТЬ Ссылка ИЗ Справочник.Контрагенты КАК К ГДЕ ВЫБОР КОГДА К.ИНН = «» ТОГДА ЛОЖЬ ИНАЧЕ ИСТИНА КОНЕЦ

Пример № 2:

ВЫБРАТЬ Ссылка ИЗ Справочник.Контрагенты КАК К ГДЕ ВЫБОР КОГДА К.ИНН = «» ТОГДА «» ИНАЧЕ «Заполнено» КОНЕЦ = «Заполнено»

Параметры виртуальных таблиц

В данном случае оперирование идет с полями таблиц, например ресурсами, измерениями, реквизитами. В этих условиях обращение идет без точки (контекст этого не требует).

ВЫБРАТЬ * ИЗ РегистрСведений.КурсыВалют.СрезПоследних(, Валюта.Код = «RUR»)

В конструкторе запроса они находятся вот здесь:

Язык запросов 1с если тогда. Смотреть фото Язык запросов 1с если тогда. Смотреть картинку Язык запросов 1с если тогда. Картинка про Язык запросов 1с если тогда. Фото Язык запросов 1с если тогда

Стоит отметить, что обычно используется ограничение над измерениями, так как иначе условие отнесется к выборке для получения, а не на сам результат (на ресурсы ограничения следует наложить в операторе ГДЕ, чтобы получить ожидаемый результат).

Накладывание условия в запросе на измерения, если нет обращения через точку (как в примере выше), ускоряет выборку: на больших таблицах, это будет визуально заметно; на небольших можно использовать как удобно.

ИМЕЮЩИЕ

Для наложения отбора для результата «группировочных» функции

ВЫБРАТЬ
Контрагенты.ИНН,
КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Контрагенты.Ссылка) КАК Ссылка
ИЗ
Справочник.Контрагенты КАК Контрагенты

СГРУППИРОВАТЬ ПО
Контрагенты.ИНН

ИМЕЮЩИЕ
КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Контрагенты.Ссылка) > 1 И
Контрагенты.ИНН <> «»

В данную выборку попадут дубли ИНН, когда оно вообще заполнено.

В конструкторе запроса также находится на вкладке условия

Язык запросов 1с если тогда. Смотреть фото Язык запросов 1с если тогда. Смотреть картинку Язык запросов 1с если тогда. Картинка про Язык запросов 1с если тогда. Фото Язык запросов 1с если тогда

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

Источник

Функции и конструкции языка запросов 1С 8.2 и 1С 8.3

Функции языка запросов 1с.

ДАТАВРЕМЯ

Эта функция создает константное поле с типом “Дата”.

РАЗНОСТЬДАТ

Возвращает разность двух дат в одном из измерений (год, месяц, день, час, минута, секунда). Измерение передается в параметре.

ЗНАЧЕНИЕ

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

Синтаксис: ЗНАЧЕНИЕ( )

ВЫБОР

Синтаксис: ВЫБОР КОГДА ТОГДА ИНАЧЕ КОНЕЦ

Более сложный пример, с использованием ПОДОБНО :

ВЫРАЗИТЬ

Позволяет выразить константное поле определенным типом.

Синтаксис: ВЫРАЗИТЬ(НазваниеПоля КАК НазваниеТипа)

Можно использовать функцию ВЫРАЗИТЬ в полях смешанных типах. Обычный и распространённый пример, где встречаются такие поля, это “Регистратор” у любого регистра. По какой причине мы будем уточнять тип в регистраторе? К примеру, если мы из регистратора выбираем поле “Номер”, то из всех таблиц этот номер будет выбран. Для увеличения скорости обработки нашего запроса, укажем явный тип, с помощью функции ВЫРАЗИТЬ.

ISNULL, ЕСТЬNULL

Нужно отметить, что тип NULL необходимо ВСЕГДА заменять на какое-либо значение, так как сравнение с ним, всегда будет ЛОЖЬ. Прикол в том, что ЛОЖЬ будет, если сравнить NULL с NULL. Обычно NULL возникает при соединениях таблиц (во всех видах, кроме внутреннего).

ПРЕДСТАВЛЕНИЕ

Получает представление поля запроса

Синтаксис: ПРЕДСТАВЛЕНИЕ( )

Конструкции в языке запросов 1с.

ССЫЛКА

Проверяет поля ссылочного типа. Обычно применяется для проверки поля составного типа на конкретный тип.

Синтаксис: ССЫЛКА

МЕЖДУ

Проверяет, входит ли значение в указанный диапазон.

Синтаксис: МЕЖДУ И

В и В ИЕРАРХИИ

Проверяют находится ли значение в передаваемом списке (в качестве списка могут передаваться массивы, таблицы значений и т.д.). Оператор В ИЕРАРХИИ позволяет просматривать иерархию (пример использования ПланСчетов).

Синтаксис: В( ), В ИЕРАРХИИ( )

ПОДОБНО

Сравнивает строку с шаблоном строки.

Синтаксис: ПОДОБНО “ ”

Варианты шаблона строки:

% – последовательность, содержащая любое количество произвольных символов
_ – один произвольный символ.
[…] – любой одиночный символ, либо последовательность символов из перечисленных внутри квадратных скобок. В перечислении могут задаваться диапазоны, например а-z, означающие произвольный символ, входящий в диапазон, включая концы диапазона.
[^…] – любой одиночный символ, либо последовательность символов из перечисленных внутри квадратных скобок кроме тех, которые перечислены следом за значком отрицания.

Источник

Все функции и конструкции языка запросов 1С 8.2 и 1с 8.3

В этой статье мы хотим обсудить с Вами все функции языка запросов 1с, а также конструкции языка запросов. Чем же отличается функция от конструкции? Функция вызывается со скобками и возможными параметрами в них, а конструкция пишется без скобок. Безусловно все конструкции и функции языка запросов 1с делают процесс получения данных гибким и многофункциональным. Данные функции и конструкции применимы к полям запроса, а некоторые также применимы в условиях.

Функции языка запросов 1с

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

Синтаксис: ВЫБОР КОГДА ТОГДА ИНАЧЕ КОНЕЦ

Синтаксис: ВЫРАЗИТЬ(НазваниеПоля КАК НазваниеТипа)

Еще есть вариант использования функции ВЫРАЗИТЬ в полях смешанных типах, где такие встречаются? Самый простой пример это «Регистратор» у любого регистра. Так зачем нам может понадобиться уточнять тип в регистраторе? Давайте рассмотрим ситуацию когда мы из регистратора выбираем поле «Номер», из какой таблицы будет выбран номер? Правильный ответ из всех! Поэтому чтобы наш запрос работал быстро следует указывать явный тип с помощью функции ВЫРАЗИТЬ

Также отметим что тип NULL желательно ВСЕГДА заменять на какое-то значение, т.к. сравнение с типом NULL всегда дает ЛОЖЬ даже если вы сравниваете NULL с NULL. Чаще всего значения NULL образуются в результате соединения таблиц (все виды соединений кроме внутреннего).

Конструкции в языке запросов 1с

Выше мы рассмотрели с Вами функции языка запросов 1с, теперь пришло время рассмотреть конструкции в языке запросов 1с, они не менее важны и полезны, приступаем.

Синтаксис: В( ), В ИЕРАРХИИ( )

Варианты шаблона строки:

Синтаксис: РАЗРЕШЕННЫЕ пишется после ключевого слова ВЫБРАТЬ

Синтаксис: РАЗЛИЧНЫЕ пишется после ключевого слова ВЫБРАТЬ

Также Конструкция РАЗЛИЧНЫЕ может использоваться с оператором РАЗРЕШЕННЫЕ и другими операторами.

Синтаксис: ДЛЯ ИЗМЕНЕНИЯ

Синтаксис: УПОРЯДОЧИТЬ ПО АВТОУПОРЯДОЧИВАНИЕ

Синтаксис: ИНДЕКСИРОВАТЬ ПО

Синтаксис: ИТОГИ ПО

Язык запросов 1с если тогда. Смотреть фото Язык запросов 1с если тогда. Смотреть картинку Язык запросов 1с если тогда. Картинка про Язык запросов 1с если тогда. Фото Язык запросов 1с если тогда

На рисунке обведены группировки которые образовались в ходе выполнения запроса, самая верхняя относится к секции ОБЩИЕ, а вторая к полю ДоговорКонтрагентаВидДоговора.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *