Сокрлп 1с функция что делает
Перейти к содержимому

Сокрлп 1с функция что делает

  • автор:

Новые функции языка запросов и системы компоновки данных

Данная статья является анонсом новой функциональности.
Не рекомендуется использовать содержание данной статьи для освоения новой функциональности.
Полное описание новой функциональности будет приведено в документации к соответствующей версии.
Полный список изменений в новой версии приводится в файле v8Update.htm.

Реализовано в версии 8.3.20.1549

Когда мы пишем запросы и создаем отчёты, нередко бывает нужно не просто показать данные в том виде, в котором они лежат в БД, а произвести над ними какие-то операции. Например, посчитать разницу между двумя датами или округлить число до нужной разрядности. Хорошо, если нужная функция есть в языке запросов (или в языке СКД) — тогда мы можем сделать с данными то, что хотим, на уровне запроса / СКД, а потом просто отобразить результат. Если же нужная функция в языке запросов не реализована – приходится делать постобработку запроса в языке 1С, проходясь в цикле по результатам запроса и выполняя нужные операции. Что приводит к разрастанию кода конфигурации и может снизить производительность.

К нам довольно часто обращаются разработчики с пожеланиями о добавлении дополнительных функций в язык запросов и язык СКД. Мы внимательно проанализировали пожелания и выделили список наиболее востребованных функций, которые планируем реализовать в версии 8.3.20.

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

В язык запросов добавляются функции:

  • Строка(String) – преобразует значение в примитивного типа в строку с учетом национальных установок.
  • Тригонометрические функции Sin, Cos, Tan, ASin, ACos, ATan (все вычисления производятся в радианах)
  • Exp — вычисляет результат возведения основания натурального логарифма (числа e) в степень
  • Log — вычисляет натуральный логарифм числа.
  • Log10 — вычисляет десятичный логарифм числа.
  • Pow — вычисляет возведение в степень.
  • Sqrt – вычисляет квадратный корень.
  • Окр(Round) — округляет исходное число до нужной разрядности
  • Цел(Int) — вычисляет целую часть переданного числа, полностью отсекая дробную часть.
  • ДлинаСтроки(StringLength) – вычисляет длину строки.
  • СокрЛ(TrimL) – отбрасывает незначащие пробелы слева.
  • СокрП(TrimR) – отбрасывает незначащие пробелы справа.
  • СокрЛП(TrimAll) – отбрасывает незначащие пробелы слева и справа.
  • Лев(Left) – получает первые слева символы строки.
  • Прав(Right) – получает первые справа символы строки.
  • СтрНайти(StrFind) – находит первую позицию подстроки в строке (без учета регистра).
  • ВРег(Upper) – преобразует все символы строки в верхний регистр.
  • НРег(Lower) – преобразует все символы строки в нижний регистр.
  • СтрЗаменить(StrReplace) – заменяет все вхождения подстроки на другую подстроку (без учета регистра).
  • РазмерХранимыхДанных(StoredDataSize) – возвращает размер данных в байтах, которые занимают данные параметра.

Система компоновки данных

В язык выражений системы компоновки данных добавлены новые функции:

  • СокрЛ(TrimL) – отбросить незначащие пробелы слева.
  • СокрП(TrimR) – отбросить незначащие пробелы справа.
  • СокрЛП(TrimAll) – отбросить незначащие пробелы слева и справа.
  • Лев(Left) – получить первые слева символы строки.
  • Прав(Right) – получить первые справа символы строки.
  • СтрНайти(StrFind) – найти подстроку в строке (без учета регистра).
  • ВРег(Upper) – преобразует все символы строки в верхний регистр.
  • НРег(Lower) – преобразует все символы строки в нижний регистр.
  • СтрЗаменить(StrReplace) – заменяет все вхождения подстроки на другую подстроку (без учета регистра).
  • НСтр(NStr) – получает строку на языке пользователя (аналогично тому, как работает метод НСтр глобального контекста). Параметры:
    • ИсходнаяСтрока – строка, содержащая строки на разных языках (например, «ru = ‘Добрый вечер!’; en = ‘Good Evening!'»).
    • КодЯзыка (необязательный) – строка с кодом языка, на котором нужно получать строку. Если не указан — строка получается на языке текущего пользователя.

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

    Функция СокрЛП() удаляет пробельные символы в начале (до первого значащего символа) и в конце (после последнего значащего символа) исходной строки.

    Примечание: К незначащим символам относятся символы:

    • «пробел»,
    • «неразрывный пробел» (НПП),
    • «табуляция» (горизонтальная Таб и вертикальная ВТаб),
    • «возврат каретки» (ВК),
    • «перевод строки» (ПС),
    • «перевод формы (страницы)» (ПФ).

    Доступность

    Версия Поддержка
    8.1 Сервер, Клиент, Внешнее соединение
    8.2 Сервер, Толстый клиент, Тонкий клиент, Веб-клиент, Внешнее соединение
    8.3 Сервер, Толстый клиент, Тонкий клиент, Веб-клиент, Внешнее соединение, Мобильный автономный сервер, Мобильный клиент, Мобильное приложение

    Пример использования

    Пример кода с использованием функции СокрЛП() :

    ИсходнаяСтрока = " Строка с пробелами "; Сообщить("*" + СокрЛП(ИсходнаяСтрока) + "*"); //Результат: //*Строка с пробелами* 

    Сокрлп 1с функция что делает

    « Как стать программистом 1С » Язык 1С » 1С СокрЛП, 1С СокрЛ, 1С СокрП – удаление лишних символов

    1С СокрЛП, 1С СокрЛ, 1С СокрП – удаление лишних символов

    Функции 1С СокрЛП(Строка), 1С СокрЛ(Строка) и 1С СокрП(Строка) удаляют из текста лишние символы.

    • Выполняем

      СокрЛП(»
      | Привет, мир!
      | «)

    • 1С возвращает «Привет, мир!»
    • 1С СокрЛ – с начала строки до «значащих символов»
    • 1С СокрП – с последнего «значащего символа» до конца строки
    • 1С СокрЛП – одновременно слева и справа.

    «Лишние символы», которые можно убрать с помощью 1С СокрЛ, 1С СокрП, 1С СокрЛП:

    • Пробел
    • Перенос строки, страницы
    • Табуляция.

    Лишние пробелы внутри строки, между словами функции 1С СокрЛ, 1С СокрП, 1С СокрЛП не удаляют.

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

    Если пользователь ввел значение с пробелом, то сравнение с заданной строкой не будет работать – ведь сравнение учитывает все символы, включая незначимые.

    • Пользователь ввел: «РОССИЯ «
    • Мы сравниваем: Если Страна = «РОССИЯ» //не сработает
    • Чтобы сработало, пишем: Если СокрЛП(Страна) = «РОССИЯ» //сработает

    1С СокрЛП() некоторые программисты используют при переводе чисел в строку, вместо Строка(). Дело в том, что числа форматируются при переводе по настройкам локализации с пробелами между разрядами: 22500 -> «22 500». Однако 1С СокрЛП() не убирает пробелы между словами. Вместо этого можно применять Формат():

    Число = 22500;
    ЧислоСтрокой = Формат(Число, «ЧГ=0»);
    //ЧислоСтрокой будет равно «22500»

    Добавим в наш анализатор строки программы, позволяющие удалить незначащие символы как слева и справа, так и между словами (про анализатор текста см. выше «Функции работы со строками 1С»).

    Только зарегистрированные пользователи VIP группы могут видеть этот контент.

    Проголосовать за этот пост:

    сокрЛП(Строка(строка.Организации))

    Здравствуйте! Подскажите пожалуйста, что означает строка кода:

    наим=сокрЛП(Строка(строка.Организации));

    наим=сокрЛП(Организиции.Наименование) — отсекает незначащие символы, стоящие слева от первого значащего символа в строке, и пробелы, стоящие справа от последнего значащего символа в строке. т.е. на выходе получим только наименование организации, без всего лишнего. а что значит код выше? строка.Организации -в таблице значений значение в ячейке колонки Огранизации,
    а Строка(строка.Организации)?

    По теме из базы знаний
    Найденные решения
    8. artik1994 18.04.17 09:09 Сейчас в теме

    (7)на крайний случай просто что бы не преобразовывать в строку, можно бы было просто написать сокрЛП(строка.Организации.НаименованиеПолное), как вариант

    user712426; + 1 – 1 Ответить
    Остальные ответы

    • Дата
    • Дата
    • Рейтинг всех уровней
    • Рейтинг 1-го уровня
    • Древо развёрнутое
    • Древо свернутое

    Свернуть все
    13. Onwardv 64 18.04.17 11:38 Сейчас в теме
    наим=сокрЛП(Строка(строка.Организации));

    Такой вариант может исторически сложиться. Например,
    1)Сначала было «наим=строка.Организации;».
    2) Потом пришло указание срочно убрать лишние символы, типа копировать неудобно, если в наименовании висит перевод строки (скопированный, в свою очередь откуда-нибудь, например, с сайта). Так появилось «наим=сокрЛП(строка.Организации);»
    3) Некоторое время работало и, вдруг, стало отваливаться по ошибке , т.к. «строка.Организации» не удалось автоматически преобразовать в строку. Срочно нужно было исправить. Так появился текущий вариант:
    «наим=сокрЛП(Строка(строка.Организации));»

    2. Octopus 337 18.04.17 08:35 Сейчас в теме

    Есть какая-то переменная под именем «Строка», которая содержит поле «Организация». Зачем применять и СокрЛП(), и Строка(), не очень понятно, достаточно СокрЛП(). Второпях писали, наверное.

    3. user712426 18.04.17 08:43 Сейчас в теме
    (2)из запроса получаем тз и дальше работаем с нею.
    фрагмент кода

    Для каждого строка из тз Цикл Если аа=0 Тогда . ИначеЕсли сокрЛП(наим) <> сокрЛП(Строка(строка.Организации)) Тогда . конецесли; наим=сокрЛП(Строка(строка.Организации)); конеццикла;

    т.е. для каждой строки из тз сравниваем одно и то же?

    4. vcv 89 18.04.17 08:47 Сейчас в теме

    (3) Вот сначала пишут что-то типа «Строка(строка.Организации)» в цикле, а потом жалуются, что 1С медленно работает.

    5. user712426 18.04.17 08:51 Сейчас в теме

    (4)это не я писала. это отчет коллеги. а мне надо разобраться в их отчете и доработать мелочи.
    пысы: я только учусь. и очень прошу совета

    6. artik1994 18.04.17 08:58 Сейчас в теме

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

    user712426; + 1 – Ответить
    7. user712426 18.04.17 09:03 Сейчас в теме

    (6)Спасибо! В запросе у Организации ссылочный тип стоит (СправочникСсылка..) на реквизите Организация.
    поэтому наверное преобразуют в строковый

    8. artik1994 18.04.17 09:09 Сейчас в теме

    (7)на крайний случай просто что бы не преобразовывать в строку, можно бы было просто написать сокрЛП(строка.Организации.НаименованиеПолное), как вариант

    user712426; + 1 – 1 Ответить
    9. user712426 18.04.17 09:11 Сейчас в теме
    (8)Спасибо большое! Мне сейчас каждое слово и совет важны!
    10. artik1994 18.04.17 09:13 Сейчас в теме
    (9) Пожалуйста
    12. Onwardv 64 18.04.17 11:36 Сейчас в теме

    (8) . можно бы было просто написать сокрЛП(строка.Организации.НаименованиеПолное).
    Ага, и отвалиться по ошибке, если ссылка на организацию есть NULL.

    14. artik1994 18.04.17 11:52 Сейчас в теме
    (12) ну и проверку на заполнения пихнуть
    11. herfis 493 18.04.17 09:15 Сейчас в теме

    (7) Все верно. Делают явное преобразование ссылочного типа к строке. При этом получается представление ссылки. Для справочников это чаще всего наименование (основное представление объекта настраивается в конфигураторе). По результату это тоже самое, что Строка.Организации.Наименование, но лучше по эффективности, т.к. получение представлений кэшируется и остальные поля объекта в память тоже не вычитываются. Но все равно плохо по эффективности, так как можно наименование сразу получить в запросе и работать с ним без обращений к БД и кэшам. Хотя, учитывая что идет сравнение наименований, тут вообще в консерватории все грустно.
    ЗЫ. При ручном формировании печатных форм самая типичнейшая ошибка — выводить ссылочные данные на печать в параметрах. Все будет работать, т.к. сработает автополучение представлений, но производительность просядет.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *