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

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

Как добавить кавычку в строку 1С

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

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

Задача встречается постоянно: при формировании текста запроса из кода, при сборке SQL-подобных выражений, при выводе сообщений пользователю с названиями документов в кавычках, при генерации JSON, HTML или команд для внешних программ. Во всех этих случаях нужен управляемый способ вставить символ кавычки внутрь строкового значения.

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

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

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

Сообщение = "Документ ""Реализация товаров № 15"" проведён.";

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

// Результат: Документ "Реализация товаров № 15" проведён.

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

// Кавычка в начале строки

Текст = """Привет"" — так начинается письмо.";

// Результат: "Привет" — так начинается письмо.

// Кавычка в конце строки

Текст2 = "Название: ""Отчёт""";

// Результат: Название: "Отчёт"

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

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

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

Текст = "Значение поля: " + Кавычка + "Сумма" + Кавычка;

// Результат: Значение поля: "Сумма"

Для повышения читаемости часто объявляют переменную один раз в начале процедуры и используют её по всему коду. Некоторые разработчики выносят такую переменную в общий модуль, чтобы не дублировать объявление в каждой процедуре, где формируются строки с кавычками.

Через Символ() можно вставлять и другие служебные символы: одинарную кавычку (39), табуляцию (9), перевод строки (10). Это полезно при генерации файлов обмена, где структура строк жёстко регламентирована.

bsl
Кавычка = Символ(34);
ТекстJSON = "{" + Кавычка + "name" + Кавычка + ":" + Кавычка + "Иванов" + Кавычка + "}";
// {"name":"Иванов"}

Способ 3: формирование строк через СтрШаблон

Функция СтрШаблон() подставляет значения в шаблон по маркерам %1, %2 и так далее. Кавычки внутри шаблона всё равно нужно удваивать, но структура строки становится нагляднее, особенно при нескольких подстановках.

Текст = СтрШаблон("Документ ""%1"" от %2 не найден.",

НомерДокумента,

Формат(ДатаДокумента, "ДЛФ=D"));

Если подставляемое значение само может содержать кавычки (например, наименование контрагента, введённое пользователем), СтрШаблон вставит его как есть — это безопасно для обычного текста, но опасно для текста запроса, о чём подробно ниже.

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

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

ТекстЗапроса = "ВЫБРАТЬ

| Контрагенты.Ссылка

|ИЗ

| Справочник.Контрагенты КАК Контрагенты

|ГДЕ

| Контрагенты.Наименование = ""Ромашка""";

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

Запрос = Новый Запрос;

Запрос.Текст = "ВЫБРАТЬ Контрагенты.Ссылка

|ИЗ Справочник.Контрагенты КАК Контрагенты

|ГДЕ Контрагенты.Наименование = &Наименование";

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

Кавычки в макетах, JSON и внешних форматах

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

В текстовых макетах и табличных документах кавычки из ячеек выводятся как обычный текст без дополнительного экранирования — проблемы возникают только в коде. А вот при выгрузке в CSV помните: по общепринятым правилам формата поле, содержащее кавычки, заключается в кавычки целиком, а внутренние кавычки удваиваются.

Типичные ошибки и как их проверить

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

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

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

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

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

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

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

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

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

Синтаксис модуля
Норма

Проверка конфигурации проходит без ошибок

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

Ошибка «Неожиданный символ» или «Ошибка в выражении» рядом со строкой

Итоговая строка
Норма

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

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

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

Запрос с параметрами
Норма

Запрос отрабатывает на значениях с кавычками внутри

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

Ошибка выполнения запроса на наименованиях с кавычками

Итог

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

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

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

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

Одинарная кавычка не является служебным символом во встроенном языке, поэтому вставляется в литерал напрямую: Текст = "Имя: 'Иван'";. Если нужен программный способ — используйте Символ(39).

Почему конфигуратор ругается на строку, где кавычки вроде бы удвоены?

Чаще всего в текст попали типографские кавычки («ёлочки» или «лапки») при копировании из Word или переписки. Они выглядят как кавычки, но являются обычными символами. Удалите фрагмент и наберите кавычки вручную с клавиатуры в конфигураторе.

Как вывести кавычки в сообщении пользователю без лишнего кода?

Используйте удвоение внутри литерала: Сообщить("Документ ""Поступление № 5"" записан.");. Для сообщений с подставляемыми значениями удобнее СтрШаблон("Документ ""%1"" записан.", НомерДокумента).

Нужно ли экранировать кавычки в параметрах запроса?

Нет. Параметры передаются платформе как значения, а не как часть текста запроса, поэтому строка ООО "Ромашка" в параметре обрабатывается корректно без какого-либо удвоения или замены символов.

Как добавить кавычки при формировании строки в цикле?

Объявите переменную Кавычка = Символ(34); один раз до цикла и используйте конкатенацию внутри. Это читаемее, чем удвоенные кавычки в каждой итерации, и снижает риск ошибиться в количестве символов.

Чем заменить кавычки, если их слишком много и код нечитаем?

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