Разработка и Конфигурация · 8 мин
Как поставить кавычки в строке 1С
Как вставить кавычки в строку в 1С: удвоение кавычек, функция Символ(34), конкатенация, кавычки в запросах и шаблонах. Примеры кода и типичные ошибки.
Во встроенном языке 1С строковый литерал ограничивается двойными кавычками, поэтому обычная кавычка внутри текста воспринимается компилятором как конец строки. Попытка написать Текст = "Фирма "Ромашка" ООО"; приведёт к синтаксической ошибке ещё на этапе проверки модуля. Это одна из самых частых проблем начинающих разработчиков, и у неё есть несколько штатных решений.
Основной приём — удвоение кавычки: две подряд идущие двойные кавычки внутри строкового литерала интерпретируются как одна кавычка в результирующем тексте. Дополнительно доступны функция Символ(34), конкатенация частей строки и подстановки в шаблонах. Выбор способа зависит от читаемости кода, количества кавычек и контекста — обычный модуль, запрос, форматная строка или выгрузка в файл.
Ниже разобраны все рабочие варианты с примерами, отличия для многострочных текстов и запросов, а также типичные ошибки, из-за которых кавычки «теряются» или ломают синтаксис.
Удвоение кавычек — основной способ
Правило простое: внутри строкового литерала каждая кавычка, которая должна попасть в итоговый текст, записывается дважды. Платформа при компиляции превращает пару "" в один символ кавычки.
Наименование = "Фирма ""Ромашка"" ООО";
// Результат: Фирма "Ромашка" ООО
Если строка должна начинаться или заканчиваться кавычкой, кавычки утраиваются: две — это сам символ, третья — граница литерала. Это место, где чаще всего путаются.
Фраза = """Привет, мир!""";
// Результат: "Привет, мир!"
Проверить результат проще всего через Сообщить() или вычисление выражения в отладчике (Shift+F9 в конфигураторе): вы увидите итоговую строку уже после обработки удвоенных кавычек.
Вставка кавычки через Символ(34)
Двойная кавычка имеет код 34 в таблице символов. Функция Символ(34) возвращает её как обычный символ, который можно присоединить к строке оператором конкатенации +.
Кавычка = Символ(34);
Наименование = "Фирма " + Кавычка + "Ромашка" + Кавычка + " ООО";
Этот способ удобен, когда кавычек много и удвоение превращает код в нечитаемую «кашу», либо когда строка собирается динамически в цикле. Минус — код становится длиннее и медленнее читается тем, кто привык к удвоению.
Для обратной задачи — убрать или заменить кавычки в готовой строке — используется СтрЗаменить:
БезКавычек = СтрЗаменить(ИсходнаяСтрока, Символ(34), "");
Ёлочки = СтрЗаменить(ИсходнаяСтрока, Символ(34), "«");
Кавычки в многострочных строках
В 1С многострочный литерал оформляется символом вертикальной черты | в начале каждой продолжающейся строки. Правило удвоения кавычек внутри такого текста сохраняется.
ТекстПисьма = "Уважаемые партнёры!
|Сообщаем, что компания ""Вега"" изменила реквизиты.
|Подробности во вложении.";
Обратите внимание: первая строка открывается кавычкой, последующие начинаются с | без открывающей кавычки, а закрывающая кавычка ставится только в самом конце всего литерала. Если поставить кавычку в конце промежуточной строки, компилятор посчитает литерал завершённым и выдаст ошибку на следующей строке.
Кавычки в тексте запроса
Текст запроса в 1С — это тоже строка, поэтому кавычки внутри него подчиняются тем же правилам. Если в запросе нужен строковый литерал (например, в условии сравнения), в языке запросов строки пишутся в двойных кавычках, а в коде модуля они удваиваются:
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.Наименование = ""Кабель ""ВВГ"" 3х2,5""";
На практике сравнение по наименованию с кавычками лучше выносить в параметр запроса — так код надёжнее и не зависит от экранирования:
Запрос.УстановитьПараметр("Наименование", "Кабель ""ВВГ"" 3х2,5");
Запрос.Текст = "ВЫБРАТЬ ... ГДЕ Наименование = &Наименование";
В консоли запросов и конструкторе запроса кавычки в тексте запроса вводятся как обычные — удвоение требуется только когда этот текст помещается в модуль как строковый литерал.
Сравнение вариантов
Стандартный и самый читаемый способ для 1–3 кавычек; неудобен при большом количестве
Подходит для динамической сборки строк и большого числа кавычек; код длиннее
Лучший вариант для подстановки значений с кавычками в запрос; не подходит для статического текста запроса
Удобен, когда текст берётся из макета или шаблона и кавычки подставляются заменой маркера
Кавычки в шаблонах, форматных строках и выгрузках
При работе с СтрШаблон кавычки в самом шаблоне также удваиваются, а подставляемые параметры передаются как есть — их содержимое не требует обработки:
Текст = СтрШаблон("Организация ""%1"" не найдена", НаименованиеОрганизации);
При выгрузке в CSV или формировании XML/JSON вручную важно не путать кавычки языка 1С с кавычками целевого формата. В CSV поле с кавычками оборачивается в кавычки, а внутренние кавычки удваиваются по правилам CSV — и это отдельное удвоение, не связанное с синтаксисом 1С. Для JSON надёжнее использовать штатные средства (ЗаписьJSON), которые сами экранируют спецсимволы, чем собирать строку вручную.
Как проверить результат и где искать ошибку
Самый быстрый способ убедиться, что кавычки встали правильно, — вывести строку через Сообщить() в служебной обработке или посмотреть значение в табло отладчика. Компилятор модуля (проверка по F7) сразу укажет на синтаксически неверную строку.
Как проверить результат
Ошибок синтаксиса нет
Сообщение о незакрытой строке или неожиданном символе
Кавычки отображаются в нужных местах, по одной
Кавычки двоятся, отсутствуют или текст обрезан
В табло видна итоговая строка с одиночными кавычками
В строке видны пары кавычек — значит, удвоение применено к данным, а не к литералу
Частая ситуация: кавычки «удвоились» в данных, которые пользователь ввёл в поле или которые пришли из файла. Это признак того, что удвоение применили к значению переменной, хотя оно нужно только в литералах кода. Данные извне хранят кавычки как есть, и дополнительная обработка их портит.
Ещё один источник путаницы — копирование кода из статей и мессенджеров, где автозамена превращает прямые кавычки в типографские. Такие кавычки визуально похожи, но компилятор их не принимает. Лечится заменой всех «ёлочек» на прямые кавычки в редакторе.
Что важно запомнить
В литералах кода кавычка удваивается, для динамической сборки удобен Символ(34), значения в запросы лучше передавать параметрами, а JSON и XML собирать штатными объектами записи. Данные из внешних источников обрабатывать удвоением не нужно.
Частые вопросы
Почему компилятор пишет «Синтаксическая ошибка» в строке с кавычками?
Чаще всего число кавычек нечётное или в текст попали типографские кавычки-«ёлочки» из Word или мессенджера. Посчитайте кавычки в строке и замените все непрямые кавычки на стандартный символ.
Как поставить одинарные кавычки в строке?
Одинарная кавычка не является ограничителем строки в 1С, поэтому вставляется без всякого экранирования: Текст = "Значение 'А'";. Удваивать её не нужно.
Нужно ли удваивать кавычки в данных, введённых пользователем?
Нет. Удвоение — правило только для строковых литералов в исходном коде. Значения переменных, полей ввода и данных из файлов хранят кавычки как обычные символы.
Как заменить все кавычки в строке на другой символ?
Используйте СтрЗаменить с Символ(34): Результат = СтрЗаменить(Строка, Символ(34), "'");. Указание символа через код надёжнее, чем попытка записать кавычку литералом.
Работает ли обратный слэш для экранирования кавычек, как в других языках?
Нет. Во встроенном языке 1С символ обратного слэша не имеет специального значения и не экранирует кавычки. Единственный механизм экранирования в литерале — удвоение кавычки.
Как вставить кавычки в макете печатной формы?
В макете (табличном или текстовом документе) кавычки пишутся как обычный текст без удвоения. Правила языка 1С применяются только в коде модулей, а не в содержимом макетов.