A1sQ.EscapeLike
Назначение: экранировать строку под использование в операторе ПОДОБНО (SQL LIKE) с ESCAPE '~'.
Что делает: заменяет служебные символы шаблонов на безопасные последовательности с тильдой.
Что делает: заменяет служебные символы шаблонов на безопасные последовательности с тильдой.
Сигнатура
Function EscapeLike(SearchString) Export
Как работает (по исходному коду)
Result = SearchString;
Result = StrReplace(Result, "~", "~~");
Result = StrReplace(Result, "%", "~%");
Result = StrReplace(Result, "_", "~_");
Result = StrReplace(Result, "[", "~[");
Result = StrReplace(Result, "]", "~]");
Result = StrReplace(Result, "^", "~^");
Возврат Result;
Порядок важен: сначала экранируется сама тильда ~, иначе последующие замены добавили бы «ложные» escape‑последовательности.
Параметры
- SearchString — исходная строка пользователя (может содержать символы %, _, [, ], ^, ~).
Возвращает
Строку — экранированную под LIKE/ПОДОБНО с ESCAPE '~'.
Примеры
1) «Содержит» (совместно с LikePattern)
Mask = A1sQ.LikePattern("100% хлопок"); // "%100~% хлопок%"
QT = "
|ВЫБРАТЬ Наименование
|ИЗ Справочник.Номенклатура
|ГДЕ Наименование ПОДОБНО &Mask ESCAPE '~'";
Q = A1sQ.CreateQ(QT);
Q.УстановитьПараметр("Mask", Mask);
ТЗ = Q.Выполнить().Выгрузить();
2) Начинается/заканчивается на...
StartMask = A1sQ.EscapeLike("ABC") + "%"; // ABC%
EndMask = "%" + A1sQ.EscapeLike("XYZ"); // %XYZ
QT = "
|ВЫБРАТЬ Код
|ИЗ Справочник.Номенклатура
|ГДЕ Код ПОДОБНО &StartMask ESCAPE '~'
| ИЛИ Код ПОДОБНО &EndMask ESCAPE '~'";
Q = A1sQ.CreateQ(QT);
A1sQ.SetQParams(Q, Новый Структура("StartMask, EndMask", StartMask, EndMask));
ТЗ = Q.Выполнить().Выгрузить();
3) Сложная строка со скобками
Src = "[A]_01^";
Mask = "%" + A1sQ.EscapeLike(Src) + "%"; // "%~[A~]~_01~^%"
QT = "ВЫБРАТЬ ... ГДЕ Код ПОДОБНО &Mask ESCAPE '~'";
Нюансы и ограничения
✅ Минимизирует «ложные срабатывания» LIKE за счёт корректного экранирования
✅ Совместима с 1С-языком запросов (оператор ПОДОБНО)
❗ Не забывайте дописывать ESCAPE '~' в условие
❗ Регистр/коллация зависят от СУБД — функция их не меняет
❗ Это не защита от всех видов инъекций — используйте параметры запроса
Связанные функции
- LikePattern — готовая маска «%...%».
- BuildQ / SetQParams — сборка и параметры запроса.