1С:Предприятие 8.2 /
Разработчикам /
Реализация обработки данных
Использование логического ИЛИ в условиях запросов
1. Не следует использовать ИЛИ в секции ГДЕ запроса. Это может привести к тому, что СУБД не сможет использовать индексы таблиц и будет выполнять сканирование, что увеличит время работы запроса и вероятность возникновения блокировок. Вместо этого следует разбить один запрос на несколько и объединить результаты.
Например, запрос
ВЫБРАТЬ Товар.Наименование ИЗ Справочник.Товары КАК Товар ГДЕ Артикул = "001" ИЛИ Артикул = "002"
следует заменить на запрос:
ВЫБРАТЬ Товар.Наименование ИЗ Справочник.Товары КАК Товар ГДЕ Артикул = "001" |ОБЪЕДИНИТЬ ВСЕ |ВЫБРАТЬ Товар.Наименование ИЗ Справочник.Товары КАК Товар ГДЕ Артикул = "002"
2. Не рекомендуется использовать логическое ИЛИ в условиях соединения, то есть в секции ПО запроса. Это так же может привести к выбору неоптимального плана и медленной работе запроса. Простого универсального способа переписать такой запрос без использованияИЛИ не существует. Следует проанализировать решаемую задачу и попытаться найти другой алгоритм ее решения.
Например, неправильно:
ВЫБРАТЬ СправочникНоменклатура.Ссылка КАК НоменклатураСсылка, ЗагружаемыйПрайсПоставщика.Цена КАК Цена ИЗ ЗагружаемыйПрайсПоставщика КАК ЗагружаемыйПрайсПоставщика ВНУТРЕННЕЕ СОЕДИНЕНИЕ СправочникНоменклатура КАК СправочникНоменклатура ПО (ЗагружаемыйПрайсПоставщика.НаименованиеТовара = СправочникНоменклатура.Наименование ИЛИ ЗагружаемыйПрайсПоставщика.АртикулТовара = СправочникНоменклатура.Артикул ВЫБРАТЬ СправочникНоменклатура.Ссылка КАК НоменклатураСсылка, ЗагружаемыйПрайсПоставщика.Цена КАК Цена ИЗ ЗагружаемыйПрайсПоставщика КАК ЗагружаемыйПрайсПоставщика ВНУТРЕННЕЕ СОЕДИНЕНИЕ СправочникНоменклатура КАК СправочникНоменклатура ПО (ЗагружаемыйПрайсПоставщика.НаименованиеТовара = СправочникНоменклатура.Наименование ИЛИ ЗагружаемыйПрайсПоставщика.АртикулТовара = СправочникНоменклатура.Артикул)
Правильно:
ВЫБРАТЬ
СправочникНоменклатура.Ссылка КАК НоменклатураСсылка,
ЗагружаемыйПрайсПоставщика.Цена КАК Цена
ИЗ
ЗагружаемыйПрайсПоставщика КАК ЗагружаемыйПрайсПоставщика
ВНУТРЕННЕЕ СОЕДИНЕНИЕ СправочникНоменклатура КАК СправочникНоменклатура
ПО ЗагружаемыйПрайсПоставщика.НаименованиеТовара = СправочникНоменклатура.Наименование
ОБЪЕДИНИТЬ
ВЫБРАТЬ
СправочникНоменклатура.Ссылка,
ЗагружаемыйПрайсПоставщика.Цена
ИЗ
ЗагружаемыйПрайсПоставщика КАК ЗагружаемыйПрайсПоставщика
ВНУТРЕННЕЕ СОЕДИНЕНИЕ СправочникНоменклатура КАК СправочникНоменклатура
ПО ЗагружаемыйПрайсПоставщика.АртикулТовара = СправочникНоменклатура.Артикул
ВЫБРАТЬ СправочникНоменклатура.Ссылка КАК НоменклатураСсылка, ЗагружаемыйПрайсПоставщика.Цена КАК Цена ИЗ ЗагружаемыйПрайсПоставщика КАК ЗагружаемыйПрайсПоставщика ВНУТРЕННЕЕ СОЕДИНЕНИЕ СправочникНоменклатура КАК СправочникНоменклатура ПО ЗагружаемыйПрайсПоставщика.НаименованиеТовара = СправочникНоменклатура.Наименование ОБЪЕДИНИТЬ ВЫБРАТЬ СправочникНоменклатура.Ссылка, ЗагружаемыйПрайсПоставщика.Цена ИЗ ЗагружаемыйПрайсПоставщика КАК ЗагружаемыйПрайсПоставщика ВНУТРЕННЕЕ СОЕДИНЕНИЕ СправочникНоменклатура КАК СправочникНоменклатура ПО ЗагружаемыйПрайсПоставщика.АртикулТовара = СправочникНоменклатура.Артикул
3. Если в конфигурации описано несколько ролей с разным ограничением доступа на уровне записей (RLS), то не следует назначать одному пользователю более одной такой роли. Если один пользователь будет включен, например, в две роли с RLS - бухгалтер и кадровик, то при выполнении всех его запросов к их условиям будут добавляться условия обоих RLS с использованием логического ИЛИ. Таким образом, даже если в исходном запросе нет условия ИЛИ, оно появится там после добавления условий RLS. Такой запрос так же может выполняться неоптимально - медленно и с избыточными блокировками.
Вместо этого следует:
- Пересмотреть состав ролей таким образом, чтобы к одному объекту метаданных давала доступ только одна роль (на чтение, запись и т.п.);
- При необходимости разработки нескольких ролей, предоставляющих доступ к одном
Курсы бухгалтерские
Новости и события
Документы об окончании курсов
Тренинг-семинар «Как получить работу бухгалтера»
Курсы бухгалтеров с трудоустройством
Курсы программирования 1С:Предприятие 8.2Другие материалы по теме:
объединить все, кадровик, объединить, артикул, роль, иначе, ссылка, условия, алгоритм, цена, буфер обмена, копировать, бухгалтер, состав, пользователь, обмен, план, время, выбрать, наименование, товары, конфигурирование, работы, товар, справочник, конфигурацииМатериалы из раздела: 1С:Предприятие 8.2 / Разработчикам / Реализация обработки данных
Другие материалы по теме:
Источники данных для расчетов бюджетирования
Общесистемные механизмы и принципы
Разыменование ссылочных полей составного типа в языке запросов
Начальные действия при работе конфигурации
Использование параметра Условие при обращении к виртуальной таблице
Нас находят: 1с Почему не рекомендуется использовать оператор ИЛИ в условии запроса?, https://stimul kiev ua/materialy htm?a=ispolzovanie_logicheskogo_ili_v_usloviyakh_zaprosov, 1с8 логическое ИЛИ, использование логических условий, 1с8 2 в запросе объединить все, 1с RLS несколько ролей к одному объекту, условие или в 1с в осв, 34539, 1с условие или в запросе, алгоритмы процесса 1с условие или
Мы на Facebook