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

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

1С: как удалить символ из строки

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

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

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

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

Удаление символа через СтрЗаменить

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

ИсходнаяСтрока = "АБВ-123-456";

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

// Результат: "АБВ123456"

Способ подходит, когда нужно убрать конкретный известный символ: дефисы в номере, точки в числе, слэши в пути. Функция чувствительна к регистру: СтрЗаменить(Строка, "а", "") не удалит символ «А» в верхнем регистре.

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

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

Удаление символа по позиции

Когда известна позиция символа, строку собирают из двух частей: всё, что слева от позиции, и всё, что справа. Для этого используют Лев, Сред и СтрДлина.

Процедура УдалитьСимволПоПозиции(Строка, Позиция)

Если Позиция < 1 Или Позиция > СтрДлина(Строка) Тогда

Возврат;

КонецЕсли;

Строка = Лев(Строка, Позиция - 1) + Сред(Строка, Позиция + 1);

КонецПроцедуры

Частные случаи: удалить первый символ — Строка = Сред(Строка, 2); удалить последний — Строка = Лев(Строка, СтрДлина(Строка) - 1). Перед удалением последнего символа проверяйте, что строка не пустая, иначе получите ошибку или неожиданный результат.

Удаление первого или последнего вхождения

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

Позиция = СтрНайти(Строка, ";");

Если Позиция > 0 Тогда

Строка = Лев(Строка, Позиция - 1) + Сред(Строка, Позиция + 1);

КонецЕсли;

СтрНайти с третьим параметром НаправлениеПоиска.СКонца найдёт последнее вхождение — это удобно для отсечения расширения файла или последнего разделителя.

Удаление пробелов и служебных символов

Для пробелов по краям строки есть готовые функции: СокрЛ (слева), СокрП (справа) и СокрЛП (с обеих сторон). Они убирают не только пробелы, но и неразрывные пробелы, табуляции и переносы строк по краям.

Строка = СокрЛП("  Иванов И.И.  "); // "Иванов И.И."

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

Неразрывный пробел внутри строки удаляется заменой на символ с кодом 160:

Строка = СтрЗаменить(Строка, Символ(160), " ");
Типичные ошибки
01
Вызов СтрЗаменить без присваивания результата — исходная строка не меняется, так как строки в 1С неизменяемы
02
Удаление обычным пробелом вместо Символ(160) — неразрывный пробел остаётся, и сравнение строк даёт ложь
03
Сред(Строка, 2) на пустой строке без проверки длины
04
Удаление символа без учёта регистра — СтрЗаменить различает «а» и «А»

Удаление всех цифр или букв посимвольным перебором

Когда нужно удалить не конкретный символ, а целый класс (все цифры, все буквы, всё кроме цифр), строку перебирают посимвольно и собирают новую только из допустимых символов.

Функция ОставитьТолькоЦифры(Строка)

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

Допустимые = "0123456789";

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

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

Если СтрНайти(Допустимые, Символ) > 0 Тогда

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

КонецЕсли;

КонецЦикла;

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

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

Такой приём стандартно применяют для нормализации телефонов, ИНН, номеров документов перед сравнением или поиском. Для удаления цифр условие инвертируют: символ добавляется, если его нет в строке цифр.

1c
Результат = СтрЗаменить(Строка, Символ(34), ""); // удалить кавычки

Удаление спецсимволов: кавычки, табуляции, переносы строк

Спецсимволы задают через функцию Символ(Код) или через объект Символы: Символы.ПС (перевод строки), Символы.Таб (табуляция), Символы.НПП (неразрывный пробел), Символы.ВК (возврат каретки).

// Удалить переносы строк и возврат каретки

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

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

// Удалить табуляции

Строка = СтрЗаменить(Строка, Символы.Таб, "");

Тексты, скопированные из Excel или веб-страниц, часто содержат комбинацию ВК+ПС, поэтому удалять лучше оба символа. Кавычка внутри строкового литерала 1С удваивается: "Кавычка "" внутри".

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

Как выбрать способ

Известен конкретный символ, нужно убрать все вхожденияСтрЗаменить(Строка, Символ, "")
Известна позиция символаЛев(Строка, Позиция-1) + Сред(Строка, Позиция+1)
Пробелы по краям строкиСокрЛП(Строка)
Нужно оставить только цифры или только буквыПосимвольный перебор с проверкой через СтрНайти
Переносы строк, табуляции, неразрывные пробелыСтрЗаменить с Символы.ПС, Символы.Таб, Символ(160)

Проверка результата и безопасная обработка данных

Перед массовой обработкой строк в справочниках или документах проверьте алгоритм на небольшой выборке. Удобный способ — вывести исходное и обработанное значение через Сообщить() и сравнить визуально.

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

Контрольные признаки корректной работы: длина строки уменьшилась на ожидаемое число символов, СтрНайти(Результат, УдаляемыйСимвол) возвращает 0, сравнение с эталонным значением даёт истину.

Итог

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

Универсальный способ — СтрЗаменить с пустой заменой; по позиции работают Лев+Сред; пробелы по краям убирает СокрЛП; классы символов фильтруют перебором. Результат всегда нужно присваивать переменной, а массовую обработку данных — проверять на копии базы.

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

Как удалить последний символ строки в 1С?

Используйте Строка = Лев(Строка, СтрДлина(Строка) - 1). Перед этим проверьте, что строка не пустая, иначе функция получит некорректную длину.

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

Строки в 1С неизменяемы: функция возвращает новую строку, а исходная остаётся прежней. Результат нужно присвоить: Строка = СтрЗаменить(Строка, "-", "").

Как удалить неразрывный пробел?

Обычная замена пробела не сработает. Используйте СтрЗаменить(Строка, Символ(160), "") или Символы.НПП в качестве искомого символа.

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

Найдите позицию через СтрНайти, затем склейте: Лев(Строка, Позиция-1) + Сред(Строка, Позиция+1). СтрЗаменить для этого не подходит — она удаляет все вхождения.

Как оставить в строке только цифры?

Переберите строку посимвольно в цикле и добавляйте в результат только те символы, которые находятся в строке "0123456789" (проверка через СтрНайти). Это стандартный приём для нормализации телефонов и ИНН.

Как удалить переносы строк из многострочного текста?

Последовательно замените Символы.ВК и Символы.ПС на пробел или пустую строку. Удалять нужно оба символа, так как перенос часто состоит из их пары.