Условие
Назначить условие включения информации в запрос.
Синтаксис:
Условие(<ЛогическоеВыражение>);
Англоязычный синоним:
Condition
Параметры:
<ЛогическоеВыражение> |
Логическое выражение встроенного языка 1С:Предприятие. |
Описание:
Оператор Условие назначает условие включения информации в запрос. Если значение <ЛогическоеВыражение> верно, то информация включается в запрос, иначе нет.
Пример:
ТекстЗапроса =
"//{{ЗАПРОС(Одинарный)
|Период с ДатаНачала по ДатаКонец;
|Оклад = Справочник.Сотрудники.Оклад;
|Ктг = Справочник.Сотрудники.Категория;
|Группировка Ктг без групп;
|Функция Всего = Сумма(Оклад);
|Условие(Ктг.Выбран() = 1); // только для тех сотрудников
| //у кого заполнен реквизит Категория
|"//}}ЗАПРОС
;
В логическом выражении могут участвовать как внутренние, так и внешние переменные запроса, т. е. переменные программного модуля, доступные в процедуре, использующей запрос.
Пример:
* Здесь показан отрывок текста процедуры, в которой формируется некоторый отчет, причем переменные:
ВыбТовар, ВыбОтдел, ВыбСотрудник
являются реквизитами диалога отчета, значит, они доступны в программном модуле, поэтому могут быть использованы в логическом выражении оператора Условие. В данном примере операторы Условие использованы для фильтрации в запросе только выбранных значений параметров отчета,
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС(Квоты)
|Товар = Регистр.КвотыТоваров.Товар;
|Отдел = Регистр.КвотыТоваров.Отдел;
|Сотрудник = Регистр.КвотыТоваров.Сотрудник;
|Партнер = Регистр.КвотыТоваров.Партнер;
|Количество = Регистр.КвотыТоваров.КвотаТовара;
|Группировка Товар;
|Группировка Отдел;
|Группировка Сотрудник;
|Группировка Партнер;
|Функция Кол_во = КонОст(Количество);
|Условие(Товар.ПринадлежитГруппе(ВыбТовар) = 1);
|Условие(Отдел = ВыбОтдел);
|Условие(Сотрудник = ВыбСотрудник.Сотрудник);
|"//}}ЗАПРОС
;
// Если ошибка в запросе, то выход из процедуры
Если Запрос.Выполнить(ТекстЗапроса)= 0 Тогда
Возврат;
КонецЕсли;
В параметре оператора Условие, в принципе, можно записывать логические выражения любой сложности (по правилам встроенного языка 1С:Предприятие), используя любые логические операторы (>, <, =, >=, <>, И, ИЛИ, НЕ и другие), при этом в качестве операндов могут участвовать как внутренние, так и внешние переменные запроса (если существуют внутренняя и внешняя переменные с одинаковым именем, то использоваться по данному имени будет внутренняя переменная).
Пример:
Условие(Цена > 23.5);
Условие((Товар.ПринадлежитГруппе(ВыбТовар) = 1) И (Товар.Розн_Цена = 100));
Если в описании запроса использовано несколько операторов Условие, то они объединяются по логическому "И".
Пример:
* Использование двух операторов:
Условие(Товар.Наименование <> "Стол");
Условие(Товар.Наименование <> "Шкаф");
* аналогично записи одного оператора:
Условие((Товар.Наименование <> "Стол") И (Товар.Наименование<> "Шкаф"));
Логический оператор принадлежности
Кроме обычных логических операторов (>, <, =, >=, <=, <>, И, ИЛИ, НЕ) в операторе "Условие ..." языка запросов можно использовать дополнительный оператор — логический оператор принадлежности.
Синтаксис:
В
Англоязычный синоним:
In
Описание:
Оператор языка запросов "Условие (А в Б);" говорит о том, что условие истинно, когда значение А является подмножеством значения Б.
Следует особо отметить, что если значение Б пустое (объект не выбран), то условие является истинным, в отличии от оператора «=» (равно).
Если на принадлежность проверяется значение типа элемент справочника, то проверка выполняется с учетом его возможного вхождения в группу справочника. Аналогично, проверка на принадлежность субсчета осуществляется с учетом его возможного вхождения в счет-группу.
В качестве включающего подмножества логического оператора принадлежности (второй параметр после слова «в») может выступать как простое значение, так и список значений. В этом случае проверка выполняется с учетом вы-шеотмеченных особенностей для каждой строки списка значений.
Скорость выполнения запросов оптимизирована под использование оператора принадлежности, как в клиент-серверной, так и в файл-серверной версии системы 1С:Предприятие.
Внимание. Логический оператор принадлежности не поддерживается встроенным языком системы 1С:Предприятие, а применяется только в языке запросов.
Оператор принадлежности существенно облегчает написание текстов запроса, делает их более понятными.
Пример:
* без использования логического оператора принадлежности
Текст3апроса =
...
| Товар = Документ.ВидДокумента.Товар;";
...
Если ВыбТовар.Выбран() = 1 Тогда
Если ВыбТовар.ЭтоГруппа() = 1 Тогда
ТекстЗапроса = ТекстЗапроса +
"Условие(Товар.ПринадлежитГруппе(ВыбТовар) = 1);";
Иначе
ТекстЗапроса = ТекстЗапроса + "Условие(Товар = ВыбТовар);";
КонецЕсли
КонецЕсли;
* с использованием логического оператора принадлежности
Текст3апроса=
...
|Товар = Документ.ВидДокумента.Товар;";
...
|Условие (Товар в ВыбТовар);
...