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

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

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

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

Во встроенном языке 1С строковый литерал ограничивается двойными кавычками, поэтому обычная кавычка внутри текста воспринимается компилятором как конец строки. Попытка написать Текст = "Фирма "Ромашка" ООО"; приведёт к синтаксической ошибке ещё на этапе проверки модуля. Это одна из самых частых проблем начинающих разработчиков, и у неё есть несколько штатных решений.

Основной приём — удвоение кавычки: две подряд идущие двойные кавычки внутри строкового литерала интерпретируются как одна кавычка в результирующем тексте. Дополнительно доступны функция Символ(34), конкатенация частей строки и подстановки в шаблонах. Выбор способа зависит от читаемости кода, количества кавычек и контекста — обычный модуль, запрос, форматная строка или выгрузка в файл.

Ниже разобраны все рабочие варианты с примерами, отличия для многострочных текстов и запросов, а также типичные ошибки, из-за которых кавычки «теряются» или ломают синтаксис.

Удвоение кавычек — основной способ

Правило простое: внутри строкового литерала каждая кавычка, которая должна попасть в итоговый текст, записывается дважды. Платформа при компиляции превращает пару "" в один символ кавычки.

Наименование = "Фирма ""Ромашка"" ООО";

// Результат: Фирма "Ромашка" ООО

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

Фраза = """Привет, мир!""";

// Результат: "Привет, мир!"

Проверить результат проще всего через Сообщить() или вычисление выражения в отладчике (Shift+F9 в конфигураторе): вы увидите итоговую строку уже после обработки удвоенных кавычек.

Вставка кавычки через Символ(34)

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

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

Наименование = "Фирма " + Кавычка + "Ромашка" + Кавычка + " ООО";

Этот способ удобен, когда кавычек много и удвоение превращает код в нечитаемую «кашу», либо когда строка собирается динамически в цикле. Минус — код становится длиннее и медленнее читается тем, кто привык к удвоению.

Для обратной задачи — убрать или заменить кавычки в готовой строке — используется СтрЗаменить:

БезКавычек = СтрЗаменить(ИсходнаяСтрока, Символ(34), "");

Ёлочки = СтрЗаменить(ИсходнаяСтрока, Символ(34), "«");

Кавычки в многострочных строках

В 1С многострочный литерал оформляется символом вертикальной черты | в начале каждой продолжающейся строки. Правило удвоения кавычек внутри такого текста сохраняется.

ТекстПисьма = "Уважаемые партнёры!

|Сообщаем, что компания ""Вега"" изменила реквизиты.

|Подробности во вложении.";

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

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

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

Текст запроса в 1С — это тоже строка, поэтому кавычки внутри него подчиняются тем же правилам. Если в запросе нужен строковый литерал (например, в условии сравнения), в языке запросов строки пишутся в двойных кавычках, а в коде модуля они удваиваются:

Запрос.Текст =

"ВЫБРАТЬ

| Номенклатура.Ссылка

|ИЗ

| Справочник.Номенклатура КАК Номенклатура

|ГДЕ

| Номенклатура.Наименование = ""Кабель ""ВВГ"" 3х2,5""";

На практике сравнение по наименованию с кавычками лучше выносить в параметр запроса — так код надёжнее и не зависит от экранирования:

Запрос.УстановитьПараметр("Наименование", "Кабель ""ВВГ"" 3х2,5");

Запрос.Текст = "ВЫБРАТЬ ... ГДЕ Наименование = &Наименование";

В консоли запросов и конструкторе запроса кавычки в тексте запроса вводятся как обычные — удвоение требуется только когда этот текст помещается в модуль как строковый литерал.

Сравнение вариантов

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

Стандартный и самый читаемый способ для 1–3 кавычек; неудобен при большом количестве

Символ(34) с конкатенацией

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

Параметр запроса

Лучший вариант для подстановки значений с кавычками в запрос; не подходит для статического текста запроса

СтрЗаменить с шаблоном

Удобен, когда текст берётся из макета или шаблона и кавычки подставляются заменой маркера

Кавычки в шаблонах, форматных строках и выгрузках

При работе с СтрШаблон кавычки в самом шаблоне также удваиваются, а подставляемые параметры передаются как есть — их содержимое не требует обработки:

Текст = СтрШаблон("Организация ""%1"" не найдена", НаименованиеОрганизации);

При выгрузке в CSV или формировании XML/JSON вручную важно не путать кавычки языка 1С с кавычками целевого формата. В CSV поле с кавычками оборачивается в кавычки, а внутренние кавычки удваиваются по правилам CSV — и это отдельное удвоение, не связанное с синтаксисом 1С. Для JSON надёжнее использовать штатные средства (ЗаписьJSON), которые сами экранируют спецсимволы, чем собирать строку вручную.

Как проверить результат и где искать ошибку

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

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

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

Проверка модуля (F7)
Норма

Ошибок синтаксиса нет

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

Сообщение о незакрытой строке или неожиданном символе

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

Кавычки отображаются в нужных местах, по одной

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

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

Содержимое в отладчике
Норма

В табло видна итоговая строка с одиночными кавычками

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

В строке видны пары кавычек — значит, удвоение применено к данным, а не к литералу

Частая ситуация: кавычки «удвоились» в данных, которые пользователь ввёл в поле или которые пришли из файла. Это признак того, что удвоение применили к значению переменной, хотя оно нужно только в литералах кода. Данные извне хранят кавычки как есть, и дополнительная обработка их портит.

Ещё один источник путаницы — копирование кода из статей и мессенджеров, где автозамена превращает прямые кавычки в типографские. Такие кавычки визуально похожи, но компилятор их не принимает. Лечится заменой всех «ёлочек» на прямые кавычки в редакторе.

Итог

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

В литералах кода кавычка удваивается, для динамической сборки удобен Символ(34), значения в запросы лучше передавать параметрами, а JSON и XML собирать штатными объектами записи. Данные из внешних источников обрабатывать удвоением не нужно.

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

Почему компилятор пишет «Синтаксическая ошибка» в строке с кавычками?

Чаще всего число кавычек нечётное или в текст попали типографские кавычки-«ёлочки» из Word или мессенджера. Посчитайте кавычки в строке и замените все непрямые кавычки на стандартный символ.

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

Одинарная кавычка не является ограничителем строки в 1С, поэтому вставляется без всякого экранирования: Текст = "Значение 'А'";. Удваивать её не нужно.

Нужно ли удваивать кавычки в данных, введённых пользователем?

Нет. Удвоение — правило только для строковых литералов в исходном коде. Значения переменных, полей ввода и данных из файлов хранят кавычки как обычные символы.

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

Используйте СтрЗаменить с Символ(34): Результат = СтрЗаменить(Строка, Символ(34), "'");. Указание символа через код надёжнее, чем попытка записать кавычку литералом.

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

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

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

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