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

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

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

Как убрать кавычки в строке 1С: СтрЗаменить, обработка двойных и одинарных кавычек, чтение из CSV и JSON, проверка результата и типичные ошибки.

Кавычки в строке — частая помеха при обмене данными в 1С: они появляются при чтении CSV-файлов, при разборе JSON и XML, при выгрузках из Excel и при ручном вводе пользователей. Если оставить их без обработки, в базе появляются дубли контрагентов, ломается поиск по наименованию и некорректно формируются печатные формы.

Основной инструмент для удаления кавычек во встроенном языке 1С — функция СтрЗаменить(), которая заменяет все вхождения подстроки на другую подстроку. Для более сложных случаев используют функции Сред(), Лев(), Прав() и регулярные выражения через COM-объект VBScript.RegExp.

Важный нюанс: кавычки бывают разные — прямые двойные ("), одинарные ('), типографские («ёлочки» и „лапки“). Перед удалением нужно понять, какие именно символы содержит строка, иначе замена «не сработает», хотя визуально кавычки на месте.

Как удалить все кавычки через СтрЗаменить

Функция СтрЗаменить(Строка, ПодстрокаПоиска, ПодстрокаЗамены) заменяет все вхождения искомого фрагмента. Чтобы убрать кавычки, подстрокой замены указывают пустую строку.

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

ИсходнаяСтрока = "ООО ""Ромашка""";

// Вариант 1: удвоенная кавычка в литерале

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

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

// Вариант 2: через код символа

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

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

// Одинарная кавычка

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

Вариант с Символ(34) читается легче и меньше путает при ревью кода, потому что четыре кавычки подряд ("""") часто воспринимаются как опечатка.

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

Как убрать кавычки только по краям строки

Не всегда нужно удалять все кавычки. При чтении CSV значение часто обёрнуто кавычками целиком ("ООО ""Вектор"""), а внутренние кавычки — часть данных, которые терять нельзя. В этом случае срезают только первый и последний символы.

Для этого используют функцию Сред() вместе с СтрДлина(). Перед срезом обязательно проверяют, что строка действительно начинается и заканчивается кавычкой, иначе можно отрезать значащие символы.

Функция УбратьОбрамляющиеКавычки(Знач Строка)

Строка = СокрЛП(Строка);

Если СтрДлина(Строка) >= 2

И Лев(Строка, 1) = Символ(34)

И Прав(Строка, 1) = Символ(34) Тогда

Строка = Сред(Строка, 2, СтрДлина(Строка) - 2);

КонецЕсли;

Возврат Строка;

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

Обратите внимание на СокрЛП() в начале: если перед кавычкой стоит пробел (частый случай в выгрузках из Excel), проверка первого символа не сработает без предварительной обрезки пробелов.

Как удалить типографские кавычки и другие варианты

В данных из Word, Excel и веб-форм встречаются «ёлочки», „лапки“ и английские “фигурные” кавычки. Визуально они похожи на обычные, но имеют другие коды символов, поэтому замена по Символ(34) их не трогает.

КавычкаНазваниеКод символа
"Прямая двойная34
'Одинарная (апостроф)39
«Левая ёлочка171
»Правая ёлочка187
„Нижняя лапка132
“Левая фигурная147
”Правая фигурная148

Универсальная функция, очищающая строку от всех распространённых видов кавычек, выглядит так:

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

КодыКавычек = Новый Массив;

КодыКавычек.Добавить(34); // "

КодыКавычек.Добавить(39); // '

КодыКавычек.Добавить(171); // «

КодыКавычек.Добавить(187); // »

КодыКавычек.Добавить(132); // „

КодыКавычек.Добавить(147); // “

КодыКавычек.Добавить(148); // ”

Для Каждого Код Из КодыКавычек Цикл

Строка = СтрЗаменить(Строка, Символ(Код), "");

КонецЦикла;

Возврат Строка;

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

Кавычки при чтении CSV и JSON

Чтение CSV-файлов

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

Значение = УбратьОбрамляющиеКавычки(ПолеCSV);

Значение = СтрЗаменить(Значение, """""", """"); // "" -> "

Чтение JSON

Если данные приходят в JSON, не разбирайте их вручную через СтрЗаменить — используйте ПрочитатьJSON() с объектом ЧтениеJSON. Штатный парсер сам корректно обработает служебные кавычки и экранирование, а ручная обработка почти гарантированно сломается на вложенных строках.

Типичные ошибки
01
Разбор JSON вручную через СтрЗаменить — ломается на экранированных кавычках внутри значений
02
Замена всех кавычек в CSV до разделения на поля — разрушается структура строки, поля с запятыми внутри слипаются
03
Проверка результата только визуально — ёлочки и фигурные кавычки остаются незамеченными
04
Удаление кавычек из наименования перед записью без проверки дублей — в справочнике появляются неявные задвоения

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

Главный приём отладки — посмотреть коды символов строки. Если замена «не работает», почти всегда причина в том, что кавычка имеет не тот код, который вы ожидали.

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

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

Сообщить(СтрШаблон("%1: %2 (код %3)",

Позиция, ТекСимвол, КодСимвола(ТекСимвол)));

КонецЦикла;

Выведите коды до и после замены и сравните. Также полезно проверить длину строки: если после удаления двух кавычек длина не уменьшилась на 2, замена не отработала.

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

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

Длина строки после замены
Норма

Уменьшилась на количество удалённых кавычек

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

Не изменилась — замена не сработала, проверяйте коды символов

Коды символов в строке
Норма

Отсутствуют коды 34, 39, 171, 187, 147, 148

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

Остались 171/187 или 147/148 — это типографские кавычки

Поиск контрагента по очищенному наименованию
Норма

Находится ровно один объект

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

Несколько похожих — ранее уже создавались дубли с кавычками

Альтернативные способы и когда их применять

Кроме СтрЗаменить, есть ещё несколько подходов, которые оправданы в отдельных сценариях.

  • Регулярные выражения через VBScript.RegExp (только Windows, толстый/тонкий клиент). Позволяют одним шаблоном удалить все виды кавычек: ["'«»„“”]. На сервере Linux недоступны.
  • СтрСоединить и СтрРазделить: разбить строку по кавычке на массив и соединить обратно без разделителя. Работает медленнее, но иногда удобно при параллельной обработке частей.
  • Форматирование при выводе: если кавычки нужны только для отображения, лучше не хранить их в данных, а добавлять при формировании представления.

Сравнение вариантов

СтрЗаменить

Универсальный и самый быстрый способ; требует точного указания кода кавычки

Сред + проверка краёв

Для обрамляющих кавычек в CSV; сохраняет внутренние кавычки в данных

Регулярные выражения

Удаляют все виды кавычек одним шаблоном; не работают на Linux-сервере

ПрочитатьJSON

Правильный способ для JSON; ручная замена кавычек в JSON недопустима

Для массовой обработки данных (например, чистка справочника контрагентов) пишите обработку с транзакцией и предварительным отчётом: сначала выведите список объектов, которые будут изменены, и только потом записывайте. Так вы сможете отменить операцию, если правило очистки оказалось слишком агрессивным.

Итог

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

Базовое решение — СтрЗаменить с Символ(34). Сначала определите, какие именно кавычки в строке, через КодСимвола(). Обрамляющие кавычки срезайте через Сред() с проверкой, JSON разбирайте только штатным парсером, а результат всегда проверяйте по длине строки и кодам символов.

Частые вопросы

Почему СтрЗаменить не убирает кавычку, хотя она видна в строке?

Скорее всего, это типографская кавычка с другим кодом (171, 187, 147, 148) или апостроф с кодом 8217. Выведите код символа через КодСимвола() и заменяйте именно его.

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

Удвойте её: литерал """" означает одну двойную кавычку. Альтернатива — функция Символ(34), которая возвращает символ по его коду Unicode.

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

В языке запросов есть функция ПОДСТРОКА, но полноценной замены нет. Обычно данные выбирают запросом, а кавычки убирают уже в коде при обходе выборки через СтрЗаменить.

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

Напишите обработку: выберите элементы, у которых наименование содержит кавычку, очистите значение через СтрЗаменить и запишите объект в транзакции. Перед записью проверьте, не появится ли дубль наименования после очистки.

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

Да, если данные в табличном документе или Excel перед загрузкой: используйте стандартную функцию «Найти и заменить» (Ctrl+H), указав кавычку в поле поиска и пустое поле замены. Это удобно для разовой чистки файла перед импортом в 1С.

Что делать, если кавычки нужно заменить, а не удалить — например, на ёлочки?

Используйте ту же СтрЗаменить, но в третьем параметре укажите нужный символ: Символ(171) и Символ(187) для ёлочек. Учтите, что простая замена не расставит открывающую и закрывающую кавычки по смыслу — для этого нужен анализ позиций в строке.