Разработка и Конфигурация · 9 мин
Как вывести кавычки в строке в 1С
Как вывести кавычки внутри строки в 1С: удвоение кавычек, функция Символ(34), примеры для запросов, сообщений и макетов, типичные ошибки.
Во встроенном языке 1С строковый литерал ограничивается двойными кавычками, поэтому обычная кавычка внутри текста воспринимается компилятором как конец строки. Из-за этого конструкция вида Строка = "ООО "Ромашка""; вызывает синтаксическую ошибку ещё на этапе проверки модуля. Проблема решается двумя штатными способами: удвоением кавычки и функцией Символ().
Задача встречается постоянно: нужно вывести наименование контрагента с кавычками в сообщении пользователю, сформировать текст запроса, подставить значение в макет печатной формы или собрать строку для обмена данными. Во всех случаях механизм один и тот же, но есть нюансы в запросах, многострочных литералах и при передаче строк во внешние системы.
Ниже разобраны оба рабочих способа, особенности кавычек в тексте запроса, типичные ошибки начинающих разработчиков и способы проверить результат до вывода пользователю.
Способ 1: удвоение кавычек внутри строки
Основной приём встроенного языка: чтобы получить одну кавычку в итоговой строке, в литерале её нужно написать дважды. Пары кавычек внутри строки компилятор превращает в один символ, а одиночные крайние кавычки по-прежнему обозначают границы литерала.
Наименование = "ООО ""Ромашка""";
Сообщить("Документ ""Реализация товаров"" проведён");
В результате переменная Наименование будет содержать текст ООО "Ромашка". Обратите внимание: в примере идут подряд четыре кавычки — две открывающие пары и закрывающие. Именно это место чаще всего вызывает ошибку, когда разработчик пишет три кавычки вместо четырёх и получает незакрытую строку.
Удвоение работает в любом месте строки — в начале, середине и конце. Если кавычка должна стоять последним символом перед закрывающей кавычкой литерала, в конце строки окажутся три кавычки подряд: две — удвоенная кавычка данных, третья — закрывающая литерал.
Строка = "Значение: ""Тест""!"; // Значение: "Тест"!Способ 2: функция Символ(34)
Двойная кавычка имеет код 34 в таблице символов, поэтому её можно вставить через встроенную функцию Символ(34). Способ удобен, когда кавычек много и удвоенные пары делают строку нечитаемой, либо когда символ подставляется динамически.
Кавычка = Символ(34);
Наименование = "ООО " + Кавычка + "Ромашка" + Кавычка;
Такой вариант легче сопровождать в длинных шаблонах: глаз не спотыкается о цепочки из четырёх-шести кавычек подряд. Часто заводят переменную или функцию-обёртку с коротким именем, чтобы шаблон читался компактно.
Аналогично через Символ() вставляются и другие служебные символы: перевод строки — Символы.ПС или Символ(10), табуляция — Символ(9), неразрывный пробел — Символ(160).
Сравнение вариантов
Быстрее пишется и не требует конкатенации; плохо читается при большом количестве кавычек в строке.
Наглядно в длинных шаблонах и при динамической сборке; требует конкатенации строк и чуть длиннее кода.
Кавычки в тексте запроса
Текст запроса в 1С — это тоже строка, поэтому правило удвоения действует и внутри него. Если в запросе нужно сравнить значение со строковым литералом, содержащим кавычки, каждая кавычка внутри литерала запроса удваивается дважды: один раз по правилам языка запросов, и всё это ещё раз экранируется правилами строкового литерала встроенного языка.
Запрос.Текст =
"ВЫБРАТЬ Контрагенты.Ссылка
|ИЗ Справочник.Контрагенты КАК Контрагенты
|ГДЕ Контрагенты.Наименование = ""ООО """"Ромашка""""""";
Здесь четыре кавычки подряд внутри строки дают две кавычки в тексте запроса, которые язык запросов превратит в одну кавычку в сравниваемом значении. Такая «лесенка» — главный источник ошибок, поэтому на практике строковые значения почти всегда передают через параметры.
Запрос.Текст = "ВЫБРАТЬ ... ГДЕ Наименование = &Наименование";
Запрос.УстановитьПараметр("Наименование", "ООО ""Ромашка""");
Многострочные строки и переносы
В 1С строковый литерал можно разбивать на несколько строк модуля: каждая следующая часть начинается с символа вертикальной черты |. Правило удвоения кавычек действует в каждой части независимо, а перенос строки в итоговом значении появляется автоматически в месте разрыва.
ТекстПисьма =
"Уважаемые партнёры!
|Организация ""Ромашка"" сообщает,
|что реквизиты изменились.";
Типичная ошибка — забыть открывающую кавычку после вертикальной черты или закрывающую в конце части. Конфигуратор подсвечивает такие места, но при копировании текста из внешних источников легко потерять один символ и получить ошибку «Неправильный строковый литерал».
Кавычки в сообщениях, макетах и обмене данными
При выводе через Сообщить() или ПоказатьПредупреждение() строка отображается как есть: удвоенные кавычки в коде превращаются в обычные в тексте сообщения. Проверить результат можно прямо в окне сообщений без дополнительных инструментов.
В макетах печатных форм кавычки в шаблоне ячейки не требуют экранирования — там нет строкового литерала языка. Экранировать нужно только значения, которые подставляются в параметры макета из кода. Если в печатной форме появились двойные кавычки подряд, значит, удвоение случайно применили дважды: и в коде, и в данных.
При выгрузке в XML, JSON или CSV правила меняются: формат имеет собственные требования к кавычкам. Например, в JSON строка с кавычкой должна экранироваться обратным слэшем, а в CSV поле с кавычками обрамляется кавычками и внутренние удваиваются. Штатные объекты ЗаписьJSON и ЗаписьXML делают это автоматически — вручную удваивать кавычки для них не нужно и вредно.
Как проверить результат
Самый быстрый способ убедиться, что кавычки встали правильно, — вывести строку через Сообщить() или посмотреть значение переменной в отладчике. В окне «Выражение» табло покажет итоговое значение, где видно реальное количество кавычек.
Дополнительно полезно проверить длину строки через СтрДлина(): если кавычек получилось больше или меньше ожидаемого, длина сразу расходится с расчётной. Для строк, уходящих во внешние системы, сохраните результат в текстовый файл и откройте его — так видно итог без влияния интерфейса 1С.
Как проверить результат
Видны одиночные кавычки в нужных местах
Двойные кавычки подряд или их отсутствие
Кавычки стоят ровно вокруг нужного фрагмента
Лишние кавычки в начале или конце значения
Файл открывается принимающей системой без ошибок разбора
Ошибка парсинга в месте первой кавычки
Типичные ошибки и ограничения
Самая частая ошибка — нечётное количество кавычек в конце строки: разработчик пишет три кавычки вместо четырёх, и компилятор считает строку незакрытой. Вторая по частоте — двойное экранирование, когда кавычки удваиваются и в коде, и уже содержатся удвоенными в данных, полученных извне.
Отдельный случай — «ёлочки» и «лапки». Символы «» и „“ — это обычные буквенные символы, а не кавычки-ограничители, поэтому внутри строкового литерала их удваивать не нужно. Путаница возникает, когда текст с типографскими кавычками копируют из Word: визуально они похожи, но для компилятора безобидны.
Ограничение, о котором стоит помнить: одиночная кавычка (апостроф) в строковых литералах 1С не требует экранирования вообще — она вставляется как есть. Экранировать нужно только двойную кавычку.
Что важно запомнить
В строках 1С кавычка выводится удвоением ("") или через Символ(34). В запросах строки лучше передавать параметрами. При обмене данными экранирование выполняют штатные объекты записи, а не ручное удвоение.
Частые вопросы
Как вывести одиночную кавычку (апостроф) в строке 1С?
Апостроф не является ограничителем строкового литерала, поэтому вставляется напрямую без экранирования: Строка = "It's a test";. Удваивать или заменять его не нужно.
Почему в сообщении выводятся двойные кавычки подряд?
Значит, удвоение применено дважды: либо кавычки уже были удвоены в исходных данных, а код экранировал их ещё раз, либо строка собрана из двух фрагментов, каждый из которых экранирован отдельно. Проверьте значение в отладчике до экранирования.
Как вставить кавычки в строку запроса без четырёх кавычек подряд?
Передайте значение через параметр: Запрос.УстановитьПараметр("Название", "ООО ""Ромашка"""), а в тексте запроса используйте &Название. Тогда удвоение потребуется только один раз — в строковом литерале кода.
Нужно ли удваивать кавычки «ёлочки» внутри строки?
Нет. Символы « и » — обычные типографские символы, компилятор не считает их границами строки. Они вставляются как есть и часто используются в текстах для пользователей как более аккуратная замена прямых кавычек.
Как вывести кавычку в начале строки?
Напишите три кавычки подряд в начале литерала: Строка = """Цитата"" — сказал он";. Первая кавычка открывает литерал, следующие две — удвоенная кавычка данных.
Чем Символ(34) лучше удвоения?
Читаемостью в длинных шаблонах: когда в строке десяток кавычек, цепочки из четырёх-шести кавычек подряд трудно проверять глазами. По скорости разницы практически нет, выбор — вопрос удобства сопровождения кода.