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

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

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

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

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

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

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

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

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

ИсходнаяСтрока = "1 000 000 руб.";

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

// Результат: "1000000руб."

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

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

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

СокрЛ, СокрП и СокрЛП: когда нужно убрать пробелы только по краям

Далеко не всегда нужно удалять пробелы внутри строки. Для наименований, ФИО, адресов удаление внутренних пробелов испортит данные: «Иванов Иван Иванович» превратится в сплошной текст. В таких случаях используются функции обрезки краёв.

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

Наименование = "  ООО Ромашка  ";

Чистое = СокрЛП(Наименование);

// Результат: "ООО Ромашка"

Типичный сценарий — очистка значений, загруженных из Excel или введённых пользователем вручную, где лишние пробелы появляются случайно. Перед записью в справочник или перед сравнением строк всегда применяйте СокрЛП, иначе «Иванов» и «Иванов » будут считаться разными значениями.

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

Неразрывный пробел (код символа 160) — главная ловушка при обработке строк в 1С. Визуально он неотличим от обычного пробела, но СтрЗаменить с обычным пробелом его не находит, а СокрЛП его не всегда удаляет внутри строки. Такие символы часто приходят из Excel, веб-страниц, PDF и при копировании форматированных чисел.

Неразрывный пробел удаляется через функцию Символ(160):

Строка = "1 000 000"; // внутри неразрывные пробелы

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

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

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

Надёжная практика — обрабатывать строку обеими заменами подряд: сначала неразрывные пробелы, затем обычные. Если данные приходят из внешних источников, добавьте также удаление табуляции (Символ(9)) и символов переноса строки.

Практические сценарии: числа, ИНН, артикулы

Очистка числа перед преобразованием

Функция Число() не понимает пробелы-разделители разрядов и выдаёт ошибку или неверный результат. Перед преобразованием строку нужно очистить:

СтрокаЧисла = "2 500 000,50";

Очищенная = СтрЗаменить(СтрокаЧисла, Символ(160), "");

Очищенная = СтрЗаменить(Очищенная, " ", "");

Значение = Число(Очищенная);

// Результат: 2500000.5

Нормализация ИНН, КПП, артикулов

Для кодов и идентификаторов пробелы не нужны никогда. При загрузке контрагентов или номенклатуры из файлов применяйте полную очистку: СтрЗаменить для всех видов пробельных символов плюс СокрЛП для страховки. Это предотвращает дубли в справочниках, когда один и тот же ИНН записан с пробелом и без.

Универсальная функция очистки

Для повторного использования удобно оформить общую функцию в общем модуле:

Функция УбратьВсеПробелы(Строка) Экспорт

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

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

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

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

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

Порядок действий
  1. 1
    Определите, где стоят пробелы: только по краям или внутри строки
  2. 2
    Для краёв примените СокрЛП, для полного удаления — СтрЗаменить с пустой заменой
  3. 3
    Проверьте наличие неразрывных пробелов и удалите их через Символ(160)
  4. 4
    Для чисел выполните очистку до вызова функции Число()
  5. 5
    Проверьте результат на тестовом примере перед массовой обработкой данных

Сравнение способов и выбор под задачу

СпособЧто удаляетКогда применять
СокрЛППробелы и незначащие символы по краямНаименования, ФИО, адреса, пользовательский ввод
СтрЗаменить(Строка, " ", "")Все обычные пробелыЧисла, коды, ИНН, артикулы
СтрЗаменить + Символ(160)Неразрывные пробелыДанные из Excel, веб-страниц, PDF
Комбинация заменВсе виды пробельных символовЗагрузка из внешних источников, обмен данными

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

СокрЛП

Быстро и безопасно для текста, но не трогает пробелы внутри строки

СтрЗаменить с пустой строкой

Удаляет пробелы везде; подходит для кодов и чисел, но портит текстовые данные

Универсальная функция в общем модуле

Удобно при регулярных загрузках; требует изменения конфигурации или расширения

Частые ошибки и как их избежать

Самая распространённая ошибка — попытка удалить неразрывный пробел обычным. Разработчик видит пробел в отладчике, пишет СтрЗаменить с пробелом, а строка не меняется. Диагностика проста: проверьте код символа через КодСимвола() — если вместо 32 получили 160, это неразрывный пробел.

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

Третья ошибка — сравнение строк без предварительной нормализации. Если одна строка пришла из файла, а другая введена вручную, приводите обе к единому виду: СокрЛП плюс, при необходимости, ВРег или НРег для регистра.

Типичные ошибки
01
Замена обычного пробела при наличии неразрывного — строка визуально не меняется, сравнение по-прежнему не работает
02
Удаление всех пробелов из наименований и адресов — данные становятся нечитаемыми и требуют восстановления
03
Вызов Число() без очистки пробелов — ошибка преобразования или неверное значение
04
Массовая обработка справочника без резервной копии — откатить некорректные изменения невозможно

Проверка результата

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

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

Сообщить("[" + Строка + "], длина: " + СтрДлина(Строка));

Для чисел дополнительная проверка — успешное преобразование через Число() и обратное форматирование. Для кодов и ИНН — контроль длины: ИНН юридического лица должен содержать 10 символов, физического — 12.

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

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

Длина строки после очистки
Норма

Уменьшилась на количество удалённых пробелов

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

Не изменилась — в строке неразрывные пробелы или табуляции

Преобразование в число
Норма

Число() возвращает корректное значение без ошибки

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

Ошибка преобразования — остались посторонние символы

Сравнение с эталонной строкой
Норма

Строки равны после СокрЛП обеих

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

Строки визуально одинаковы, но не равны — проверьте коды символов

FAQ

Почему СтрЗаменить не удаляет пробел, хотя он виден в строке?

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

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

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

Как убрать пробелы из числа, скопированного из Excel?

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

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

В языке запросов 1С нет функции замены подстроки. Можно лишь отобрать записи с пробелами через ПОДОБНО, а саму очистку выполнить в коде после выборки, перебирая результат запроса.

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

Добавьте замены для символов перевода строки: СтрЗаменить(Строка, Символы.ПС, "") и СтрЗаменить(Строка, Символы.ВК, ""). Для табуляции используйте Символ(9). Удобно собрать все замены в одну функцию в общем модуле.

Безопасно ли обрабатывать пробелы в справочниках массовой обработкой?

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

Итог

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

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