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

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

Как в 1С взять первый символ из строки

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

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

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

Ниже разобраны синтаксис функции, поведение в особых случаях, альтернативные способы через Сред() и СокрЛП(), работа в запросах и типичные ошибки, которые приводят к неожиданным результатам.

Функция Лев(): синтаксис и базовый пример

Функция Лев() принимает два параметра: исходную строку и количество символов, которые нужно взять слева. Для первого символа второй параметр — единица:

Строка = "Привет, 1С!";

ПервыйСимвол = Лев(Строка, 1); // "П"

Результат всегда имеет строковый тип, даже если исходное значение начинается с цифры. Например, Лев("12345", 1) вернёт строку "1", а не число. Если нужен именно числовой тип, результат дополнительно преобразуют функцией Число() с обработкой возможной ошибки.

Функция доступна везде, где исполняется встроенный язык: в модулях объектов, форм, общих модулях, внешних обработках. Она входит в стандартную библиотеку строковых функций наряду с Прав(), Сред(), Найти() и работает одинаково в тонком, толстом и веб-клиенте.

bsl
Строка = "Привет, 1С!";
ПервыйСимвол = Лев(Строка, 1); // "П"

Поведение при пустой строке и строке с пробелами

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

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

Строка = "  Иванов";

ПервыйСимвол = Лев(СокрЛ(Строка), 1); // "И"

Функция СокрЛП() обрезает пробелы с обеих сторон и подходит, если строка дальше используется целиком. Если важны только левые пробелы, достаточно СокрЛ() — так код точнее отражает намерение.

Альтернативные способы: Сред() и обращение по индексу

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

Во встроенном языке 1С нет прямого обращения к символу по индексу в квадратных скобках, как в некоторых других языках. Конструкция Строка[0] не сработает — индексация символов не поддерживается, поэтому строковые функции остаются единственным штатным способом.

Если задача — проверить, начинается ли строка с определённого символа или подстроки, функция СтрНачинаетсяС(Строка, "А") выразительнее, чем сравнение Лев(Строка, 1) = "А". Она сразу возвращает булево и лучше читается в условиях.

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

Лев(Строка, 1)

Основной способ. Коротко и понятно, когда нужен именно первый символ с начала строки.

Сред(Строка, 1, 1)

Тот же результат. Удобнее, когда позиция вычисляется динамически или нужен не первый символ.

СтрНачинаетсяС(Строка, "А")

Подходит для проверки префикса в условии; не извлекает символ, а сразу возвращает Истина или Ложь.

Первый символ в запросе: ПОДСТРОКА

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

ВЫБРАТЬ

ПОДСТРОКА(Сотрудники.Наименование, 1, 1) КАК ПерваяБуква

ИЗ

Справочник.Сотрудники КАК Сотрудники

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

Учтите, что ПОДСТРОКА в запросе работает со строковыми полями. Если поле имеет неограниченную длину (тип Строка без ограничения), применение строковых функций к нему в запросе может быть недоступно — сначала приведите значение через ВЫРАЗИТЬ(Поле КАК Строка(Длина)).

Практические сценарии: инициалы, префиксы, группировка

Инициал из имени или фамилии

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

Фамилия = "иванов";

Инициал = ВРег(Лев(СокрЛП(Фамилия), 1)) + "."; // "И."

ВРег() нужен, чтобы инициал всегда был заглавным независимо от того, как данные введены. Если ФИО хранится одной строкой и нужно взять первые буквы имени и отчества, строку предварительно разбивают по пробелам через СтрРазделить() и берут Лев() от каждого элемента массива.

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

Когда логика зависит от первого символа кода — например, артикулы, начинающиеся с определённой буквы, относятся к отдельной категории, — используют прямое сравнение:

Если Лев(СокрЛ(Артикул), 1) = "X" Тогда

// обработка артикулов категории X

КонецЕсли;

Для префиксов длиннее одного символа просто увеличьте второй параметр: Лев(Артикул, 3) = "AB-".

Порядок действий для надёжного извлечения
  1. 1
    Убедитесь, что значение имеет строковый тип; при необходимости преобразуйте через Строка()
  2. 2
    Уберите ведущие пробелы: СокрЛ(Значение)
  3. 3
    Проверьте, что строка непустая, если пустой результат критичен для логики
  4. 4
    Возьмите первый символ: Лев(Строка, 1)
  5. 5
    При необходимости приведите регистр: ВРег() или НРег()
  6. 6
    Проверьте результат на тестовых данных с пробелами, цифрами и кириллицей

Типичные ошибки и как их избежать

Самая частая ошибка — ожидание числа от строки, начинающейся с цифры. Лев("2026", 1) возвращает строку "2", и сравнение Лев(Код, 1) = 2 даст Ложь из-за разницы типов. Сравнивайте со строковым литералом "2" или явно приводите тип.

Вторая распространённая ситуация — неразрывный пробел (символ с кодом 160) в начале строки, скопированной из веб-страницы или Excel. СокрЛ() его удаляет, но если строка обрабатывается собственным разбором посимвольно, неразрывный пробел легко принять за обычный и получить неверное сравнение.

Третья ошибка — применение Лев() к значению неопределённого типа или к NULL из запроса. Перед обработкой результата запроса проверяйте значение на NULL через ЕСТЬNULL() в самом запросе или условием в коде, иначе получите ошибку исполнения.

Типичные ошибки
01
Сравнение Лев(Код, 1) с числом — результат всегда строка, сравнение с числом даёт Ложь
02
Пропуск СокрЛ() для данных из файлов и форм — ведущий пробел возвращается вместо первой буквы
03
Применение Лев() к NULL из запроса без проверки — ошибка исполнения
04
Использование Лев() в запросе — в языке запросов этой функции нет, нужна ПОДСТРОКА
05
Ожидание обращения по индексу Строка[0] — такой синтаксис в 1С не поддерживается

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

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

Символ = Лев(СокрЛ(Строка), 1);

Сообщить("Символ: [" + Символ + "], код: " + КодСимвола(Символ));

Функция КодСимвола() помогает отличить визуально похожие символы: латинскую «A» (код 65) от кириллической «А» (код 1040), обычный пробел (32) от неразрывного (160). Это частый источник «необъяснимых» несовпадений при сравнении строк.

Если символ извлекается в цикле для большого объёма данных, выносите СокрЛ() и другие преобразования за пределы повторяющихся вычислений там, где это возможно — на больших выборках это заметно сокращает время обработки.

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

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

Тип результата
Норма

Значение имеет тип Строка

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

Ожидалось число — сравнение с числом всегда даёт Ложь

Первый символ строки с пробелами
Норма

Возвращается первая значащая буква после СокрЛ()

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

Возвращается пробел — СокрЛ() не применён

Регистр буквы
Норма

Регистр приведён через ВРег() или НРег() перед сравнением

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

"а" и "А" считаются разными значениями в логике

Кириллица/латиница
Норма

КодСимвола() показывает ожидаемый код

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

Визуально одинаковые буквы имеют разные коды — сравнение не срабатывает

Частые вопросы

Как взять первые несколько символов, а не один?

Укажите нужное количество вторым параметром: Лев(Строка, 3) вернёт три первых символа. Если строка короче указанной длины, функция вернёт её целиком без ошибки.

Что вернёт Лев(Строка, 1), если строка пустая?

Пустую строку. Ошибки не будет, но последующее сравнение с ожидаемым символом даст Ложь — это нужно учитывать в логике обработки.

Как получить первый символ в запросе 1С?

Функцией ПОДСТРОКА(Поле, 1, 1). Для строк неограниченной длины сначала примените ВЫРАЗИТЬ(Поле КАК Строка(255)), иначе функция может быть недоступна.

Можно ли обратиться к символу строки по индексу, как в других языках?

Нет, конструкция вида Строка[0] во встроенном языке 1С не поддерживается. Используйте Лев(), Сред() или Прав() — они покрывают все случаи извлечения символов по позиции.

Как проверить, начинается ли строка с определённой буквы?

Удобнее всего функцией СтрНачинаетсяС(Строка, "А") — она сразу возвращает Истина или Ложь и лучше читается, чем сравнение Лев(Строка, 1) = "А".

Почему Лев() возвращает пробел вместо первой буквы?

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

Итог

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

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