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

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

1С: как разбить строку с разделителями

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

Задача разбить строку по разделителю в 1С возникает постоянно: разбор ФИО из одного поля, обработка CSV-файлов, парсинг ответов веб-сервисов, разделение артикула на составляющие. Во встроенном языке для этого есть штатные функции, и в большинстве случаев писать собственный цикл посимвольного разбора не нужно.

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

Функция СтрРазделить: базовый синтаксис

Функция доступна в платформе 1С:Предприятие начиная с версии 8.3.6 и работает как в тонком, так и в толстом и веб-клиенте, а также на сервере. Синтаксис: СтрРазделить(Строка, Разделитель, ВключатьПустые). Первый параметр — исходная строка, второй — строка-разделитель, третий — необязательный булевский признак, включать ли в результат пустые подстроки.

Разделитель может состоять из нескольких символов — это удобно при разборе форматов вида «значение1 -> значение2». Если разделитель не найден, функция вернёт массив из одного элемента — исходной строки целиком. Это важно учитывать: отсутствие разделителя не вызывает ошибку, а даёт массив с одним элементом.

СтрокаДанных = "Иванов;Иван;Иванович";

Части = СтрРазделить(СтрокаДанных, ";");

// Части[0] = "Иванов", Части[1] = "Иван", Части[2] = "Иванович"

Если Части.Количество() >= 3 Тогда

Фамилия = Части[0];

Имя = Части[1];

Отчество = Части[2];

КонецЕсли;

1c
Массив = СтрРазделить("яблоко,груша,апельсин", ",");
// Массив[0] = "яблоко", Массив[1] = "груша", Массив[2] = "апельсин"

Работа с пустыми элементами и пробелами

Третий параметр функции определяет судьбу пустых подстрок. При значении Истина (по умолчанию) строка «а;;б» разобьётся на три элемента, средний из которых — пустая строка. При Ложь пустые элементы отбрасываются, и результат будет содержать только «а» и «б». Выбор зависит от формата данных: в CSV с фиксированным числом колонок пустые значения обычно нужно сохранять, иначе сместятся позиции полей.

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

Разбор многострочного текста: СтрЧислоСтрок и СтрПолучитьСтроку

Когда разделителем служит перевод строки, удобнее классическая пара функций. СтрЧислоСтрок(Текст) возвращает количество строк, СтрПолучитьСтроку(Текст, НомерСтроки) — конкретную строку по номеру, начиная с единицы. Этот способ работает во всех версиях платформы, включая самые старые.

ВсегоСтрок = СтрЧислоСтрок(МногострочныйТекст);

Для Номер = 1 По ВсегоСтрок Цикл

ТекущаяСтрока = СтрПолучитьСтроку(МногострочныйТекст, Номер);

// обработка строки

КонецЦикла;

Альтернатива — разбить тот же текст через СтрРазделить(Текст, Символы.ПС). Учтите разницу между Windows- и Linux-переводами строк: в Windows пара CRLF, в Linux — одиночный LF. Если файл пришёл из внешней системы, надёжнее сначала заменить Символы.ВК + Символы.ПС на Символы.ПС через СтрЗаменить(), и только потом делить.

Разбор CSV и сложных форматов

Простой CSV без кавычек разбирается прямым вызовом СтрРазделить(Строка, ";") или с запятой — в зависимости от региональных настроек источника. Проблема возникает, когда разделитель встречается внутри значений, заключённых в кавычки: «Иванов; «ООО «Ромашка»; 1000». Штатная функция такой случай не обрабатывает — она разрежет строку и внутри кавычек.

Для корректного разбора CSV с кавычками потребуется собственный парсер: идти по строке посимвольно, отслеживать состояние «внутри кавычек» и разделять только вне их. Либо использовать объект ЧтениеТекста с построчным чтением и отдельной процедурой разбора. Для Excel-файлов надёжнее вообще не разбирать строки, а читать данные через табличный документ — Прочитать() в ТабличныйДокумент и обход ячеек.

Маршрут решения

Как выбрать способ разбора

Простая строка с однотипным разделителемИспользуйте СтрРазделить с проверкой количества элементов
Многострочный текст или старая платформаПрименяйте СтрЧислоСтрок и СтрПолучитьСтроку
CSV с кавычками и разделителями внутри значенийПишите посимвольный парсер или читайте файл как табличный документ
Нужно разбить по нескольким разным разделителямСначала замените все разделители на один через СтрЗаменить, затем СтрРазделить

Несколько разных разделителей и обратная сборка

Если данные разделены разными символами — например, «2026.01.15 10:30» содержит точки, пробел и двоеточие — приведите их к единому разделителю через цепочку СтрЗаменить(), а затем вызовите СтрРазделить(). Это проще и читабельнее, чем многопроходный разбор.

Стр = "2026.01.15 10:30";

Стр = СтрЗаменить(Стр, ".", "|");

Стр = СтрЗаменить(Стр, " ", "|");

Стр = СтрЗаменить(Стр, ":", "|");

Части = СтрРазделить(Стр, "|"); // год, месяц, день, часы, минуты

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

Проверка результата и типичные ошибки

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

Типичные ошибки
01
Обращение по индексу без проверки Количество() — ошибка «индекс за границами массива»
02
Игнорирование пробелов после разделителя — сравнения и поиск в базе не срабатывают
03
Разбор CSV с кавычками простым СтрРазделить — разрыв значений внутри кавычек
04
Смешение CRLF и LF при разборе файлов — лишние пустые элементы или символы ВК в конце строк
05
Отбрасывание пустых элементов в фиксированном формате — смещение позиций колонок
Контрольные точки

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

Количество элементов массива
Норма

Совпадает с числом полей формата

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

Меньше или больше ожидаемого — разделитель не найден или лишний

Значения элементов
Норма

Нет ведущих и хвостовых пробелов после СокрЛП

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

Пробелы, остатки кавычек, символы ВК

Преобразование типов
Норма

Числа и даты конвертируются без исключений

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

Ошибка преобразования — в поле попал фрагмент соседнего значения

Итог

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

Основной инструмент — СтрРазделить с проверкой количества элементов. Пробелы убирайте через СокрЛП, разнородные разделители приводите к одному через СтрЗаменить. CSV с кавычками и старые платформы требуют отдельных подходов.

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

Чем разбить строку в 1С 8.2 или на платформе ниже 8.3.6?

Функции СтрРазделить там нет. Используйте СтрЧислоСтрок и СтрПолучитьСтроку, предварительно заменив разделитель на Символы.ПС через СтрЗаменить, либо напишите цикл с СтрНайти и Сред, отрезая подстроки по позиции разделителя.

Как разбить строку по нескольким разделителям сразу?

Штатной функции с массивом разделителей нет. Приведите все разделители к одному символу цепочкой СтрЗаменить, затем вызовите СтрРазделить один раз.

Почему после разбора в элементах появились лишние символы?

Чаще всего это пробелы после разделителя или символ возврата каретки (ВК) в конце строк при разборе файлов из Windows. Примените СокрЛП к каждому элементу и при необходимости удалите Символы.ВК через СтрЗаменить.

Как собрать массив обратно в строку с разделителем?

Используйте СтрСоединить(Массив, Разделитель). На старых платформах собирайте строку в цикле, добавляя разделитель между элементами.

СтрРазделить вернул массив из одного элемента — в чём причина?

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

Как безопасно обработать строки, где число полей может отличаться?

Проверяйте Количество() перед обращением по индексу, обрабатывайте каждую строку в Попытка/Исключение и записывайте некорректные строки в журнал регистрации вместо прерывания всей обработки.