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