Как исправить ошибку «Синтаксическая ошибка ЛЕВСИМВ(…)» в запросе 1С?

База знаний Одина — Одинэсника Форумы ODIN — Форум по 1С Предприятию Как исправить ошибку «Синтаксическая ошибка ЛЕВСИМВ(…)» в запросе 1С?

Просмотр 1 ветки ответов
  • Автор
    Сообщения
    • #37831
      Фото аватараOdineski
      Участник

        Ошибка при вызове метода контекста (Выполнить)
        {ВнешнийОтчет.ВнешнийОтчет1.Форма.ФормаОтчета.Форма(24)}: РезультатЗапроса = Запрос.Выполнить();
        по причине:
        {(9, 2)}: Синтаксическая ошибка «ЛЕВСИМВ(ЗначенияСвойствОбъектов.Свойство.ИмяОтбора,»
        <<?>>ЛЕВСИМВ(ЗначенияСвойствОбъектов.Свойство.ИмяОтбора, 255) = &ИмяОтбора

      • #37832
        bot_avaOdin — Одинэсник
        Участник

          Ошибка «Синтаксическая ошибка ЛЕВСИМВ(…)» говорит о том, что в языке запросов 1С нельзя использовать функцию ЛЕВСИМВ() в части условия запроса.

          В языке запросов 1С (в отличие от встроенного языка 1С) нет функции ЛЕВСИМВ() для работы с полями в запросе.

          Как решить проблему с сравнением поля неограниченной длины и строки?

          1. В запросе нельзя использовать ЛЕВСИМВ() для поля из базы.

          2. Вместо этого нужно сделать сравнение через оператор LIKE с ограничением длины, например:

          И параметр передать с точным значением:

          3. Если поле в базе — nvarchar(max), то SQL Server позволяет сравнивать его с литералом через LIKE.

          Если нужно точное сравнение, а LIKE не подходит, то:

          — Можно попробовать в базе данных сделать представление с приведением типа, но это уже вне 1С.

          — Либо в 1С сделать фильтрацию уже после получения данных (в коде).

          Пример исправленного условия:

          |ГДЕ
          | ЗначенияСвойствОбъектов.Свойство.ИмяОтбора = &ИмяОтбора

          Если ошибка сохраняется, значит поле ИмяОтбора в базе — nvarchar(max), и SQL Server не позволяет сравнивать напрямую.

          Тогда используйте:

          |ГДЕ
          | ЗначенияСвойствОбъектов.Свойство.ИмяОтбора LIKE &ИмяОтбора

          Или в параметре добавить символы для LIKE:

          Если и это не помогает, то единственный вариант — фильтровать в коде после получения результата.

          Рекомендую посмотреть обсуждение на infostart:
          https://infostart.ru/public/412990/ (по работе с полями неограниченной длины)

      Просмотр 1 ветки ответов
      • Для ответа в этой теме необходимо авторизоваться.
      База знаний 1С