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