Функция СокрЛП

Язык запросов · TrimAll

Синтаксис и применение Функция СокрЛП в платформе 1С:Предприятие. Описание и примеры кода.

Полное описание, параметры и ограничения

Функция СокрЛП (TrimAll)

СокрЛП(<Строка>)

Данная функция отсекает незначащие символы, стоящие слева от первого значащего символа в строке, и пробелы, стоящие справа от последнего значащего символа в строке.

Строка - Строка. Исходная строка.

Возвращаемое значение: Строка. Строка, полученная в результате отсечения пробелов.

Внимание! При использовании в запросе данной функции запрос не будет передан в Дата акселератор.

см. также: Функции языка запросов

Практические примеры

Нормализовать свой текст запроса: пробелы, регистр и длина

На собственном названии сравниваем левую, правую и двустороннюю очистку, затем два регистра. Квадратные скобки в выводе делают крайние пробелы видимыми.

Где и как запускать

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

Подготовка

  1. В отдельной учебной базе 8.5.1.1343 создайте общий модуль УчебныйЯзык: Сервер=Истина, Глобальный=Ложь, ВызовСервера=Ложь, Привилегированный=Ложь. Клиентские и внешнее соединение отключены; ПовторноеИспользованиеВозвращаемыхЗначений=НеИспользовать.

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

  3. В своей внешней учебной обработке создайте управляемую форму, команду Выполнить и кнопку. Клиентский обработчик Выполнить(Команда) вызывает свою процедуру ВыполнитьНаСервере(); она имеет директиву &НаСервереБезКонтекста и одну строку УчебныйЯзык.ВыполнитьПример();. Это серверный вызов общего модуля, а не разрешение клиенту прямо обращаться к серверной библиотеке.

  4. Все товары, количества и строки придуманы в этом модуле. Запись документов, подключение к чужой базе, файлы, сеть и печать не используются. В рабочие общие модули текст не вставляйте.

  5. HTML только показывает BSL. Код в 1С не запускался; перечисленные результаты и отрицательные опыты проверяйте самостоятельно в собственном стенде.

  6. Этот запрос без ИЗ получает одну строку только из явно заданных своих параметров. Справочники, документы, регистры, временные таблицы и рабочие сведения не читаются.

  7. В модуле BSL запрос — многострочная строка: кавычки его текстовых констант удвоены, продолжения начинаются с |. Не добавляйте значение параметра склейкой в текст запроса.

  8. Речь о функциях внутри языка запросов, не о внешне похожих функциях BSL. Их правила и доступность сверены с shquery_ru.hbk установленной 8.5.1.1343, но запросы здесь в 1С не выполнялись.

Процедура ВыполнитьПример() Экспорт
    Исходная = "  Книга Ama  ";
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
    |    &Исходная КАК Исходная,
    |    СОКРЛ(&Исходная) КАК БезЛевых,
    |    СОКРП(&Исходная) КАК БезПравых,
    |    СОКРЛП(&Исходная) КАК Нормализованная,
    |    ВРЕГ(СОКРЛП(&Исходная)) КАК Верхний,
    |    НРЕГ(СОКРЛП(&Исходная)) КАК Нижний,
    |    ДЛИНАСТРОКИ(&Исходная) КАК ДлинаИсходной,
    |    ДЛИНАСТРОКИ(СОКРЛП(&Исходная)) КАК ДлинаЧистой";
    Запрос.УстановитьПараметр("Исходная", Исходная);
    Результат = Запрос.Выполнить();
    Выборка = Результат.Выбрать();
    Если НЕ Выборка.Следующий() Тогда
        ВызватьИсключение "Запрос из собственных параметров должен вернуть одну строку";
    КонецЕсли;
    Сообщить("Границы исходной: [" + Выборка.Исходная + "]");
    Сообщить("После нормализации: [" + Выборка.Нормализованная + "]");
    Сообщить(Выборка.Исходная = Исходная);
    Сообщить(Выборка.БезЛевых = "Книга Ama  ");
    Сообщить(Выборка.БезПравых = "  Книга Ama");
    Сообщить(Выборка.Нормализованная = "Книга Ama");
    Сообщить(Выборка.Верхний = "КНИГА AMA");
    Сообщить(Выборка.Нижний = "книга ama");
    Сообщить(Выборка.ДлинаИсходной = 13);
    Сообщить(Выборка.ДлинаЧистой = 9);
    Если Выборка.Следующий() Тогда
        ВызватьИсключение "У запроса без источников ожидалась ровно одна строка";
    КонецЕсли;
КонецПроцедуры

Разбор по шагам

  1. Задать исходную строку с двумя обычными пробелами с каждого края; внутренний пробел между Книга и Ama сохранить.

  2. Передать строку одним параметром, а не вставлять её в запрос конкатенацией.

  3. СОКРЛ и СОКРП вычисляют разные значения: один край очищен, другой сохранён.

  4. СОКРЛП очищает оба края; вложить его результат в ВРЕГ/НРЕГ, не менять сам параметр.

  5. Получить восемь именованных полей одной строки и проверить каждое.

  6. Длина исходной 13, очищенной 9: четыре внешних пробела исчезли, внутренний остался.

  7. Проверить отсутствие второй строки. Никакие данные конфигурации не читались и не изменялись.

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

  1. Два сообщения с границами строк, затем восемь проверок Истина.

  2. БезЛевых содержит два пробела справа, БезПравых — два слева.

  3. Верхний равен КНИГА AMA, Нижний — книга ama; исходный параметр остаётся прежним.

Ожидаемый результат

Различия трёх способов очистки и двух регистров видны на одном полностью заданном учебном названии.

На что обратить внимание

  1. Очистка краёв не удаляет пробелы внутри текста.

  2. Регистр текста не является идентичностью товара или безопасным идентификатором.

  3. ДлинаСтроки запроса считает строку, а не размер файла/DER/UTF-8 в байтах.

  4. Для этих функций установленная справка предупреждает: запрос не будет передан в Дата акселератор. Это не измерение скорости на вашем стенде.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.