У вас ПОДОБНый код не вызывает никаких вопросов?
Запрос = Новый Запрос("
|ВЫБРАТЬ
| Т.Поле1
|ИЗ
| Таблица КАК Т
|ГДЕ
| Т.Поле2 ПОДОБНО """ + СтрокаПоиска + """
|
|");
Вы молодец, если задумались о значении в СтрокаПоиска: откуда оно к нам пришло и можем ли мы ему доверять?Генерация текста запроса налету в зависимости от каких-то внешних условий - распространенный прием при работе с БД. Он кроме всего прочего хорошо известен как потенциальня дыра в безопасности, эксплуатируемая при помощи атак типа SQL-injection. Защита от таких атак сводится к элементарным правилам гигиены: все входящие внешние данные, используемые при "сборке" итогового запроса нужно проверять и экранировать.
В 1С прием "сборки" запросов по частям тоже очень популярен, но заниматься "гигиеной" входящих данных не принято. Отчасти это оправдано тем, что в языке запросов 1С отсутствует возможность модификации данных, отчасти - из-за того, что взаимодействие учетной системы с внешним миром чаще ограничено и всем входящим данным принято по умолчанию доверять.
Тем не менее мне однажды подвернулся случай, когда запрос аналогичный запросу выше, приводил к падению рабочего процесса 1С и это было неприятно.
В старом битриксовом модуле обмена с сайтом 6.0.x есть запрос с ПОДОБНО. В качестве аргумента этой конструкции передавалась строчка — комментарий вида
[Номер документа: B2B-XXXXXX], приходящая из Битрикса, где XXXXXX — случайный набор латинских символов. В подавляющем большинстве случаев все было ОК, но время от времени рабочий процесс падал во время выполнения обмена. Совершенно случайно заметили, что ошибка стабильно воспроизводится когда
XXXXXX начинался с символа A. Квадратные скобки [], как мы знаем, служат для обозначения множества символов, например, "любой символ латинского алфавита" можно записать как [A-Z]. Так вот, когда в качестве аргумента ПОДОБНО передается конструкция, в которой левая граница диапазона больше правой, например, [...B-A...], 1С падает с исключением - прямо как на скриншоте ниже.Решение очевидное: экранировать спецсимволы:
... ПОДОБНО "\[B-A\]" СПЕЦСИМВОЛ "\" ....Ошибка воспроизводится в клиент-серверной версии 1С, когда в качестве СУБД используется PostgreSQL. В файловой версии 1С такой запрос исключения не вызовет, и результата ожидаемо не вернет. Воспроизведение ошибки на других СУБД не проверял.
#1С