Разработка и Конфигурация · 10 мин
Как в 1С взять первый символ из строки
Как в 1С получить первый символ строки: функция Лев(), работа с пустыми строками, извлечение первой буквы ФИО, примеры кода на встроенном языке и в запросах.
Во встроенном языке 1С первый символ строки получают функцией Лев(Строка, 1). Функция возвращает указанное количество символов с начала строки, поэтому для одного символа второй параметр всегда равен единице. Тот же приём работает и в языке запросов: выражение ПОДСТРОКА(Поле, 1, 1) извлекает первый символ прямо в запросе.
Задача встречается часто: получить инициал из имени, определить первую букву артикула для группировки, проверить, начинается ли код с определённого префикса, сформировать сокращённое представление строки. Во всех случаях базовый инструмент один, но есть нюансы с пустыми строками, пробелами в начале и типами данных, отличными от строки.
Ниже разобраны синтаксис функции, поведение в особых случаях, альтернативные способы через Сред() и СокрЛП(), работа в запросах и типичные ошибки, которые приводят к неожиданным результатам.
Функция Лев(): синтаксис и базовый пример
Функция Лев() принимает два параметра: исходную строку и количество символов, которые нужно взять слева. Для первого символа второй параметр — единица:
Строка = "Привет, 1С!";
ПервыйСимвол = Лев(Строка, 1); // "П"
Результат всегда имеет строковый тип, даже если исходное значение начинается с цифры. Например, Лев("12345", 1) вернёт строку "1", а не число. Если нужен именно числовой тип, результат дополнительно преобразуют функцией Число() с обработкой возможной ошибки.
Функция доступна везде, где исполняется встроенный язык: в модулях объектов, форм, общих модулях, внешних обработках. Она входит в стандартную библиотеку строковых функций наряду с Прав(), Сред(), Найти() и работает одинаково в тонком, толстом и веб-клиенте.
Строка = "Привет, 1С!";
ПервыйСимвол = Лев(Строка, 1); // "П"Поведение при пустой строке и строке с пробелами
Если передать в Лев() пустую строку, функция вернёт пустую строку — ошибки не возникнет. Это удобно: отдельная проверка на пустоту перед вызовом не обязательна, но результат всё равно нужно учитывать в логике, потому что сравнение пустой строки с ожидаемым символом даст Ложь.
Проблема появляется, когда строка начинается с пробелов или неразрывных пробелов — например, данные скопированы из Excel или введены пользователем неаккуратно. В этом случае Лев(Строка, 1) вернёт пробел, а не первую значащую букву. Решение — предварительно убрать ведущие пробелы функцией СокрЛ():
Строка = " Иванов";
ПервыйСимвол = Лев(СокрЛ(Строка), 1); // "И"
Функция СокрЛП() обрезает пробелы с обеих сторон и подходит, если строка дальше используется целиком. Если важны только левые пробелы, достаточно СокрЛ() — так код точнее отражает намерение.
Альтернативные способы: Сред() и обращение по индексу
Функция Сред(Строка, 1, 1) даёт тот же результат: берёт один символ начиная с первой позиции. Разницы в производительности практически нет, но Лев() читается проще, когда нужен именно начальный фрагмент. Сред() удобнее, когда позиция вычисляется или нужен символ не с начала строки.
Во встроенном языке 1С нет прямого обращения к символу по индексу в квадратных скобках, как в некоторых других языках. Конструкция Строка[0] не сработает — индексация символов не поддерживается, поэтому строковые функции остаются единственным штатным способом.
Если задача — проверить, начинается ли строка с определённого символа или подстроки, функция СтрНачинаетсяС(Строка, "А") выразительнее, чем сравнение Лев(Строка, 1) = "А". Она сразу возвращает булево и лучше читается в условиях.
Сравнение вариантов
Основной способ. Коротко и понятно, когда нужен именно первый символ с начала строки.
Тот же результат. Удобнее, когда позиция вычисляется динамически или нужен не первый символ.
Подходит для проверки префикса в условии; не извлекает символ, а сразу возвращает Истина или Ложь.
Первый символ в запросе: ПОДСТРОКА
В языке запросов 1С функции Лев() нет — вместо неё используется ПОДСТРОКА(Выражение, НачальнаяПозиция, Длина). Для первого символа:
ВЫБРАТЬ
ПОДСТРОКА(Сотрудники.Наименование, 1, 1) КАК ПерваяБуква
ИЗ
Справочник.Сотрудники КАК Сотрудники
Такой приём применяют для группировки по первой букве — например, чтобы построить алфавитный указатель в отчёте. Достаточно сгруппировать результат по выражению ПОДСТРОКА(Наименование, 1, 1) и посчитать количество элементов в каждой группе.
Учтите, что ПОДСТРОКА в запросе работает со строковыми полями. Если поле имеет неограниченную длину (тип Строка без ограничения), применение строковых функций к нему в запросе может быть недоступно — сначала приведите значение через ВЫРАЗИТЬ(Поле КАК Строка(Длина)).
Практические сценарии: инициалы, префиксы, группировка
Инициал из имени или фамилии
Чтобы получить первую букву фамилии для сокращённого представления, комбинируют Лев() с СокрЛП() и переводом в верхний регистр:
Фамилия = "иванов";
Инициал = ВРег(Лев(СокрЛП(Фамилия), 1)) + "."; // "И."
ВРег() нужен, чтобы инициал всегда был заглавным независимо от того, как данные введены. Если ФИО хранится одной строкой и нужно взять первые буквы имени и отчества, строку предварительно разбивают по пробелам через СтрРазделить() и берут Лев() от каждого элемента массива.
Проверка префикса кода или артикула
Когда логика зависит от первого символа кода — например, артикулы, начинающиеся с определённой буквы, относятся к отдельной категории, — используют прямое сравнение:
Если Лев(СокрЛ(Артикул), 1) = "X" Тогда
// обработка артикулов категории X
КонецЕсли;
Для префиксов длиннее одного символа просто увеличьте второй параметр: Лев(Артикул, 3) = "AB-".
- 1Убедитесь, что значение имеет строковый тип; при необходимости преобразуйте через Строка()
- 2Уберите ведущие пробелы: СокрЛ(Значение)
- 3Проверьте, что строка непустая, если пустой результат критичен для логики
- 4Возьмите первый символ: Лев(Строка, 1)
- 5При необходимости приведите регистр: ВРег() или НРег()
- 6Проверьте результат на тестовых данных с пробелами, цифрами и кириллицей
Типичные ошибки и как их избежать
Самая частая ошибка — ожидание числа от строки, начинающейся с цифры. Лев("2026", 1) возвращает строку "2", и сравнение Лев(Код, 1) = 2 даст Ложь из-за разницы типов. Сравнивайте со строковым литералом "2" или явно приводите тип.
Вторая распространённая ситуация — неразрывный пробел (символ с кодом 160) в начале строки, скопированной из веб-страницы или Excel. СокрЛ() его удаляет, но если строка обрабатывается собственным разбором посимвольно, неразрывный пробел легко принять за обычный и получить неверное сравнение.
Третья ошибка — применение Лев() к значению неопределённого типа или к NULL из запроса. Перед обработкой результата запроса проверяйте значение на NULL через ЕСТЬNULL() в самом запросе или условием в коде, иначе получите ошибку исполнения.
Проверка результата и отладка
Быстрый способ убедиться, что код работает правильно, — вывести результат через Сообщить() или посмотреть в табло отладчика. Для надёжности выводите не только символ, но и его код:
Символ = Лев(СокрЛ(Строка), 1);
Сообщить("Символ: [" + Символ + "], код: " + КодСимвола(Символ));
Функция КодСимвола() помогает отличить визуально похожие символы: латинскую «A» (код 65) от кириллической «А» (код 1040), обычный пробел (32) от неразрывного (160). Это частый источник «необъяснимых» несовпадений при сравнении строк.
Если символ извлекается в цикле для большого объёма данных, выносите СокрЛ() и другие преобразования за пределы повторяющихся вычислений там, где это возможно — на больших выборках это заметно сокращает время обработки.
Как проверить результат
Значение имеет тип Строка
Ожидалось число — сравнение с числом всегда даёт Ложь
Возвращается первая значащая буква после СокрЛ()
Возвращается пробел — СокрЛ() не применён
Регистр приведён через ВРег() или НРег() перед сравнением
"а" и "А" считаются разными значениями в логике
КодСимвола() показывает ожидаемый код
Визуально одинаковые буквы имеют разные коды — сравнение не срабатывает
Частые вопросы
Как взять первые несколько символов, а не один?
Укажите нужное количество вторым параметром: Лев(Строка, 3) вернёт три первых символа. Если строка короче указанной длины, функция вернёт её целиком без ошибки.
Что вернёт Лев(Строка, 1), если строка пустая?
Пустую строку. Ошибки не будет, но последующее сравнение с ожидаемым символом даст Ложь — это нужно учитывать в логике обработки.
Как получить первый символ в запросе 1С?
Функцией ПОДСТРОКА(Поле, 1, 1). Для строк неограниченной длины сначала примените ВЫРАЗИТЬ(Поле КАК Строка(255)), иначе функция может быть недоступна.
Можно ли обратиться к символу строки по индексу, как в других языках?
Нет, конструкция вида Строка[0] во встроенном языке 1С не поддерживается. Используйте Лев(), Сред() или Прав() — они покрывают все случаи извлечения символов по позиции.
Как проверить, начинается ли строка с определённой буквы?
Удобнее всего функцией СтрНачинаетсяС(Строка, "А") — она сразу возвращает Истина или Ложь и лучше читается, чем сравнение Лев(Строка, 1) = "А".
Почему Лев() возвращает пробел вместо первой буквы?
Строка начинается с пробелов или неразрывного пробела — такое часто встречается в данных из Excel и веб-страниц. Примените СокрЛ() перед Лев(), чтобы убрать ведущие пробельные символы.
Что важно запомнить
Первый символ строки в 1С — это Лев(Строка, 1), в запросе — ПОДСТРОКА(Поле, 1, 1). Перед извлечением убирайте ведущие пробелы через СокрЛ(), помните, что результат всегда строкового типа, а для проверки префикса удобнее СтрНачинаетсяС(). Для отладки похожих символов используйте КодСимвола().