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

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

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

В этой статье мы подробно разберем, как правильно работать с кавычками в языке 1С, изучим правила экранирования и выясним, почему использование параметров запроса является «золотым стандартом» разработки.

Метод 1: Правило удвоения кавычек в коде

В языке запросов 1С и во встроенном языке программирования основным способом вставки символа кавычки внутрь строки является её дублирование. Рассмотрим эту логику подробнее. Когда интерпретатор 1С встречает одну кавычку, он считает, что это либо начало, либо конец строки. Чтобы «объяснить» системе, что кавычка — это просто часть текста, её нужно написать дважды.

Проанализируем ситуацию на примере названия ООО "рене" форева. Чтобы записать это в коде, мы должны выполнить следующие шаги:

  1. Окружить всю строку внешними кавычками (начало и конец литерала).
  2. Каждую внутреннюю кавычку заменить на двойную.

В итоге мы получим следующий код:


НаименованиеОбъекта = "ООО ""рене"" форева";

Важный нюанс: если ваша строка должна начинаться или заканчиваться кавычками, то на границах литерала будет стоять сразу по три кавычки. Например, для текста "Фирма" код будет выглядеть так:


ТекстСКавычками = """Фирма""";

Здесь первая и последняя кавычки — это границы строки, а две внутренние — это экранированная одна кавычка.

Метод 2: Использование параметров запроса (Лучшая практика)

Хардкод (прописывание текстовых значений прямо в тексте запроса) считается плохим тоном в профессиональной разработке. Это делает код менее гибким и трудночитаемым. Разберем, как решить задачу с помощью параметров.

Вместо того чтобы мучительно расставлять кавычки в тексте запроса, мы используем механизм передачи параметров. Это позволяет 1С самостоятельно позаботиться о правильном представлении данных в СУБД (будь то MS SQL, PostgreSQL или файловая база).

Рассмотрим пример правильного построения запроса:


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

// Передаем строку как есть, используя только стандартное удвоение для кода 1С
ИмяОрганизации = "ООО ""рене"" форева";
Запрос.УстановитьПараметр("НужноеНаименование", ИмяОрганизации);

РезультатЗапроса = Запрос.Выполнить();

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

Метод 3: Использование функции Символ()

Иногда программное формирование сложных строк с обилием кавычек превращает код в «лес» из символов ", который невозможно читать. В таких случаях мы рекомендуем использовать функцию Символ(34). Число 34 — это код двойной кавычки в таблице Unicode/ASCII.

Проанализируем ситуацию, где нужно собрать строку из нескольких частей:


Кавычка = Символ(34);
Наименование = "ООО " + Кавычка + "рене" + Кавычка + " форева";

Этот подход делает код визуально чище, так как кавычки-разделители (которые определяют границы кусков текста) и кавычки-символы (которые попадают в результат) разделены логически.

Особенности работы в Конструкторе запросов

Если вы предпочитаете использовать визуальный Конструктор запросов, обратите внимание на специфику заполнения условий. Когда вы переходите на закладку «Условия» и вводите строковое значение в колонку «Значение», конструктор автоматически добавит внешние кавычки при сохранении. Однако внутренние кавычки в названии предприятия вам всё равно придется удвоить вручную.

Например, в поле ввода значения вы должны написать: "ООО ""рене"" форева" (с кавычками по краям и двойными внутри), если хотите, чтобы 1С восприняла это как литерал прямо в тексте запроса. Но повторимся: использование параметров &Параметр через вкладку «Параметры» гораздо эффективнее.

Проблема невидимых символов и неразрывных пробелов

Часто разработчик сталкивается с ситуацией: кавычки расставлены идеально, запрос написан верно, но результат пуст. Выясним причину этой проблемы. В названиях организаций, скопированных из веб-браузеров или юридических реестров, вместо обычного пробела часто встречается неразрывный пробел (код символа 160).

Для 1С и SQL-сервера обычный пробел и неразрывный — это разные символы. Если в базе записано ООО[НП]"рене", а вы ищете ООО[Пробел]"рене", запрос не сработает. В таких случаях мы рекомендуем использовать оператор ПОДОБНО с масками:


Запрос.Текст = "ГДЕ Наименование ПОДОБНО ""ООО%рене%форева""";

Символ % заменяет любую последовательность символов, что позволяет игнорировать разницу между обычными и неразрывными пробелами, а также возможные вариации кавычек (ёлочки «» против прямых "").

Архитектурный совет: избегайте поиска по строке

Поиск объектов в базе данных по точному строковому наименованию — это всегда риск. Названия могут меняться, пользователи могут добавлять лишние пробелы в начале или в конце. Рассмотрим более надежные способы идентификации данных:

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

← На главную