Непонятная ошибка 2201B: ERROR: invalid regular expression: invalid character range

1. tolyan_ekb 105 16.04.21 06:33 Сейчас в теме
У одного клиента на арендованном сервере в серверной базе появляется ошибка.
Невосстановимая ошибка
Ошибка при выполнении запроса POST к ресурсу /e1cib/logForm:
по причине:
Ошибка СУБД:
2201B: ERROR: invalid regular expression: invalid character range
Никак не могу понять с чем она связана и как ее устранить. Есть подозрение что база на Postgre, но как проверить не знаю. Кто-нибудь сталкивался с подобным?
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. uriah 18 16.04.21 06:53 Сейчас в теме
(1)
2201B: ERROR: invalid regular expression: invalid character range
Никак не могу понять с чем она связана и как ее устранить. Есть подозрение что база на Postgre

была такая проблема на сервере 8.3.8.1747, если в справочнике Номенклатура в форме списка, в быстром поиске написать строку содержащую [ или ] или обе, то 1с крэшится:
Сеанс работы завершен администратором.
по причине:
Соединение с сервером баз данных разорвано администратором
2201B: ERROR: invalid regular expression: invalid character range

После обновления на 8.3.7.2027ошибка осталась, проблема была только под Postgres, в файловом варианте все норм.
4. tolyan_ekb 105 16.04.21 06:56 Сейчас в теме
(2) Я тоже гуглом нашел похожую тему, но это было давно. Сервер на котором ошибка появилась свежий 8.3.16 или 8.3.17. В одном запросе у меня есть ПОДОБНО % %, но это же не [ ]. В файловом понятно что не проявляется, там нет СУБД
6. uriah 18 16.04.21 07:04 Сейчас в теме
(4)
Я тоже гуглом нашел похожую тему, но это было давно. Сервер на котором ошибка появилась свежий 8.3.16 или 8.3.17. В одном запросе у меня есть ПОДОБНО % %, но это же не [ ]. В файловом понятно что не проявляется, там нет СУБД

А Postgres какой?
8. tolyan_ekb 105 16.04.21 07:17 Сейчас в теме
(6) я не знаю какой сервер, клиент говорит что MS SQL.
9. uriah 18 16.04.21 07:21 Сейчас в теме
(8)
я не знаю какой сервер, клиент говорит что MS SQL.

У MS SQL таких ошибок вроде не было.
10. starik-2005 3088 16.04.21 14:22 Сейчас в теме
(9) у MS SQL и не такие были. Там была как-то проблема с предопределенным элементом, в котором был символ конца файла. На него ругались оба сервера, но постгрес по крайней мере сообщал, что это за проблема.

Суть проблемы в том, что regexp, который используется и MS SQL тоже, может ругаться на выражения типа ;[3-1]', в этом случае подразумевается, что символ "-" - это символ, а не указатель на диапазон, а диапазон всегда от меньшего к большему.

По самой проблеме - не совсем ясно, когда у клиента происходит такая ошибка.
11. tolyan_ekb 105 16.04.21 14:24 Сейчас в теме
(10) При чтении файла с данными происходит поиск номенклатуры для подстановки в документы. Я думаю именно в этот момент и происходит ошибка, т.к. только здесь используется запрос с ПОДОБНО.
12. starik-2005 3088 16.04.21 14:27 Сейчас в теме
(11)
ПОДОБНО
Ну так просто все, получается. В "ПОДОБНО" есть синтаксис для символьного отбора - "[A-Z]", например, - это буквы. В итоге если у вас в наименовании номенклатуры будет что-то типа "[9-1]", то запрос будет вываливаться с ошибкой. Такие символы надо экранировать.
13. tolyan_ekb 105 16.04.21 14:29 Сейчас в теме
(12) Если я не использую скобки [], а только %наименование% передаю.Тоже будет ошибка?
14. starik-2005 3088 16.04.21 14:42 Сейчас в теме
(13) если ты напишешь так:
"ВЫБРАТЬ Ссылка ИЗ Справочник.Номенклатура ГДЕ ПолнНаименование ПОДОБНО &ХХХ"

А потом напишешь:
Запрос.УстановитьПарметр("ХХХ", "%" + УУУ + "%");

А где-то перед этим у тебя написано:
УУУ = строкаДляПоискаИзМассива;

А где-то в строках массива есть "трататат [2-1]"

То все, ты попал...
15. tolyan_ekb 105 16.04.21 14:45 Сейчас в теме
(14) Так и написано. Предполагаю, что в номенклатуре есть такое сочетание символов. А как в этом случае экранирование нужно делать?
16. starik-2005 3088 16.04.21 14:47 Сейчас в теме
(15)
вложите их в [ и ] . Так:

where pattern like '[%]'

Ищет символ процента. Полный список символов для экранирования- '_', '%', '[', ']' с соответствующими заменами '[_]', '[%]', '[[]', '[]]' . Пример кода можно найти в Escaping the escape character does not work-SQL LIKE Operator

https://docs.microsoft.com/en-us/sql/t-sql/language-elements/like-transact-sql?redirectedfrom=MSDN&view=sql-server-ver15
tolyan_ekb; +1 Ответить
17. tolyan_ekb 105 16.04.21 14:48 Сейчас в теме
(16) спасибо, буду исправлять и пробовать.
18. starik-2005 3088 16.04.21 14:48 Сейчас в теме
(17) кстати, закрывающуюся квадратную скобку экранировать не надо (судя по сцылке).
19. tolyan_ekb 105 16.04.21 15:03 Сейчас в теме
(18) создал обработку с полем на форме,
Запрос = Новый ЗАпрос;
	Запрос.Текст =  "ВЫБРАТЬ
	                |	Номенклатура.Ссылка
	                |ИЗ
	                |	Справочник.Номенклатура КАК Номенклатура
	                |ГДЕ
	                |	Номенклатура.Наименование ПОДОБНО &Наименование" ;
	Запрос.УстановитьПараметр("Наименование","%"+НоменклатураПоиска+"%");
	Запрос.Выполнить().Выбрать();	
Показать

ввожу трататат [2-1] - работает
Такой же тест должен быть?
20. starik-2005 3088 16.04.21 15:12 Сейчас в теме
(19) А у них не чем валится? У меня вот тоже не получилось вопросизвести проблему. Отсюда простая мораль: запусти у клиента этот код и найди строку, на которой все падает.
21. tolyan_ekb 105 16.04.21 17:43 Сейчас в теме
(20) Мораль понятная, но с клиентом нужно был быстро и уже по-другому решили. Теперь доступа к нему нет. А на PostgreSQL есть возможность проверить? У меня пока нет готовой системы на Postgre.
22. starik-2005 3088 16.04.21 18:58 Сейчас в теме
(21) постгрес постгресу рознь. То, что глючит на 9м может отлично раьотать на 12м.
5. tolyan_ekb 105 16.04.21 06:58 Сейчас в теме
(3)получается какой-то спец символ при поиске ПОДОБНО % % все портит?
7. uriah 18 16.04.21 07:04 Сейчас в теме
(5)
получается какой-то спец символ при поиске ПОДОБНО % % все портит?

Вполне возможно.
23. Merkalov 11 27.09.23 04:19 Сейчас в теме
Ошибка связанна с присутствием спец.спецсимволов при использовании конструкции "ПОДОБНО" в запросах к базам на СУБД PostgreSQL.

Читать пункт 3.
https://its.1c.ru/db/v8std/content/726/hdoc

Так же писал в тех.поддержку, где получил ответ:
"Добрый день!
Вообще, была подобная ошибка при запросе с конструкцией с квадратными скобками - и там разработчики дали ответ, что это "обязанность" Конфигурации - обеспечить корректное экранирование спец.символов с помощью СПЕЦСИМВОЛ."
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот