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

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

Как в 1С добавить символ в строку

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

В языке 1С строки являются неизменяемыми: нельзя взять существующую строку и «вставить» в неё символ на месте. Любое добавление символа означает создание новой строки на основе старой. Поэтому все способы сводятся к объединению частей строки с нужным символом — в начало, в конец или в середину.

Выбор способа зависит от задачи: добавить символ в конец проще всего оператором конкатенации «+», вставить в середину удобно через функции Лев(), Прав() и Сред(), а для сложных шаблонов с несколькими подстановками лучше подходит СтрШаблон(). Ниже разобраны все варианты с готовыми фрагментами кода.

Особенность строк в 1С: почему нельзя «просто вставить»

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

Практическое следствие: если нужно «изменить» строку, результат всегда присваивают обратно в ту же переменную или в новую. Например, Строка = Строка + ";" — корректный приём, хотя формально создаётся новое значение.

Вторая особенность — нумерация символов в 1С начинается с 1, а не с 0, как во многих других языках. Это критично при использовании Сред(), Лев() и Прав(): ошибка на единицу даёт сдвиг результата.

Добавление символа в конец или начало строки

Самая частая задача — дописать символ в конец: разделитель, точку, единицу измерения. Используется оператор конкатенации «+»:

ИмяФайла = "Отчет" + ".xlsx";

ПутьКаталога = ПутьКаталога + "\";

Добавление в начало работает так же, только порядок операндов меняется: символ ставится первым. Типичный пример — дополнение номера ведущим нулём:

НомерСтрокой = "7";

НомерСтрокой = "0" + НомерСтрокой; // "07"

Если нужно дополнить строку символами до фиксированной длины (например, код до 8 знаков нулями слева), удобен цикл с проверкой СтрДлина():

Код = "123";

Пока СтрДлина(Код) < 8 Цикл

Код = "0" + Код;

КонецЦикла; // "00000123"

Дополнение строки до нужной длины
  1. 1
    Определите целевую длину строки и символ-заполнитель
  2. 2
    Проверьте текущую длину через СтрДлина()
  3. 3
    В цикле Пока добавляйте символ слева или справа
  4. 4
    Проверьте результат: длина должна равняться целевой

Вставка символа в середину строки

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

Строка = "АБВГДЕ";

Позиция = 3; // вставляем после 3-го символа

Результат = Сред(Строка, 1, Позиция) + "-" + Сред(Строка, Позиция + 1);

// "АБВ-ГДЕ"

Альтернатива — связка Лев() и Прав(). Она нагляднее, когда позиция вставки отсчитывается от края строки:

Строка = "12345678";

Результат = Лев(Строка, 4) + "." + Прав(Строка, 4);

// "1234.5678"

Вставка после найденного подстроки

Если позиция вставки неизвестна заранее, её находят через СтрНайти(). Например, добавить символ после первого пробела:

Строка = "Иванов Иван";

Поз = СтрНайти(Строка, " ");

Если Поз > 0 Тогда

Результат = Лев(Строка, Поз) + "-" + Сред(Строка, Поз + 1);

КонецЕсли;

Обязательно проверяйте, что СтрНайти() вернула значение больше нуля: если подстрока не найдена, функция возвращает 0, и без проверки результат будет искажён.

bsl
Строка = "АБВГДЕ";
Позиция = 3;
Результат = Сред(Строка, 1, Позиция) + "-" + Сред(Строка, Позиция + 1);
// Результат: "АБВ-ГДЕ"

Формирование строки через СтрШаблон

Когда символы добавляются вместе с несколькими значениями — например, при сборке ФИО, адреса или сообщения — перечисление через «+» становится громоздким и порождает ошибки с пропущенными пробелами. Функция СтрШаблон() решает это:

Результат = СтрШаблон("%1, %2, стр. %3", Город, Улица, НомерДома);

// "Москва, Ленина, стр. 5"

В шаблоне символы-разделители (запятые, двоеточия, пробелы) видны прямо в тексте, поэтому строку легко читать и править. Параметры подставляются по номерам %1, %2 и так далее, максимум — %9.

Для многострочных текстов и подстановки большого числа значений есть также СтрСоединить(), которая склеивает массив строк через заданный разделитель — удобно, когда нужно добавить один и тот же символ между элементами:

Массив = Новый Массив;

Массив.Добавить("Яблоко");

Массив.Добавить("Груша");

Результат = СтрСоединить(Массив, "; ");

// "Яблоко; Груша"

Сравнение способов

Оператор «+»

Простое добавление в начало/конец и вставка через Сред(). Минус — плохо читается при многих частях.

СтрШаблон()

Шаблоны с несколькими подстановками и разделителями. Ограничение — до 9 параметров.

СтрСоединить()

Склейка массива строк одним разделителем. Не подходит для вставки в произвольную позицию.

Добавление специальных символов: кавычки, перенос строки

Кавычка внутри строкового литерала 1С записывается удвоением: чтобы добавить кавычку в строку, её пишут дважды. Например, обернуть значение в кавычки:

Значение = "Тест";

Результат = """" + Значение + """"; // "Тест" в кавычках

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

Текст = "Первая строка" + Символы.ПС + "Вторая строка";

Произвольный символ по коду Unicode добавляется функцией Символ(Код). Например, Символ(169) вернёт знак копирайта. Это полезно, когда символ нельзя ввести с клавиатуры напрямую.

Типичные ошибки
01
Попытка вставить кавычку одним знаком — строковый литерал обрывается, возникает синтаксическая ошибка. Нужно удвоение кавычки.
02
Использование позиции 0 в Сред() или Лев() — нумерация в 1С начинается с 1.
03
СтрНайти() без проверки результата: если подстрока не найдена, функция вернёт 0 и вставка исказит строку.
04
Конкатенация строки с числом без преобразования — в тонком клиенте это вызовет ошибку типов; число нужно привести через Строка() или Формат().

Проверка результата и отладка

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

Если результат выглядит «пустым», проверьте, не добавили ли вы перенос строки или табуляцию — эти символы не видны в коротком выводе. Функция СтрДлина() поможет убедиться, что символ реально присутствует.

Контрольные точки

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

Длина строки
Норма

Увеличилась ровно на число добавленных символов

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

Длина не изменилась или изменилась больше ожидаемого

Позиция символа
Норма

Символ стоит в ожидаемом месте

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

Сдвиг на один символ — ошибка в позиции Сред()/Лев()

Вывод в сообщении
Норма

Строка читается корректно

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

Лишние кавычки или обрыв строки — ошибка экранирования

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

Можно ли заменить символ в строке по позиции?

Напрямую — нет, строки неизменяемы. Соберите новую строку: Лев(Строка, Поз-1) + НовыйСимвол + Сред(Строка, Поз+1). Для замены по значению удобнее СтрЗаменить().

Как добавить перенос строки в текст сообщения?

Используйте Символы.ПС между частями текста: "Строка1" + Символы.ПС + "Строка2". Для Windows-форматов файлов иногда требуется комбинация Символы.ВК + Символы.ПС.

Почему при сложении строки с числом возникает ошибка?

1С не выполняет неявное преобразование числа к строке при конкатенации в ряде контекстов. Приведите значение явно: Строка(Число) или Формат(Число, "ЧГ=") для числа без группировки разрядов.

Как вставить символ в каждую N-ю позицию строки?

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

Чем СтрШаблон лучше конкатенации?

Шаблон читается целиком, разделители видны в тексте, а значения подставляются по номерам. При трёх и более частях это снижает риск пропустить пробел или запятую.

Итог

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

Строки в 1С неизменяемы: символ добавляют созданием новой строки. В конец и начало — оператором «+», в середину — через Сред(), Лев() и Прав() с учётом нумерации с 1, для шаблонов — СтрШаблон(), для склейки массива — СтрСоединить(). Кавычки удваиваются, управляющие символы берутся из объекта Символы.