Разработка и Конфигурация · 8 мин
Как убрать все пробелы в строке 1С
Как убрать все пробелы в строке 1С: СтрЗаменить, СокрЛП, удаление неразрывных пробелов и двойных пробелов. Примеры кода встроенного языка 1С.
Задача убрать пробелы в строке встречается в 1С постоянно: при загрузке данных из Excel, обработке ввода пользователя, сравнении артикулов, номеров документов и ИНН. Встроенный язык 1С предлагает несколько функций, и выбор зависит от того, какие именно пробелы нужно удалить — только по краям строки, все без исключения, двойные или неразрывные.
Частая ошибка новичков — использовать СокрЛП() и ожидать, что исчезнут пробелы внутри строки. Эта функция удаляет только ведущие и конечные пробельные символы, а середина строки остаётся нетронутой. Для полного удаления всех пробелов применяется СтрЗаменить(), а для неразрывных пробелов — отдельный приём через Символ().
Ниже разобраны все основные сценарии с готовыми примерами кода, типичные ошибки и способы проверки результата.
Удаление всех пробелов через СтрЗаменить
Универсальный способ убрать каждый пробел в строке — функция СтрЗаменить(). Она заменяет все вхождения подстроки на другую подстроку, и если строка замены пустая, пробелы просто исчезают.
ИсходнаяСтрока = " 78 000 12 456 ";
СтрокаБезПробелов = СтрЗаменить(ИсходнаяСтрока, " ", "");
// Результат: "7800012456"
Такой приём стандартно применяют при обработке чисел, введённых с разрядными пробелами, телефонов, номеров счетов и артикулов. Функция работает со всеми вхождениями, поэтому цикл не нужен — одна строка кода решает задачу целиком.
Важно помнить: СтрЗаменить возвращает новую строку, а исходная переменная не изменяется. Результат нужно присвоить переменной, иначе вызов функции не даст эффекта.
СтрокаБезПробелов = СтрЗаменить(ИсходнаяСтрока, " ", "");Удаление пробелов по краям: СокрЛП, СокрЛ и СокрП
Если нужно почистить строку только от лишних пробелов в начале и конце, используйте семейство функций сокращения:
СокрЛП(Строка)— убирает незначащие символы (пробелы, табуляции, переводы строк) слева и справа;СокрЛ(Строка)— только слева;СокрП(Строка)— только справа.
Наименование = СокрЛП(" Товар с лишними пробелами ");
// Результат: "Товар с лишними пробелами"
Эти функции удобны при сравнении строк: пользователь мог случайно добавить пробел в конце, и без СокрЛП сравнение даст ложное несовпадение. В запросах 1С аналогичная обработка выполняется выражением СокрЛП(Поле) в секции выбора.
Удаление неразрывных и других специальных пробелов
При копировании данных из Excel, Word или веб-страниц в строки часто попадают неразрывные пробелы (код символа 160). Обычная замена символа с кодом 32 их не трогает, и строка внешне выглядит чистой, но сравнение или преобразование в число завершается ошибкой.
Надёжный приём — заменить неразрывный пробел через функцию Символ():
Строка = СтрЗаменить(Строка, Символ(160), " "); // неразрывный пробел -> обычный
Строка = СтрЗаменить(Строка, " ", ""); // убираем все пробелы
Если нужно очистить строку от любых пробельных символов разом (табуляция, перевод строки, неразрывный пробел), удобно собрать их в цикл:
МассивСимволов = Новый Массив;
МассивСимволов.Добавить(" ");
МассивСимволов.Добавить(Символ(160)); // неразрывный пробел
МассивСимволов.Добавить(Символы.Таб);
МассивСимволов.Добавить(Символы.ПС);
Для Каждого СимволЗамены Из МассивСимволов Цикл
Строка = СтрЗаменить(Строка, СимволЗамены, "");
КонецЦикла;
Удаление двойных и лишних пробелов внутри строки
Иногда требуется не удалить пробелы полностью, а привести строку к нормальному виду: оставить одиночные пробелы между словами, убрав двойные, тройные и пробелы по краям. Прямой функции для этого в 1С нет, поэтому применяют цикл замены двойного пробела на одинарный:
Строка = СокрЛП(Строка);
Пока СтрНайти(Строка, " ") > 0 Цикл
Строка = СтрЗаменить(Строка, " ", " ");
КонецЦикла;
Альтернатива без цикла — разбить строку на части и собрать обратно через СтрРазделить и СтрСоединить (доступны в современных версиях платформы):
Части = СтрРазделить(Строка, " ", Ложь); // Ложь — не включать пустые части
Строка = СтрСоединить(Части, " ");
Второй вариант короче и предсказуемее, но требует проверки совместимости с версией платформы вашей конфигурации.
Сравнение вариантов
Убирает вообще все пробелы. Подходит для чисел, артикулов, ИНН. Не трогает неразрывные пробелы.
Убирает пробелы только по краям. Подходит для нормализации ввода и сравнения строк.
Сжимает повторные пробелы до одного. Работает на любой версии платформы, но требует цикла.
Короткая нормализация пробелов без цикла. Требует современной версии платформы 1С.
Удаление пробелов в запросах 1С
В языке запросов функции СтрЗаменить нет, поэтому возможности ограничены. Доступна функция СокрЛП(), которая убирает пробелы по краям поля — этого достаточно для большинства задач сравнения и группировки.
Если нужно удалить все пробелы внутри данных, стандартный подход — выбрать данные запросом, а затем обработать каждую строку в цикле на встроенном языке через СтрЗаменить. Для разовой чистки справочника это обычно быстрее и безопаснее, чем попытки реализовать замену средствами запроса.
- 1Сделайте резервную копию базы или выгрузку обрабатываемого справочника
- 2Отберите записи, где поле содержит пробелы (условие ПОДОБНО "% %")
- 3Пройдите выборку в цикле и примените СтрЗаменить или СокрЛП к полю
- 4Запишите изменённые объекты и проверьте несколько записей вручную
Проверка результата и типичные ошибки
После обработки убедитесь, что результат соответствует ожиданию. Для числовых строк проверьте длину и успешное преобразование через Число(), для текстовых — сравнение с эталоном и отсутствие символа с кодом 32 и 160.
Отдельное предупреждение: не применяйте полное удаление пробелов к осмысленным текстам — наименованиям товаров, адресам, ФИО. Там пробелы несут смысл, и их удаление необратимо испортит данные. Полная очистка оправдана только для технических значений: кодов, номеров, идентификаторов, чисел в строковом виде.
Что важно запомнить
Все пробелы убирает СтрЗаменить(Строка, " ", ""), пробелы по краям — СокрЛП(), неразрывные — замена Символ(160). Перед массовой обработкой данных сделайте резервную копию и проверьте результат на нескольких записях.
Частые вопросы
Как убрать пробелы в числе, введённом как строка?
Примените СтрЗаменить(Строка, " ", "") и дополнительно замените неразрывный пробел Символ(160) — именно он часто встречается как разделитель разрядов при копировании из Excel. После очистки строку можно преобразовать функцией Число().
Почему СтрЗаменить не убирает некоторые пробелы?
Скорее всего, в строке неразрывный пробел (код 160) или табуляция. Обычная замена работает только с символом код 32. Проверьте код символа функцией КодСимвола() и добавьте замену нужного символа.
Как убрать пробелы в запросе 1С?
В языке запросов доступна только функция СокрЛП(), удаляющая пробелы по краям поля. Полного аналога СтрЗаменить в запросах нет — обработку внутренних пробелов выполняют в цикле после получения выборки.
Чем отличается СокрЛП от СтрЗаменить?
СокрЛП удаляет незначащие символы только в начале и конце строки, сохраняя содержимое внутри. СтрЗаменить заменяет указанную подстроку во всей строке, поэтому с пустой строкой замены удаляет все вхождения пробела.
Как убрать пробелы в табличной части документа?
Пройдите строки табличной части в цикле «Для Каждого СтрокаТЧ Из ... Цикл» и примените к нужному реквизиту СтрЗаменить или СокрЛП. После цикла не забудьте записать объект, иначе изменения не сохранятся.
Как удалить пробелы только в начале строки?
Используйте функцию СокрЛ(Строка) — она убирает пробелы, табуляции и переводы строк слева, не трогая остальное содержимое. Для удаления только справа существует симметричная функция СокрП().