Как найти товар с кавычками в названии через запрос 1С?

Программист 1С v8.3 (Управляемые формы)
← На главную

В процессе разработки или при формировании отчетов в консоли запросов 1С программисты часто сталкиваются с необходимостью поиска элементов, в названии которых присутствуют кавычки (например, Туфли "Классные"). Начинающие разработчики часто совершают ошибку, пытаясь написать строку «как есть», что приводит к синтаксическим ошибкам или некорректным результатам. В этой статье мы подробно разберем, как правильно работать с кавычками в языке запросов, как использовать параметры и почему важно различать типы данных при сравнении.

Способ 1: Использование параметров запроса (Рекомендуемый)

Наиболее правильным, безопасным и удобным способом поиска строк с любыми спецсимволами является использование параметров. Это позволяет избежать проблем с экранированием в самом тексте запроса и защищает от потенциальных ошибок синтаксиса.

Проанализируем пример кода на встроенном языке:


Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |   ТоварыНаСкладах.Номенклатура,
    |   ТоварыНаСкладах.ВНаличии
    |ИЗ
    |   РегистрНакопления.ТоварыНаСкладах КАК ТоварыНаСкладах
    |ГДЕ
    |   ТоварыНаСкладах.Номенклатура.Наименование = &Наименование";

// При установке параметра во встроенном языке используем двойные кавычки для экранирования
Запрос.УстановитьПараметр("Наименование", "Туфли ""Классные""");
РезультатЗапроса = Запрос.Выполнить();

Важный нюанс: Обратите внимание, что внутри строки "Туфли ""Классные""" мы ставим по две кавычки там, где в оригинальном названии должна быть одна. Внешние кавычки обозначают начало и конец строки в коде 1С, а внутренние сдвоенные кавычки интерпретируются системой как один символ кавычки внутри текста.

Способ 2: Работа в Консоли запросов

Если задача стоит разово найти данные в консоли запросов, алгоритм действий будет немного иным. Рассмотрим пошагово, как это сделать:

  1. В тексте запроса напишите условие через параметр: ГДЕ Номенклатура.Наименование = &Наименование.
  2. Перейдите на вкладку Параметры в вашей консоли.
  3. Добавьте параметр с именем Наименование и выберите тип Строка.
  4. В поле значение введите текст: Туфли "Классные". Внимание: в интерфейсе консоли кавычки удваивать НЕ НУЖНО, и обрамлять всю строку дополнительными кавычками тоже не нужно. Консоль сама передаст текст в запрос в чистом виде.

Если консоль выдает ошибку «Непредвиденная ситуация», проверьте, нет ли в тексте запроса лишних команд, таких как УстановитьПараметр. Помните, что эта команда относится к встроенному языку (Delphi/C-подобный синтаксис 1С), а не к самому языку запросов (SQL-подобный синтаксис).

Способ 3: Использование оператора ПОДОБНО (LIKE)

Иногда нам нужно найти все товары, в названии которых просто присутствуют кавычки, или часть названия с кавычками. Для этого удобно использовать оператор ПОДОБНО. Выясним, как правильно прописать условие с маской поиска.

Чтобы найти все записи, содержащие хотя бы одну кавычку, используем следующий синтаксис:


ВЫБРАТЬ
    Номенклатура.Ссылка,
    Номенклатура.Наименование
ИЗ
    Справочник.Номенклатура КАК Номенклатура
ГДЕ
    Номенклатура.Наименование ПОДОБНО "%""%"

В данном примере "%" — это служебный символ, означающий любое количество любых символов, а "" — это экранированная кавычка. Если же вы хотите найти конкретную подстроку, например, "Классные", условие будет выглядеть так:


ГДЕ
    Номенклатура.Наименование ПОДОБНО "%""Классные""%"

Типичная ошибка: Сравнение Ссылки со Строкой

Разберем ситуацию, которая часто ставит в тупик: запрос написан верно, параметры установлены, но результат пустой. Проанализируем типичную ошибочную строку кода:

ГДЕ Номенклатура = &Наименование

В 1С поле Номенклатура обычно является Ссылкой (уникальным идентификатором объекта), а параметр &Наименование — это Строка. Ссылка никогда не будет равна строке, даже если текст в них совпадает. Чтобы поиск сработал, мы должны обращаться к строковому реквизиту ссылки через точку:

Правильно: ГДЕ Номенклатура.Наименование = &Наименование

Дополнительные рекомендации по экранированию

Рассмотрим ситуацию, когда кавычек много. Основное правило языка запросов 1С: любая одиночная кавычка внутри строкового литерала должна быть заменена на двойную.

Посмотрим на примеры:

Для повышения производительности, особенно на больших базах данных, старайтесь избегать использования оператора ПОДОБНО с процентом в начале строки ("%Текст"), так как это отключает использование индексов и замедляет выполнение запроса. Если поиск по кавычкам требуется часто, рассмотрите возможность использования полнотекстового поиска 1С.

← На главную