Разработка и Конфигурация · 9 мин
Как убрать кавычки из строки в 1С
Как убрать кавычки из строки в 1С: СтрЗаменить, СокрЛП, обработка двойных и одинарных кавычек, кавычек-ёлочек. Готовые примеры кода и типичные ошибки.
Задача удаления кавычек из строки в 1С возникает при импорте данных из CSV-файлов, обработке ответов веб-сервисов, разборе пользовательского ввода и при обмене с внешними системами. Кавычки могут быть обрамляющими (строка целиком заключена в кавычки), встречаться внутри текста или дублироваться — например, при выгрузке из Excel значение "ООО ""Ромашка""" содержит и обрамляющие, и экранированные кавычки.
Встроенный язык 1С не имеет отдельной функции «удалить кавычки», но задача решается штатными средствами: функцией СтрЗаменить, комбинацией Лев, Прав и Сред, а также регулярными выражениями через COM-объект. Выбор способа зависит от того, какие именно кавычки нужно убрать и где они расположены.
Ниже разобраны рабочие варианты кода для типовых сценариев: удаление всех кавычек, снятие только обрамляющих кавычек, обработка «ёлочек» и смешанных случаев, а также проверка результата и частые ошибки.
Какие кавычки встречаются и как это влияет на выбор метода
Прежде чем писать код, определите, с каким вариантом кавычек вы имеете дело. В данных 1С встречаются прямые двойные кавычки ("), одинарные ('), типографские «ёлочки» («») и «лапки» (“”). Каждый вид — отдельный символ со своим кодом, поэтому замена прямых кавычек не затронет ёлочки и наоборот.
Второй критерий — расположение. Обрамляющие кавычки стоят только по краям строки, и удалять их из середины нельзя: в наименовании Фирма "Вега" кавычки являются частью названия. Внутренние дублированные кавычки ("") — признак экранирования при экспорте в CSV, их нужно не удалять, а заменять на одинарные.
Как выбрать действие
Удаление всех кавычек функцией СтрЗаменить
Самый простой и быстрый способ — функция СтрЗаменить(Строка, ПодстрокаПоиска, ПодстрокаЗамены). Чтобы задать символ кавычки внутри строкового литерала 1С, его удваивают: литерал из одной кавычки записывается как четыре кавычки подряд.
ИсходнаяСтрока = "Товар ""Премиум"" в наличии";
СтрокаБезКавычек = СтрЗаменить(ИсходнаяСтрока, """", "");
// Результат: Товар Премиум в наличии
Если нужно удалить несколько видов кавычек, вызовы выстраивают в цепочку. Учтите, что каждый вызов создаёт новую строку — при обработке сотен тысяч записей это влияет на производительность, и лучше заранее проверять наличие кавычек через СтрНайти.
Результат = ИсходнаяСтрока;
Если СтрНайти(Результат, """") > 0 Тогда
Результат = СтрЗаменить(Результат, """", "");
КонецЕсли;
Результат = СтрЗаменить(Результат, "«", "");
Результат = СтрЗаменить(Результат, "»", "");
Результат = СтрЗаменить(Результат, "'", "");
Снятие только обрамляющих кавычек по краям строки
Когда строка целиком заключена в кавычки (типично для CSV и выгрузок из Excel), корректнее снять только крайние символы. Для этого проверяют первый и последний символ функциями Лев и Прав, а содержимое извлекают через Сред.
Функция СнятьОбрамляющиеКавычки(Знач Строка)
Строка = СокрЛП(Строка);
Если СтрДлина(Строка) >= 2
И Лев(Строка, 1) = """"
И Прав(Строка, 1) = """" Тогда
Строка = Сред(Строка, 2, СтрДлина(Строка) - 2);
КонецЕсли;
Возврат Строка;
КонецФункции
Обратите внимание на три детали. Во-первых, СокрЛП вызывается до проверки: пробелы перед кавычкой сделают проверку ложной. Во-вторых, проверка длины >= 2 защищает от ошибки на строке из одной кавычки. В-третьих, обе проверки обязательны: строка "не закрыта не должна обрезаться.
Если данные приходят из CSV, после снятия обрамляющих кавычек обычно требуется разэкранировать удвоенные внутренние: Строка = СтрЗаменить(Строка, """""", """") — заменяет две подряд идущие кавычки на одну. Порядок важен: сначала снятие обрамления, потом разэкранирование.
- 1Уберите пробелы по краям: Строка = СокрЛП(Строка)
- 2Проверьте, что первый и последний символы — кавычки
- 3Снимите обрамление: Сред(Строка, 2, СтрДлина(Строка) - 2)
- 4Замените удвоенные кавычки внутри на одинарные
- 5Проверьте результат на контрольном примере с кавычками внутри текста
Удаление ёлочек, лапок и одинарных кавычек
Типографские кавычки часто приходят из Word, веб-страниц и PDF. Их можно удалить той же СтрЗаменить, вставив символ напрямую, либо через код символа функцией Символ() — это надёжнее, если в редакторе кода возможны проблемы с кодировкой.
Результат = СтрЗаменить(ИсходнаяСтрока, Символ(171), ""); // «
Результат = СтрЗаменить(Результат, Символ(187), ""); // »
Результат = СтрЗаменить(Результат, "'", ""); // одинарная
Иногда вместо удаления ёлочки лучше заменить на прямые кавычки — например, если строка дальше уйдёт в печатную форму, где кавычки нужны, но требуется единый стиль. Тогда подстрока замены будет не пустой, а """".
Регулярные выражения как альтернатива
Для сложных шаблонов — например, «удалить кавычки только в начале и конце, но не внутри» или «убрать все виды кавычек одним проходом» — можно использовать COM-объект VBScript.RegExp (доступен на Windows-клиенте и сервере под Windows).
RegExp = Новый COMОбъект("VBScript.RegExp");
RegExp.Global = Истина;
RegExp.Pattern = "[""'«»“”]";
Результат = RegExp.Replace(ИсходнаяСтрока, "");
Минус подхода — зависимость от Windows-окружения и более медленная работа по сравнению со СтрЗаменить на простых заменах. На Linux-сервере COM-объект недоступен, поэтому для серверного кода в кроссплатформенных решениях предпочтительна цепочка СтрЗаменить.
Сравнение способов
Быстро и кроссплатформенно, но удаляет кавычки везде без анализа позиции
Точно снимает только обрамление, но требует аккуратных проверок длины и крайних символов
Гибкие шаблоны, но работают только под Windows и медленнее на простых задачах
Проверка результата и типичные ошибки
После обработки проверьте результат на контрольных примерах: строка без кавычек должна остаться неизменной, строка с обрамлением — потерять только крайние символы, строка с кавычками внутри — сохранить или потерять их в зависимости от выбранной логики. Удобно использовать СтрНайти(Результат, """") = 0 как быстрый признак того, что кавычек не осталось.
Отдельного внимания заслуживает обработка больших массивов данных в цикле. Если вы чистите строки при загрузке тысяч записей, не создавайте лишних промежуточных переменных и не вызывайте Сообщить внутри цикла — это заметно замедляет выполнение. Ошибки разбора собирайте в массив или таблицу значений и выводите одним сообщением после обработки.
Как проверить результат
Возвращает 0 — кавычек не осталось
Возвращает позицию — кавычки остались, проверьте их вид (ёлочки, лапки)
Результат совпадает с исходной строкой
Строка обрезана — ошибка в проверке крайних символов
Внутренние кавычки сохранены при снятии обрамления
Внутренние кавычки потеряны — использована СтрЗаменить вместо Лев/Прав/Сред
Частые вопросы
Как записать символ кавычки в строковом литерале 1С?
Символ кавычки внутри строки удваивается. Литерал, состоящий из одной кавычки, записывается как четыре кавычки подряд: """". Две кавычки — восемь подряд. Альтернатива — Символ(34), что делает код читаемее.
Как убрать кавычки только в начале строки?
Проверьте первый символ: Если Лев(Строка, 1) = """" Тогда Строка = Сред(Строка, 2); КонецЕсли;. Для удаления всех ведущих кавычек оберните проверку в цикл Пока.
Почему СтрЗаменить не убирает кавычки из выгрузки Word?
Скорее всего, в тексте типографские кавычки-ёлочки или лапки — это другие символы с другими кодами. Добавьте замену для символов с кодами 171, 187, а также «лапок» (коды 8220, 8221) или используйте регулярное выражение с перечислением всех видов.
Как убрать кавычки в запросе 1С, а не в коде?
В языке запросов есть функция ПОДСТРОКА, но полноценной замены нет. Практичный путь — выгрузить результат запроса в таблицу значений и обработать колонку в цикле средствами встроенного языка, либо очищать данные на этапе записи в базу.
Можно ли убрать кавычки при загрузке из табличного документа?
Да. При построчном чтении табличного документа обрабатывайте каждое значение ячейки функцией очистки сразу после получения, до записи в справочник или документ. Так очищенные данные сразу попадут в базу в корректном виде.
Что делать, если после удаления кавычек появились дубли в справочнике?
Это признак того, что кавычки были частью наименований и их удаление сделало разные элементы одинаковыми. Перед массовой очистке делайте резервную копию и проверяйте результат на копии базы; для поиска уже возникших дублей используйте типовую обработку поиска и удаления дублей.
Что важно запомнить
Для удаления всех кавычек используйте СтрЗаменить с литералом """""", для снятия обрамления — Лев, Прав и Сред с проверкой длины и крайних символов. Учитывайте разные виды кавычек, выполняйте СокрЛП до обработки и проверяйте результат на контрольных примерах, особенно перед массовой очисткой данных.