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

Справочники и Данные · 11 мин

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

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

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

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

Почему лишние пробелы опасны для учёта

Пробел — полноценный символ строки. При сравнении, поиске и сортировке 1С учитывает его так же, как буквы и цифры. Поэтому контрагент «ООО Ромашка» и «ООО Ромашка » с пробелом в конце — это две разные строки, хотя на экране разница не видна.

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

Отдельная проблема — неразрывный пробел (символ с кодом 160). Он выглядит как обычный пробел, но функция СокрЛП его не удаляет. Такие символы часто приходят из Excel, веб-страниц и выгрузок банковских систем, особенно в числах вида «1 000 000», где пробел служит разделителем разрядов.

Как убрать пробелы в коде: СокрЛП, СокрЛ и СокрП

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

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

СтрокаСлева = СокрЛ(" Текст"); // "Текст"

СтрокаСправа = СокрП("Текст "); // "Текст"

Функции удаляют не только обычные пробелы, но и символы табуляции, перевода строки и возврата каретки по краям строки. Однако пробелы в середине строки они не трогают: СокрЛП("Иванов Иван") вернёт строку без изменений.

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

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

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

// Убрать все обычные пробелы

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

// Убрать неразрывные пробелы (код 160)

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

// Убрать и те, и другие

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

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

Для чисел, пришедших строкой с разделителями разрядов («1 250 000»), перед преобразованием в число обязательно удалите и обычные, и неразрывные пробелы, иначе функция Число() может вернуть 0 или вызвать ошибку преобразования.

Типичные ошибки
01
Попытка убрать неразрывный пробел через СокрЛП — функция его не видит, нужен СтрЗаменить с Символ(160)
02
Вызов СокрЛП(Строка) без присваивания результата — строка не изменится
03
Удаление всех пробелов в наименованиях через СтрЗаменить — слова слипаются, сначала определите, какие пробелы лишние
04
Преобразование строки «1 000» в число без удаления разделителей разрядов — получите ошибку или ноль

Как убрать пробелы в справочниках без программирования

Если пробелы уже попали в данные — в наименования контрагентов, номенклатуры, в артикулы — исправлять каждый элемент вручную долго. В типовых конфигурациях (1С:Бухгалтерия, Управление торговлей, ERP) есть встроенные инструменты пакетной обработки.

Основной инструмент — обработка «Групповое изменение реквизитов» (в разделе «Администрирование» → «Обслуживание» → «Корректировка данных», название раздела зависит от конфигурации). Она позволяет выбрать вид объектов, отобрать элементы по условию и изменить реквизит по формуле. В поле изменения доступна произвольная формула на встроенном языке, где можно применить СокрЛП к текущему значению.

Для борьбы с дублями, возникшими из-за пробелов, используйте обработку «Поиск и удаление дублей» (там же, в «Администрировании»). Она находит элементы с совпадающими реквизитами и объединяет их с заменой ссылок в документах. Перед объединением полезно сначала пройтись групповым изменением с СокрЛП, чтобы дубли стали видимыми для сравнения.

Пакетная очистка наименований от пробелов
  1. 1
    Сделайте резервную копию базы или выгрузку данных
  2. 2
    Откройте «Администрирование» → «Обслуживание» → «Групповое изменение реквизитов»
  3. 3
    Выберите нужный справочник, например «Контрагенты» или «Номенклатура»
  4. 4
    Настройте отбор: при необходимости ограничьте список элементов
  5. 5
    Выберите реквизит «Наименование» и задайте формулу с СокрЛП(Значение)
  6. 6
    Выполните изменение и проверьте несколько элементов вручную
  7. 7
    Запустите «Поиск и удаление дублей», если пробелы порождали дубли

Пробелы в номерах документов и кодах

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

Для исправления в типовых конфигурациях есть обработка «Перенумерация объектов» (в составе «Группового изменения реквизитов» или отдельно, в зависимости от версии). Она перенумерует документы за период с учётом префикса. Ручное редактирование номера доступно, но делать это нужно осторожно: номер участвует в печатных формах и может быть уже сообщён контрагенту или зафиксирован в отчётности.

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

Пробелы при загрузке из Excel и обмене данными

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

Профилактика дешевле лечения. Перед загрузкой обработайте файл в Excel функцией СЖПРОБЕЛЫ (она убирает лишние пробелы по краям и схлопывает повторные внутри) в отдельной колонке и загружайте уже очищенные значения. Для неразрывных пробелов в Excel используйте ПОДСТАВИТЬ с символом СИМВОЛ(160).

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

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

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

Нужно обрезать пробелы по краям строки в кодеИспользуйте СокрЛП()
Нужно убрать все пробелы внутри строки или неразрывные пробелыИспользуйте СтрЗаменить() с пробелом и Символ(160)
Пробелы уже в справочнике, элементов многоГрупповое изменение реквизитов с формулой СокрЛП
Из-за пробелов появились дубли контрагентов или номенклатурыСначала очистка, затем «Поиск и удаление дублей»
Пробелы приходят из Excel при каждой загрузкеОчистка в файле через СЖПРОБЕЛЫ или в коде загрузки

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

После любой массовой обработки убедитесь, что пробелы действительно удалены, а данные не повреждены. Простой способ — открыть несколько элементов справочника и поставить курсор в конец наименования: если между последним символом и концом поля есть «пустота», пробел остался.

Для точной проверки можно вывести длину строки: в консоли кода или через отчёт сравните ДлинаСтроки(Наименование) до и после очистки. Если после СокрЛП длина не изменилась, а пробел визуально есть — скорее всего, это неразрывный пробел, и нужна замена Символ(160).

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

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

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

Конец наименования элемента
Норма

Курсор упирается в последний символ без пустоты

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

Между текстом и концом поля видна пустота

Длина строки до и после СокрЛП
Норма

Длина уменьшилась на число лишних символов

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

Длина не изменилась — вероятно, неразрывный пробел

Поиск контрагента по наименованию
Норма

Находится один нужный элемент

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

Находятся дубли или элемент не находится

Группировка в отчёте
Норма

Одинаковые значения собраны в одну строку

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

Одно значение разбито на несколько строк

Итог

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

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

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

Почему СокрЛП не убирает пробел в конце строки?

Скорее всего, это не обычный пробел, а неразрывный (код 160) или другой служебный символ. Проверьте последний символ через КодСимвола(Прав(Строка, 1)). Если код 160 — удалите его через СтрЗаменить(Строка, Символ(160), "") и затем примените СокрЛП.

Как убрать пробелы сразу у всех контрагентов?

Используйте типовую обработку «Групповое изменение реквизитов» из раздела «Администрирование». Выберите справочник «Контрагенты», укажите реквизит «Наименование» и задайте формулу с СокрЛП. Перед запуском сделайте резервную копию базы — изменение массовое и необратимое.

Можно ли убрать пробелы в номере документа вручную?

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

Чем отличаются СокрЛ, СокрП и СокрЛП?

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

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

Перед преобразованием в число удалите обычные и неразрывные пробелы: Результат = Число(СтрЗаменить(СтрЗаменить(СтрокаЧисла, " ", ""), Символ(160), "")). Если этого не сделать, функция Число() может вернуть 0 или вызвать ошибку преобразования.

Как предотвратить появление пробелов при загрузке из Excel?

Очистите данные до загрузки: в Excel добавьте колонку с формулой СЖПРОБЕЛЫ и ПОДСТАВИТЬ для символа 160, либо, если загрузка выполняется собственной обработкой, добавьте в неё СокрЛП и замену неразрывных пробелов для каждого строкового значения перед записью.