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

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

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

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

Во встроенном языке 1С строковые литералы ограничиваются двойными кавычками, поэтому просто вписать кавычку внутрь строки нельзя — компилятор воспримет её как конец строки и выдаст синтаксическую ошибку. Задача «добавить кавычки в строку» возникает постоянно: при формировании текстов запросов, выгрузке данных в CSV, печати наименований организаций вида ООО «Ромашка», построении XML и JSON вручную.

Существует три рабочих способа: удвоение кавычек прямо в литерале, функция Символ(34) и подстановка через СтрЗаменить или шаблоны. У каждого способа есть свои сценарии применения, ограничения и типовые ошибки. Ниже разобраны все варианты с примерами кода, проверкой результата и разбором ситуаций, где кавычки «ломают» запросы и файлы обмена.

Как 1С обрабатывает кавычки в строковых литералах

Строковый литерал во встроенном языке начинается и заканчивается двойной кавычкой. Всё, что находится между ними, — содержимое строки. Если интерпретатор встречает кавычку внутри, он считает строку завершённой, а следующий текст пытается разобрать как код. Результат — ошибка «Ожидается символ ';'» или подобная синтаксическая ошибка ещё на этапе проверки модуля.

Чтобы сообщить компилятору, что кавычка — это часть данных, а не конец строки, её нужно удвоить. Две подряд идущие кавычки внутри литерала превращаются в одну кавычку в итоговом значении строки. Это стандартное правило языка, оно работает одинаково в тонком клиенте, толстом клиенте и на сервере.

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

Способ 1. Удвоение кавычек в литерале

Основной и самый частый приём. Чтобы получить строку ООО "Ромашка", в коде пишут:

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

Сообщить(Наименование); // ООО "Ромашка"

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

КавычкаВНачале = """Привет"" мир";   // "Привет" мир

ТолькоКавычка = """"; // одна кавычка: "

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

1c
Строка = "ООО ""Ромашка""";  // ООО "Ромашка"

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

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

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

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

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

Типовой сценарий — оборачивание произвольного значения в кавычки, например при формировании CSV или текста запроса:

Функция ВКавычки(ЗначениеСтрокой)

Возврат Символ(34) + ЗначениеСтрокой + Символ(34);

КонецФункции

Плюс подхода — код легче читать и сопровождать, особенно в длинных конкатенациях. Минус — чуть более многословная запись. В часто вызываемых местах имеет смысл один раз объявить переменную или константу с символом кавычки и использовать её по всему модулю.

Сравнение способов

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

Подходит для коротких фиксированных строк. Ограничение: плохо читается при большом количестве кавычек и не работает для динамических значений.

Символ(34)

Подходит для динамической сборки строк и оборачивания значений. Чуть длиннее запись, но код понятнее.

СтрЗаменить

Подходит для массовой обработки: экранирования кавычек в пользовательском вводе или подготовки данных к выгрузке. Требует аккуратности с порядком замен.

Способ 3. СтрЗаменить и шаблоны для динамических строк

Когда кавычки нужно добавить или экранировать в уже существующей строке — например, во введённом пользователем наименовании — используют СтрЗаменить. Классическая задача: экранировать кавычки перед подстановкой значения в текст запроса или в CSV:

БезопасноеЗначение = СтрЗаменить(ПолеВвода, """", """""");

// каждая кавычка " превращается в ""

Для формирования строк по шаблону удобна функция СтрШаблон. Она подставляет параметры вместо %1, %2 и так далее, а кавычки в самом шаблоне по-прежнему удваиваются:

Текст = СтрШаблон("Организация: %1 ""%2""", "ООО", "Ромашка");

// Организация: ООО "Ромашка"

Обратите внимание: СтрШаблон не экранирует кавычки внутри подставляемых параметров. Если параметр сам содержит кавычки и результат пойдёт в запрос или файл, обрабатывайте параметр через СтрЗаменить до подстановки.

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

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

Если вы формируете текст запроса конкатенацией и подставляете в него строковые значения, неэкранированная кавычка во значении разорвёт литерал запроса и вызовет ошибку. Правильный путь — использовать параметры запроса вместо подстановки:

Запрос.Текст = "ВЫБРАТЬ * ИЗ Справочник.Номенклатура

|ГДЕ Наименование = &Наименование";

Запрос.УстановитьПараметр("Наименование", НаименованиеСКавычками);

Параметры передают значение «как есть», и кавычки внутри него не требуют никакой обработки. Конкатенацию значений в текст запроса стоит избегать в принципе: помимо проблем с кавычками, это создаёт риск ошибок и уязвимостей.

Кавычки при выгрузке в CSV

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

Функция ПолеCSV(ЗначениеСтрокой)

Результат = СтрЗаменить(ЗначениеСтрокой, """", """""");

Возврат Символ(34) + Результат + Символ(34);

КонецФункции

Если этим пренебречь, файл откроется в Excel со съехавшими колонками или обрезанными значениями. Проверка простая: откройте выгруженный файл и убедитесь, что строки с кавычками и запятыми внутри значений попадают в одну ячейку.

Проверка результата и типичные ошибки

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

Типичные ошибки
01
Одинарная кавычка внутри литерала вместо удвоенной — модуль не проходит синтаксическую проверку, строка обрывается.
02
Лишняя кавычка в конце: написано четыре кавычки подряд там, где нужны три, — в результате появляется лишняя кавычка или ошибка компиляции.
03
Использование одиночных кавычек ' вместо двойных — в 1С они не ограничивают строки и попадают в значение как обычный символ.
04
Экранирование кавычек перед подстановкой в параметры запроса — параметр передаёт значение как есть, поэтому удвоенные кавычки попадут в данные и испортят сравнение.
05
Двойное экранирование одной и той же строки при многоступенчатой обработке — кавычки накапливаются, и в файле появляются комбинации вида """".

Отдельная ловушка — перенос строк в литерале. В 1С многострочный литерал оформляется символом | в начале каждой следующей строки, и правило удвоения кавычек действует на каждой строке независимо:

Текст = "Первая строка с ""кавычками""

|и вторая строка тоже с ""кавычками""";

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

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

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

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

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

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

Вывод строки
Норма

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

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

Кавычек больше или меньше, строка оборвана

Файл CSV
Норма

Поля с кавычками открываются одной ячейкой

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

Колонки съезжают, значения обрезаются

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

Значение с кавычками находится и сравнивается корректно

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

Ошибка выполнения запроса или пустой результат

FAQ

Как вывести одну-единственную кавычку в строке?

Используйте литерал из четырёх кавычек: Строка = """"; — две внутренние дают одну кавычку данных, внешние ограничивают литерал. Альтернатива — Символ(34).

Можно ли использовать одиночные кавычки для строк в 1С?

Нет. Во встроенном языке строки ограничиваются только двойными кавычками. Одиночная кавычка внутри строки — обычный символ, который попадёт в значение без всякой обработки.

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

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

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

Правило то же: каждая кавычка внутри литерала удваивается, а каждая новая строка литерала начинается с символа |. Кавычки вокруг имен полей и таблиц в тексте запроса обычно не нужны вовсе.

Как убрать все кавычки из строки?

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

Почему в выгруженном CSV вокруг значений тройные кавычки?

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

Итог

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

В литерале кавычка удваивается, для динамической сборки удобен Символ(34), для массовой обработки — СтрЗаменить. В запросы значения передавайте параметрами без экранирования, а при выгрузке в CSV удваивайте кавычки и оборачивайте поле целиком. Проверяйте результат выводом строки и тестовым открытием файла.