Подобно в запросе 1с шаблоны

Готовые шаблоны 1С для любой задачи: от зарплаты до складского учёта. Внедряй за минуты, экономий часы жизни и избегай ошибок новичков.

Бесплатная консультация юриста

+7 (800) 301-07-30

Реклама jurik.ru

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

Общий синтаксис оператора

Конструкция оператора состоит из трёх частей:

  1. Выражение — поле или строка, которую проверяем;
  2. Оператор — ПОДОБНО;
  3. Шаблон — строка, построенная по определённым правилам.

Если значение выражения удовлетворяет шаблону, результатом оператора будет ИСТИНА, иначе — ЛОЖЬ.

Служебные символы шаблона

  • % — любое количество любых символов (в т.ч. ноль);
  • _ — ровно один произвольный символ;
  • […] — один символ из перечисленных в скобках;
  • [^…], один символ, НЕ входящий в перечисленные.

Примеры использования

Поиск по началу строки (автоподбор)

Классический пример — поиск банка по введённому пользователем тексту:


Процедура БанкОкончаниеВводаТекста(Элемент, Текст, Значение, СтандартнаяОбработка)
  СтандартнаяОбработка = Ложь;
  Запрос = Новый Запрос;
  Запрос.УстановитьПараметр("Наименование", Текст + "%");
  Запрос.Текст = "ВЫБРАТЬ Банки.Ссылка ИЗ Справочник.Банки КАК Банки
  ГДЕ Банки.Наименование ПОДОБНО &Наименование";
КонецПроцедуры

Поиск по вхождению слова

Например, найдём всех контрагентов, в наименовании которых встречается слово «магазин»:


Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ Контрагенты.Наименование КАК Наименование
ИЗ Справочник.Контрагенты КАК Контрагенты
ГДЕ Контрагенты.Наименование ПОДОБНО &Шаблон";
Запрос.УстановитьПараметр("Шаблон", "%магазин%");
Результат = Запрос.Выполнить;

Поиск по окончанию строки

Выбор всех наименований, заканчивающихся на букву «М»:


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

Поиск телефона по шаблону

Пример поиска в регистре сведений «КонтактнаяИнформация» по началу номера (например, +7 (9) *—):


Запрос.Текст = "ВЫБРАТЬ КонтактнаяИнформация.Объект,
  ВЫРАЗИТЬ(КонтактнаяИнформация.Представление КАК СТРОКА(255)) КАК Телефон
ИЗ РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
ГДЕ КонтактнаяИнформация.Тип = &ТипКИ И Телефон ПОДОБНО &Шаблон";
Запрос.УстановитьПараметр("Шаблон", "+7(9)%");

Подводные камни: спецсимволы в параметре

Если пользователь вводит текст, содержащий символы %, _ или [, они будут восприняты как служебные, и поиск сработает некорректно. Решение — использовать ключевое слово СПЕЦСИМВОЛ и экранировать строку:


Запрос.Текст = "ВЫБРАТЬ Номенклатура.Ссылка КАК Ссылка
ИЗ Справочник.Номенклатура КАК Номенклатура
ГДЕ Номенклатура.Наименование ПОДОБНО &Шаблон СПЕЦСИМВОЛ ""~""";
Запрос.УстановитьПараметр("Шаблон",
  ОбщегоНазначения.СформироватьСтрокуДляПоискаВЗапросе(ИскомыйТекст) + "%");

Функция СформироватьСтрокуДляПоискаВЗапросе из БСП автоматически экранирует все служебные символы.

Типичные ошибки

  • Забыты символы % в параметре — поиск работает как точное сравнение;
  • Передача шаблона прямо в текст запроса вместо параметра — риск ошибок и небезопасно;
  • Поиск по полю неограниченной длины без ВЫРАЗИТЬ — может приводить к ошибкам СУБД;
  • Отсутствие экранирования спецсимволов при пользовательском вводе.

Оператор ПОДОБНО — мощный инструмент гибкого поиска в 1С. Грамотное использование шаблонов, параметров и экранирования спецсимволов позволяет строить удобные механизмы автоподбора и фильтрации. Материал подготовлен на основе публикаций практикующих специалистов, в частности программиста-консультанта 1С К. А*.