Область применения: управляемое приложение, мобильное приложение, обычное приложение.
1. Оператор ПОДОБНО в тексте запроса необходимо использовать только
Не следует формировать строку шаблона вычислениями или конкатенацией.
Правильно:
Реквизит ПОДОБНО "123%"
Реквизит ПОДОБНО &Шаблон
Неправильно:
Реквизит ПОДОБНО "123" + "%"
Реквизит ПОДОБНО &Шаблон + "%"
Реквизит ПОДОБНО Таблица.Шаблон
2. При разработке конфигурации необходимо использовать такие шаблоны для оператора ПОДОБНО, которые одинаково работают на всех СУБД, поддерживаемых платформой 1С:Предприятие:
Недопустимы, т.к. не работает на IBM DB 2:
При разработке прикладных решений необходимо учитывать все ограничения, чтобы обеспечивать работу на всех СУБД, поддерживаемых платформой 1С:Предприятие (см. документацию к платформе 1С:Предприятие):
3. Необходимо экранировать все спецсимволы (_%[]^), чтобы они трактовались как часть искомого текста (а не как спецсимвол). Иначе если пользователь в строке поиска, например, введет текст со скобками [ ], то при выполнении запроса возникнет ошибка вида: ERROR: invalid regular expression: invalid character range (PostgreSQL).
Для экранирования необходимо:
Например, для поиска по строке "100%":
"100~%" СПЕЦСИМВОЛ "~"
При этом нужно иметь в виду, что установка параметров запроса с помощью Запрос.УстановитьПараметр не экранирует спецсимволы шаблона для ПОДОБНО. Для экранирования спецсимволов в конфигурациях с Библиотекой стандартных подсистем (БСП) рекомендуется вызывать процедуру ОбщегоНазначения.СформироватьСтрокуДляПоискаВЗапросе.
Правильно:
ВЫБРАТЬ
Номенклатура.Ссылка КАК Ссылка
ИЗ
Справочник.Номенклатура КАК Номенклатура
ГДЕ
Номенклатура.Наименование ПОДОБНО &Шаблон СПЕЦСИМВОЛ "~"
…
Запрос.УстановитьПараметр("Шаблон", "%" + ОбщегоНазначения.СформироватьСтрокуДляПоискаВЗапросе(ИскомыйТекст) + "%");
Реализация для конфигураций без Библиотеки стандартных подсистем (БСП):
Функция СформироватьСтрокуДляПоискаВЗапросе(Знач СтрокаПоиска) Экспорт
Результат = СтрокаПоиска;
Результат = СтрЗаменить(Результат, "~", "~~");
Результат = СтрЗаменить(Результат, "%", "~%");
Результат = СтрЗаменить(Результат, "_", "~_");
Результат = СтрЗаменить(Результат, "[", "~[");
Результат = СтрЗаменить(Результат, "]", "~]");
Результат = СтрЗаменить(Результат, "^", "~^");
Возврат Результат;
КонецФункции
4. Сравнение выполняется без учета регистра символов.