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

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

Как написать кавычки в 1С

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

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

Существует несколько рабочих способов вывести кавычку в строке: удвоение символа внутри литерала, функция Символ() с кодом нужного знака, а также использование типографских кавычек «ёлочек» и „лапок“, которые вообще не конфликтуют с синтаксисом языка. Ниже разобраны все варианты с примерами кода, ограничениями и типичными ошибками.

Как 1С обрабатывает кавычки в строковых литералах

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

Двойная кавычка — служебный символ. Если написать Текст = "Товар "Ромашка" отгружен";, платформа прочитает строку до второй кавычки, а остаток воспримет как ошибочный код. В конфигураторе такая строка подсветится как синтаксическая ошибка ещё до запуска.

Многострочные строковые литералы в 1С формируются через вертикальную черту в начале каждой следующей строки. Правило с кавычками при этом не меняется: внутри каждой части кавычки по-прежнему нужно удваивать.

Способ 1: удвоение кавычек внутри строки

Основной и самый распространённый приём — написать две двойные кавычки подряд там, где нужна одна. Платформа при сборке строки превратит пару кавычек в один символ.

Наименование = "Труба ""ВГП"" 50х3,5";

Сообщить("Документ """ + НомерДок + """ проведён");

В результате в переменной окажется текст: Труба "ВГП" 50х3,5. Обратите внимание на тройные кавычки подряд в случаях, когда кавычка стоит в самом начале или в самом конце строки: первая и последняя — это границы литерала, а удвоенная пара внутри — сам символ.

Способ 2: функция Символ() и коды кавычек

Функция Символ(Код) возвращает символ по его коду Unicode. С её помощью кавычку можно добавить к строке конкатенацией, что иногда делает код читабельнее, особенно когда кавычек много.

Кавычка = Символ(34); // прямая двойная кавычка "

Текст = "Товар " + Кавычка + "Ромашка" + Кавычка + " отгружен";

Полезные коды для типографских кавычек:

  • Символ(34) — прямая двойная кавычка (")
  • Символ(171) — открывающая «ёлочка» («)
  • Символ(187) — закрывающая «ёлочка» (»)
  • Символ(132) — открывающая „лапка“
  • Символ(147) и Символ(148) — английские “лапки”

Этот способ удобен, когда текст собирается программно и кавычки расставляются по условию — например, при формировании представлений ссылок или заголовков отчётов.

Способ 3: типографские кавычки без экранирования

Кавычки-«ёлочки» и „лапки“ — это отдельные символы Unicode, а не служебные кавычки языка. Их можно вставлять прямо в строковый литерал без всякого удвоения:

Наименование = "Труба «ВГП» 50х3,5";

Такой вариант не только проще, но и корректнее с точки зрения типографики: в русских печатных документах приняты именно «ёлочки», а вложенные кавычки оформляются „лапками“. Для печатных форм, писем контрагентам и текстов сообщений это предпочтительный вариант.

Набрать «ёлочки» на клавиатуре Windows можно через Alt-коды: Alt+0171 для « и Alt+0187 для » (цифры набираются на цифровом блоке клавиатуры). В редакторе конфигуратора символы вставляются и через таблицу символов.

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

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

Универсально, работает везде, включая запросы. Минус — плохо читается при большом количестве кавычек.

Символ(34)

Удобно при программной сборке строк. Минус — лишняя конкатенация, код длиннее.

«Ёлочки» и „лапки“

Лучший вариант для видимых пользователю текстов и печатных форм. Не подходит, если внешняя система требует именно прямые кавычки.

Кавычки в запросах 1С

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

Запрос.Текст = "ВЫБРАТЬ Ссылка ИЗ Справочник.Номенклатура

|ГДЕ Наименование ПОДОБНО ""%""""Ромашка""""%""";

Практически безопаснее передавать такие значения через параметры запроса — тогда кавычки вообще не требуют обработки, а запрос защищён от ошибок разбора:

Запрос.УстановитьПараметр("Шаблон", "%""Ромашка""%");

Кавычки при выгрузке и обмене данными

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

При работе с XML и JSON через встроенные объекты (ЗаписьXML, ЗаписьJSON) экранирование выполняется платформой автоматически — вручную удваивать кавычки не нужно, иначе в файле появятся лишние символы. Ручная обработка требуется только при самостоятельной склейке текста файла, чего по возможности следует избегать.

Типичные ошибки
01
Попытка экранировать кавычку обратным слешем \" — в 1С такого синтаксиса нет, слеш попадёт в строку как обычный символ.
02
Ручное удвоение кавычек при записи через ЗаписьJSON/ЗаписьXML — платформа экранирует сама, получаются двойные кавычки в данных.
03
Прямая кавычка в печатных формах вместо «ёлочек» — документ выглядит нетипографично и может не пройти внутренние требования к оформлению.
04
Кавычки в тексте запроса вместо параметров — риск синтаксической ошибки, если значение приходит извне.

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

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

Если СтрЧислоВхождений(Текст, """") > 0 Тогда

// в строке есть прямые кавычки

КонецЕсли;

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

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

Строка в конфигураторе
Норма

Синтакс-контроль не выдаёт ошибок, строка подсвечена целиком

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

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

Вывод через Сообщить()
Норма

В сообщении видна одна кавычка там, где планировалось

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

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

Выгрузка в файл
Норма

Файл открывается внешней системой без ошибок разбора

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

Внешняя программа сообщает о неверном формате

Часто задаваемые вопросы

Как вывести одинарную кавычку (апостроф) в строке 1С?

Никакой специальной обработки не требуется: апостроф — обычный символ во встроенном языке. Просто напишите его внутри строкового литерала, например "Файл 'отчет.csv' сохранён".

Почему обратный слеш перед кавычкой не работает?

Экранирование через обратный слеш — синтаксис других языков (C, JavaScript). Во встроенном языке 1С он не поддерживается: слеш останется в строке как обычный символ. Используйте удвоение кавычки или Символ(34).

Что выбрать для печатной формы: прямые кавычки или «ёлочки»?

Для русскоязычных документов типографически правильны «ёлочки», а для вложенных кавычек — „лапки“. Прямые кавычки уместны в технических строках, кодах и обменах данными, где внешняя система ждёт именно символ с кодом 34.

Как вставить кавычки в макет печатной формы?

В текстовом и табличном макете кавычки — обычные символы ячейки или текста, синтаксис языка там не действует. Пишите любые кавычки напрямую. Удвоение нужно только в коде, который формирует текст программно.

Строка с кавычками приходит из файла или веб-сервиса — нужно ли её обрабатывать?

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

Как найти в модуле все строки, где забыли удвоить кавычки?

Запустите синтаксическую проверку модуля в конфигураторе: каждая незакрытая или неверно закрытая кавычка даст ошибку с указанием строки. Автоматического поиска «подозрительных» кавычек в платформе нет.

Итог

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

В строках 1С кавычка удваивается, либо добавляется через Символ(34). Для видимых пользователю текстов лучше использовать «ёлочки» — они не требуют экранирования и типографически корректны. В запросах передавайте значения с кавычками через параметры, а при записи XML/JSON не экранируйте вручную — платформа делает это сама.