Разработка и Конфигурация · 8 мин
1С: как узнать количество символов в строке
Как узнать количество символов в строке в 1С: функция СтрДлина, примеры кода, работа с пробелами, переносами строк и типичные ошибки разработчиков.
Для определения количества символов в строке во встроенном языке 1С используется функция СтрДлина(). Она принимает один параметр — строку — и возвращает целое число: длину строки в символах. Функция доступна во всех современных версиях платформы 1С:Предприятие 8.x и работает одинаково на клиенте и на сервере.
Задача подсчёта символов возникает постоянно: при проверке длины введённого ИНН или номера телефона, при ограничении текста для выгрузки в файл, при разборе строк фиксированного формата. Понимание того, как именно СтрДлина считает пробелы, переносы строк и пустые значения, избавляет от трудноуловимых ошибок в алгоритмах.
Функция СтрДлина: синтаксис и базовый пример
Синтаксис функции предельно прост: СтрДлина(<Строка>). Параметр обязателен, его тип — строка. Если передать значение другого типа (число, дату), платформа автоматически приведёт его к строковому представлению, и результат будет соответствовать уже этому представлению, а не исходному значению.
Текст = "Привет, 1С!";
Длина = СтрДлина(Текст); // 11
Сообщить("Длина строки: " + Длина);Функция возвращает значение типа Число. Его можно сразу использовать в сравнениях, арифметике и условиях без дополнительных преобразований. Например, проверка минимальной длины пароля выглядит так: Если СтрДлина(Пароль) < 8 Тогда ....
Обратите внимание: СтрДлина не изменяет исходную строку и не имеет побочных эффектов. Это чистая функция, её безопасно вызывать в циклах и условиях любое количество раз.
Как СтрДлина считает пробелы и специальные символы
СтрДлина считает абсолютно все символы, включая непечатаемые. Пробелы в начале и конце строки, табуляции, переносы строк — всё это входит в результат. Строка " Текст " с двумя пробелами по краям даст длину на 4 больше, чем ожидает неподготовленный разработчик.
Особого внимания заслуживает перенос строки. В 1С перенос обычно представлен парой символов CR+LF (возврат каретки и перевод строки), и каждый из них считается отдельным символом. Многострочный текст, полученный из текстового документа или поля ввода, может содержать десятки таких пар, заметно увеличивая итоговую длину.
Подсчёт длины без лишних пробелов
На практике чаще всего нужна длина «очищенной» строки — без незначащих пробелов по краям. Для этого СтрДлина комбинируют с функциями обрезки: СокрЛ() убирает пробелы слева, СокрП() — справа, СокрЛП() — с обеих сторон.
Ввод = " Иванов Иван ";
ДлинаОчищенной = СтрДлина(СокрЛП(Ввод)); // 11Важно понимать ограничение: СокрЛП убирает только крайние пробельные символы. Пробелы внутри строки, в том числе двойные, остаются и учитываются в длине. Если требуется удалить все пробелы вообще, используйте СтрЗаменить(Строка, \" \", \"\") перед подсчётом.
Проверка длины реквизитов и пользовательского ввода
Типовой сценарий — контроль длины данных перед записью или выгрузкой. Например, ИНН юридического лица должен содержать 10 цифр, физического — 12, КПП — 9. Проверка через СтрДлина — первый и самый быстрый фильтр корректности ввода.
- 1Получите строковое значение реквизита или поля ввода
- 2Очистите его от крайних пробелов функцией СокрЛП
- 3Сравните СтрДлина результата с требуемым значением
- 4При несовпадении выведите пользователю сообщение с указанием фактической и ожидаемой длины
- 5Проверьте результат на тестовых значениях: корректном, коротком, длинном и содержащем пробелы
При работе с реквизитами объектов учитывайте, что строковый реквизит в конфигурации имеет фиксированную или переменную длину. Фиксированная строка дополняется пробелами справа до заданной длины, поэтому СтрДлина такого реквизита почти всегда вернёт максимальную длину поля. Перед проверкой обязательно применяйте СокрЛП.
Для пользовательских полей ввода на форме дополнительно полезно ограничивать длину штатным свойством поля, а программную проверку использовать как второй уровень защиты — особенно при загрузке данных из файлов и обменах, где ограничения формы не действуют.
Подсчёт символов в многострочном тексте
Если требуется узнать не общую длину, а количество строк в тексте, СтрДлина не подходит — используйте СтрЧислоСтрок(Текст). А длину конкретной строки внутри многострочного текста получают связкой СтрПолучитьСтроку(Текст, НомерСтроки) и СтрДлина.
Текст = "Первая строка
Вторая строка";
ВсегоСтрок = СтрЧислоСтрок(Текст); // 2
ДлинаПервой = СтрДлина(СтрПолучитьСтроку(Текст, 1)); // 14
ОбщаяДлина = СтрДлина(Текст); // включает символы переносаПри обработке файлов, загруженных через ТекстовыйДокумент, помните, что способ чтения влияет на состав символов переноса. Если алгоритм чувствителен к точной длине (например, разбор формата фиксированной ширины), проверяйте результат на реальных файлах, а не только на тестовых строках, заданных в коде.
СтрДлина и другие функции работы со строками
СтрДлина редко используется в одиночку. В связке с функциями извлечения подстрок она позволяет строить гибкие алгоритмы разбора. Вот типовые комбинации, которые встречаются в реальных конфигурациях:
Прав(Строка, СтрДлина(Строка) - 1)— отрезать первый символ;Лев(Строка, СтрДлина(Строка) - 2)— отрезать два последних символа;Сред(Строка, Позиция + 1, СтрДлина(Строка))— взять всё после найденной позиции разделителя;- цикл
Для Поз = 1 По СтрДлина(Строка) Циклс посимвольным разбором черезСред(Строка, Поз, 1)— для проверки, что строка состоит только из цифр.
Способы проверки строки
Когда нужна точная длина в символах: проверка форматов, ограничения выгрузки. Не подходит для проверки заполненности без очистки пробелов
Когда нужно только понять, пустая строка или нет. Быстрее и читабельнее, чем СтрДлина(Строка) = 0
Когда важно количество строк в многострочном тексте, а не общее число символов
Производительность и границы применения
СтрДлина — очень быстрая операция, и в обычных алгоритмах о её стоимости можно не думать. Однако в циклах по большим таблицам значений лучше вычислять длину неизменной строки один раз до цикла и сохранять в переменную, а не вызывать функцию на каждой итерации.
Отдельный случай — посимвольный разбор очень длинных строк через Сред в цикле. Такой подход работает, но на строках в сотни тысяч символов становится заметно медленным. Если задача сводится к проверке состава строки или замене, предпочтительнее встроенные функции СтрЗаменить, регулярные выражения через COM-объект (на Windows) или обработка через СтрНайти.
Часто задаваемые вопросы
Что вернёт СтрДлина для пустой строки?
Функция вернёт 0. Однако для проверки на пустоту лучше использовать ПустаяСтрока(Строка) — этот вариант читабельнее и корректно обрабатывает неопределённые значения после приведения типов.
Как посчитать количество букв без пробелов и знаков препинания?
Штатной функции для этого нет. Проще всего удалить ненужные символы через цепочку СтрЗаменить, а затем применить СтрДлина, либо пройти по строке посимвольно и подсчитать только нужные символы, сравнивая каждый с допустимым набором.
Почему СтрДлина реквизита справочника возвращает больше символов, чем видно?
Скорее всего, реквизит имеет фиксированную длину, и значение дополнено пробелами справа до максимального размера поля. Примените СокрЛП к значению перед подсчётом — тогда получите фактическую длину содержимого.
Считает ли СтрДлина переносы строк?
Да. Каждый перенос строки в 1С — это обычно два символа (CR и LF), и оба входят в результат. Если нужна длина видимого текста, удалите символы переноса через СтрЗаменить или используйте СокрЛП для крайних переносов.
Можно ли узнать длину строки в запросе 1С?
Да, в языке запросов есть функция ДЛИНАСТРОКИ(Значение). Она возвращает длину строкового поля прямо в запросе, что позволяет фильтровать и сортировать данные по длине без выгрузки в код. Учтите, что для строк неограниченной длины поведение функции зависит от СУБД, поэтому результат стоит проверять на тестовых данных.
Как ограничить длину строки при вводе пользователем?
У поля ввода на форме есть свойство ограничения длины, которое наследуется от типа связанного реквизита. Для программного контроля добавьте проверку СтрДлина(СокрЛП(Значение)) в обработчике перед записью и выведите пользователю понятное сообщение с фактической и допустимой длиной.
Что важно запомнить
Количество символов в строке возвращает СтрДлина(Строка); функция считает все символы, включая пробелы и переносы строк. Перед проверками очищайте строку через СокрЛП, для проверки пустоты используйте ПустаяСтрока, а для многострочного текста — СтрЧислоСтрок и СтрПолучитьСтроку.