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

В этой статье мы детально рассмотрим встроенные функции, которые позволяют получить часть строки в . Мы разберем классические методы, специфические особенности типов данных и современные подходы к анализу текстовой информации, чтобы вы могли выбрать наиболее оптимальный вариант для вашего кейса.

Понимание того, как эффективно работать с текстом, позволяет не только сократить объем кода, но и существенно повысить производительность ваших конфигураций. Давайте погрузимся в синтаксис и нюансы использования этих функций.

Базовые функции для работы с текстом

Фундаментом обработки строк в языке служат три классические функции: Лев, Прав и Сред. Эти инструменты встроены непосредственно в ядро платформы и являются наиболее производительными способами получения фрагментов текста. Использование именно этих функций предпочтительно в тех случаях, когда вам известна позиция начала среза или необходимая длина результата.

Функция Лев принимает исходную строку и количество символов, которые необходимо отсчитать от начала. Если указанное число превышает длину строки, функция вернет исходную строку целиком, не вызывая ошибок. Это делает её безопасной для использования в циклах обработки больших массивов данных.

Аналогично работает функция Прав, которая отсчитывает символы от конца строки. Она незаменима, когда нужно извлечь расширение файла, последние цифры документа или суффикс. Однако стоит помнить, что нумерация позиций здесь неявная — вы просто указываете "хвост" нужной длины.

  • 📝 Функция Лев(Строка, Количество) возвращает первые символы строки.
  • 📝 Функция Прав(Строка, Количество) возвращает последние символы строки.
  • 📝 Функция Сред(Строка, Начало, Длина) позволяет вырезать фрагмент из середины.
💡

Используйте функцию СтрДлина() перед вызовом Лев или Прав, если логика вашего алгоритма зависит от того, достаточно ли длинна исходная строка.

Третий элемент этой триады — функция Сред. Она требует указания начальной позиции (с единицы) и, опционально, длины извлекаемого фрагмента. Если длина не указана, функция вернет всё от указанной позиции до конца строки. Это универсальный инструмент, который может заменить две предыдущие функции, хотя и требует чуть больше вычислительных ресурсов на анализ аргументов.

Поиск подстроки и динамическое извлечение

Часто бывает так, что позиция нужного фрагмента неизвестна заранее. Например, вам нужно получить код контрагента, который всегда находится в скобках, или извлечь доменное имя из адреса электронной почты. В таких ситуациях статических функций недостаточно, и на помощь приходят методы поиска.

Ключевым инструментом здесь является функция Найти. Она возвращает позицию первого вхождения искомой подстроки. Если подстрока не найдена, функция вернет 0. Получив эту позицию, вы можете скомбинировать её с функцией Сред для динамического извлечения данных. Это стандартный паттерн программирования в .

Для более сложных сценариев, когда нужно найти последнее вхождение символа (например, последний слэш в пути к файлу), используется функция НайтиН. Она работает аналогично Найти, но сканирует строку справа налево. Это критически важно при разборе путей к файлам или составных артикулов.

📊 Какой метод поиска вы используете чаще всего?
Найти()
НайтиН()
Регулярные выражения
Встроенные методы объекта Строка

Рассмотрим пример получения имени файла из полного пути. Сначала мы находим позицию последнего разделителя пути, а затем берем всё, что идет после него. Такой подход гарантирует корректную работу независимо от глубины вложенности папок.

ПолныйПуть = "C:\Документы\Отчеты\Реализация_2026.txt";

ПозРазделителя = НайтиН(ПолныйПуть, "\");

ИмяФайла = Сред(ПолныйПуть, ПозРазделителя + 1);

// Результат: Реализация_2026.txt

Важно учитывать, что функция Найти чувствительна к регистру. Если вы ищете подстроку "1с" в строке "1С:Предприятие", результат будет 0. Для игнорирования регистра необходимо предварительно привести строку к единому виду с помощью функций СтрЗаменить или методов объекта.

Методы объекта типа Строка

Помимо глобальных функций, в платформе существует объектная модель работы со строками. Объект типа Строка предоставляет набор методов, которые могут быть более удобными в определенных ситуациях, особенно при цепочечных вызовах или работе с новыми версиями платформы.

Одним из самых полезных методов является НачинаетсяС и ЗаканчиваетсяНа. Хотя они не возвращают часть строки напрямую, они часто используются в условиях перед её извлечением. Например, прежде чем отрезать префикс "REF-", стоит убедиться, что строка действительно с него начинается.

Метод ПолучитьПодстроку является объектным аналогом функции Сред. Синтаксически он может показаться более громоздким, но в некоторых сценариях чтения кода он выглядит более естественно, особенно если вы работаете с переменными, уже приведенными к типу Строка.

Метод / Функция Тип доступа Описание
Лев() Глобальная функция Быстрое получение начала строки
Сред() Глобальная функция Универсальное извлечение фрагмента
ПолучитьПодстроку() Метод объекта Аналог Сред, вызывается у объекта
Найти() Глобальная функция Поиск позиции подстроки

⚠️ Внимание: При использовании методов объекта убедитесь, что переменная действительно имеет тип Строка. Попытка вызвать метод у значения типа Неопределено приведет к ошибке выполнения, тогда как глобальные функции часто более лояльны к типам.

Использование объектных методов открывает двери к более сложным операциям, таким как разбиение строки на массив с помощью метода Разделить. Это позволяет не просто получить часть строки, а сразу декомпозировать сложные составные значения, разделенные запятыми или другими символами.

Использование регулярных выражений

Для задач, где структура текста сложна и непредсказуема, классических функций может быть недостаточно. Здесь на сцену выходят регулярные выражения. В 1С они реализованы через объект РегулярноеВыражение, который позволяет описывать шаблоны поиска с высокой точностью.

Регулярные выражения незаменимы, когда нужно извлечь данные, находящиеся между определенными символами, но количество таких пар в строке неизвестно. Например, извлечение всех тегов из HTML-фрагмента или всех номеров телефонов из комментария менеджера.

Пример сложного паттерна

Если вам нужно извлечь текст из круглых скобок, но внутри могут быть другие скобки, простое использование Найти не сработает. Регулярное выражение \(([^()]+)\) позволит найти содержимое самых внутренних скобок.

Для использования этого инструмента необходимо создать объект, задать ему шаблон и вызвать метод Найти. Результатом будет объект СовпадениеРегулярногоВыражения, из которого можно получить найденную подстроку или группы захвата.

Шаблон = "\d{2}\.\d{2}\.\d{4}"; // Поиск даты в формате ДД.ММ.ГГГГ

РегВыр = Новый РегулярноеВыражение(Шаблон);

Совпадение = РегВыр.Найти(ИсходнаяСтрока);

Если Совпадение.Успешно() Тогда

ДатаСтрока = Совпадение.Группа(0).Значение;

КонецЕсли;

Несмотря на мощь, регулярные выражения требуют больше ресурсов процессора. Не стоит использовать их для простой обрезки первых трех символов — в таких случаях Лев будет работать в разы быстрее. Применяйте Regex только там, где логика поиска действительно сложна.

Обработка спецсимволов и кодировок

При работе с внешними данными, полученными из файлов или веб-сервисов, разработчики часто сталкиваются с проблемой некорректного отображения символов. Получение части строки может исказить данные, если не учитывать кодировку и специальные символы.

Особое внимание следует уделять символам переноса строки (Символы.ПС) и табуляции. При выгрузке в CSV или текстовые файлы эти символы могут разбить одну логическую запись на несколько строк. Перед извлечением данных рекомендуется очистить строку от управляющих символов.

  • 🧹 Используйте СтрЗаменить для удаления лишних пробелов в начале и конце.
  • 🧹 Заменяйте символы переноса строки на пробел, если предполагается однострочный вывод.
  • 🧹 Проверяйте наличие BOM-символов в начале импортируемых файлов.

Также стоит помнить о длине строки в базе данных. В 1С тип Строка может иметь ограничение по длине (например, 50, 100, 250 символов). Если вы формируете часть строки для записи в регистр сведений или справочник, убедитесь, что результат не обрежется автоматически при сохранении.

💡

Всегда проверяйте длину результирующей строки перед записью в базу данных, чтобы избежать молчаливой потери информации из-за ограничений поля.

Оптимизация и производительность

В высоконагруженных системах, где обработка строк происходит в циклах по тысячам документов, выбор метода извлечения подстроки влияет на общее время выполнения. Разница между вызовом глобальной функции и созданием временных объектов может стать ощутимой.

Наиболее производительным вариантом остается использование встроенных функций Лев, Прав и Сред. Они написаны на уровне ядра платформы и не требуют накладных расходов на создание объектов. Избегайте создания новых объектов РегулярноеВыражение внутри циклов — выносите их инициализацию за пределы цикла обработки.

⚠️ Внимание: Интерфейс и возможности платформы 1С могут обновляться. Всегда сверяйте актуальность синтаксиса методов в официальной справке по вашей версии платформы, особенно если вы используете новые функции работы с Юникодом.

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

☑️ Оптимизация работы со строками

Выполнено: 0 / 4

Часто задаваемые вопросы (FAQ)

Как получить часть строки до первого пробела?

Для этого используйте комбинацию функций Найти и Лев. Сначала найдите позицию пробела: Поз = Найти(Строка, " "). Если пробел найден (Поз > 0), то результат будет Лев(Строка, Поз - 1). Если пробела нет, верните исходную строку.

Можно ли использовать отрицательные индексы в функции Сред?

Нет, в стандартных функциях 1С индексация начинается с 1, и отрицательные значения не поддерживаются. Для отсчета от конца строки используйте функцию Прав или вычисляйте позицию как СтрДлина(Строка) - N + 1.

Что вернет функция, если запрошенная длина больше реальной?

Функции Лев, Прав и Сред безопасны в этом отношении. Они вернут доступную часть строки до её конца, не вызывая ошибок выполнения. Это упрощает обработку данных переменной длины.

Как извлечь текст между двумя конкретными символами?

Найдите позицию первого символа через Найти, затем найдите позицию второго символа, начиная поиск с позиции первого + 1. Затем используйте Сред, указав начало после первого символа и длину, равную разнице позиций минус один.