Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
1C_pr77_Lang2.doc
Скачиваний:
7
Добавлен:
20.11.2019
Размер:
2.52 Mб
Скачать

Без итогов

Не накапливать итоги по группировкам.

Синтаксис:

Без итогов;

Англоязычный синоним:

Without Totals;

Описание:

Цель данного оператора — увеличение скорости выполнения запроса, при условии, что итоговые записи при использовании запроса не нужны. Данный оператор языка запросов, дает возможность не накапливать итоги по группи­ровкам. Использовать данный оператор в тексте запроса имеет смысл, когда запрос строится не для формирования сложного отчета, а например, для про­стой выборки значений из информационной базы для последующей их обра­ботки.

В случае применения данного оператора в тексте запроса, при обходе ре­зультатов запроса применяется только один цикл обхода, используя метод объ­екта «Запрос» Группировка() без параметра.

Пример:

Запрос = СоздатьОбъект("Запрос");

Текст3апроса = "

...

|Группировка Товар;

|Группировка Склад;

|Без Итогов; ";

Если Запрос.Выполнить(ТекстЗапроса) = 1 Тогда

Возврат;

КонецЕсли;

Пока Запрос.Группировка() = 1 Цикл

...

КонецЦикла;

Замечание. Если в тексте запроса используется группировка по многоуровне­вому справочнику и не указано "Без Групп", то итоги по группам спра­вочника будут накапливаться. Другими словами, если в запросе не нужны итоги по группам справочника, то в тексте запроса кроме использования оператора "Без Итогов" дополнительно следует в операторах "Группировка ..." использовать ключевое слово "Без Групп".

Условие

Назначить условие включения информации в запрос.

Синтаксис:

Условие(<ЛогическоеВыражение>);

Англоязычный синоним:

Condition

Параметры:

<ЛогическоеВыражение>

Логическое выражение встроенного языка 1С:Предприятие.

Описание:

Оператор Условие назначает условие включения информации в запрос. Если значение <ЛогическоеВыражение> верно, то информация включается в запрос, иначе нет.

Пример:

ТекстЗапроса =

"//{{ЗАПРОС(Одинарный)

|Период с ДатаНачала по ДатаКонец;

|Оклад = Справочник.Сотрудники.Оклад;

|Ктг = Справочник.Сотрудники.Категория;

|Группировка Ктг без групп;

|Функция Всего = Сумма(Оклад);

|Условие(Ктг.Выбран() = 1); // только для тех сотрудников

| //у кого заполнен реквизит Категория

|"//}}ЗАПРОС

;

В логическом выражении могут участвовать как внутренние, так и внешние переменные запроса, т. е. переменные программного модуля, доступные в проце­дуре, использующей запрос.

Пример:

* Здесь показан отрывок текста процедуры, в которой формируется некото­рый отчет, причем переменные:

ВыбТовар, ВыбОтдел, ВыбСотрудник

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

Запрос = СоздатьОбъект("Запрос");

ТекстЗапроса =

"//{{ЗАПРОС(Квоты)

|Товар = Регистр.КвотыТоваров.Товар;

|Отдел = Регистр.КвотыТоваров.Отдел;

|Сотрудник = Регистр.КвотыТоваров.Сотрудник;

|Партнер = Регистр.КвотыТоваров.Партнер;

|Количество = Регистр.КвотыТоваров.КвотаТовара;

|Группировка Товар;

|Группировка Отдел;

|Группировка Сотрудник;

|Группировка Партнер;

|Функция Кол_во = КонОст(Количество);

|Условие(Товар.ПринадлежитГруппе(ВыбТовар) = 1);

|Условие(Отдел = ВыбОтдел);

|Условие(Сотрудник = ВыбСотрудник.Сотрудник);

|"//}}ЗАПРОС

;

// Если ошибка в запросе, то выход из процедуры

Если Запрос.Выполнить(ТекстЗапроса)= 0 Тогда

Возврат;

КонецЕсли;

В параметре оператора Условие, в принципе, можно записывать логические выражения любой сложности (по правилам встроенного языка 1С:Предприятие), используя любые логические операторы (>, <, =, >=, <>, И, ИЛИ, НЕ и другие), при этом в качестве операндов могут участвовать как внутренние, так и внешние переменные запроса (если существуют внутрен­няя и внешняя переменные с одинаковым именем, то использоваться по дан­ному имени будет внутренняя переменная).

Пример:

Условие(Цена > 23.5);

Условие((Товар.ПринадлежитГруппе(ВыбТовар) = 1) И (Товар.Розн_Цена = 100));

Если в описании запроса использовано несколько операторов Условие, то они объединяются по логическому "И".

Пример:

* Использование двух операторов:

Условие(Товар.Наименование <> "Стол");

Условие(Товар.Наименование <> "Шкаф");

* аналогично записи одного оператора:

Условие((Товар.Наименование <> "Стол") И (Товар.Наименование<> "Шкаф"));

Логический оператор принадлежности

Кроме обычных логических операторов (>, <, =, >=, <=, <>, И, ИЛИ, НЕ) в операторе "Условие ..." языка запросов можно использовать до­полнительный оператор — логический оператор принадлежности.

Синтаксис:

В

Англоязычный синоним:

In

Описание:

Оператор языка запросов "Условие (А в Б);" говорит о том, что условие истинно, когда значение А является подмножеством значения Б.

Следует особо отметить, что если значение Б пустое (объект не выбран), то условие является истинным, в отличии от оператора «=» (равно).

Если на принадлежность проверяется значение типа элемент справочника, то проверка выполняется с учетом его возможного вхождения в группу спра­вочника. Аналогично, проверка на принадлежность субсчета осуществляется с учетом его возможного вхождения в счет-группу.

В качестве включающего подмножества логического оператора принадлеж­ности (второй параметр после слова «в») может выступать как простое значе­ние, так и список значений. В этом случае проверка выполняется с учетом вы-шеотмеченных особенностей для каждой строки списка значений.

Скорость выполнения запросов оптимизирована под использование опера­тора принадлежности, как в клиент-серверной, так и в файл-серверной версии системы 1С:Предприятие.

Внимание. Логический оператор принадлежности не поддерживается встроен­ным языком системы 1С:Предприятие, а применяется только в языке за­просов.

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

Пример:

* без использования логического оператора принадлежности

Текст3апроса =

...

| Товар = Документ.ВидДокумента.Товар;";

...

Если ВыбТовар.Выбран() = 1 Тогда

Если ВыбТовар.ЭтоГруппа() = 1 Тогда

ТекстЗапроса = ТекстЗапроса +

"Условие(Товар.ПринадлежитГруппе(ВыбТовар) = 1);";

Иначе

ТекстЗапроса = ТекстЗапроса + "Условие(Товар = ВыбТовар);";

КонецЕсли

КонецЕсли;

* с использованием логического оператора принадлежности

Текст3апроса=

...

|Товар = Документ.ВидДокумента.Товар;";

...

|Условие (Товар в ВыбТовар);

...

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]