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