Как отобрать значения в запросе 1С по первой букве (русской и латинской)?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

Почему не стоит использовать функцию ПОДСТРОКА?

Начинающие разработчики часто используют конструкцию вида ПОДСТРОКА(Наименование, 1, 1) = «Р». Хотя такой подход работает, мы настоятельно не рекомендуем использовать его по нескольким причинам:

  1. Производительность: Применение функции ПОДСТРОКА к полю базы данных в условии ГДЕ заставляет СУБД проводить полное сканирование таблицы (Full Scan). Это означает, что индексы по полю «Наименование» перестают работать, и запрос на больших объемах данных будет выполняться крайне медленно.
  2. Громоздкость кода: Если нам нужно учесть и заглавные, и строчные буквы, а также латиницу, условие превращается в длинную цепочку операторов ИЛИ, что затрудняет чтение и поддержку кода.

Использование оператора ПОДОБНО — лучшее решение

Для решения подобных задач в языке запросов 1С предусмотрен мощный оператор ПОДОБНО. Он позволяет использовать шаблоны поиска, которые корректно обрабатываются оптимизатором СУБД. Давайте проанализируем, как правильно составить такой запрос.

Конструкция с ПОДОБНО позволяет нам искать значения, начинающиеся с определенного набора символов, используя специальные маски в квадратных скобках [].

Реализация задачи: отбор по первой букве «Р» или «p»

Чтобы найти все записи, начинающиеся на «Р», «р», «P» или «p», мы используем шаблон внутри кавычек. Знак % в данном случае означает любое количество любых символов после найденной буквы.

Разберем пример кода, который эффективно решит вашу задачу:


ВЫБРАТЬ
    Номенклатура.Ссылка КАК Товар
ИЗ
    Справочник.Номенклатура КАК Номенклатура
ГДЕ
    Номенклатура.Наименование ПОДОБНО "[РрPp]%"

Что здесь происходит:

Важные нюансы работы с ПОДОБНО

Рассмотрим подробнее поведение системы:

Подведем итоги

Мы проанализировали ситуацию и выяснили, что оптимальный путь — это отказ от функций обработки строк в условиях ГДЕ в пользу оператора ПОДОБНО. Это обеспечит высокую скорость работы ваших отчетов и обработок, а также сделает код чистым и профессиональным. Используйте приведенный пример шаблона "[РрPp]%", и ваша задача будет решена корректно и быстро.

← На главную