Разработка и Конфигурация · 9 мин
Как убрать все пробелы из строки в 1С
Как убрать все пробелы из строки в 1С: функция СтрЗаменить, удаление неразрывных пробелов, обрезка по краям, примеры кода и типичные ошибки разработчиков.
Пробелы в строках — одна из самых частых причин ошибок при обмене данными, сравнении значений и поиске в 1С. Число «1 000 000» с пробелами не преобразуется в число, два внешне одинаковых наименования не совпадают при сравнении, а поиск по ИНН не находит контрагента из-за лишнего пробела в конце. Задача убрать пробелы решается штатными функциями встроенного языка, но важно понимать, какую именно функцию применять в каждом случае.
В 1С нет единой функции «удалить все пробелы», есть несколько инструментов с разным поведением: СокрЛП обрезает пробелы по краям, СтрЗаменить удаляет или заменяет пробелы внутри строки, а неразрывные пробелы требуют отдельной обработки через Символ(). Выбор зависит от того, где стоят пробелы и какого результата вы хотите добиться.
Ниже разобраны все рабочие способы с примерами кода, отличия для чисел и наименований, обработка неразрывных пробелов, которые часто приходят из Excel и веб-страниц, а также типичные ошибки и проверка результата.
Удаление всех пробелов через СтрЗаменить
Основной способ убрать все пробелы из строки — функция СтрЗаменить. Она ищет подстроку и заменяет её на другую. Если в качестве замены указать пустую строку, найденные символы просто удаляются.
ИсходнаяСтрока = "1 000 000 руб.";
Результат = СтрЗаменить(ИсходнаяСтрока, " ", "");
// Результат: "1000000руб."
Функция обрабатывает всю строку целиком, поэтому удаляются и одиночные пробелы, и повторяющиеся, и пробелы в начале и конце. Дополнительно применять СокрЛП после такой замены не требуется.
Обычный пробел имеет код 32, и замена сработает только для него. Если в строке встречаются табуляции или неразрывные пробелы, они останутся — их нужно обрабатывать отдельно.
СтрокаБезПробелов = СтрЗаменить(ИсходнаяСтрока, " ", "");СокрЛ, СокрП и СокрЛП: когда нужно убрать пробелы только по краям
Далеко не всегда нужно удалять пробелы внутри строки. Для наименований, ФИО, адресов удаление внутренних пробелов испортит данные: «Иванов Иван Иванович» превратится в сплошной текст. В таких случаях используются функции обрезки краёв.
СокрЛ удаляет незначащие символы слева, СокрП — справа, СокрЛП — с обеих сторон. Важная особенность: эти функции удаляют не только пробелы, но и табуляции, переводы строк и другие незначащие символы по краям.
Наименование = " ООО Ромашка ";
Чистое = СокрЛП(Наименование);
// Результат: "ООО Ромашка"
Типичный сценарий — очистка значений, загруженных из Excel или введённых пользователем вручную, где лишние пробелы появляются случайно. Перед записью в справочник или перед сравнением строк всегда применяйте СокрЛП, иначе «Иванов» и «Иванов » будут считаться разными значениями.
Как удалить неразрывные пробелы
Неразрывный пробел (код символа 160) — главная ловушка при обработке строк в 1С. Визуально он неотличим от обычного пробела, но СтрЗаменить с обычным пробелом его не находит, а СокрЛП его не всегда удаляет внутри строки. Такие символы часто приходят из Excel, веб-страниц, PDF и при копировании форматированных чисел.
Неразрывный пробел удаляется через функцию Символ(160):
Строка = "1 000 000"; // внутри неразрывные пробелы
Результат = СтрЗаменить(Строка, Символ(160), "");
Результат = СтрЗаменить(Результат, " ", "");
// Результат: "1000000"
Надёжная практика — обрабатывать строку обеими заменами подряд: сначала неразрывные пробелы, затем обычные. Если данные приходят из внешних источников, добавьте также удаление табуляции (Символ(9)) и символов переноса строки.
Практические сценарии: числа, ИНН, артикулы
Очистка числа перед преобразованием
Функция Число() не понимает пробелы-разделители разрядов и выдаёт ошибку или неверный результат. Перед преобразованием строку нужно очистить:
СтрокаЧисла = "2 500 000,50";
Очищенная = СтрЗаменить(СтрокаЧисла, Символ(160), "");
Очищенная = СтрЗаменить(Очищенная, " ", "");
Значение = Число(Очищенная);
// Результат: 2500000.5
Нормализация ИНН, КПП, артикулов
Для кодов и идентификаторов пробелы не нужны никогда. При загрузке контрагентов или номенклатуры из файлов применяйте полную очистку: СтрЗаменить для всех видов пробельных символов плюс СокрЛП для страховки. Это предотвращает дубли в справочниках, когда один и тот же ИНН записан с пробелом и без.
Универсальная функция очистки
Для повторного использования удобно оформить общую функцию в общем модуле:
Функция УбратьВсеПробелы(Строка) Экспорт
Результат = СтрЗаменить(Строка, Символ(160), "");
Результат = СтрЗаменить(Результат, Символ(9), "");
Результат = СтрЗаменить(Результат, " ", "");
Возврат Результат;
КонецФункции
- 1Определите, где стоят пробелы: только по краям или внутри строки
- 2Для краёв примените СокрЛП, для полного удаления — СтрЗаменить с пустой заменой
- 3Проверьте наличие неразрывных пробелов и удалите их через Символ(160)
- 4Для чисел выполните очистку до вызова функции Число()
- 5Проверьте результат на тестовом примере перед массовой обработкой данных
Сравнение способов и выбор под задачу
| Способ | Что удаляет | Когда применять |
|---|---|---|
| СокрЛП | Пробелы и незначащие символы по краям | Наименования, ФИО, адреса, пользовательский ввод |
| СтрЗаменить(Строка, " ", "") | Все обычные пробелы | Числа, коды, ИНН, артикулы |
| СтрЗаменить + Символ(160) | Неразрывные пробелы | Данные из Excel, веб-страниц, PDF |
| Комбинация замен | Все виды пробельных символов | Загрузка из внешних источников, обмен данными |
Сравнение вариантов
Быстро и безопасно для текста, но не трогает пробелы внутри строки
Удаляет пробелы везде; подходит для кодов и чисел, но портит текстовые данные
Удобно при регулярных загрузках; требует изменения конфигурации или расширения
Частые ошибки и как их избежать
Самая распространённая ошибка — попытка удалить неразрывный пробел обычным. Разработчик видит пробел в отладчике, пишет СтрЗаменить с пробелом, а строка не меняется. Диагностика проста: проверьте код символа через КодСимвола() — если вместо 32 получили 160, это неразрывный пробел.
Вторая ошибка — удаление всех пробелов из текстовых полей при массовой обработке. Перед групповой обработкой справочника всегда делайте копию базы или сначала запускайте обработку в режиме отчёта без записи, чтобы оценить масштаб изменений.
Третья ошибка — сравнение строк без предварительной нормализации. Если одна строка пришла из файла, а другая введена вручную, приводите обе к единому виду: СокрЛП плюс, при необходимости, ВРег или НРег для регистра.
Проверка результата
После очистки убедитесь, что результат соответствует ожиданиям. Самый надёжный способ — вывести строку в сообщение с маркерами границ или проверить длину строки функцией СтрДлина(): если после удаления пробелов длина не уменьшилась, хотя пробелы визуально были, значит, это были неразрывные пробелы или табуляции.
Строка = СтрЗаменить(ИсходнаяСтрока, " ", "");
Сообщить("[" + Строка + "], длина: " + СтрДлина(Строка));
Для чисел дополнительная проверка — успешное преобразование через Число() и обратное форматирование. Для кодов и ИНН — контроль длины: ИНН юридического лица должен содержать 10 символов, физического — 12.
Как проверить результат
Уменьшилась на количество удалённых пробелов
Не изменилась — в строке неразрывные пробелы или табуляции
Число() возвращает корректное значение без ошибки
Ошибка преобразования — остались посторонние символы
Строки равны после СокрЛП обеих
Строки визуально одинаковы, но не равны — проверьте коды символов
FAQ
Почему СтрЗаменить не удаляет пробел, хотя он виден в строке?
Скорее всего, это неразрывный пробел с кодом 160, а не обычный пробел с кодом 32. Проверьте символ функцией КодСимвола() и удаляйте его через СтрЗаменить(Строка, Символ(160), "").
Чем СокрЛП отличается от СтрЗаменить с пустой строкой?
СокрЛП обрезает незначащие символы только по краям строки и сохраняет пробелы внутри, а СтрЗаменить удаляет указанный символ по всей строке. Для текста используйте СокрЛП, для кодов и чисел — СтрЗаменить.
Как убрать пробелы из числа, скопированного из Excel?
Числа из Excel часто содержат неразрывные пробелы как разделители разрядов. Последовательно примените СтрЗаменить с Символ(160), затем с обычным пробелом, и только после этого вызывайте Число().
Можно ли удалить пробелы запросом, без кода?
В языке запросов 1С нет функции замены подстроки. Можно лишь отобрать записи с пробелами через ПОДОБНО, а саму очистку выполнить в коде после выборки, перебирая результат запроса.
Как удалить не только пробелы, но и переносы строк?
Добавьте замены для символов перевода строки: СтрЗаменить(Строка, Символы.ПС, "") и СтрЗаменить(Строка, Символы.ВК, ""). Для табуляции используйте Символ(9). Удобно собрать все замены в одну функцию в общем модуле.
Безопасно ли обрабатывать пробелы в справочниках массовой обработкой?
Безопасно при соблюдении условий: сделана резервная копия, обработка сначала запущена в тестовом режиме без записи, а для текстовых полей применяется только СокрЛП, а не полное удаление пробелов.
Что важно запомнить
Все пробелы из строки в 1С удаляет СтрЗаменить с пустой строкой замены, пробелы по краям — СокрЛП, а неразрывные пробелы — замена через Символ(160). Для чисел и кодов очищайте строку полностью, для текста — только края, и всегда проверяйте результат на тестовых данных перед массовой обработкой.