Зачастую при разработке или настройке отчетов в 1С возникает задача отобрать элементы справочника, у которых код содержит определенную последовательность символов. Рассмотрим, как правильно реализовать такой поиск с помощью языка запросов и на какие «подводные камни» стоит обратить внимание, чтобы запрос отработал корректно.
Для поиска подстроки в поле типа «Строка» в языке запросов 1С используется специальный оператор ПОДОБНО. Этот оператор позволяет задавать шаблон поиска, где символ % означает произвольную последовательность любых символов (включая пустую строку).
Чтобы найти все записи, в коде которых встречается определенная последовательность, мы составляем конструкцию, где искомый фрагмент заключается в знаки процента. Разберем пример реализации:
ВЫБРАТЬ
ФизическиеЛица.Код КАК Код,
ФизическиеЛица.Ссылка КАК Ссылка
ИЗ
Справочник.ФизическиеЛица КАК ФизическиеЛица
ГДЕ
ФизическиеЛица.Код ПОДОБНО "%123%"
В данном примере запрос вернет все элементы, где подстрока «123» находится в любом месте кода. Если же нам необходимо найти коды, которые начинаются с определенных символов, мы просто убираем первый символ процента, например: "%TL%".
Если вы применили конструкцию ПОДОБНО, но не получили ожидаемого результата, давайте проанализируем типичные причины, с которыми сталкиваются разработчики:
ПОДОБНО предназначен исключительно для работы со строками. Если в конфигураторе реквизит Код определен как число, поиск по шаблону вызовет ошибку или вернет пустой результат. Убедитесь, что тип реквизита — Строка.
// В коде 1С:
Запрос.УстановитьПараметр("ЧастьКода", "%" + ВведеннаяСтрока + "%");
При работе с поиском по части кода важно помнить о производительности. Поиск с использованием % в начале строки (например, "%123") заставляет систему сканировать всю таблицу целиком, так как индексы не могут быть эффективно использованы для таких условий. Для небольших справочников это не критично, но в высоконагруженных системах с миллионами записей лучше использовать полнотекстовый поиск.
Если вы столкнулись с ситуацией, когда запрос «не работает», выполните следующие шаги для отладки:
ТабельныйНомер, у которого могут быть свои особенности хранения.Код (есть ли там пробелы, тире или нули).ПОДОБНО корректно обрабатывается вашей базой данных.Помните: внимательность к структуре данных — ключ к успеху. Чаще всего проблема заключается не в самом языке запросов, а в несовпадении формата того, что мы ищем, с тем, что физически записано в базе данных.