Разработка и Конфигурация · 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 для » (цифры набираются на цифровом блоке клавиатуры). В редакторе конфигуратора символы вставляются и через таблицу символов.
Сравнение способов
Универсально, работает везде, включая запросы. Минус — плохо читается при большом количестве кавычек.
Удобно при программной сборке строк. Минус — лишняя конкатенация, код длиннее.
Лучший вариант для видимых пользователю текстов и печатных форм. Не подходит, если внешняя система требует именно прямые кавычки.
Кавычки в запросах 1С
В тексте запроса строковые константы заключаются в двойные кавычки, и правило удвоения действует точно так же. Если нужно найти товар, в наименовании которого есть кавычки, условие пишется с удвоенными символами:
Запрос.Текст = "ВЫБРАТЬ Ссылка ИЗ Справочник.Номенклатура
|ГДЕ Наименование ПОДОБНО ""%""""Ромашка""""%""";
Практически безопаснее передавать такие значения через параметры запроса — тогда кавычки вообще не требуют обработки, а запрос защищён от ошибок разбора:
Запрос.УстановитьПараметр("Шаблон", "%""Ромашка""%");
Кавычки при выгрузке и обмене данными
При формировании CSV-файлов и текстовых выгрузок кавычки часто играют служебную роль: поля, содержащие разделитель, обрамляются кавычками, а кавычки внутри значения удваиваются по стандарту CSV. Если формировать такой файл вручную, применяйте замену: СтрЗаменить(Значение, """", """""") — каждая кавычка превращается в две.
При работе с XML и JSON через встроенные объекты (ЗаписьXML, ЗаписьJSON) экранирование выполняется платформой автоматически — вручную удваивать кавычки не нужно, иначе в файле появятся лишние символы. Ручная обработка требуется только при самостоятельной склейке текста файла, чего по возможности следует избегать.
Как проверить результат
После написания кода убедитесь, что строка содержит именно то, что ожидалось. Простейшая проверка — вывести значение через Сообщить() и посмотреть результат в окне сообщений. Для программной проверки используйте СтрЧислоВхождений:
Если СтрЧислоВхождений(Текст, """") > 0 Тогда
// в строке есть прямые кавычки
КонецЕсли;
Как проверить результат
Синтакс-контроль не выдаёт ошибок, строка подсвечена целиком
Ошибка синтаксиса, текст после кавычки не подсвечен как строка
В сообщении видна одна кавычка там, где планировалось
Кавычек нет, их две подряд или текст обрезан
Файл открывается внешней системой без ошибок разбора
Внешняя программа сообщает о неверном формате
Часто задаваемые вопросы
Как вывести одинарную кавычку (апостроф) в строке 1С?
Никакой специальной обработки не требуется: апостроф — обычный символ во встроенном языке. Просто напишите его внутри строкового литерала, например "Файл 'отчет.csv' сохранён".
Почему обратный слеш перед кавычкой не работает?
Экранирование через обратный слеш — синтаксис других языков (C, JavaScript). Во встроенном языке 1С он не поддерживается: слеш останется в строке как обычный символ. Используйте удвоение кавычки или Символ(34).
Что выбрать для печатной формы: прямые кавычки или «ёлочки»?
Для русскоязычных документов типографически правильны «ёлочки», а для вложенных кавычек — „лапки“. Прямые кавычки уместны в технических строках, кодах и обменах данными, где внешняя система ждёт именно символ с кодом 34.
Как вставить кавычки в макет печатной формы?
В текстовом и табличном макете кавычки — обычные символы ячейки или текста, синтаксис языка там не действует. Пишите любые кавычки напрямую. Удвоение нужно только в коде, который формирует текст программно.
Строка с кавычками приходит из файла или веб-сервиса — нужно ли её обрабатывать?
Если значение уже получено как строка (из параметра, файла, JSON), никакого экранирования не требуется — кавычки внутри значения хранятся как есть. Обработка нужна только при включении значения в текст запроса: тогда либо передавайте его параметром, либо удваивайте кавычки функцией СтрЗаменить.
Как найти в модуле все строки, где забыли удвоить кавычки?
Запустите синтаксическую проверку модуля в конфигураторе: каждая незакрытая или неверно закрытая кавычка даст ошибку с указанием строки. Автоматического поиска «подозрительных» кавычек в платформе нет.
Что важно запомнить
В строках 1С кавычка удваивается, либо добавляется через Символ(34). Для видимых пользователю текстов лучше использовать «ёлочки» — они не требуют экранирования и типографически корректны. В запросах передавайте значения с кавычками через параметры, а при записи XML/JSON не экранируйте вручную — платформа делает это сама.