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