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