Запросы в 1С - мощный инструмент для работы с данными. Однако не все знают тонкости их применения. Давайте разберемся, как правильно использовать оператор ПОДОБНО в запросах 1С для эффективного поиска нужной информации.
Назначение и синтаксис оператора ПОДОБНО
Оператор ПОДОБНО в языке запросов 1С предназначен для сравнения строковых значений с заданным шаблоном. В результате такой проверки возвращается логическое значение Истина или Ложь.
Отличие ПОДОБНО от оператора равно заключается в возможности использования специальных символов для формирования гибких шаблонов поиска.
Рассмотрим пример использования ПОДОБНО в условии запроса:
ВЫБРАТЬ Поле1, Поле2 ИЗ Таблица ГДЕ Поле1 ПОДОБНО 'шаблон'
Здесь ПОДОБНО проверяет значения Поле1 на соответствие заданному шаблону и возвращает Истина/Ложь для каждой строки таблицы. Это позволяет гибко фильтровать данные в запросе.
Синтаксис ПОДОБНО состоит из 3 частей:
- Проверяемое значение (строка)
- Сам оператор ПОДОБНО
- Шаблон для сравнения
Для формирования шаблона используются специальные символы:
- % - любое количество любых символов
- _ - один произвольный символ
- [...] - диапазон символов
- [^...] - исключение символов
Рассмотрим их подробнее на примерах далее.
Примеры простых шаблонов ПОДОБНО
Начнем с простого примера поиска всех значений, содержащих слово "РЕЗЕЦ":
Наименование ПОДОБНО '%РЕЗЕЦ%'
Символы % в начале и конце шаблона означают "любые символы до и после". То есть будут найдены строки, где есть подстрока "РЕЗЕЦ".
Другой распространенный пример - поиск значений со специальным символом. Допустим, нам нужны строки с символом %:
Наименование ПОДОБНО '%СПЕЦСИМВОЛ "\"%'
Здесь СПЕЦСИМВОЛ определяет, что % в шаблоне - это обычный символ для поиска.
Еще один полезный прием - поиск по параметру. Для этого параметр приводится к строке и складывается со строкой шаблона:
Наименование ПОДОБНО ПараметрЗапроса + '%'
Это позволяет динамически формировать шаблоны для поиска в запросах.
Сложные шаблоны ПОДОБНО
Рассмотрим более сложные варианты использования ПОДОБНО с помощью дополнительных символов.
Можно комбинировать простые шаблоны для более точного поиска. Например:
Наименование ПОДОБНО '%слово1%слово2_'
Это найдет строки, содержащие слово1, слово2 и любой символ между ними.
Полезный инструмент - квадратные скобки []. Они позволяют искать вхождение любого символа из заданных:
Наименование ПОДОБНО '%[абвг]%'
Найдет строки с буквами а, б, в или г.
В скобках можно указывать диапазоны: Наименование ПОДОБНО '%[а-я]%'
Это найдет русские буквы. Аналогично работают диапазоны чисел.
Обратный поиск (исключение) задается конструкцией [^...]:
Наименование ПОДОБНО '%[^абв]%'
Здесь будут найдены строки без букв а, б, в.
Комбинируя все эти символы, можно составлять очень гибкие и мощные шаблоны поиска, приближаясь по возможностям к регулярным выражениям.
Особенности реализации ПОДОБНО
Хотя ПОДОБНО работает со строками, его реализация оптимизирована в 1С:
- Используются индексы для ускорения поиска
- Производительность отслеживается в профайлере как для обычных запросов
- Есть ограничения по типам данных (например, Null не поддерживается)
В отличие от полнотекстового поиска ПОДОБНО работает "из коробки" без дополнительных настроек в 1С и СУБД.
При этом возможности оптимизации запросов с ПОДОБНО также есть:
- Использование индексов
- Объединение нескольких условий на одно поле
- Разбиение сложных запросов
Это позволяет добиться высокой производительности поиска по шаблонам.
ПОДОБНО в разных версиях 1С
Впервые оператор ПОДОБНО появился в платформе 1С версии 8.1. В версии 8.2 была улучшена производительность за счет использования индексов.
В современных версиях 8.3 ПОДОБНО реализован единообразно для запросов, отборов, динамических списков и отчетов, что упрощает изучение.
Особенности синтаксиса и поведения оператора ПОДОБНО сохраняются между версиями платформы. Это обеспечивает совместимость и позволяет повторно использовать наработанные ранее запросы.
В перспективе возможно расширение функциональности, например, для поддержки регулярных выражений. Но ПОДОБНО вряд ли будет полностью заменено, поскольку оптимизировано под особенности работы 1С.
Рекомендации по применению ПОДОБНО
Рассмотрим некоторые рекомендации по использованию оператора ПОДОБНО, основанные на практическом опыте:
- Придумывайте шаблон "от обратного" - сначала определите результат, который нужно найти, а затем подберите подходящую маску.
- Используйте символ подстановки % в начале и конце шаблона по умолчанию, если точное вхождение не требуется.
- Проверяйте производительность запросов с ПОДОБНО и при необходимости оптимизируйте их.
- Объединяйте несколько простых шаблонов через ИЛИ, если нужен сложный множественный поиск.
Кроме того, стоит избегать распространенных ошибок:
- Не используйте ПОДОБНО для полей со значением Null - это приведет к ошибке.
- Задавайте параметры и переменные в виде строк, иначе потребуется дополнительное преобразование.
- Не разбивайте шаблон на части и не распределяйте по разным условиям - это усложнит запрос.
Лайфхаки для ПОДОБНО
Рассмотрим несколько полезных приемов работы с ПОДОБНО:
- Используйте вычислимые поля в запросах, если нужно предварительно нормализовать данные для поиска.
- Для исключения избыточной нагрузки ограничивайте выборку с помощью дополнительных условий.
- Применяйте индексы по строковым полям, по которым часто идет поиск ПОДОБНО.
- Объединяйте несколько простых условий ПОДОБНО для одного поля, чтобы оптимизировать запрос.
Эти приемы помогут ускорить работу запросов и снизить нагрузку на СУБД.
Альтернативы ПОДОБНО
В некоторых случаях имеет смысл рассмотреть альтернативные варианты поиска строк:
- Полнотекстовый поиск - если нужен более мощный и гибкий инструмент.
- Использование внешних представлений для нормализации данных.
- Поиск в локальных списках значений для небольших справочников.
- Отборы и списки значений СКД для упрощенных шаблонов.
Однако ПОДОБНО в большинстве случаев остается лучшим выбором, так как оптимизирован в 1С под быстрый поиск по строкам.
Примеры запросов ПОДОБНО
В завершение приведем несколько примеров реальных запросов с использованием оператора ПОДОБНО:
ВЫБРАТЬ * ИЗ Документ.ЗаказПокупателя ГДЕ Документ.Номер ПОДОБНО 'ЗП/%' И Документ.Дата МЕЖДУ &НачДата И &КонДатаПериода
Поиск заказов покупателя по номеру с префиксом "ЗП/" за указанный период.
ВЫБРАТЬ Сотрудники.ФИО КАК ФИО, Телефоны.НомерТелефона КАК Телефон ИЗ Справочник.Сотрудники КАК Сотрудники ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Телефоны КАК Телефоны ПО Сотрудники.Ссылка = Телефоны.Ссылка ГДЕ Телефоны.НомерТелефона ПОДОБНО '+7([0-9][0-9][0-9])555[_][0-9][0-9]'
Получение списка сотрудников с номерами телефонов по заданной маске.
Эти и многие другие задачи можно эффективно решать с помощью гибкого поиска по шаблонам через оператор ПОДОБНО в 1С.