В язык запросов 1С:Предприятия версии 8.1.10 и более поздних добавлена обобщенная форма оператора «В»/ «НЕ В». В разделе поясняются особенности выполнения этого оператора, учет которых позволит повысить производительность запросов.
Групповой оператор вхождения
Оператор вхождения имеет вид:
Оператор вхождения является одним из операторов сравнения, определенных в языке запросов 1С:Предприятия, и принимает значение «Истина», если значение его левого операнда присутствует в списке значений из правого операнда. Список значений может задаваться в виде:
- списка выражений;
- параметра, значением которого является коллекция значений;
- вложенного запроса.
Если список значений задан вложенным запросом, то возможно использование обобщенной формы оператора вхождения — группового оператора вхождения:
Вложенный запрос должен определять выборку из N колонок.
Групповой оператор вхождения принимает значение «Истина», если запись ( , . ) совпадает с одной из записей выборки, определяемой вложенным запросом. Например, пусть левым операндом является список:
Если результатом вложенного запроса является выборка:
то результатом группового оператора вхождения будет «Ложь», а если результатом вложенного запроса является выборка:
то результатом группового оператора вхождения будет «Истина».
Наряду с оператором вхождения («В») в языке запросов предусмотрен оператор не вхождения («НЕ В»), результатом которого является отрицание оператора «В» с такими же операндами. Все, сказанное про особенности выполнения оператора «В», относится и к оператору «НЕ В».
Реализация группового оператора вхождения
В отличие от простого оператора вхождения, аналог которого имеется в большинстве СУБД (оператор IN языка SQL), групповой оператор вхождения не имеет точных аналогов в SQL. Поэтому при использовании группового оператора вхождения важно учитывать механизм его перевода в SQL. Оператор вида:
при выполнении его на СУБД будет иметь вид:
Если вложенный запрос содержит агрегатные функции и/или раздел СГРУППИРОВАТЬ ПО, то групповой оператор вхождения вида:
на языке SQL будет записан так:
Замечания о скорости выполнения
Скорость выполнения запроса, содержащего групповой оператор вхождения, зависит от возможностей оптимизатора планов запросов используемой СУБД по эффективной реализации оператора EXISTS с вложенным запросом. Поэтому точно предсказать, будет ли данный запрос выполняться эффективно, в общем случае затруднительно. Однако, можно сформулировать рекомендации, следование которым поможет строить эффективно выполняющиеся запросы.
Короткие таблицы
Использование в запросе группового оператора вхождения не приведет к снижению эффективности, если вложенный запрос будет строить выборку из таблиц с небольшим количеством записей, которое не может неограниченно расти в процессе эксплуатации системы и роста объема накопленной базы данных.
Индексы
Необходимо учитывать, что запрос, вложенный в оператор EXISTS будет выполнен многократно при проверке условия отбора для каждой записи. Поэтому, если таблицы, используемые во вложенном запросе, могут содержать большое количество записей, то поиск в них необходимо ускорить посредством определения подходящих индексов:
- используйте в качестве значений колонок , . только наименования полей таблиц (не выражения);
- выберите среди полей, используемых в качестве значений колонок , . такое, значения которого реже всего повторяются (наиболее селективное поле), и включите индексирование по этому полю;
- не используйте агрегатные функции и группировки в запросе, вложенном в групповой оператор вхождения;
- включайте наиболее селективные поля в список группового оператора вхождения. Например, при проверке остатков на складах по позициям номенклатуры из табличной части документа «РасходныйОрдерНаТовары», на который указывает параметр «ДокументСсылка», следующий запрос будет выполняться медленно из-за того, что в таблице Документ.РасходныйОрдерНаТовары.Товары по группе полей (Номенклатура, ХарактеристикаНоменклатуры, Качество) невозможно построить индекс.
Копировать в буфер обмена
Следующий запрос отличается тем, что в групповой оператор вхождения добавлено поле «Склад», по которому в таблице «Документ.РасходныйОрдерНаТовары.Товары» имеется индекс. В результате время выполнения запроса существенно уменьшилось.
Временные таблицы
Если запрос, вложенный в групповой оператор вхождения, сложный, содержит агрегатные функции, использует таблицы с большим количеством записей, то вероятно, что исполнение группового оператора вхождения будет крайне не эффективным. В этом случае целесообразно:
- исполнить вложенный запрос отдельно и сложить его результат во временную таблицу;
- определить во временной таблице индекс либо по всем полям, либо по наиболее селективному подмножеству полей;
- использовать полученную временную таблицу в запросе, вложенном в групповой оператор вхождения.
Язык поисковых запросов Яндекса
Каждый поисковик создает собственный язык, на котором будут делаться запросы к системе. Свои правила и у Яндекса, и его язык запросов отличается от вариантов Google или Mail.ru.
Язык поисковых запросов Яндекс работает по своим правилам, которые отличаются от языка запросов других поисковиков Google, Mail.ru. Основные особенности языка запросов Яндекса: нет учета морфологии, есть исправление ошибок и опечаток, логические и документные операторы, поиск по -большому объему объектов.
Виды поиска в Яндексе
Расширенный поиск позволяет настроить фильтры для лучшего результата. Доступен поиск по региону или отдельному сайту. Уточняйте тип файла, дату обновления, морфологию и язык.
Персональный поиск работает, когда пользователь авторизован в системе. Яндекс собирает статистику и улучшает качество поиска для конкретного человека. Показывает поисковые подсказки по запросам, которые пользователь вводил ранее. Если человек часто заходит на определенные сайты, то Яндекс отмечает их как «любимые» и показывает на странице поиска в первую очередь, даже если они не находятся в топе.
Поисковые подсказки экономят время пользователей, подсвечивая варианты поисковых фраз во время ввода запроса.
Семейный поиск нацелен на фильтрацию информации «взрослой» тематики. Есть три типа режима: без ограничений, умеренный и семейный. Умеренный стоит по умолчанию. В этом режиме «взрослый» контент показывается при явном поисковом запросе. В семейном режиме всегда не показывается, в режиме «без ограничений» — фильтра нет.
Поиск людей — специальный сервис, с помощью которого можно найти человека. Задавайте в условиях информацию, которую знаете: возраст, место жительства, работы или учебы. Поиск ведется по социальным сетям.
Операторы
Для точного поиска используйте специальные операторы запросов. С января 2018 г. их список сокращен.
Если вы использовали их раньше, обратите внимание, что больше не поддерживаются операторы:
& && ГГГГММДД
Пример: date:20180222
Рекомендованные запросы
Летом 2017 г. в панели Яндекс.Вебмастера появился новый инструмент для seo-оптимизаторов «Рекомендованные запросы». Его цель — помочь мастерам сосредоточиться на поисковых запросах, по которым сайт с большей вероятностью попадет в топ выдачи. Полученные данные используйте в seo-оптимизации и для контекстной рекламы.
Как работает
В панели Яндекс.Вебмастера перейдите в раздел «Поисковые запросы», выберите пункт «Рекомендованные запросы» и подтвердите запрос. Система будет около недели собирать статистику перед формированием списка запросов. По итогу в панели появится информация о четырех показателях: прогноз показов; прогноз кликов; прогноз цены клика; текущая позиция страницы в поиске.
При необходимости настройте фильтры: регион, url страницы, условия.
Как применять в работе
После получения списка запросов отсортируйте их по убыванию прогнозов показов. Страницы из нижней части списка, как правило, не участвуют в поиске, плохо оптимизированы. Согласно расчетам Яндекса, показов по ним не будет, поэтому не тратьте на них время и ресурсы. Лучше обратите внимание на топ списка.
Далее проанализируйте каждую страницу из верхней части списка, по которым прогнозируется высокий трафик. Необходимо понять, отвечает ли страница запросу пользователя. Допустим прогнозируется, что url site.ru/cvety/gibiskus будет часто показываться по запросам «гибискус вянут листья» и «гибискус листья желтеют». Но на самой странице эти вопросы не разобраны, о проблемах указано вскользь. Поэтому высока вероятность, что пользователи, перешедшие по таким запросам, не смогут найти ответы. Они станут быстро уходить, будет расти доля отказов и ухудшаться поведенческие факторы. Как следствие, страница начнет понижаться в выдаче, пока ее окончательно не вытеснят более релевантные сайты.
Оптимизируйте страницу, чтобы сохранить трафик по запросам. Сначала проверьте title, description и h1, чтобы они соответствовали теме основных запросов. Затем добавьте на страницу нужную информацию. Включите видео и фотографии по теме. Сделайте обширный обзор проблемы пользователя.
Оператор ПОДОБНО в запросе 1С 8.3
- Контроль вносимых изменений;
- Исключение избыточной нагрузки;
- Обеспечение работоспособности системы
Несмотря на все недостатки, поиск по текстовому полю до сих пор является одним из самых популярных. Строковые типы данных мы можем встретить повсеместно – наименования, номера счетов, адреса, а также другая информация может храниться в этом формате. В запросах на встроенном языке 1С для удобства разработчиков используется специальный оператор «ПОДОБНО». Это одна из самых используемых команд, поэтому без досконального знания ее синтаксиса и возможностей программисту будет сложно работать.
Использование оператора «ПОДОБНО»
Перед тем, как применять какой-либо оператор на практике, нужно четко понять его предназначение, места применения и синтаксис. Целью использования «ПОДОБНО» в запросе 1С является проверка на удовлетворение условию, представленному в виде шаблона. Возвращаемым значением является логический тип – истина или ложь, демонстрирующий выполняется ли заданное условие. Использоваться оператор ПОДОБНО может в нескольких местах запроса:
- В блоке условий, обозначенном ключевым словом «ГДЕ»;
- В конструкции Выбор Когда Тогда Иначе Конец;
- Непосредственно в полях выборки, как результат сравнения полей.
Синтаксис проверки всегда одинаков и состоит из 3 звеньев. Слева текстовое значение, которое проверяется, затем непосредственно сам оператор «ПОДОБНО», а справа – шаблон, по которому идет проверка. Для быстрого и удобного составления шаблонов существуют специальные символы, облегчающие разработку:
- «%»– последовательность любых символов произвольной длины. Используется для поиска отдельных слов или цифр в строке;
- «_»– любой единичный символ. Предназначен для обозначения наличия одного знака;
- «[…]»– последовательность символов для сравнения со знаком в строке. С помощью подобного шаблона проверяется соответствие любому из перечисленных в скобках знаков. Также можно задать диапазон цифр или букв ([а-г], [1-7]);
- «[^…]»– противоположный предыдущему шаблон. Проверяется отличие указанного в строке символа от перечисленных в скобках.
Чтобы лучше усвоить и понять принципы составления верных шаблонов, рассмотрим некоторые, часто встречающиеся в жизни разработчиков, примеры. Первый, когда нам необходимо выбрать из справочника номенклатуры все позиции, в наименованиях которых встречается слово «РЕЗЕЦ». В этом случае нам необходимо использовать ПОДОБНО в условиях запроса:
Если мы уберем оба символа «%», то запрос покажет номенклатуру, у которой наименование полностью совпадает с указанным в кавычках. Если оставим шаблон «РЕЗЕЦ%» или «%РЕЗЕЦ», то результатом будет список номенклатуры, оканчивающийся или начинающийся, соответственно, на заданную комбинацию символов.
Разберем задачу, которая может поставить в тупик начинающих программистов, не знающих синтаксис запросов. Допустим, вам нужно найти всю номенклатуру, в наименовании которой есть символ «%». Специально для случаев, когда нужно вести поиск зарезервированных символов, существует оператор «спецсимвол». В качестве спецсимвола можно использовать #,,/,
и другие знаки, после которых любые зарезервированные символы будут обозначать просто знак.
Если вам нужно в поиске использовать параметр, то переменная в запросе с параметром ПОДОБНО используется при помощи сложения. Помните, что параметр должен быть строкового типа или вам потребуется перевести ее в строку в запросе. Это достаточно сложная операция и лучше ее исключить заранее.
Функция ПОДОБНО применима во всех версиях платформы, начиная с 8, и ввиду ее применяемости разработчики 1С не захотят ее менять. Конечно, текстовый поиск всегда зависит от точности ввода наименования, но он все равно остается одним из самых распространенных. В связи с этим профессиональным разработчикам 1С необходимо изучить использование ПОДОБНО со всеми его нюансами.
Укажите оператора формат запроса
Войдите как ученик, чтобы получить доступ к материалам школы
Язык запросов 1С 8.3 для начинающих программистов: операторы МЕЖДУ и В
Автор уроков и преподаватель школы: Владимир Милькин
Логический оператор МЕЖДУ
Оператор МЕЖДУ позволяет проверить, входит ли значение выражения, указанного слева от него, в диапазон , указанный справа ( вместе с границами диапазона , то есть включительно).
Таким образом, вместо
можно написать более лаконичное
А результат будет один и тот же:
Если же необходимо наоборот выбрать всю еду, калорийность которой не входит в диапазон [200;300], то подойдёт следующая форма отрицания (появилась частица НЕ):
Оператор МЕЖДУ можно применять не только к числовым диапазонам. С датами он также хорошо работает:
Логический оператор В
Проверка совпадения с одним из перечисленных
Оператор В позволяет проверить, совпадает ли значение выражения, указанного слева от него, с одним из значений , описанных справа .
Таким образом, вместо
можно написать более лаконичное
А результат будет один и тот же:
Если же необходимо наоборот выбрать всю еду, цвет которой не совпадает ни с одним значением из списка, то подойдёт следующая форма отрицания (появилась частица НЕ):
Проверка совпадения значения с одним из результата запроса
Пусть нам требуется выбрать из базы только те цвета, которые присутствуют в описании еды. Таким образом, в отобранном списке не должен присутствовать, например, чёрный цвет, так как еды чёрного цвета в нашей базе нет. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь.
Один из вариантов как это можно сделать — использовать логический оператор В, справа от которого будет находиться подзапрос, выбирающий названия цветов из всех записей справочника Еда:
В качестве отступления упомяну, что из внутреннего запроса есть возможность обращаться к полям внешнего запроса.
Опять же, для этой формы оператора В, также доступно использование частицы НЕ перед ним.
Проверка принадлежности по иерархии для справочников
Для справочников проверка может осуществляться и на принадлежность по иерархии.
Для начала давайте рассмотрим пример иерархического справочника. Откройте справочник «Города» в нашей базе:
Обратите внимание, что его элементы отличаются от других справочников (Еда, Цвета, Вкусы) наличием жёлтых папок. Это группы справочника .
Группы отличаются от обычных элементов тем, что могут включать в себя другие группы и элементы. Подобно тому как папки включают в себя другие папки и файлы.
Чтобы просмотреть содержимое группы, сделайте на ней двойной щелчок мышкой:
Чтобы выйти на уровень выше, снова сделайте двойной щелчок по группе:
Таким образом иерархический справочник может содержать как обычные элементы (например, Рио-де-Жанейро, Салвадор), так и группы (например, Бразилия, Индия). Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь.
У каждого элемента (будь то группа или обычный элемент) может быть родитель. Например, родителем элемента Рио-де-Жанейро является группа Бразилия:
И это верно, потому что Рио-де-Жанейро входит в состав группы Бразилия в иерархии справочника:
Теперь давайте напишем такой запрос, который будет запрашивать выбранную группу-страну и все элементы-города, входящие в неё.
Обратите внимание на то, что в тексте запроса перед именем ГруппаСтрана стоит амперсанд (&). Имена с амперсандом автоматически распознаются системой как параметры , значение которых должно быть задано перед выполнением запроса.
После того, как мы вставим этот запрос в консоль и нажмем кнопку «Выполнить» для обновления, у нас появится возможность задать этот параметр:
Выберите в качестве его значения группу «Россия» (кнопка Выбрать):
Если теперь мы нажмём кнопку «Выполнить», то результат запроса будет следующим:
В результат запроса попала сама группа (Россия) и все элементы, которые входят в её состав (Пермь, Красноярск и Воронеж).
Если вместо России, выбрать «Бразилия», то результат будет таким:
Таким образом результатом оператора В ИЕРАРХИИ будет ИСТИНА, если значение выражения слева является ссылкой на элемент справочника и входит во множество значений справа (Бразилия) или иерархически принадлежит какой-нибудь группе, содержащейся в этом множестве (Сан-Паулу, Рио-де-Жанейро, Салвадор).
В качестве множества значений, на совпадение с которыми выполняется проверка, может фигурировать и результат запроса. В этом случае справа от оператора В необходимо указать описание запроса:
Для оператора В ИЕРАРХИИ также доступно использование частицы НЕ перед ним.