Разработка и Конфигурация · 10 мин
Как разделить строку по символам в 1С
Как разделить строку по символам в 1С: функции СтрРазделить, СтрПолучитьСтроку, СтрЗаменить, разбор по нескольким разделителям, примеры кода и типичные ошибки.
Разделение строки по символу-разделителю — одна из самых частых задач при разработке в 1С: разбор ФИО на части, обработка CSV-файлов, парсинг адресов, артикулов и данных из внешних систем. Во встроенном языке 1С для этого есть несколько инструментов, и выбор зависит от того, какой разделитель используется, нужны ли пустые элементы и какая версия платформы доступна.
Основной современный способ — функция СтрРазделить(), которая возвращает массив подстрок. Для построчного разбора удобна СтрПолучитьСтроку(), а для сложных случаев с несколькими разделителями применяют комбинацию СтрЗаменить() и последующего разделения. Ниже разобраны все рабочие варианты с примерами кода.
Разделение строки функцией СтрРазделить
Функция СтрРазделить(Строка, Разделитель, ВключатьПустые) доступна в платформе 8.3.6 и новее. Она принимает исходную строку, строку-разделитель и необязательный булев параметр, определяющий, включать ли в результат пустые элементы. Результат — массив строк.
Строка = "Иванов;Иван;Иванович";
Части = СтрРазделить(Строка, ";");
// Части[0] = "Иванов"
// Части[1] = "Иван"
// Части[2] = "Иванович"
Разделителем может быть не только один символ, но и целая подстрока — например, "; " с пробелом или последовательность вроде "||". Это удобно, когда данные приходят из сторонних систем с многосимвольными разделителями.
Обратите внимание: функция работает и на клиенте, и на сервере, в том числе в тонком и веб-клиенте, поэтому это универсальный выбор для управляемых форм.
Массив = СтрРазделить("Яблоко,Груша,Апельсин", ",");
Для Каждого Элемент Из Массив Цикл
Сообщить(Элемент);
КонецЦикла;Как обработать пустые элементы при разделении
По умолчанию СтрРазделить включает пустые элементы в результат. Если строка содержит два разделителя подряд ("А;;Б"), между ними образуется пустая строка, и она попадёт в массив. Это важно при разборе CSV, где пустая колонка — осмысленное значение.
Если пустые значения не нужны, передайте третьим параметром Ложь:
Строка = "А;;Б;";
БезПустых = СтрРазделить(Строка, ";", Ложь);
// Результат: ["А", "Б"] — пустые элементы отброшены
Практическое правило: при разборе файлов с фиксированной структурой колонок оставляйте пустые элементы (параметр Истина или опущен), иначе сместится нумерация колонок. При разборе списков, введённых пользователем вручную, пустые элементы обычно безопаснее отбросить.
Разбор многострочного текста через СтрПолучитьСтроку
Если разделителем является перевод строки, удобнее использовать связку СтрЧислоСтрок() и СтрПолучитьСтроку(). Эти функции работают во всех версиях платформы, включая старые, где СтрРазделить ещё не существовала.
Текст = "Первая строка
|Вторая строка
|Третья строка";
КоличествоСтрок = СтрЧислоСтрок(Текст);
Для Номер = 1 По КоличествоСтрок Цикл
ТекущаяСтрока = СтрПолучитьСтроку(Текст, Номер);
// обработка строки
КонецЦикла;
Нумерация строк в СтрПолучитьСтроку начинается с единицы, а не с нуля — это частая причина ошибок у тех, кто переходит на 1С с других языков. Символом-разделителем здесь выступает перевод строки (Символы.ПС), и функция корректно обрабатывает как LF, так и CRLF.
Альтернатива — передать в СтрРазделить разделитель Символы.ПС. Это тоже рабочий вариант, но при смешанных окончаниях строк (CRLF) в элементах массива могут остаться символы возврата каретки, которые придётся удалять.
Разделение по нескольким разделителям
Функция СтрРазделить умеет принимать только один разделитель. Если данные содержат разные символы-разделители (запятые, точки с запятой, пробелы), стандартный приём — сначала заменить все варианты на единый разделитель через СтрЗаменить(), а затем выполнить разделение.
Строка = "Иванов, Петр;Сидорова Анна";
Подготовленная = СтрЗаменить(Строка, ",", ";");
Подготовленная = СтрЗаменить(Подготовленная, " ", ";");
Результат = СтрРазделить(Подготовленная, ";", Ложь);
// ["Иванов", "Петр", "Сидорова", "Анна"]
Такой подход прост и читаем, но требует аккуратности: убедитесь, что выбранный единый разделитель гарантированно не встречается внутри самих данных. Иначе содержимое будет разрезано в непредусмотренных местах.
Для сложных сценариев — например, когда разделитель внутри кавычек не должен учитываться, — потребуется собственный цикл посимвольного разбора. Встроенных функций с поддержкой экранирования в платформе нет.
Как выбрать способ разделения
Обратная операция: склейка массива в строку
Часто после обработки отдельных частей строку нужно собрать обратно. Для этого служит функция СтрСоединить(Массив, Разделитель) — она объединяет элементы массива с указанным разделителем.
Части = СтрРазделить("2026-01-15", "-");
// меняем порядок: день.месяц.год
НоваяДата = СтрСоединить(
Новый Массив, // пример ниже
".");
На практике массив формируют программно: заполняют элементы в нужном порядке и передают в СтрСоединить. Пара функций СтрРазделить / СтрСоединить покрывает большинство задач преобразования форматов — дат, кодов, составных наименований.
Для конкатенации небольшого числа значений без массива проще использовать обычный оператор сложения строк или СтрШаблон("%1;%2", Значение1, Значение2).
Типичные ошибки и как их проверить
Первая частая ошибка — обращение к элементу массива без проверки его количества. Если строка пришла пустой или без ожидаемого разделителя, массив будет содержать меньше элементов, чем ожидает код, и возникнет ошибка «Индекс находится за границами массива».
Части = СтрРазделить(ВходнаяСтрока, ";");
Если Части.Количество() >= 3 Тогда
Фамилия = Части[0];
Имя = Части[1];
Отчество = Части[2];
Иначе
// обработка некорректных данных
КонецЕсли;
Вторая ошибка — несовпадение разделителя: в данных запятая с пробелом, а в коде просто запятая. В результате в элементах массива остаются ведущие пробелы, которые ломают последующие сравнения и поиск. Лечится либо точным разделителем ", ", либо обёртыванием каждого элемента в СокрЛП().
Третья ошибка — попытка разделить значение, которое не является строкой. Перед разделением убедитесь, что на входе именно строка: при необходимости приведите значение через Строка(Значение) или проверьте тип через ТипЗнч().
Как проверить корректность разделения
После разделения полезно программно убедиться, что результат соответствует ожиданиям, особенно при пакетной обработке файлов и обменах. Минимальный набор проверок: количество элементов, отсутствие неожиданных пустых значений и отсутствие «лишних» символов разделителя внутри элементов.
Для отладки выводите массив в журнал или сообщение целиком — например, склейте его через СтрСоединить(Массив, "|") с заведомо редким разделителем, чтобы увидеть границы элементов и скрытые пробелы.
Как проверить результат
Совпадает с ожидаемым числом частей
Меньше ожидаемого — в данных нет разделителя или строка пустая
Нет ведущих/хвостовых пробелов, данные на своих местах
Пробелы по краям или смещённые значения — неверный разделитель
Присутствуют только там, где это предусмотрено структурой
Неожиданные пустые строки — двойные разделители в исходных данных
Часто задаваемые вопросы
Как разделить строку посимвольно, чтобы получить каждый символ отдельно?
Передайте в СтрРазделить пустую строку в качестве разделителя: СтрРазделить("АБВ", "") вернёт массив ["А", "Б", "В"]. Альтернатива — цикл по длине строки с функцией Сред(Строка, Номер, 1).
Работает ли СтрРазделить в обычных формах и старых конфигурациях?
Функция появилась в платформе 8.3.6 и доступна везде, где работает эта версия, включая обычное приложение. Если платформа старше, используйте цикл с Найти() для поиска позиции разделителя и вырезанием подстрок через Лев() и Сред().
Как разделить строку только по первому вхождению разделителя?
СтрРазделить делит по всем вхождениям. Для разделения только по первому используйте Найти(Строка, Разделитель) для поиска позиции, затем Лев() и Сред() для получения двух частей.
Чем разделить строку, если разделитель — табуляция?
Передайте символ табуляции как разделитель: СтрРазделить(Строка, Символы.Таб). Это типичный случай при разборе данных, скопированных из Excel или выгруженных в TSV-формате.
Как убрать пробелы вокруг каждого элемента после разделения?
Пройдите по массиву циклом и примените СокрЛП() к каждому элементу: Для Каждого Элемент Из Массив Цикл Элемент = СокрЛП(Элемент); КонецЦикла. Либо включайте пробел в сам разделитель, если он там гарантированно присутствует.
Можно ли разделить строку регулярным выражением в 1С?
Встроенных регулярных выражений во встроенном языке нет. Для сложных шаблонов пишут собственный посимвольный разбор или подключают внешние компоненты. В большинстве прикладных задач достаточно комбинации СтрЗаменить и СтрРазделить.
Что важно запомнить
Основной инструмент — СтрРазделить(Строка, Разделитель, ВключатьПустые), возвращающий массив. Для многострочного текста используйте СтрПолучитьСтроку, для нескольких разделителей — предварительную замену через СтрЗаменить, для склейки обратно — СтрСоединить. Всегда проверяйте количество элементов массива перед обращением по индексу.