В процессе разработки на платформе 1С:Предприятие часто возникает задача очистки строковых данных. Лишние пробелы в конце наименований справочников или текстовых реквизитов могут привести к некорректной сортировке, дублированию записей или ошибкам при поиске. Рассмотрим подробно все способы решения этой задачи: от стандартных функций до работы со скрытыми символами и регулярными выражениями.
Самый простой и правильный путь в 1С — использование встроенных функций сокращения строк. Платформа предоставляет три основные функции, которые решают 99% задач по очистке текста:
Проанализируем пример использования СокрП для очистки наименования:
// Пример удаления пробелов только справа
Наименование = "Товар №123 ";
НаименованиеБезПробелов = СокрП(Наименование);
// Результат: "Товар №123"
Важно понимать, что в современных версиях 1С:Предприятие 8 функции семейства Сокр обрабатывают не только обычный пробел. Рассмотрим перечень символов, которые удаляются автоматически:
В некоторых специфических ситуациях, когда нам нужно удалять строго определенные символы или когда мы работаем в очень старых версиях системы, может потребоваться ручной обход строки. Разберем, как реализовать цикл для удаления пробелов с конца строки:
// Пример ручного удаления символов пробела в конце строки
Пока Прав(Наименование, 1) = " " Цикл
Наименование = Лев(Наименование, СтрДлина(Наименование) - 1);
КонецЦикла;
Этот метод менее производителен, чем встроенная функция СокрП, однако он позволяет наглядно увидеть механику работы со строкой как с массивом символов. Мы анализируем последний символ (справа) и, если он является пробелом, отсекаем его, уменьшая общую длину строки на единицу.
Бывают случаи, когда вы применили СокрЛП, но визуально пробелы остались или строка ведет себя странно при сравнении. Это происходит из-за наличия специфических символов Юникода, которые выглядят как пустота, но не входят в стандартный список очистки функции Сокр.
Выясним причину такого поведения. К «проблемным» символам относятся:
Если вы столкнулись с такой ситуацией, необходимо использовать функцию СтрЗаменить в сочетании с функцией Символ. Рассмотрим пример очистки строки от неразрывного пробела и мягкого переноса:
// Удаляем специфические символы перед финальной обрезкой
Текст = СтрЗаменить(Текст, Символ(160), " "); // Заменяем неразрывный на обычный
Текст = СтрЗаменить(Текст, Символ(173), ""); // Удаляем мягкий перенос
Текст = СокрЛП(Текст); // Итоговая очистка
Для продвинутых задач, когда нужно удалить любые типы пробельных символов (включая все варианты Юникода) строго в конце текста, эффективнее всего использовать регулярные выражения. Начиная с версии платформы 8.3.24, в 1С появилась встроенная поддержка регулярных выражений в функциях работы со строками.
Посмотрим на пример удаления всех пробельных символов в конце строки с помощью встроенных средств:
// Использование регулярных выражений (доступно с 8.3.24)
// Паттерн \s+$ означает "один или более пробельных символов в конце строки"
Результат = СтрЗаменить(Наименование, "\s+$", "", , Истина);
Если же ваша база работает на более старой версии платформы, мы можем воспользоваться объектом VBScript.RegExp через COM-соединение (только для Windows-клиентов):
RegExp = Новый COMОбъект("VBScript.RegExp");
RegExp.Pattern = "\s+$";
RegExp.Multiline = Ложь;
Наименование = RegExp.Replace(Наименование, "");
Иногда программисты сталкиваются с тем, что пробелы в конце наименования появляются снова сразу после записи объекта в базу данных. Разберем, почему так происходит.
Проанализируем свойство реквизита «Допустимая длина» в конфигураторе:
СокрП в коде даст эффект только в оперативной памяти, но при записи в СУБД пробелы вернутся.Совет: Если вам мешают пробелы в конце, убедитесь, что в свойствах реквизита установлено значение «Переменная».
Если вы обнаружили, что в справочнике «Номенклатура» уже накопились тысячи записей с лишними пробелами, не обязательно писать сложную обработку. Проанализируем ситуацию и воспользуемся инструментом «Групповое изменение реквизитов» (входит в состав БСП):
СокрЛП(Объект.Наименование).Таким образом, мы рассмотрели полный спектр инструментов для работы с пробелами в 1С. Помните, что использование СокрЛП является «золотым стандартом» разработки, а к регулярным выражениям или ручному перебору стоит прибегать только в нестандартных случаях.