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

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

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

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

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

Встроенный язык 1С не имеет отдельной функции «удалить кавычки», но задача решается штатными средствами: функцией СтрЗаменить, комбинацией Лев, Прав и Сред, а также регулярными выражениями через COM-объект. Выбор способа зависит от того, какие именно кавычки нужно убрать и где они расположены.

Ниже разобраны рабочие варианты кода для типовых сценариев: удаление всех кавычек, снятие только обрамляющих кавычек, обработка «ёлочек» и смешанных случаев, а также проверка результата и частые ошибки.

Какие кавычки встречаются и как это влияет на выбор метода

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

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

Маршрут решения

Как выбрать действие

Кавычки — мусор, их нужно удалить вездеИспользуйте СтрЗаменить для каждого вида кавычек
Кавычки только обрамляют строку целикомСнимайте их через Лев/Прав/Сред с проверкой крайних символов
Строка из CSV с удвоенными кавычкамиСначала уберите обрамляющие, затем замените "" на "
Нужно убрать и прямые, и ёлочки, и лапкиПримените цепочку СтрЗаменить или регулярное выражение

Удаление всех кавычек функцией СтрЗаменить

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

ИсходнаяСтрока = "Товар ""Премиум"" в наличии";

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

// Результат: Товар Премиум в наличии

Если нужно удалить несколько видов кавычек, вызовы выстраивают в цепочку. Учтите, что каждый вызов создаёт новую строку — при обработке сотен тысяч записей это влияет на производительность, и лучше заранее проверять наличие кавычек через СтрНайти.

Результат = ИсходнаяСтрока;

Если СтрНайти(Результат, """") > 0 Тогда

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

КонецЕсли;

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

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

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

Снятие только обрамляющих кавычек по краям строки

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

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

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

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

И Лев(Строка, 1) = """"

И Прав(Строка, 1) = """" Тогда

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

КонецЕсли;

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

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

Обратите внимание на три детали. Во-первых, СокрЛП вызывается до проверки: пробелы перед кавычкой сделают проверку ложной. Во-вторых, проверка длины >= 2 защищает от ошибки на строке из одной кавычки. В-третьих, обе проверки обязательны: строка "не закрыта не должна обрезаться.

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

Порядок обработки строки из CSV
  1. 1
    Уберите пробелы по краям: Строка = СокрЛП(Строка)
  2. 2
    Проверьте, что первый и последний символы — кавычки
  3. 3
    Снимите обрамление: Сред(Строка, 2, СтрДлина(Строка) - 2)
  4. 4
    Замените удвоенные кавычки внутри на одинарные
  5. 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 как быстрый признак того, что кавычек не осталось.

Типичные ошибки
01
Запись одной кавычки как "" вместо """" — код не компилируется или ищет пустую строку
02
Удаление кавычек до СокрЛП — пробелы по краям мешают корректной проверке обрамления
03
Снятие обрамления без проверки обоих краёв — обрезается строка с одной кавычкой
04
Замена удвоенных кавычек до снятия обрамления — искажаются крайние символы строки
05
Удаление кавычек в наименованиях контрагентов — ломается поиск и сопоставление справочников

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

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

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

СтрНайти(Результат, """)
Норма

Возвращает 0 — кавычек не осталось

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

Возвращает позицию — кавычки остались, проверьте их вид (ёлочки, лапки)

Строка без кавычек на входе
Норма

Результат совпадает с исходной строкой

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

Строка обрезана — ошибка в проверке крайних символов

Наименование с кавычками внутри
Норма

Внутренние кавычки сохранены при снятии обрамления

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

Внутренние кавычки потеряны — использована СтрЗаменить вместо Лев/Прав/Сред

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

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

Символ кавычки внутри строки удваивается. Литерал, состоящий из одной кавычки, записывается как четыре кавычки подряд: """". Две кавычки — восемь подряд. Альтернатива — Символ(34), что делает код читаемее.

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

Проверьте первый символ: Если Лев(Строка, 1) = """" Тогда Строка = Сред(Строка, 2); КонецЕсли;. Для удаления всех ведущих кавычек оберните проверку в цикл Пока.

Почему СтрЗаменить не убирает кавычки из выгрузки Word?

Скорее всего, в тексте типографские кавычки-ёлочки или лапки — это другие символы с другими кодами. Добавьте замену для символов с кодами 171, 187, а также «лапок» (коды 8220, 8221) или используйте регулярное выражение с перечислением всех видов.

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

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

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

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

Что делать, если после удаления кавычек появились дубли в справочнике?

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

Итог

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

Для удаления всех кавычек используйте СтрЗаменить с литералом """""", для снятия обрамления — Лев, Прав и Сред с проверкой длины и крайних символов. Учитывайте разные виды кавычек, выполняйте СокрЛП до обработки и проверяйте результат на контрольных примерах, особенно перед массовой очисткой данных.