Разработка и Конфигурация · 9 мин
Как вывести кавычку в 1С
Как вывести кавычку в строке 1С: удвоение кавычек, Символ(34), кавычки-ёлочки, вывод в сообщения, запросы и макеты. Примеры кода и типичные ошибки.
Строковые литералы во встроенном языке 1С заключаются в двойные кавычки, поэтому просто вставить кавычку внутрь строки нельзя — компилятор воспримет её как конец строки и выдаст синтаксическую ошибку. Эта проблема встречается постоянно: при выводе наименований товаров в кавычках, формировании сообщений пользователю, построении текстов запросов и заполнении печатных форм.
Решений несколько: удвоение кавычки внутри литерала, функция Символ(34) для подстановки символа по коду, а также использование кавычек-«ёлочек», которые вообще не конфликтуют с синтаксисом. Каждый способ имеет свои ограничения, особенно когда строка передаётся в запрос, в COM-объект или во внешнюю систему.
Ниже разобраны все рабочие варианты с примерами кода, типичные ошибки и способы проверить, что кавычка вывелась именно так, как задумано.
Основной способ: удвоение кавычки внутри строки
В языке 1С принято правило: две подряд идущие двойные кавычки внутри строкового литерала интерпретируются как одна кавычка в результирующем значении. Это стандартный приём экранирования, и именно его чаще всего используют в конфигурациях.
Сообщить("Номенклатура ""Кирпич М-150"" не найдена в справочнике.");
// Результат: Номенклатура "Кирпич М-150" не найдена в справочнике.
Важно понимать, что удвоение работает только внутри литерала. Если кавычка стоит в самом конце строки, нужно три кавычки подряд: две дают символ кавычки, третья закрывает строку. Например, "Он сказал ""Привет""" даст строку Он сказал "Привет".
Признак правильного экранирования — код проходит проверку синтаксиса в конфигураторе, а в сообщении или поле отображается ровно одна кавычка там, где она нужна. Если видите две кавычки подряд в результате — значит, экранирование применено дважды.
ТекстСообщения = "Документ ""Реализация № 125"" проведён с ошибками.";
Сообщить(ТекстСообщения);Вывод кавычки через Символ(34)
Двойная кавычка в таблице символов Unicode имеет код 34. Функция Символ(34) возвращает её как обычный символ, который можно конкатенировать со строками. Способ удобен, когда кавычки добавляются динамически — например, при обрамлении значения в цикле или при сборке текста из переменных.
Кавычка = Символ(34);
Наименование = "Стол офисный";
Результат = Кавычка + Наименование + Кавычка;
// Результат: "Стол офисный"
Такой подход делает код читаемее, когда кавычек много: конструкция из пяти-шести кавычек подряд при удвоении трудно проверяется глазами и провоцирует ошибки. Минус — чуть более громоздкая запись и необходимость помнить код символа.
Когда Символ(34) предпочтительнее удвоения
Если строка собирается программно и границы литералов размыты, удвоение легко сломать при рефакторинге. Отдельная переменная Кавычка = Символ(34) явно показывает намерение и не зависит от того, как будет переписана соседняя строка. В длинных шаблонах сообщений это снижает риск синтаксических ошибок.
Кавычки-ёлочки как альтернатива без экранирования
Типографские кавычки «» — это отдельные символы Unicode, а не двойная кавычка, поэтому они вставляются в строковый литерал напрямую, без какого-либо экранирования. Для сообщений пользователю и печатных форм ёлочки часто выглядят аккуратнее.
Сообщить("Товар «Кресло руководителя» отсутствует на складе.");
Ограничение способа: ёлочки — это не тот же символ, что прямая кавычка. Если строка дальше сравнивается с данными, где используются обычные кавычки, сравнение не сработает. Также внешние системы (обмены, веб-сервисы) могут ожидать именно прямую кавычку. Используйте ёлочки только для отображения человеку, а не для машинной обработки.
Сравнение способов
Стандартный способ для литералов; ограничение — плохо читается при большом количестве кавычек подряд
Удобен при динамической сборке строк; требует конкатенации и знания кода символа
Не требуют экранирования и хорошо смотрятся в сообщениях; не подходят для сравнения строк и обменов данными
Кавычки в запросах и динамически формируемом коде
Отдельная ситуация — кавычки внутри текста запроса. В языке запросов 1С строковые константы тоже обрамляются двойными кавычками, и правило удвоения действует аналогично. Если текст запроса собирается конкатенацией, количество уровней экранирования растёт, и здесь легко ошибиться.
Лучшая практика — не вставлять значения в текст запроса вручную, а использовать параметры: Запрос.УстановитьПараметр("Наименование", Наименование). Тогда кавычки в значении не требуют никакой обработки — платформа сама корректно передаст строку. Это одновременно защищает от синтаксических ошибок и от ошибок логики при спецсимволах.
То же касается функции Выполнить() и формирования кода строкой: каждый уровень вложенности удваивает количество кавычек. Если без динамического кода не обойтись, собирайте его через Символ(34) или шаблон с подстановкой СтрШаблон(), чтобы экранирование оставалось прозрачным.
Кавычки в макетах, шаблонах и обменах данными
В макетах печатных форм кавычки в тексте ячеек не требуют экранирования — там это обычный текст, а не строковый литерал. Экранирование нужно только в коде, который заполняет параметры макета. В шаблонах СтрШаблон("Товар ""%1"" отгружен", Наименование) правило удвоения действует стандартно.
При выгрузке в JSON, XML или CSV кавычки обрабатываются по правилам целевого формата. Если используете штатные средства (ЗаписьJSON, ЗаписьXML), платформа экранирует кавычки автоматически. Ручная сборка JSON конкатенацией — частый источник битых файлов: внутри JSON-строки кавычка должна экранироваться обратным слешем, а не удвоением.
Признак проблемы при обмене: приёмная система отклоняет файл с ошибкой разбора, либо данные обрезаются на первой кавычке. Проверяйте выгрузку на тестовом значении, заведомо содержащем кавычки, прежде чем запускать обмен в рабочем режиме.
Проверка результата
Самый быстрый способ убедиться, что кавычки выведены правильно, — вывести строку через Сообщить() или посмотреть значение переменной в отладчике (табло). В табло значение показывается в кавычках-ограничителях, поэтому ориентируйтесь на внутреннее содержимое: удвоенных кавычек там быть не должно, если экранирование применено один раз.
Для печатных форм достаточно сформировать документ с тестовым наименованием, содержащим кавычки, и визуально проверить результат. Для файлов обмена — открыть выгруженный файл в текстовом редакторе и убедиться, что структура не нарушена.
Как проверить результат
Одна кавычка в нужном месте, текст читается естественно
Две кавычки подряд или обрезанный текст
Внутренние кавычки показаны по одной
Удвоенные кавычки внутри значения
Файл открывается и разбирается без ошибок
Ошибка разбора или обрезанные значения
Кавычки отображаются как в исходных данных
Лишние или пропавшие кавычки
FAQ
Почему в конце строки нужно три кавычки подряд?
Две первые кавычки интерпретируются как один символ кавычки внутри строки, а третья закрывает строковый литерал. Если поставить только две, компилятор решит, что строка закончилась, и следующая кавычка вызовет синтаксическую ошибку.
Можно ли использовать одинарные кавычки для строк?
Нет, во встроенном языке 1С строковые литералы задаются только двойными кавычками. Одинарная кавычка внутри строки — обычный символ, она не требует экранирования, но и не может ограничивать строку.
Как вывести кавычку в многострочной строке?
В многострочных литералах, где каждая строка начинается с символа |, правило удвоения действует так же: внутри любой из строк двойная кавычка записывается дважды. Альтернатива — использовать ёлочки или собирать текст через Символ(34).
Нужно ли экранировать кавычки при передаче в параметр запроса?
Нет. Параметры запроса передаются платформой как готовые значения, без разбора текста. Любые кавычки в значении параметра попадут в выборку в исходном виде, а ручное экранирование только исказит данные.
Чем отличается Символ(34) от Символ(171) и Символ(187)?
Символ(34) — прямая двойная кавычка, та самая, что ограничивает строки. Символы 171 и 187 — это открывающая и закрывающая кавычки-ёлочки «». Первый нужен для машинной обработки и обменов, ёлочки — для аккуратного отображения текста пользователю.
Почему в выгруженном JSON кавычки выглядят как \"?
Это нормально: по стандарту JSON кавычка внутри строки экранируется обратным слешем. При чтении файла штатными средствами (ЧтениеJSON) обратное преобразование выполняется автоматически, и в значении вы получите обычную кавычку.
Что важно запомнить
В строковых литералах 1С кавычка выводится удвоением, динамически — через Символ(34), в текстах для пользователя допустимы ёлочки без экранирования. В запросах используйте параметры, в обменах — штатные средства записи, и всегда проверяйте результат на значении с кавычками.