Разработка и Конфигурация · 8 мин
Как в 1С добавить символ в строку
Как добавить символ в строку в 1С: конкатенация, СтрШаблон, ПодСтрока, Лев и Прав. Примеры кода, частые ошибки и проверка результата.
В языке 1С строки являются неизменяемыми: нельзя взять существующую строку и «вставить» в неё символ на месте. Любое добавление символа означает создание новой строки на основе старой. Поэтому все способы сводятся к объединению частей строки с нужным символом — в начало, в конец или в середину.
Выбор способа зависит от задачи: добавить символ в конец проще всего оператором конкатенации «+», вставить в середину удобно через функции Лев(), Прав() и Сред(), а для сложных шаблонов с несколькими подстановками лучше подходит СтрШаблон(). Ниже разобраны все варианты с готовыми фрагментами кода.
Особенность строк в 1С: почему нельзя «просто вставить»
Встроенный язык 1С не имеет методов вида «ВставитьСимвол» или «Insert». Переменная строкового типа после присваивания хранит фиксированное значение, и любая операция над ней возвращает новую строку. Это важно понимать, чтобы не искать в синтакс-помощнике несуществующие функции.
Практическое следствие: если нужно «изменить» строку, результат всегда присваивают обратно в ту же переменную или в новую. Например, Строка = Строка + ";" — корректный приём, хотя формально создаётся новое значение.
Вторая особенность — нумерация символов в 1С начинается с 1, а не с 0, как во многих других языках. Это критично при использовании Сред(), Лев() и Прав(): ошибка на единицу даёт сдвиг результата.
Добавление символа в конец или начало строки
Самая частая задача — дописать символ в конец: разделитель, точку, единицу измерения. Используется оператор конкатенации «+»:
ИмяФайла = "Отчет" + ".xlsx";
ПутьКаталога = ПутьКаталога + "\";
Добавление в начало работает так же, только порядок операндов меняется: символ ставится первым. Типичный пример — дополнение номера ведущим нулём:
НомерСтрокой = "7";
НомерСтрокой = "0" + НомерСтрокой; // "07"
Если нужно дополнить строку символами до фиксированной длины (например, код до 8 знаков нулями слева), удобен цикл с проверкой СтрДлина():
Код = "123";
Пока СтрДлина(Код) < 8 Цикл
Код = "0" + Код;
КонецЦикла; // "00000123"
- 1Определите целевую длину строки и символ-заполнитель
- 2Проверьте текущую длину через СтрДлина()
- 3В цикле Пока добавляйте символ слева или справа
- 4Проверьте результат: длина должна равняться целевой
Вставка символа в середину строки
Для вставки в середину строку разбивают на две части и склеивают с новым символом между ними. Основной инструмент — функция Сред(Строка, НачальнаяПозиция, Длина):
Строка = "АБВГДЕ";
Позиция = 3; // вставляем после 3-го символа
Результат = Сред(Строка, 1, Позиция) + "-" + Сред(Строка, Позиция + 1);
// "АБВ-ГДЕ"
Альтернатива — связка Лев() и Прав(). Она нагляднее, когда позиция вставки отсчитывается от края строки:
Строка = "12345678";
Результат = Лев(Строка, 4) + "." + Прав(Строка, 4);
// "1234.5678"
Вставка после найденного подстроки
Если позиция вставки неизвестна заранее, её находят через СтрНайти(). Например, добавить символ после первого пробела:
Строка = "Иванов Иван";
Поз = СтрНайти(Строка, " ");
Если Поз > 0 Тогда
Результат = Лев(Строка, Поз) + "-" + Сред(Строка, Поз + 1);
КонецЕсли;
Обязательно проверяйте, что СтрНайти() вернула значение больше нуля: если подстрока не найдена, функция возвращает 0, и без проверки результат будет искажён.
Строка = "АБВГДЕ";
Позиция = 3;
Результат = Сред(Строка, 1, Позиция) + "-" + Сред(Строка, Позиция + 1);
// Результат: "АБВ-ГДЕ"Формирование строки через СтрШаблон
Когда символы добавляются вместе с несколькими значениями — например, при сборке ФИО, адреса или сообщения — перечисление через «+» становится громоздким и порождает ошибки с пропущенными пробелами. Функция СтрШаблон() решает это:
Результат = СтрШаблон("%1, %2, стр. %3", Город, Улица, НомерДома);
// "Москва, Ленина, стр. 5"
В шаблоне символы-разделители (запятые, двоеточия, пробелы) видны прямо в тексте, поэтому строку легко читать и править. Параметры подставляются по номерам %1, %2 и так далее, максимум — %9.
Для многострочных текстов и подстановки большого числа значений есть также СтрСоединить(), которая склеивает массив строк через заданный разделитель — удобно, когда нужно добавить один и тот же символ между элементами:
Массив = Новый Массив;
Массив.Добавить("Яблоко");
Массив.Добавить("Груша");
Результат = СтрСоединить(Массив, "; ");
// "Яблоко; Груша"
Сравнение способов
Простое добавление в начало/конец и вставка через Сред(). Минус — плохо читается при многих частях.
Шаблоны с несколькими подстановками и разделителями. Ограничение — до 9 параметров.
Склейка массива строк одним разделителем. Не подходит для вставки в произвольную позицию.
Добавление специальных символов: кавычки, перенос строки
Кавычка внутри строкового литерала 1С записывается удвоением: чтобы добавить кавычку в строку, её пишут дважды. Например, обернуть значение в кавычки:
Значение = "Тест";
Результат = """" + Значение + """"; // "Тест" в кавычках
Перенос строки, табуляцию и другие управляющие символы добавляют через объект Символы: Символы.ПС (перевод строки), Символы.Таб, Символы.ВК. Это стандартный способ для формирования многострочных сообщений и файлов:
Текст = "Первая строка" + Символы.ПС + "Вторая строка";
Произвольный символ по коду Unicode добавляется функцией Символ(Код). Например, Символ(169) вернёт знак копирайта. Это полезно, когда символ нельзя ввести с клавиатуры напрямую.
Проверка результата и отладка
После добавления символа результат проверяют через Сообщить() или вывод в поле. При отладке удобно смотреть длину строки до и после операции: длина должна увеличиться ровно на число добавленных символов.
Если результат выглядит «пустым», проверьте, не добавили ли вы перенос строки или табуляцию — эти символы не видны в коротком выводе. Функция СтрДлина() поможет убедиться, что символ реально присутствует.
Как проверить результат
Увеличилась ровно на число добавленных символов
Длина не изменилась или изменилась больше ожидаемого
Символ стоит в ожидаемом месте
Сдвиг на один символ — ошибка в позиции Сред()/Лев()
Строка читается корректно
Лишние кавычки или обрыв строки — ошибка экранирования
Частые вопросы
Можно ли заменить символ в строке по позиции?
Напрямую — нет, строки неизменяемы. Соберите новую строку: Лев(Строка, Поз-1) + НовыйСимвол + Сред(Строка, Поз+1). Для замены по значению удобнее СтрЗаменить().
Как добавить перенос строки в текст сообщения?
Используйте Символы.ПС между частями текста: "Строка1" + Символы.ПС + "Строка2". Для Windows-форматов файлов иногда требуется комбинация Символы.ВК + Символы.ПС.
Почему при сложении строки с числом возникает ошибка?
1С не выполняет неявное преобразование числа к строке при конкатенации в ряде контекстов. Приведите значение явно: Строка(Число) или Формат(Число, "ЧГ=") для числа без группировки разрядов.
Как вставить символ в каждую N-ю позицию строки?
Пройдите строку циклом с шагом, собирая результат: добавляйте очередной фрагмент через Сред() и вставляйте разделитель после каждой группы, кроме последней.
Чем СтрШаблон лучше конкатенации?
Шаблон читается целиком, разделители видны в тексте, а значения подставляются по номерам. При трёх и более частях это снижает риск пропустить пробел или запятую.
Что важно запомнить
Строки в 1С неизменяемы: символ добавляют созданием новой строки. В конец и начало — оператором «+», в середину — через Сред(), Лев() и Прав() с учётом нумерации с 1, для шаблонов — СтрШаблон(), для склейки массива — СтрСоединить(). Кавычки удваиваются, управляющие символы берутся из объекта Символы.