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

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

Как задать кавычки в строке 1С

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

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

Выбор способа зависит от задачи: одиночная кавычка в сообщении пользователю, формирование XML или JSON, где кавычки встречаются десятками, вывод текста запроса или подстановка «ёлочек» в печатную форму. Каждый сценарий имеет свой оптимальный вариант, и ниже каждый из них разобран с готовым кодом.

Материал применим ко всем актуальным версиям платформы 1С:Предприятие 8.x — синтаксис работы со строками и кавычками не менялся и одинаково работает в тонком, толстом и веб-клиенте, а также на сервере.

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

Строковый литерал в 1С начинается с двойной кавычки и заканчивается первой же следующей двойной кавычкой. Компилятор не анализирует смысл текста: как только встретилась вторая кавычка — строка считается завершённой, а всё, что следует дальше, воспринимается как код. Именно поэтому конструкция Строка = "Товар "Хлеб" отгружен"; вызывает ошибку «Ожидается символ ';'» или подобную.

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

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

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

Сообщение = "Товар ""Хлеб белый"" отгружен со склада.";

Сообщить(Сообщение);

// Результат: Товар "Хлеб белый" отгружен со склада.

Если кавычка должна стоять в самом начале или в самом конце строки, кавычки визуально «съезжаются» в три или четыре штуки подряд, и это частая причина путаницы. Разобрать такую конструкцию помогает правило: крайние кавычки — границы литерала, внутренние удвоенные — текст.

КавычкаВНачале = """Привет"" — сказал он.";   // "Привет" — сказал он.

КавычкаВКонце = "Он сказал: ""Привет"""; // Он сказал: "Привет"

ТолькоКавычка = """"; // одна кавычка: "

Как вставить кавычки удвоением
  1. 1
    Откройте модуль и найдите строковый литерал, куда нужно добавить кавычку
  2. 2
    В месте, где должна быть кавычка в тексте, поставьте две двойные кавычки подряд
  3. 3
    Если кавычка в начале строки — получится три кавычки подряд, в конце — три перед точкой с запятой
  4. 4
    Проверьте результат через Сообщить() или в отладчике, посмотрев значение переменной

Способ 2. Функция Символ(34)

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

Кавычка = Символ(34);

Текст = "Товар " + Кавычка + "Хлеб белый" + Кавычка + " отгружен.";

Типовой сценарий — формирование пар «имя=значение» для текстовых форматов, где кавычки обрамляют каждое значение. Объявив переменную Кавычка = Символ(34) один раз, вы избавляете код от леса удвоенных кавычек и снижаете риск ошибки при правках.

Способ 3. Конкатенация и многострочные литералы

Длинный текст с кавычками удобно собирать из частей оператором «+». Это снижает плотность кавычек в одной строке и упрощает поиск ошибки. Дополнительно 1С поддерживает многострочные литералы: если строка не закрыта на текущей строке кода, следующая строка должна начинаться с символа «|».

ТекстПисьма = "Уважаемый клиент!

|Ваш заказ ""№ 45-Б"" принят в работу.

|Статус можно уточнить у менеджера.";

Перенос строки внутри такого литерала сохраняется в тексте. Если перенос не нужен, а строка просто не помещается на экране, разбивайте её конкатенацией: "часть 1 " + "часть 2". Помните, что символ «|» обязателен в начале каждой продолжающей строки — без него компилятор выдаст ошибку.

Кавычки в запросах, XML и JSON

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

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

|ГДЕ Наименование = ""Товар \"\"Особый\"\"""";

При формировании XML и JSON вручную конкатенацией кавычки идут сплошным потоком, и здесь удвоение быстро превращает код в нечитаемый набор символов. Правильное решение — не собирать такие документы строками вообще: используйте объекты ЗаписьXML, ЗаписьJSON или сериализацию через ЗаписатьJSON. Эти механизмы сами расставляют и экранируют кавычки, исключая целый класс ошибок.

Одиночные кавычки и типографские «ёлочки»

Одиночная кавычка (апостроф) внутри строкового литерала не является служебным символом и вставляется как есть, без удвоения: "Файл 'отчет.xls' создан". Это удобный приём: если весь текст обрамлён кавычками, иногда проще заменить внутренние двойные кавычки на одиночные, чем удваивать каждую.

Типографские кавычки-«ёлочки» и „лапки“ — это обычные символы Unicode, а не служебные. Их можно вставить прямо в литерал, если раскладка или редактор позволяет: "Договор «Поставка» подписан". Либо через коды: Символ(171) — открывающая «ёлочка», Символ(187) — закрывающая. Для печатных форм и писем клиентам «ёлочки» выглядят аккуратнее прямых кавычек и не конфликтуют с синтаксисом.

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

Удвоение " "

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

Символ(34)

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

Конкатенация частей

Подходит для длинных текстов; требует аккуратности с пробелами на стыках

Одиночные кавычки или «ёлочки»

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

Типичные ошибки и как их найти

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

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

Типичные ошибки
01
Одна кавычка вместо удвоенной — строка обрывается, компилятор ругается на следующий фрагмент кода
02
Копирование текста из Word — прямые кавычки заменены типографскими, литерал не закрывается
03
Попытка экранировать кавычку обратным слэшем \" — в 1С слэш не является символом экранирования
04
Ручная сборка JSON конкатенацией — данные с кавычками ломают структуру документа
05
Символ «|» пропущен в начале продолжения многострочного литерала — синтаксическая ошибка

Проверка результата

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

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

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

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

Значение переменной в отладчике
Норма

Кавычки стоят в нужных местах текста

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

Кавычка пропала или появилась лишняя пара

Подсветка синтаксиса в конфигураторе
Норма

Вся строка подсвечена как строка, код после неё — как код

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

Подсветка «съехала» — где-то непарная кавычка

Чтение сформированного JSON обратно
Норма

ПрочитатьJSON выполняется без исключения

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

Ошибка парсинга — кавычки в данных не экранированы

Итог

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

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

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

Как вывести одну-единственную кавычку в строке?

Напишите четыре кавычки подряд: Строка = """";. Две крайние — границы литерала, две внутренние — удвоенная кавычка, которая и станет содержимым строки.

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

Нет. Во встроенном языке 1С обратный слэш — обычный символ без специального смысла. Единственный способ экранировать двойную кавычку — удвоить её.

Как вставить кавычки-«ёлочки» в текст?

Либо напрямую в литерал, если редактор позволяет их ввести, либо через коды: Символ(171) — открывающая «, Символ(187) — закрывающая ». Они не являются служебными и не требуют удвоения.

Нужно ли удваивать одиночную кавычку (апостроф)?

Нет. Апостроф внутри строкового литерала — обычный символ: "Файл 'отчет.xls' сохранён" работает без дополнительных действий.

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

Тем же удвоением, поскольку текст запроса — обычный строковый литерал. Но если значение с кавычкой сравнивается с реквизитом, надёжнее передать его через параметр запроса (Запрос.УстановитьПараметр), тогда экранирование вообще не потребуется.

Почему после копирования текста из Word строка не компилируется?

Word заменяет прямые кавычки на типографские «ёлочки» или «лапки». Для компилятора это разные символы: литерал, открытый прямой кавычкой, «ёлочкой» не закрывается. Замените кавычки в модуле вручную на прямые.