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

Разработка и Конфигурация · 8 мин

Функция Лев() в 1С: назначение, синтаксис и примеры

Разбираем функцию Лев() в 1С: синтаксис, параметры, примеры кода, типичные ошибки при обрезке строк и сравнение с функциями Сред и Прав.

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

Запрос «лев 1с функция что делает» чаще всего возникает у начинающих разработчиков, которые встретили её в чужом коде или в типовой конфигурации. Ниже разберём синтаксис, поведение в граничных случаях, практические сценарии применения и типичные ошибки.

Синтаксис и параметры функции Лев()

Синтаксис функции предельно прост:

Результат = Лев(<Строка>, <ЧислоСимволов>);

Функция принимает два параметра:

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

Возвращаемое значение — всегда строка. Отсчёт символов в 1С начинается с единицы, а не с нуля, как во многих других языках программирования. Это важно помнить при переносе логики из внешних источников.

Как функция ведёт себя на практике

Рассмотрим базовые примеры, которые показывают результат работы функции:

Результат = Лев("Бухгалтерский учёт", 5); // "Бухга"

Результат = Лев("000000123", 3); // "000"

Результат = Лев("АБВ-2026/15", 3); // "АБВ"

Обратите внимание на второй пример: ведущие нули сохраняются, потому что функция работает именно со строкой, а не с числом. Если бы значение сначала преобразовали в число, нули были бы потеряны — это частая причина ошибок при работе с номерами документов и кодами.

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

Граничные случаи и поведение при нестандартных данных

Чтобы код был устойчивым, нужно понимать, как функция обрабатывает нестандартные ситуации:

  • Пустая строка — Лев("", 5) вернёт пустую строку, ошибки не будет.
  • Нулевая длина — Лев("Текст", 0) вернёт пустую строку.
  • Отрицательное число — приведёт к ошибке выполнения, поэтому параметр длины стоит проверять, если он вычисляется динамически.
  • Неопределено или NULL — передача таких значений вызовет ошибку; перед вызовом желательно убедиться, что значение имеет строковый тип.
  • Пробелы в начале строки — учитываются как полноценные символы. Если строка начинается с пробелов, они попадут в результат.

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

Типичные ошибки
01
Передача числа вместо строки без преобразования — результат непредсказуем, используйте Строка() или Формат()
02
Игнорирование лидирующих пробелов — префикс смещается, сравнение не срабатывает; применяйте СокрЛ() перед Лев()
03
Передача отрицательной длины из вычисляемого выражения — ошибка выполнения; проверяйте Макс(Длина, 0) и тип значения
04
Ожидание ошибки при длине больше строки — её не будет, функция молча вернёт всю строку

Практические сценарии применения

Проверка префикса номера документа

Классическая задача — определить принадлежность документа к определённой серии или организации по префиксу номера:

Если Лев(НомерДокумента, 3) = "УТ0" Тогда

// Документ относится к нужной серии

КонецЕсли;

Формирование сокращённого наименования

Когда поле в отчёте или печатной форме ограничено по длине, наименование обрезают:

КраткоеИмя = Лев(СокрЛП(Наименование), 20);

Разбор штрихкодов и масок

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

1c
// Извлечение префикса весового штрихкода
ШтрихКод = СокрЛП(ШтрихКод);
Префикс = Лев(ШтрихКод, 2);
Если Префикс = "21" Тогда
    КодТовара = Сред(ШтрихКод, 3, 6);
КонецЕсли;

Сравнение с функциями Сред() и Прав()

Лев() — не единственная функция извлечения подстроки. Выбор зависит от того, откуда отсчитываются символы:

ФункцияЧто возвращаетКогда применять
Лев(Строка, N)Первые N символовПрефиксы, начало кода, обрезка наименования
Прав(Строка, N)Последние N символовСуффиксы, окончания номеров, расширения файлов
Сред(Строка, Позиция, N)N символов с указанной позицииИзвлечение фрагмента из середины строки

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

Сравнение вариантов

Лев()

Подходит для префиксов и обрезки начала; не умеет работать с середины строки

Прав()

Для суффиксов и окончаний; симметрична Лев(), но с конца строки

Сред()

Универсальна, извлекает любой фрагмент; требует точного расчёта позиции

Проверка результата и отладка

При отладке кода с Лев() полезно выводить исходную строку и результат рядом, чтобы сразу видеть смещения и лишние пробелы:

Сообщить("[" + ИсходнаяСтрока + "] -> [" + Лев(ИсходнаяСтрока, 5) + "]");

Обрамление значений квадратными скобками — простой приём, который делает видимыми пробелы и невидимые символы. Также проверяйте длину исходной строки функцией СтрДлина(), если результат оказывается короче ожидаемого.

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

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

Длина результата
Норма

Равна запрошенному числу символов или длине строки, если она короче

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

Меньше ожидаемого при достаточной длине — вероятно, в строке есть невидимые символы

Первый символ результата
Норма

Совпадает с первым значимым символом данных

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

Пробел или другой символ — нужна предварительная обработка СокрЛ()

Тип исходного значения
Норма

Строка

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

Число, дата или Неопределено — требуется явное преобразование

Где функция доступна и ограничения

Лев() доступна во всех контекстах исполнения встроенного языка: на сервере, на клиенте (толстый и тонкий клиент), во внешних соединениях. Она также поддерживается в языке выражений компоновки данных, что позволяет использовать её в вычисляемых полях отчётов на СКД.

В запросах 1С прямого аналога Лев() нет — там для извлечения подстроки используется функция ПОДСТРОКА(Строка, НачальнаяПозиция, Длина). Чтобы получить первые символы в запросе, пишите ПОДСТРОКА(Поле, 1, N).

Итог

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

Лев(Строка, N) возвращает первые N символов строки без изменения исходного значения. Отсчёт идёт с 1, лишняя длина не вызывает ошибку, а пробелы и тип данных нужно контролировать вручную. Для запросов используйте ПОДСТРОКА с позицией 1.

Часто задаваемые вопросы

Что вернёт Лев(), если строка короче запрошенного числа символов?

Функция вернёт всю строку целиком без ошибки. Например, Лев("АБ", 10) даст "АБ". Если для логики критична точная длина, проверяйте её через СтрДлина() до или после вызова.

Чем Лев() в 1С отличается от ПОДСТРОКА() в запросах?

Лев() — функция встроенного языка и работает только с началом строки. ПОДСТРОКА() используется в языке запросов и требует указания начальной позиции: ПОДСТРОКА(Поле, 1, 5) эквивалентно Лев(Поле, 5).

Можно ли передать в Лев() число вместо строки?

Платформа выполнит неявное преобразование, но результат может отличаться от ожиданий: число 000123 станет строкой "123" без ведущих нулей. Для контролируемого форматирования используйте функцию Формат() с форматной строкой.

Почему сравнение Лев(Строка, 3) = "АБВ" не срабатывает?

Чаще всего в исходной строке есть лидирующие пробелы или неразрывные пробелы, либо отличается регистр букв. Примените СокрЛ() к строке и при необходимости приведите обе части сравнения к одному регистру через ВРег() или НРег().

Нумерация символов в 1С начинается с нуля или с единицы?

С единицы. Первый символ строки имеет позицию 1. Это отличается от языков вроде JavaScript или C#, где индексация начинается с нуля, и является источником ошибок при переносе алгоритмов.

Изменяет ли Лев() исходную переменную?

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