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

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

Как убрать все пробелы в строке 1С

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

Задача убрать пробелы в строке встречается в 1С постоянно: при загрузке данных из Excel, обработке ввода пользователя, сравнении артикулов, номеров документов и ИНН. Встроенный язык 1С предлагает несколько функций, и выбор зависит от того, какие именно пробелы нужно удалить — только по краям строки, все без исключения, двойные или неразрывные.

Частая ошибка новичков — использовать СокрЛП() и ожидать, что исчезнут пробелы внутри строки. Эта функция удаляет только ведущие и конечные пробельные символы, а середина строки остаётся нетронутой. Для полного удаления всех пробелов применяется СтрЗаменить(), а для неразрывных пробелов — отдельный приём через Символ().

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

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

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

ИсходнаяСтрока = " 78 000 12 456 ";

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

// Результат: "7800012456"

Такой приём стандартно применяют при обработке чисел, введённых с разрядными пробелами, телефонов, номеров счетов и артикулов. Функция работает со всеми вхождениями, поэтому цикл не нужен — одна строка кода решает задачу целиком.

Важно помнить: СтрЗаменить возвращает новую строку, а исходная переменная не изменяется. Результат нужно присвоить переменной, иначе вызов функции не даст эффекта.

1c
СтрокаБезПробелов = СтрЗаменить(ИсходнаяСтрока, " ", "");

Удаление пробелов по краям: СокрЛП, СокрЛ и СокрП

Если нужно почистить строку только от лишних пробелов в начале и конце, используйте семейство функций сокращения:

  • СокрЛП(Строка) — убирает незначащие символы (пробелы, табуляции, переводы строк) слева и справа;
  • СокрЛ(Строка) — только слева;
  • СокрП(Строка) — только справа.
Наименование = СокрЛП("   Товар с лишними пробелами   ");

// Результат: "Товар с лишними пробелами"

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

Удаление неразрывных и других специальных пробелов

При копировании данных из Excel, Word или веб-страниц в строки часто попадают неразрывные пробелы (код символа 160). Обычная замена символа с кодом 32 их не трогает, и строка внешне выглядит чистой, но сравнение или преобразование в число завершается ошибкой.

Надёжный приём — заменить неразрывный пробел через функцию Символ():

Строка = СтрЗаменить(Строка, Символ(160), " "); // неразрывный пробел -> обычный

Строка = СтрЗаменить(Строка, " ", ""); // убираем все пробелы

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

МассивСимволов = Новый Массив;

МассивСимволов.Добавить(" ");

МассивСимволов.Добавить(Символ(160)); // неразрывный пробел

МассивСимволов.Добавить(Символы.Таб);

МассивСимволов.Добавить(Символы.ПС);

Для Каждого СимволЗамены Из МассивСимволов Цикл

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

КонецЦикла;

Удаление двойных и лишних пробелов внутри строки

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

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

Пока СтрНайти(Строка, " ") > 0 Цикл

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

КонецЦикла;

Альтернатива без цикла — разбить строку на части и собрать обратно через СтрРазделить и СтрСоединить (доступны в современных версиях платформы):

Части = СтрРазделить(Строка, " ", Ложь); // Ложь — не включать пустые части

Строка = СтрСоединить(Части, " ");

Второй вариант короче и предсказуемее, но требует проверки совместимости с версией платформы вашей конфигурации.

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

СтрЗаменить(Строка, " ", "")

Убирает вообще все пробелы. Подходит для чисел, артикулов, ИНН. Не трогает неразрывные пробелы.

СокрЛП()

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

Цикл замены двойных пробелов

Сжимает повторные пробелы до одного. Работает на любой версии платформы, но требует цикла.

СтрРазделить + СтрСоединить

Короткая нормализация пробелов без цикла. Требует современной версии платформы 1С.

Удаление пробелов в запросах 1С

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

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

Порядок действий для очистки данных справочника
  1. 1
    Сделайте резервную копию базы или выгрузку обрабатываемого справочника
  2. 2
    Отберите записи, где поле содержит пробелы (условие ПОДОБНО "% %")
  3. 3
    Пройдите выборку в цикле и примените СтрЗаменить или СокрЛП к полю
  4. 4
    Запишите изменённые объекты и проверьте несколько записей вручную

Проверка результата и типичные ошибки

После обработки убедитесь, что результат соответствует ожиданию. Для числовых строк проверьте длину и успешное преобразование через Число(), для текстовых — сравнение с эталоном и отсутствие символа с кодом 32 и 160.

Типичные ошибки
01
Использование СокрЛП для удаления пробелов внутри строки — середина строки остаётся без изменений
02
Забытое присваивание результата СтрЗаменить — функция возвращает новую строку, исходная не меняется
03
Игнорирование неразрывного пробела (Символ(160)) — строка выглядит чистой, но сравнение и преобразование в число не работают
04
Массовая замена пробелов в наименованиях и адресах — слова склеиваются, данные портятся безвозвратно

Отдельное предупреждение: не применяйте полное удаление пробелов к осмысленным текстам — наименованиям товаров, адресам, ФИО. Там пробелы несут смысл, и их удаление необратимо испортит данные. Полная очистка оправдана только для технических значений: кодов, номеров, идентификаторов, чисел в строковом виде.

Итог

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

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

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

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

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

Почему СтрЗаменить не убирает некоторые пробелы?

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

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

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

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

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

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

Пройдите строки табличной части в цикле «Для Каждого СтрокаТЧ Из ... Цикл» и примените к нужному реквизиту СтрЗаменить или СокрЛП. После цикла не забудьте записать объект, иначе изменения не сохранятся.

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

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