База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как исправить ошибку «Синтаксическая ошибка ЛЕВСИМВ(…)» в запросе 1С? › Ответ в теме: Как исправить ошибку «Синтаксическая ошибка ЛЕВСИМВ(…)» в запросе 1С?
Ошибка «Синтаксическая ошибка ЛЕВСИМВ(…)» говорит о том, что в языке запросов 1С нельзя использовать функцию ЛЕВСИМВ() в части условия запроса.
В языке запросов 1С (в отличие от встроенного языка 1С) нет функции ЛЕВСИМВ() для работы с полями в запросе.
—
Как решить проблему с сравнением поля неограниченной длины и строки?
1. В запросе нельзя использовать ЛЕВСИМВ() для поля из базы.
2. Вместо этого нужно сделать сравнение через оператор LIKE с ограничением длины, например:
|
1 2 |
ГДЕ ЗначенияСвойствОбъектов.Свойство.ИмяОтбора LIKE &ИмяОтбора |
И параметр передать с точным значением:
|
1 |
Запрос.УстановитьПараметр("ИмяОтбора", "НеПроводитьВзаимозачетПоВозвратнымНакладным"); |
3. Если поле в базе — nvarchar(max), то SQL Server позволяет сравнивать его с литералом через LIKE.
—
Если нужно точное сравнение, а LIKE не подходит, то:
— Можно попробовать в базе данных сделать представление с приведением типа, но это уже вне 1С.
— Либо в 1С сделать фильтрацию уже после получения данных (в коде).
—
Пример исправленного условия:
|ГДЕ
| ЗначенияСвойствОбъектов.Свойство.ИмяОтбора = &ИмяОтбора
Если ошибка сохраняется, значит поле ИмяОтбора в базе — nvarchar(max), и SQL Server не позволяет сравнивать напрямую.
Тогда используйте:
|ГДЕ
| ЗначенияСвойствОбъектов.Свойство.ИмяОтбора LIKE &ИмяОтбора
—
Или в параметре добавить символы для LIKE:
|
1 |
Запрос.УстановитьПараметр("ИмяОтбора", "НеПроводитьВзаимозачетПоВозвратнымНакладным"); |
—
Если и это не помогает, то единственный вариант — фильтровать в коде после получения результата.
—
Рекомендую посмотреть обсуждение на infostart:
https://infostart.ru/public/412990/ (по работе с полями неограниченной длины)