Оператор ПОДОБНО (аналог SQL-конструкции LIKE) в языке запросов 1С:Предприятие позволяет гибко фильтровать данные по шаблонам строк. Это незаменимый инструмент, когда нужно найти записи с частичным совпадением текста — например, товары с определённым префиксом в артикуле, контрагентов по фрагменту названия или документы с комментариями, содержащими ключевые слова. Однако не все разработчики используют его потенциал на 100%: кто-то ограничивается простыми шаблонами вроде "А%", а кто-то даже не знает о возможности экранирования специальных символов.

В этой статье разберём все нюансы работы с ПОДОБНО — от базового синтаксиса до оптимизации сложных запросов. Вы узнаете, как правильно комбинировать подстановочные символы % и _, избегать типичных ошибок при поиске по регистру, а также научитесь использовать регулярные выражения (через РЕГВЫР) для задач, где LIKE бессилен. Особое внимание уделим скрытым особенностям индексирования полей при использовании ПОДОБНО — это критично для производительности на больших базах.

1. Синтаксис оператора ПОДОБНО в 1С

Базовая конструкция условия ПОДОБНО выглядит так:

ГДЕ Поле ПОДОБНО "Шаблон"

Где Поле — это строка (название, артикул, комментарий и т.п.), а "Шаблон" — строка с подстановочными символами. В 1С:Предприятие поддерживаются два специальных символа:

  • 🔹 % — заменяет любое количество символов (включая ноль). Например, "А%" найдёт все строки, начинающиеся на "А".
  • 🔹 _ — заменяет ровно один символ. Например, "Р_т" найдёт "Рот", "Рат", "Рит" и т.д.

Важно: оператор чувствителен к регистру в большинстве СУБД (например, PostgreSQL или Microsoft SQL Server), но нечувствителен в 1С:Предприятие 8.3 при работе с файловой базой. Чтобы гарантированно игнорировать регистр, используйте функцию ВРЕГ():

ГДЕ ВРЕГ(Поле) ПОДОБНО ВРЕГ("шаблон")
💡

Если вам нужно найти строки, не соответствующие шаблону, используйте конструкцию НЕ ПОДОБНО. Например: ГДЕ Номенклатура.Артикул НЕ ПОДОБНО "АРТ%".

2. Подстановочные символы: примеры использования

Рассмотрим практические примеры применения % и _ в реальных задачах. Допустим, у нас есть справочник Номенклатура с полем Артикул, и нам нужно:

ЗадачаШаблонПример результата
Найти артикулы, начинающиеся на "К-100""К-100%""К-100А", "К-100/5", "К-10001"
Найти артикулы с ровно 3 символами после "Т""Т___""Т123", "ТАБВ", но не "Т12"
Найти артикулы, содержащие дефис"%-%""АРТ-01", "К-100-5", "123-45"
Найти артикулы, где вторая буква — "Р""_Р%""АРТ123", "1Р001", "ПР-45"

Обратите внимание на последний пример: шаблон "_Р%" найдёт все строки, где второй символ — "Р", независимо от длины. Это мощный инструмент для поиска по позициям символов.

📊 Как часто вы используете оператор ПОДОБНО в запросах 1С?
Постоянно, в большинстве запросов
Иногда, для специфических задач
Рядом не стоял, пользуюсь другими методами
Не знаю, что это такое

3. Экранирование специальных символов

Если вам нужно найти строки, содержащие сами символы %, _ или [, их необходимо экранировать с помощью квадратных скобок. Например, чтобы найти артикул "100%", используйте:

ГДЕ Артикул ПОДОБНО "100[%]"

Аналогично для поиска подчёркивания:

ГДЕ Наименование ПОДОБНО "А_[_]Б"

Это найдёт строки вроде "А_B" или "А1_Б2", но не "АБ" или "А1Б2".

Что будет, если не экранировать специальные символы?

Если в шаблоне есть неэкранированные % или _, они будут восприняты как подстановочные символы. Например, запрос ГДЕ Артикул ПОДОБНО "100%" найдёт все артикулы, начинающиеся на "100", а не только тот, который равен "100%".

4. Поиск по нескольким шаблонам (IN + LIKE)

Иногда требуется найти записи, соответствующие одному из нескольких шаблонов. Например, артикулы, начинающиеся на "А" или "К". Для этого используйте конструкцию В() (аналог SQL-оператора IN):

ГДЕ Артикул ПОДОБНО В("А%", "К%", "М%")

Это эквивалентно условию:

ГДЕ Артикул ПОДОБНО "А%"

ИЛИ Артикул ПОДОБНО "К%"

ИЛИ Артикул ПОДОБНО "М%"

Но первый вариант короче и оптимальнее с точки зрения производительности, особенно на больших базах данных.

✓ Убедитесь, что подстановочные символы экранированы, если нужно найти их буквально

✓ Проверьте регистр (при необходимости используйте ВРЕГ())

✓ Оцените selective index (индексная селективность) для полей с ПОДОБНО

✓ Тестируйте запрос на небольшой выборке перед запуском на всей базе-->

5. Оптимизация запросов с ПОДОБНО

Запросы с ПОДОБНО могут тормозить на больших базах, если не соблюдать простые правила:

  1. 📌 Избегайте шаблонов, начинающихся с %. Например, "%А" (поиск строк, оканчивающихся на "А") не может использовать индексы и приводит к полному сканированию таблицы. Лучше переформулировать задачу или использовать другие методы (например, ПРАВ()).
  2. 📌 Ограничивайте область поиска. Если ищете по справочнику, добавьте дополнительные условия по иерархии или реквизитам. Например:
ГДЕ Номенклатура.Родитель = &СсылкаНаГруппу

И Номенклатура.Артикул ПОДОБНО "К-%"

Для сложных шаблонов (например, с несколькими % в середине) рассмотрите возможность использования РЕГВЫР — он может быть эффективнее на некоторых СУБД.

💡

Запросы с ПОДОБНО, где шаблон начинается с %, игнорируют индексы. Это критично для баз с миллионами записей — время выполнения может вырасти в десятки раз.

6. Альтернативы ПОДОБНО: РЕГВЫР и строковые функции

Если ПОДОБНО не справляется с задачей (например, нужно искать по сложному регулярному выражению), используйте:

  • 🔧 РЕГВЫР(Строка, Шаблон) — поддержка полноценных регулярных выражений. Пример:
ГДЕ РЕГВЫР(Номенклатура.Наименование, "[А-Я]{3}-\d{4}")

Найдёт названия в формате "АБВ-1234" (три заглавные буквы, дефис, четыре цифры).

  • 🔧 Строковые функции: НАЙТИ(), ЛЕВ(), ПРАВ(). Пример:
ГДЕ НАЙТИ(Номенклатура.Артикул, "-") > 0

Это найдёт все артикулы, содержащие дефис (аналог ПОДОБНО "%-%", но без подстановочных символов).

💡

Функция РЕГВЫР доступна только в 1С:Предприятие 8.3.14+. Для более старых версий используйте ПОДОБНО или строковые функции.

7. Типичные ошибки и как их избежать

Даже опытные разработчики иногда допускают ошибки при работе с ПОДОБНО. Вот самые распространённые:

⚠️ Внимание: Если вы используете ПОДОБНО с параметрами запроса (например, &Шаблон), убедитесь, что передаёте строку с уже подставленными подстановочными символами. Конструкция ГДЕ Поле ПОДОБНО &Параметр + "%" не сработает — параметры подставляются буквально!

Пример неправильного кода:

Запрос.УстановитьПараметр("Префикс", "АРТ");

Запрос.Текст = "ГДЕ Артикул ПОДОБНО &Префикс + "%"";

Правильный вариант:

Запрос.УстановитьПараметр("Шаблон", "АРТ%");

Запрос.Текст = "ГДЕ Артикул ПОДОБНО &Шаблон";

Ещё одна типичная ошибка — поиск по нестрокам. Оператор ПОДОБНО работает только со строковыми полями. Если пытаетесь применить его к числу или дате, получите ошибку. Преобразуйте значение явно:

ГДЕ СТРОКА(Дата) ПОДОБНО "2023-%"

8. Практический пример: поиск дублей по шаблону

Допустим, вам нужно найти возможные дубли в справочнике Контрагенты, где названия отличаются только суффиксом (например, "ООО Ромашка" и "ООО Ромашка (филиал)"). Запрос может выглядеть так:

ВЫБРАТЬ РАЗЛИЧНЫЕ

ЛЕВ(Контрагенты.Наименование, НАЙТИ(Контрагенты.Наименование, " (")) КАК ОсновноеНаименование

ИЗ

Справочник.Контрагенты КАК Контрагенты

ГДЕ

НАЙТИ(Контрагенты.Наименование, " (") > 0

УПОРЯДОЧИТЬ ПО

ОсновноеНаименование

А затем проверяйте группы с одинаковым ОсновноеНаименование на дубли. Для более точного поиска можно использовать ПОДОБНО:

ВЫБРАТЬ

Контрагенты1.Наименование КАК Наименование1,

Контрагенты2.Наименование КАК Наименование2

ИЗ

Справочник.Контрагенты КАК Контрагенты1

ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контрагенты2

ПО Контрагенты1.Ссылка < Контрагенты2.Ссылка

ГДЕ

Контрагенты1.Наименование ПОДОБНО Контрагенты2.Наименование + "%"

💡

Для поиска дублей эффективнее использовать комбинацию строковых функций и ПОДОБНО, чем пытаться сделать всё через один оператор.

FAQ: Частые вопросы по запросам с ПОДОБНО

Можно ли использовать ПОДОБНО для поиска по нескольким полям одновременно?

Да, но синтаксис зависит от задачи. Если нужно, чтобы хотя бы одно поле соответствовало шаблону, используйте ИЛИ:

ГДЕ Поле1 ПОДОБНО "А%"

ИЛИ Поле2 ПОДОБНО "А%"

Если требуется, чтобы все поля соответствовали своим шаблонам, используйте И:

ГДЕ Поле1 ПОДОБНО "А%"

И Поле2 ПОДОБНО "Б%"

Почему запрос с ПОДОБНО работает медленно?

Скорее всего, шаблон начинается с % (например, "%А"), что приводит к полному сканированию таблицы. Попробуйте:

  • Переформулировать условие (например, искать по первым символам).
  • Добавить дополнительные ограничения (по дате, группе и т.п.).
  • Использовать РЕГВЫР для сложных шаблонов.

Также проверьте, есть ли индексы на полях, по которым ведётся поиск.

Как искать по шаблону с учётом регистра?

В большинстве СУБД ПОДОБНО чувствительно к регистру. Если нужно игнорировать регистр, используйте:

ГДЕ ВРЕГ(Поле) ПОДОБНО ВРЕГ("шаблон")

Если же, наоборот, нужно учитывать регистр, но в файловой базе поиск идёт без учёта регистра, придётся использовать РЕГВЫР или переносить логику в код на .

Можно ли в шаблоне ПОДОБНО использовать регулярные выражения?

Нет, ПОДОБНО поддерживает только подстановочные символы % и _. Для регулярных выражений используйте функцию РЕГВЫР (доступна с версии 1С:Предприятие 8.3.14):

ГДЕ РЕГВЫР(Поле, "[А-Я]{2}-\d{3}")

Это найдёт строки вида "АБ-123" (две заглавные буквы, дефис, три цифры).

Как экранировать специальные символы в динамически формируемом шаблоне?

Если шаблон формируется программно и может содержать %, _ или [, замените их экранированными версиями:

Шаблон = СтрЗаменить(Шаблон, "%", "[%]");

Шаблон = СтрЗаменить(Шаблон, "_", "[_]");

Шаблон = СтрЗаменить(Шаблон, "[", "[[]");

После этого можно безопасно использовать шаблон в запросе:

ГДЕ Поле ПОДОБНО &Шаблон