|
|
|
Запрещеные символы в запросе, экранирование символов. | ☑ | ||
|---|---|---|---|---|
|
0
Mr_Best
05.06.11
✎
18:49
|
Есть маленькая но очень неприятная проблемка:
Итак, есть такой запрос: Представление = СокрЛП(Представление); Представление = СтрЗаменить(Представление, "[", "%"); Представление = СтрЗаменить(Представление, "]", "%"); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Номенклатура.Ссылка, | Номенклатура.Наименование |ИЗ | Справочник.Номенклатура КАК Номенклатура |ГДЕ | Номенклатура.ЭтоГруппа = ЛОЖЬ | И Номенклатура.Наименование ПОДОБНО &Представление"; Запрос.УстановитьПараметр("Представление", "%"+Представление+"%"); Результат = Запрос.Выполнить(); И есть такая ситуация, когда переменная "Представление" содержит такую строку: Кетанов 10мг Таб. п/о [ал.фольга/ПВХ/полиамид] Х100 (R) В справочнике номенклатура есть куча одинаковых элементов с этим наименованием: Кетанов 10мг Таб. п/о [ал.фольга/ПВХ/полиамид] Х100 (R) Но запрос НЕ находит ни одного элемента. Причем не находит только для элемента с этим наименованием: Кетанов 10мг Таб. п/о [ал.фольга/ПВХ/полиамид] Х100 (R) Я предположил что нужно экранировать некоторые символы в запросе, но соответствующей функции экранирования в 1С 8.1 не нашёл! Поэтому пришлось сделать так: Представление = СтрЗаменить(Представление, "[", "%"); Представление = СтрЗаменить(Представление, "]", "%"); Вопрос: то что такие символы "[]" требуют экранирования это уже понятно. Подскажите какие еще символы требуют экранирования??? |
|||
|
1
kosts
05.06.11
✎
19:08
|
||||
|
2
Kom-off
05.06.11
✎
19:09
|
Следующие символы в строке шаблона являются служебными и имеют смысл, отличный от символа строки:
% (процент): последовательность, содержащая любое количество произвольных символов _ (подчеркивание): один произвольный символ […] (в квадратных скобках один или несколько символов): любой одиночный символ из перечисленных внутри квадратных скобок В перечислении могут встречаться диапазоны, например a-z, означающие произвольный символ, входящий в диапазон, включая концы диапазона. [^…] (в квадратных скобках значок отрицания, за которым следует один или несколько символов): любой одиночный символ, кроме тех, которые перечислены следом за значком отрицания Любой другой символ означает сам себя и не несет никакой дополнительной нагрузки. Если в качестве самого себя необходимо записать один из перечисленных символов, то ему должен предшествовать <Спецсимвол>. Сам <Спецсимвол> (любой подходящий символ) определяется в этом же операторе после ключевого слова СПЕЦСИМВОЛ. Например, шаблон “%АБВ[0-9][абвг]\_абв%” СПЕЦСИМВОЛ “\” означает подстроку, состоящую из последовательности символов: буквы А; буквы Б; буквы В; одной цифры; одной из букв а, б, в или г; символа подчеркивания; буквы а; буквы б; буквы в. Причем перед этой последовательностью может располагаться произвольный набор символов. |
|||
|
3
Mr_Best
05.06.11
✎
19:15
|
Спасибо что разжували.
|
|||
|
4
Mr_Best
05.06.11
✎
19:28
|
Вот почему нет функции экранирования как в php?
Сейчас взял бы и заэкранировал одной функцией, и не парился бы!!!! |
|||
|
5
hhhh
05.06.11
✎
21:14
|
(4) ты вообще что ли считаешь разработчиков придурками? Ну зачем в бухгалтерской программе еще и экранирование?
|
|||
|
6
tridog
05.06.11
✎
21:39
|
(5) Это походу ты их таковыми считаешь... Платформа "1С:Предприятие" согласно наполеоновским планам фирмы 1С это уже сооооовсем не бухгалтерская программа.
|
|||
|
7
Mr_Best
05.06.11
✎
22:00
|
(5) Я не считаю разработчиков придурками, а на счет того зачем в программе экранирование, так вот затем:
Если в запросе есть специальные символы, литеральные конструкции и подобие регулярных выражений(по терменологии php) то для простой выборки потребуется полное экранирование значений для условий в запросе. Поковыряйся в интернете и ты поймешь что 80% задач использующие "ПОДОБНО" в запросе требуют простого сравнения, а не сложных регулярных выражений(шаблонов). Так почемубы и не сделать функцию экранирования? Покрайней мере такие есть во всех базах данных из тех с которыми я работал: MySQL. MSSQL. Postgressql и языках программирования("расширяемые компоненты") VBasic, VC++, php, perl! Это мое ИМХО ... Судите сами. |
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |