Параметр «Подобно» в языке запросов 1С:Предприятие — один из самых гибких инструментов для работы со строковыми данными. Он позволяет фильтровать записи по шаблону, используя символы-подстановочные знаки (% и _), а в расширенном режиме — даже регулярные выражения. Однако многие пользователи и разработчики ограничиваются базовыми сценариями, упуская возможности оптимизации запросов или решения нестандартных задач.
В этой статье разберём не только стандартный синтаксис «Подобно», но и малоизвестные фишки: как обойти ограничения на длину шаблона, почему иногда лучше использовать «В» вместо «Подобно», и как с помощью этого параметра искать данные с учётом регистра. Особое внимание уделим совместимости с разными версиями платформы 1С (8.3.20+), где поведение оператора было доработано.
Если вы бухгалтер или аналитик, работающий с отчётами, или разработчик, пишущий сложные выборки — здесь найдёте практические примеры для ваших задач. А если вы только начинаете осваивать запросы в 1С, то раздел с ошибками и типичными заблуждениями поможет избежать подводных камней.
1. Синтаксис параметра «Подобно»: базовые правила
Оператор «Подобно» в запросах 1С используется для сравнения строкового поля с шаблоном. Основные символы:
- 🔹
%— заменяет любое количество символов (включая ноль). Например, шаблон"Иван%"найдёт "Иван", "Иванов", "Ивановский". - 🔹
_— заменяет ровно один символ. Шаблон"А_а"подойдёт для "Ана", "Аза", но не для "Аня". - 🔹
[abc]— любой один символ из списка (например,"[КМ]ирилл"найдёт "Кирилл" и "Мирилл"). - 🔹
[^abc]— любой один символ, кроме указанных.
Пример базового запроса с «Подобно»:
ВЫБРАТЬ
Контрагенты.Наименование КАК Контрагент
ИЗ
Справочник.Контрагенты КАК Контрагенты
ГДЕ
Контрагенты.Наименование ПОДОБНО "ООО %Альфа%"
Важно: по умолчанию сравнение нечувствительно к регистру. То есть шаблон "иван%" найдёт и "Иван", и "ИВАН", и "иван". Чтобы учитывать регистр, используйте конструкцию «ПОДОБНО РАЗЛИЧАЯ РЕГИСТР» (доступно с версии платформы 8.3.18+).
2. «Подобно» vs «В»: когда что применять
Новички часто путают «Подобно» с оператором «В», который проверяет вхождение подстроки. Разница принципиальная:
- 🔍 «В» ищет любое вхождение подстроки. Например,
ГДЕ Наименование В "Альфа"найдёт и "Альфа-Банк", и "Торговый дом Альфа", и "Бетон-Альфа-Строй". - 🎯 «Подобно» работает с шаблоном, где важны позиции символов. Шаблон
"Альфа%"не найдёт "Мега-Альфа", зато найдёт "Альфа-Бетта".
Когда использовать «В»:
- 📌 Нужно найти все записи, содержащие фрагмент (например, "ООО" в наименованиях контрагентов).
- 📌 Шаблон простой и не требует учёта позиций символов.
Когда «Подобно» эффективнее:
- 🎭 Нужно искать по началу/концу строки (например, все артикулы, начинающиеся на "ART-").
- 🔢 Требуется гибкая подстановка символов (например, шаблон
"Р___2026"для поиска документов с префиксом "Р" и годом в конце).
Если шаблон для «Подобно» получается слишком сложным (более 10 символов с подстановочными знаками), рассмотрите возможность разбиения условия на несколько простых фильтров с помощью «И»/«ИЛИ». Это ускорит выполнение запроса.
3. Расширенные возможности: регулярные выражения
С версии платформы 1С:Предприятие 8.3.20 в операторе «Подобно» появилась поддержка регулярных выражений (regex). Для этого шаблон должен начинаться с символа ~. Примеры:
ГДЕ Наименование ПОДОБНО "~^[А-Я][а-я]+$"
Этот шаблон найдёт все наименования, начинающиеся с заглавной буквы и состоящие только из кириллицы (например, "Иванов", но не "Иванов123" или "ivanov").
Полезные regex-шаблоны для 1С:
- 📊
"~^\d{3}-\d{2}$"— поиск строк формата "123-45" (например, номера накладных). - 📊
"~[А-Я]{3}\d{6}"— три заглавные буквы + 6 цифр (артикулы, серийные номера). - 📊
"~^(?!.[ЙЦУКЕ]).$"— исключение строк, содержащих указанные буквы.
Ограничения regex в 1С:
⚠️ Внимание: Не все возможности стандартных регулярных выражений поддерживаются в 1С. Например,lookbehind-assertions ((?<=...)) могут не работать. Тестируйте шаблоны на реальных данных!
Пример сложного regex для email
ГДЕ КонтактнаяИнформация ПОДОБНО "~^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$"
Этот шаблон проверяет корректность email-адресов в справочнике контрагентов.
4. Типичные ошибки и как их избежать
Даже опытные разработчики иногда допускают ошибки при работе с «Подобно». Рассмотрим топ-5 заблуждений:
- Игнорирование экранирования. Символы
%,_,[в шаблоне нужно экранировать, если они должны восприниматься буквально. Например, чтобы найти строку "100%", шаблон должен быть"100\%". - Перебор с подстановочными знаками. Шаблон
"%"вернёт все строки в таблице, что эквивалентно отсутствию фильтра. Это может загрузить сервер при больших объёмах данных. - Неучёт длины строки. Если поле имеет тип
Строка(10), а шаблон подразумевает больше символов (например,"%%%%%%%%%%%"), запрос вернёт пустой результат. - Путаница с регистром. В версиях до 8.3.18 оператор всегда игнорировал регистр, что могло приводить к неожиданным совпадениям.
- Использование «Подобно» для числовых полей. Оператор работает только со строковыми данными! Для чисел используйте «=», «>», «МЕЖДУ».
Пример ошибочного запроса:
ГДЕ НомерДокумента ПОДОБНО "123%" // Ошибка: НомерДокумента — числовое поле!
Правильный вариант:
ГДЕ НомерДокумента >= 123000 И НомерДокумента < 124000
Экранированы специальные символы (%_[])
Шаблон не начинается/заканчивается лишними пробелами
Учтён регистр (если важно)
Поле в условии — строкового типа
Тестирование на реальных данных-->
5. Оптимизация запросов с «Подобно»
Неправильное использование «Подобно» может тормозить выполнение запросов, особенно на больших базах. Советы по оптимизации:
1. Избегайте шаблонов, начинающихся с %.
Запрос ГДЕ Наименование ПОДОБНО "%Иван%" вынуждает СУБД сканировать все строки таблицы (table scan). Лучше переписать как:
ГДЕ Наименование ПОДОБНО "Иван%"
Или использовать «В», если ищется вхождение подстроки:
ГДЕ Наименование В "Иван"
2. Разбивайте сложные шаблоны.
Вместо:
ГДЕ Артикул ПОДОБНО "A%123_%"
Лучше:
ГДЕ Артикул ПОДОБНО "A%"
И Артикул ПОДОБНО "%123_%"
3. Используйте индексы.
Если поле, по которому идёт фильтрация «Подобно», не проиндексировано, запрос будет медленным. Проверьте план выполнения запроса в Консоли запросов 1С (клавиша F5).
| Шаблон | Эффективность | Альтернатива |
|---|---|---|
"%Иван%" |
🚫 Низкая (полное сканирование) | "Иван%" или В "Иван" |
"A____" (5 символов) |
⚠️ Средняя | ДЛИНА(Поле) = 5 И Поле ПОДОБНО "A%" |
"~^\d{3}-\d{4}$" |
✅ Высокая (regex оптимизирован) | — |
Для ускорения запросов с «Подобно» комбинируйте оператор с другими условиями, сужающими выборку (например, по дате, типу документа или статусу).
6. Практические примеры для бухгалтеров и аналитиков
Разберём реальные кейсы, где «Подобно» экономит время при формировании отчётов.
Пример 1: Поиск контрагентов с некорректными ИНН
Задача: найти контрагентов, у которых ИНН начинается с нулей или содержит недопустимые символы.
ВЫБРАТЬ
Контрагенты.Наименование,
Контрагенты.ИНН
ИЗ
Справочник.Контрагенты КАК Контрагенты
ГДЕ
Контрагенты.ИНН ПОДОБНО "0%" // Начинается с нуля
ИЛИ Контрагенты.ИНН ПОДОБНО "%[^0-9]%" // Содержит не цифры
Пример 2: Анализ номенклатуры по артикулам
Задача: выгрузить товары, артикулы которых соответствуют внутреннему стандарту (например, "TR-" + 6 цифр).
ВЫБРАТЬ
Номенклатура.Наименование,
Номенклатура.Артикул
ИЗ
Справочник.Номенклатура КАК Номенклатура
ГДЕ
Номенклатура.Артикул ПОДОБНО "TR-______"
И ДЛИНА(Номенклатура.Артикул) = 9
Пример 3: Контроль заполнения реквизитов
Задача: найти документы, где в поле "Комментарий" указано "срочно", но не заполнено поле "Ответственный".
ВЫБРАТЬ
Документы.Номер,
Документы.Дата
ИЗ
Документ.ЗаказПокупателя КАК Документы
ГДЕ
Документы.Комментарий ПОДОБНО "%срочно%"
И Документы.Ответственный = ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка)
Для анализа больших справочников (например, номенклатуры) комбинируйте «Подобно» с виртуальными таблицами. Например, используйте Справочник.Номенклатура.ПоискПоНаименованию для ускорения поиска.
7. Совместимость с разными версиями 1С
Поведение оператора «Подобно» эволюционировало вместе с платформой. Ключевые изменения:
- 📌 8.2 и ранние 8.3: только базовый синтаксис с
%и_, без regex. Регистр всегда игнорировался. - 📌 8.3.18+: появилась опция «РАЗЛИЧАЯ РЕГИСТР». Пример:
ГДЕ Наименование ПОДОБНО РАЗЛИЧАЯ РЕГИСТР "Иван%" - 📌 8.3.20+: добавлена поддержка регулярных выражений (шаблоны с
~). - 📌 8.3.22+: улучшена обработка Unicode-символов в шаблонах.
Как проверить версию платформы в коде:
Сообщить(Строка(Платформа.Версия()));
⚠️ Внимание: Если вы используете облачную версию 1С (1C:Fresh), некоторые расширенные возможности «Подобно» могут быть ограничены. Уточняйте актуальные ограничения в документации вашего тарифа.
8. Альтернативы «Подобно»: когда стоит выбрать другой подход
Иногда «Подобно» — не лучший выбор. Рассмотрим альтернативы:
1. Функция «НАЙТИ»
Если нужно найти позицию подстроки или проверить её наличие с учётом регистра:
ГДЕ НАЙТИ(Наименование, "Иван") > 0
2. «ПОДСТРОКА» + «СОВПАДАЕТ»
Для проверки начала/конца строки без подстановочных знаков:
ГДЕ ПОДСТРОКА(Артикул, 1, 3) = "ART"
3. Полнотекстовый поиск
Если нужно искать по нескольким словам или с учётом морфологии (например, "дом" = "дома"):
ГДЕ ПОЛНЫЙТЕКСТ(Описание, "строительство дом")
4. Внешние обработки
Для сложных сценариев (например, поиск по звучанию — "Иванов" = "Ивановв") лучше использовать внешние компоненты или Библиотеку стандартных подсистем (БСП).
| Задача | «Подобно» | Альтернатива |
|---|---|---|
| Поиск по началу строки | "Иван%" |
ПОДСТРОКА(Поле,1,4)="Иван" |
| Поиск с учётом регистра | ПОДОБНО РАЗЛИЧАЯ РЕГИСТР (8.3.18+) |
НАЙТИ(Поле, "Иван") |
| Сложные шаблоны (email, телефоны) | ПОДОБНО "~regex" (8.3.20+) |
Внешняя компонента для regex |
Если вам нужна максимальная производительность, тестируйте альтернативные методы на реальных данных. Например, для поиска по началу строки ПОДСТРОКА может работать быстрее, чем «Подобно».
FAQ: Частые вопросы по параметру «Подобно»
Можно ли в одном запросе использовать несколько условий с «Подобно»?
Да, можно комбинировать через «И» или «ИЛИ». Пример:
ГДЕ Наименование ПОДОБНО "Иван%"
И Артикул ПОДОБНО "A____"
Однако слишком много условий с «Подобно» могут замедлить запрос. В таких случаях лучше использовать временные таблицы.
Как экранировать специальные символы в шаблоне?
Используйте обратный слэш \ перед символами %, _, [. Пример:
ГДЕ Описание ПОДОБНО "50\% скидка"
В regex-шаблонах (с ~) экранируйте по правилам регулярных выражений (например, \. для точки).
Почему запрос с «Подобно» работает медленно?
Основные причины:
- 🐢 Шаблон начинается с
%(например,"%Иван%"). - 🐢 Поле не проиндексировано.
- 🐢 Слишком общий шаблон (например,
"%").
Решения: сузьте условие, добавьте индексы или разбивайте запрос на части.
Можно ли использовать «Подобно» для поиска по датам или числам?
Нет, оператор работает только со строковыми полями. Для дат используйте:
ГДЕ Дата МЕЖДУ &ДатаНачало И &ДатаКонец
Для чисел — стандартные операторы сравнения (=, >, <).
Как искать пустые строки или NULL?
Для пустых строк:
ГДЕ Поле = ""
Для NULL (незаполненных значений):
ГДЕ Поле ЕСТЬ NULL
Оператор «Подобно» с пустым шаблоном ("") работать не будет.