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

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

Как заменить кавычку в 1С: рабочие способы и примеры кода

Как заменить кавычку в 1С: функция СтрЗаменить, удвоение кавычек в строковых литералах, замена на «ёлочки», работа в запросах и макетах. Примеры кода и типичные ошибки.

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

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

Ниже разобраны рабочие приёмы: замена прямой кавычки, замена на типографские «ёлочки», экранирование при выгрузке в файлы, работа в запросах и типичные ошибки, из-за которых код не компилируется или портит данные.

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

Во встроенном языке строка заключается в двойные кавычки. Если внутри строки нужна сама кавычка, она записывается дважды. Это базовое правило, без понимания которого любая замена превращается в синтаксическую ошибку.

Примеры литералов:

ОднаКавычка = """";           // строка из одного символа "

ДвеКавычки = """"""; // строка из двух символов ""

ТекстСКавычками = "Фирма ""Ромашка"""; // Фирма "Ромашка"

Частая путаница — посчитать кавычки «на глаз». Правило простое: открывающая и закрывающая кавычки литерала плюс удвоенная кавычка на каждый нужный символ. Для одной кавычки внутри строки получается четыре знака подряд: """".

Замена кавычки функцией СтрЗаменить

Базовый сценарий — убрать кавычки из строки или заменить их на другой символ. Функция СтрЗаменить принимает три параметра: исходную строку, что искать и на что заменить.

Наименование = "Организация ""Вега""";

// Удалить кавычки полностью

БезКавычек = СтрЗаменить(Наименование, """", "");

// Результат: Организация Вега

// Заменить кавычку на апостроф

САпострофами = СтрЗаменить(Наименование, """", "'");

// Результат: Организация 'Вега'

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

Функция заменяет все вхождения подстроки, а не только первое. Если в тексте несколько пар кавычек, обрабатывать их по одной не требуется.

bsl
Результат = СтрЗаменить(ИсходнаяСтрока, """", ""); // удалить все кавычки

Замена прямых кавычек на типографские «ёлочки»

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

Текст = "Договор с ООО ""Спектр"" расторгнут";

// Простая замена всех прямых кавычек на левую «ёлочку» — НЕПРАВИЛЬНО

// Правильно: различать открывающую и закрывающую кавычки

Функция ЗаменитьНаЕлочки(Знач Текст)

Результат = "";

Открыта = Ложь;

Для Поз = 1 По СтрДлина(Текст) Цикл

Символ = Сред(Текст, Поз, 1);

Если Символ = """" Тогда

Результат = Результат + ?(Открыта, "»", "«");

Открыта = Не Открыта;

Иначе

Результат = Результат + Символ;

КонецЕсли;

КонецЦикла;

Возврат Результат;

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

Логика проста: первая встреченная кавычка считается открывающей и заменяется на «, вторая — закрывающей и заменяется на », и так поочерёдно. Если число кавычек в тексте нечётное, последняя будет обработана как открывающая — такой текст стоит проверить вручную.

Альтернатива без цикла — использовать символы по кодам: Символ(171) для « и Символ(187) для ». Это удобно, когда раскладка или редактор не позволяет ввести «ёлочки» напрямую.

Экранирование кавычек при выгрузке в файлы

При выгрузке в CSV, JSON-подобные структуры или при ручной сборке XML кавычки внутри значений нужно не удалять, а экранировать — иначе файл будет некорректно прочитан принимающей стороной.

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

Функция ЭкранироватьДляCSV(Знач Значение)

// Удвоить внутренние кавычки и обернуть значение

Возврат """" + СтрЗаменить(Значение, """", """""") + """";

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

// Для значения: Труба 3/4"

// Получим: "Труба 3/4"""

В XML кавычки внутри значений атрибутов заменяют на сущность ", а амперсанд — на &. При этом порядок замен важен: сначала амперсанд, иначе вставленные сущности будут испорчены повторной заменой.

Кавычки в запросах и динамическом коде

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

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

Запрос.Текст =

"ВЫБРАТЬ

| Номенклатура.Ссылка

|ИЗ

| Справочник.Номенклатура КАК Номенклатура

|ГДЕ

| Номенклатура.Наименование ПОДОБНО &Наименование";

Запрос.УстановитьПараметр("Наименование", "%""%"); // ищем любые кавычки

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

Аналогично при использовании Выполнить() или Вычислить() с динамически собираемым кодом: каждая кавычка внутри вложенного строкового литерала должна быть удвоена относительно внешней строки, что быстро приводит к нечитаемым конструкциям. Если уровней вложенности больше одного, лучше вынести текст в макет или шаблон.

Типичные ошибки
01
Вызов СтрЗаменить без присваивания результата — исходная строка не меняется, замена «не срабатывает»
02
Неправильный подсчёт кавычек в литерале — ошибка компиляции или замена не того символа
03
Замена всех кавычек на одинаковую «ёлочку» — в тексте появляются только открывающие или только закрывающие кавычки
04
В XML сначала заменяют кавычки, а потом амперсанд — сущность " портится и становится "
05
Подстановка пользовательского ввода в текст запроса конкатенацией вместо параметров — синтаксические ошибки на значениях с кавычками

Групповая замена кавычек в данных справочников

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

Порядок действий
  1. 1
    Сделайте резервную копию базы или выполняйте работу на копии
  2. 2
    Запросом отберите записи, где наименование содержит кавычку (ПОДОБНО "%""%")
  3. 3
    Выведите список найденных записей и убедитесь, что лишнего не затронуто
  4. 4
    В транзакции для каждой записи выполните СтрЗаменить и запишите объект
  5. 5
    Проверьте несколько записей вручную после завершения
Выборка = Запрос.Выполнить().Выбрать();

Пока Выборка.Следующий() Цикл

Объект = Выборка.Ссылка.ПолучитьОбъект();

Объект.Наименование = СтрЗаменить(Объект.Наименование, """", "'");

Объект.Записать();

КонецЦикла;

Учитывайте, что изменение наименования может повлиять на печатные формы, обмены с сайтом и сопоставление при загрузках. Если наименование участвует в синхронизации с внешними системами, замену согласуйте с ответственными за обмен.

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

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

Код компилируется
Норма

Модуль сохраняется без синтаксических ошибок

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

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

Результат замены
Норма

В строке целевые символы заменены, остальной текст не изменён

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

Исчезли лишние символы или кавычки остались — проверьте параметры поиска

Файл выгрузки
Норма

Принимающая программа открывает файл без ошибок разбора

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

Строки «разъезжаются» по колонкам — кавычки не экранированы

FAQ

Как заменить кавычку на пробел в 1С?

Используйте СтрЗаменить с удвоенной кавычкой в параметре поиска: Результат = СтрЗаменить(Текст, """", " "). Учтите, что слова, ранее обрамлённые кавычками, получат лишние пробелы по краям — при необходимости дополнительно примените СокрЛП.

Почему СтрЗаменить не меняет мою строку?

Функция не изменяет исходную переменную, а возвращает новую строку. Присвойте результат: Текст = СтрЗаменить(Текст, """", ""). Вызов без присваивания просто теряет результат.

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

Удвойте кавычку внутри литерала: Сообщить("Документ ""Реализация"" не проведён"). Пользователь увидит одинарные кавычки вокруг слова.

Как заменить кавычки в макете печатной формы без кода?

Откройте макет в конфигураторе и используйте стандартную замену (Ctrl+F, вкладка «Заменить»). Это работает для статического текста шаблона; значения параметров, подставляемые из данных, обрабатывайте в коде перед выводом.

Можно ли заменить кавычки регулярными выражениями?

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

Чем замена кавычки отличается в толстом и тонком клиенте?

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

Итог

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

Кавычка внутри строкового литерала 1С записывается удвоением; замена выполняется через СтрЗаменить с обязательным присваиванием результата. Для «ёлочек» различайте открывающую и закрывающую кавычки, при выгрузке в файлы экранируйте, а не удаляйте, а массовую замену в данных делайте только после резервной копии и предварительного отбора.