Разработка и Конфигурация · 8 мин
Как удалить кавычки в строке 1С
Как убрать кавычки из строки в 1С: функции СтрЗаменить, Сред, Лев, Прав, обработка кавычек-ёлочек и двойных кавычек в CSV. Примеры кода и типичные ошибки.
Кавычки в строковых значениях — частая проблема при загрузке данных из CSV-файлов, обмене с внешними системами и обработке пользовательского ввода в 1С. Например, файл выгрузки может содержать значение «"ООО Ромашка"», где кавычки являются служебными символами формата, а не частью наименования.
В языке 1С нет отдельной функции «удалить кавычки», но задача решается несколькими простыми способами: через СтрЗаменить, через отрезание первого и последнего символов функциями Сред, Лев и Прав, а также через регулярные выражения в расширенных сценариях. Выбор зависит от того, нужно ли убрать все кавычки в строке или только обрамляющие.
Важно понимать разницу: удаление всех кавычек подходит для служебных символов формата, но может испортить текст, если кавычки являются частью содержимого — например, в названии ООО «Весна» кавычки-ёлочки часть официального наименования. Поэтому перед обработкой стоит определить, откуда взялись кавычки и какие именно из них лишние.
Удаление всех кавычек через СтрЗаменить
Самый универсальный способ — функция СтрЗаменить. Она проходит по всей строке и заменяет каждое вхождение искомой подстроки на указанное значение. Если заменить кавычку на пустую строку, все кавычки исчезнут независимо от их количества и позиции.
Особенность синтаксиса: кавычка внутри строкового литерала 1С экранируется удвоением. Поэтому строка, состоящая из одной кавычки, записывается как четыре кавычки подряд — """". Это самое частое место ошибки у начинающих разработчиков.
ИсходнаяСтрока = """ООО Ромашка""";
Результат = СтрЗаменить(ИсходнаяСтрока, """", "");
// Результат: ООО Ромашка
Функция не изменяет исходную переменную — она возвращает новую строку, которую нужно присвоить. Вызов СтрЗаменить(Строка, """", "") без присвоения результата ничего не сделает с данными.
Результат = СтрЗаменить(ИсходнаяСтрока, """", "");Как убрать только обрамляющие кавычки
Когда данные приходят из CSV или текстового файла, кавычки часто стоят только по краям значения как ограничители поля. Удалять все кавычки внутри такой строки нельзя — внутри может находиться легитимный текст. В этом случае отрезают первый и последний символы функцией Сред.
Обязательна проверка перед отрезанием: если строка не начинается с кавычки, вы потеряете первый и последний значащие символы. Корректный шаблон выглядит так:
Если Лев(Строка, 1) = """" И Прав(Строка, 1) = """" Тогда
Строка = Сред(Строка, 2, СтрДлина(Строка) - 2);
КонецЕсли;
Дополнительно проверяйте длину строки: если она состоит из одного символа или пуста, конструкция Сред(Строка, 2, СтрДлина(Строка) - 2) вернёт пустую строку или вызовет неожиданное поведение. Безопасное условие — СтрДлина(Строка) >= 2.
- 1Определите, все ли кавычки лишние или только крайние
- 2Для всех кавычек примените СтрЗаменить с заменой на пустую строку
- 3Для обрамляющих кавычек проверьте Лев и Прав, затем отрежьте через Сред
- 4Проверьте результат на контрольном примере с кавычками внутри текста
Удаление кавычек-ёлочек и других видов кавычек
В данных из внешних источников встречаются разные символы кавычек: прямые ("), типографские ёлочки («»), лапки („ “), одиночные ('). Функция СтрЗаменить работает с конкретным символом, поэтому для полной очистки применяют цепочку замен.
Результат = СтрЗаменить(Строка, """", "");
Результат = СтрЗаменить(Результат, "«", "");
Результат = СтрЗаменить(Результат, "»", "");
Результат = СтрЗаменить(Результат, "'", "");
Если набор возможных символов заранее неизвестен, удобнее перебрать строку посимвольно и проверять каждый символ через СтрНайти по списку допустимых или запрещённых знаков. Это медленнее на больших объёмах, но надёжнее при «грязных» данных.
Разбор CSV: двойные кавычки и вложенные случаи
По стандарту CSV поле, содержащее разделитель или кавычки, заключается в кавычки целиком, а кавычка внутри такого поля удваивается. Например, значение ООО "Весна" в файле будет записано как "ООО ""Весна""". Простое удаление всех кавычек здесь даст искажённый результат.
Правильный порядок обработки поля CSV: сначала снять внешние обрамляющие кавычки, затем заменить удвоенные кавычки """" на одинарные. Только так восстанавливается исходное значение без потерь.
// Снять внешние кавычки
Если Лев(Поле, 1) = """" И Прав(Поле, 1) = """" Тогда
Поле = Сред(Поле, 2, СтрДлина(Поле) - 2);
КонецЕсли;
// Раскрыть удвоенные кавычки внутри
Поле = СтрЗаменить(Поле, """""", """");
Очистка строки от пробелов и кавычек одновременно
На практике кавычки редко приходят одни: значение может содержать начальные и конечные пробелы, неразрывные пробелы и табуляции. Порядок операций имеет значение — сначала применяют СокрЛП, иначе проверка первого символа на кавычку даст ложный результат из-за ведущего пробела.
Строка = СокрЛП(ИсходнаяСтрока);
Строка = СтрЗаменить(Строка, """", "");
Учтите, что СокрЛП в платформе 1С удаляет не только обычные пробелы, но и неразрывные пробелы и символы табуляции по краям строки. Это удобно при обработке выгрузок из Excel и веб-форм, где неразрывный пробел — частый источник «невидимых» расхождений при сравнении строк.
Проверка результата и отладка
После обработки полезно убедиться, что кавычек не осталось и значащие данные не пострадали. Быстрая проверка — функция СтрНайти: если она возвращает 0, искомого символа в строке нет.
Если СтрНайти(Результат, """") > 0 Тогда
Сообщить("В строке остались кавычки: " + Результат);
КонецЕсли;
При пакетной обработке файлов проверяйте результат на нескольких контрольных записях: с кавычками внутри текста, с пустым значением, со строкой из одних кавычек. Эти краевые случаи выявляют ошибки логики раньше, чем данные попадут в базу.
Как проверить результат
Возвращает 0 — кавычек не осталось
Возвращает позицию — кавычка осталась в строке
Внутренние кавычки сохранились при снятии внешних
Внутренний текст искажён или обрезан
Соответствует ожидаемой после удаления служебных символов
Строка короче на 1–2 символа без причины — срезаны значащие данные
Частые вопросы
Как удалить только одинарные кавычки, оставив двойные?
Укажите в СтрЗаменить одиночный символ апострофа: СтрЗаменить(Строка, "'", ""). Функция работает только с тем символом, который передан, поэтому двойные кавычки останутся нетронутыми.
Почему СтрЗаменить не меняет мою строку?
Функция не изменяет переданную переменную, а возвращает новую строку. Нужно присвоить результат: Строка = СтрЗаменить(Строка, """", ""). Без присвоения исходное значение остаётся прежним.
Как записать в коде строку, состоящую из одной кавычки?
Кавычка внутри строкового литерала экранируется удвоением, а сам литерал обрамляется кавычками. Поэтому строка из одной кавычки записывается как четыре подряд: """".
Можно ли удалить кавычки во всех элементах справочника сразу?
Да, через обход выборки запросом и обработку каждого объекта с записью. Перед массовой обработкой сделайте резервную копию и сначала протестируйте на копии базы: изменение наименований необратимо и может повлиять на поиск и печатные формы.
Чем отличается СокрЛП от СтрЗаменить для пробелов?
СокрЛП удаляет пробельные символы только по краям строки, не трогая пробелы внутри. СтрЗаменить заменяет все вхождения указанного символа в любой позиции. Для кавычек СокрЛП неприменим — он работает только с пробельными символами.
Что важно запомнить
Все кавычки убирает СтрЗаменить с заменой на пустую строку, обрамляющие — Сред после проверки Лев и Прав. Кавычка в литерале 1С экранируется удвоением. В CSV сначала снимайте внешние кавычки, затем раскрывайте удвоенные. Перед массовой обработкой проверьте результат на краевых случаях.