К статье
Практический материал

Разработка и Конфигурация · 8 мин

Как в 1С указать кавычку внутри кавычек

Как в 1С указать кавычку внутри строки: удвоение кавычек, Символ(34), многострочные строки, кавычки в запросах и форматной строке. Примеры кода и типичные ошибки.

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

Типичная ситуация: нужно вывести сообщение вида Документ «Реализация № 15» не проведён. Если написать кавычки как есть, модуль не сохранится — конфигуратор выдаст синтаксическую ошибку. Ниже разобраны все рабочие приёмы с примерами кода, ограничения каждого подхода и ошибки, которые чаще всего допускают разработчики.

Основной способ: удвоение кавычки

Стандартный приём языка 1С — две подряд идущие двойные кавычки внутри строкового литерала воспринимаются как одна кавычка в результирующем тексте. Это аналог экранирования в других языках, только вместо обратного слэша используется повтор символа.

Пример: Сообщить("Документ ""Реализация № 15"" не проведён"); выведет текст: Документ "Реализация № 15" не проведён. Обратите внимание: открывающая и закрывающая кавычки литерала при этом не удваиваются — удваиваются только те кавычки, которые должны остаться в тексте.

Если нужна кавычка в самом начале или конце строки, получается три кавычки подряд: Строка = """Привет"""; — первые две дают кавычку в тексте, третья закрывает литерал. Результат: "Привет". Такая запись выглядит необычно, но синтаксически корректна.

bsl
Сообщить("Документ ""Реализация № 15"" не проведён");
// Результат: Документ "Реализация № 15" не проведён

Альтернатива: функция Символ() и конкатенация

Когда строка содержит много кавычек, удвоение делает код трудночитаемым. В таких случаях удобнее собрать строку через функцию Символ(34) — 34 это код двойной кавычки в Unicode. Пример: Текст = "Документ " + Символ(34) + "Реализация" + Символ(34) + " не проведён";.

Чтобы не повторять вызов функции, код кавычки часто выносят в переменную: Кавычка = Символ(34);, а затем используют её в конкатенации. Это особенно удобно при формировании JSON-подобных строк, XML-атрибутов или длинных сообщений, где кавычек десятки.

Для типовых «ёлочек» и «лапок» используются другие коды: Символ(171) и Символ(187) — это « и », что полезно при формировании текстов для печатных форм, где требуется типографская вёрстка.

Кавычки в многострочных строках

В 1С многострочный строковый литерал записывается с вертикальной чертой в начале каждой строки. Правило удвоения кавычек внутри такого литерала сохраняется: кавычка в тексте по-прежнему пишется двойной. Вертикальная черта лишь указывает на продолжение строки, но не отменяет синтаксис литерала.

Пример: Текст = "Строка с ""кавычкой"" и переносом |и второй строкой";. Частая ошибка — забыть удвоить кавычку в одной из строк многострочного литерала: компилятор укажет на ошибку, но не всегда на ту строку, где она реально допущена, поэтому проверять нужно весь блок.

Кавычки в тексте запроса

Текст запроса в 1С — это обычная строка, поэтому все правила литералов действуют и там. Если в запросе нужно сравнить поле со строковым значением, содержащим кавычки, кавычки удваиваются дважды по смыслу: один раз для языка 1С, а внутри запроса строковая константа сама обрамляется кавычками.

На практике проще и надёжнее передавать такие значения через параметры: Запрос.УстановитьПараметр("Наименование", НаименованиеСКавычками);. Тогда в тексте запроса пишется ГДЕ Номенклатура.Наименование = &Наименование, и экранирование вообще не требуется — значение передаётся как есть.

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

Кавычки в форматной строке и шаблонах сообщений

При подстановке значений через СтрШаблон("Документ ""%1"" не найден", НомерДокумента) кавычки внутри шаблона удваиваются по общему правилу, а параметры подставляются без дополнительной обработки. Это самый читаемый способ формировать сообщения с кавычками.

В функции НСтр("ru = 'Документ ""%1"" не проведён'") строки обрамляются одинарными кавычками, но двойные кавычки внутри текста всё равно удваиваются — правило едино для всего модуля. Одинарная кавычка здесь является ограничителем фрагмента и в текст не входит.

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

Типичные ошибки
01
Написать одинарную кавычку внутри строки и получить синтаксическую ошибку при сохранении модуля — удваивайте кавычки
02
Перепутать количество кавычек в конце строки: """ в конце даёт кавычку в тексте и закрывает литерал, а "" оставляет строку незакрытой
03
Использовать обратный слэш \" как в других языках — в 1С это не экранирование, слэш попадёт в текст
04
Встроить значение в запрос конкатенацией вместо параметра и словить ошибку на данных с кавычками

Как проверить результат

Самый быстрый способ убедиться, что кавычки расставлены верно, — выполнить строку через Сообщить() или посмотреть значение переменной в отладчике (Tab при выделенном выражении в конфигураторе). Если модуль сохраняется без ошибок, но текст выглядит не так — проблема в количестве удвоенных кавычек.

Полезный приём при отладке длинных строк: вывести результат через Сообщить("[" + Текст + "]"); — квадратные скобки покажут границы строки, и сразу видно лишние или пропущенные кавычки по краям.

Контрольные точки

Как проверить результат

Сохранение модуля
Норма

Модуль сохраняется без синтаксических ошибок

Тревожный признак

Ошибка 'Ожидается символ' или 'Неправильная строковая константа'

Вывод строки
Норма

Кавычки отображаются в нужных местах, по одной

Тревожный признак

Кавычек нет, они сдвоены или текст оборван

Запрос с параметром
Норма

Значение с кавычками находится корректно

Тревожный признак

Пустая выборка или ошибка выполнения запроса

Сравнение способов

Сравнение вариантов

Удвоение кавычек

Универсальный способ для коротких строк; становится нечитаемым при большом количестве кавычек

Символ(34) с конкатенацией

Подходит для строк с большим числом кавычек и программной сборки текста; код длиннее, но понятнее

СтрШаблон с удвоением

Лучший вариант для сообщений с подстановкой параметров; кавычки удваиваются только в шаблоне

Параметры запроса

Единственно правильный способ передать значение с кавычками в запрос; экранирование не требуется

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

Частые вопросы

Можно ли использовать одинарные кавычки внутри строки?

Да, одинарная кавычка внутри строкового литерала не требует экранирования и выводится как есть. Экранировать (удваивать) нужно только двойные кавычки.

Работает ли обратный слэш для экранирования, как в других языках?

Нет. Во встроенном языке 1С нет escape-последовательностей: запись \" выведет слэш и кавычку, а не экранирует её. Используйте удвоение или Символ(34).

Как вывести кавычки-ёлочки вместо прямых?

Используйте Символ(171) для открывающей « и Символ(187) для закрывающей ». Прямое удвоение даст только машинописные прямые кавычки.

Почему запрос с кавычками в условии возвращает пустой результат?

Чаще всего значение встроено в текст запроса конкатенацией с неправильным числом кавычек. Перенесите значение в параметр запроса — проблема исчезнет, и код станет безопаснее.

Как задать пустую строку или строку из одной кавычки?

Пустая строка — это "". Строка из одной кавычки — """" (четыре кавычки: две дают символ в тексте, две — ограничители литерала).

Итог

Что важно запомнить

Кавычка внутри строки в 1С указывается удвоением (""), обратный слэш не работает. Для сложных текстов используйте Символ(34), для сообщений — СтрШаблон, для запросов — только параметры. Проверяйте результат выводом через Сообщить или в отладчике.