Строковые функции 1С: справочник по работе со строками

Дата: 06.10.2026 16:54:16
Строки
Встроенный язык
Программирование 1С
БСП
Примеры кода
Комментарий:
0
Платформа:
8.3
Конфигурация:
Любая
Формы:
Любые

Строка в 1С встречается почти в каждой доработке: наименования и артикулы, номера документов, данные обмена. Здесь собраны все функции работы со строками встроенного языка 8.3 — от СтрДлина() и Сред() до СтрШаблон() и СтрРазделить(), таблица замены устаревших функций и модуль БСП СтроковыеФункцииКлиентСервер. К каждому разделу — готовые функции для общего модуля. Строковые функции языка запросов разобраны в статье «Строка в запросе 1С».

Где встречаются функции со строками

  • загрузка из Excel и CSV: лишние и неразрывные пробелы, числа и даты строкой;
  • разбор наименования номенклатуры: артикул в скобках, сечение, марка;
  • имя файла из представления документа, текст письма, сообщение об ошибке;
  • обмен с сайтом и маркетплейсами: телефоны, коды, строки параметров;
  • проверки перед записью: ИНН из одних цифр, артикул без латиницы вместо кириллицы.

Описание каждой функции — в конфигураторе: меню «Справка → Синтакс-помощник», ветка «Глобальный контекст», раздел «Функции работы со значениями типа Строка». Устаревшая Найти() лежит в разделе «Прочие процедуры и функции» с пометкой «Функция является устаревшей».

Функции работы со строками 1С 8.3: полный список

Символы в строке нумеруются с единицы. Если не сказано иное, функция доступна на сервере, в тонком и веб-клиенте и во внешнем соединении. Версии — по синтакс-помощнику платформы 8.3.27.

ФункцияЧто делаетС версии
СтрДлина(Строка)число символов, включая пробелы8.0
СокрЛ(), СокрП(), СокрЛП()убирают пробелы и другие незначащие символы слева, справа или с обеих сторон8.0
ПустаяСтрока(Строка)Истина, если в строке нет значащих символов8.0
Лев(Строка, ЧислоСимволов), Прав(Строка, ЧислоСимволов)первые или последние символы строки8.0
Сред(Строка, НачальныйНомер, ЧислоСимволов)символы с указанной позиции; без третьего параметра — до конца строки8.0
ВРег(), НРег()верхний и нижний регистр8.0
ТРег()каждое слово с заглавной, остальные буквы строчные; в веб-клиенте меняет только латиницу8.1
СтрНайти(Строка, ПодстрокаПоиска, НаправлениеПоиска, НачальнаяПозиция, НомерВхождения)позиция подстроки или 0, с учётом регистра; поиск с конца и N-го вхождения8.3.6
СтрЧислоВхождений(Строка, ПодстрокаПоиска)сколько раз встречается подстрока8.0
СтрНачинаетсяС(), СтрЗаканчиваетсяНа()Истина, если строка начинается или заканчивается подстрокой; с учётом регистра8.3.6
СтрСравнить(Строка1, Строка2)−1, 0 или 1, без учёта регистра8.3.5
СтрЗаменить(Строка, ПодстрокаПоиска, ПодстрокаЗамены)заменяет все вхождения8.0
СтрРазделить(Строка, Разделитель, ВключатьПустые)массив частей; каждый символ второго параметра — отдельный разделитель8.3.6
СтрСоединить(Строки, Разделитель)склеивает массив строк8.3.6
СтрШаблон(Шаблон, Значение1, …, Значение10)подставляет значения вместо %1…%108.3.6
СтрЧислоСтрок(), СтрПолучитьСтроку(Строка, НомерСтроки)число строк многострочного текста и строка по номеру8.0
Символ(КодСимвола), КодСимвола(Строка, НомерСимвола)символ по коду Unicode и код символа8.0
Символы.ПС, ВК, Таб, НПП, ВТаб, ПФспецсимволы: перевод строки, возврат каретки, табуляция, неразрывный пробел8.0
Строка(), Формат(), НСтр()значение в строку, в строку по формату, текст на языке пользователя8.0

Специальные функции разобраны отдельно: СтрокаСЧислом() (8.3.10) — в статье про склонение числительных, ПолучитьСклоненияСтроки() (8.3.13) и ПолучитьСклоненияСтрокиПоЧислу() (8.3.14) — про склонение по падежам, СтрНайтиИВыделитьОформлением() (8.3.15) — о форматированной строке, регулярные выражения (8.3.23) — в статье о регулярных выражениях. Обе функции склонения по падежам и регулярные выражения доступны только на сервере, в толстом клиенте и во внешнем соединении.

Старая функция → новая: таблица замены

Функции 8.3.5–8.3.6 заменили приёмы, которые раньше писали вручную или брали из БСП. Старый код работает, новый короче.

БылоСталоПлатформа
Найти(Текст, "x")СтрНайти(Текст, "x")8.3.6
цикл с Найти() и Сред() для последнего или N-го вхожденияСтрНайти(Текст, "x", НаправлениеПоиска.СКонца), пятый параметр — номер вхождения8.3.6
Лев(Текст, СтрДлина(Префикс)) = ПрефиксСтрНачинаетсяС(Текст, Префикс)8.3.6
Прав(Текст, СтрДлина(Суффикс)) = СуффиксСтрЗаканчиваетсяНа(Текст, Суффикс)8.3.6
ВРег(А) = ВРег(Б)СтрСравнить(А, Б) = 08.3.5
СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Текст, ";")СтрРазделить(Текст, ";")8.3.6
Итог = Итог + ";" + Элемент в циклеСтрСоединить(Массив, ";")8.3.6
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, П1, П2)СтрШаблон(Шаблон, П1, П2)8.3.6
СтроковыеФункцииКлиентСервер.ЧислоЦифрамиПредметИсчисленияПрописью(), ФормаМножественногоЧисла()СтрокаСЧислом() или СтроковыеФункцииКлиентСервер.СтрокаСЧисломДляЛюбогоЯзыка()8.3.10
СтроковыеФункцииКлиентСервер.СтрокаЛатиницей(), ФорматированнаяСтрока()те же функции в СтроковыеФункции (сервер) и СтроковыеФункцииКлиентБСП 3.1
перебор символов через КодСимвола() для проверки формата ИНН или e-mailСтрПодобнаПоРегулярномуВыражению()8.3.23

По синтакс-помощнику СтрНайти(), СтрНачинаетсяС(), СтрЗаканчиваетсяНа() и СтрСоединить() требуют режима совместимости 8.3.6 и выше, СтрШаблон() — 8.3.5. Режим смотрят в конфигураторе: «Конфигурация → Открыть конфигурацию», свойства корня, поле «Режим совместимости». РазложитьСтрокуВМассивПодстрок() и ПодставитьПараметрыВСтроку() в БСП не устарели: первая по-прежнему нужна для разделителя из нескольких символов.

Все функции на одном примере

Процедура-шпаргалка: вызовы функций с результатом в комментарии справа.

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

	Текст = "  Кабель ВВГнг 3х2,5  ";

	// Длина, края, пустота
	Длина = СтрДлина(Текст);                        // 22: пробелы по краям тоже символы
	Текст = СокрЛП(Текст);                          // "Кабель ВВГнг 3х2,5"; СокрЛ и СокрП режут одну сторону
	Пусто = ПустаяСтрока("   ");                    // Истина: значащих символов нет

	// Подстроки: символы нумеруются с 1
	Слово = Лев(Текст, 6);                          // "Кабель"
	Сечение = Прав(Текст, 5);                       // "3х2,5"
	Марка = Сред(Текст, 8, 5);                      // "ВВГнг"
	Хвост = Сред(Текст, 8);                         // "ВВГнг 3х2,5" - без третьего параметра до конца

	// Регистр
	Верхний = ВРег(Текст);                          // "КАБЕЛЬ ВВГНГ 3Х2,5"
	Нижний = НРег(Текст);                           // "кабель ввгнг 3х2,5"
	ТитульныйРегистр = ТРег("кабель силовой");      // "Кабель Силовой"

	// Поиск: СтрНайти и оператор = учитывают регистр, СтрСравнить - нет
	Позиция = СтрНайти(Текст, "ВВГ");               // 8; не найдено - 0
	ПоследнийПробел = СтрНайти(Текст, " ", НаправлениеПоиска.СКонца); // 13
	ВтороеВхождение = СтрНайти("a;b;c", ";", , , 2); // 4
	Количество = СтрЧислоВхождений("a;b;c", ";");   // 2
	ЕстьНачало = СтрНачинаетсяС(Текст, "Кабель");   // Истина
	ЕстьКонец = СтрЗаканчиваетсяНа(Текст, "2,5");   // Истина
	Сравнение = СтрСравнить("кабель", "КАБЕЛЬ");    // 0 - равны без учета регистра
	РавныОператором = ("кабель" = "КАБЕЛЬ");        // Ложь

	// Замена, деление, сборка
	БезЗапятой = СтрЗаменить(Текст, ",", ".");      // "Кабель ВВГнг 3х2.5"
	Части = СтрРазделить("a;b;;c", ";", Ложь);      // "a", "b", "c" - пустые части отброшены
	Склеено = СтрСоединить(Части, ", ");            // "a, b, c"
	ТекстСообщения = СтрШаблон("Строка %1: нет товара %2", 15, Слово); // "Строка 15: нет товара Кабель"

	// Многострочный текст
	Многострочный = "первая" + Символы.ПС + "вторая";
	ЧислоСтрок = СтрЧислоСтрок(Многострочный);      // 2
	ВтораяСтрока = СтрПолучитьСтроку(Многострочный, 2); // "вторая"

	// Коды символов Unicode
	КодБуквы = КодСимвола("А");                     // 1040 - кириллическая А
	Буква = Символ(1040);                           // "А"
	ЭтоНПП = (Символ(160) = Символы.НПП);           // Истина - неразрывный пробел

КонецПроцедуры

Поиск и подстрока: СтрНайти, Лев, Сред

Три функции для общего модуля с флажками «Клиент» и «Сервер»: значение между маркерами (артикул в скобках, тег в тексте), часть после последнего разделителя (имя файла из пути или URL, расширение) и деление по разделителю из нескольких символов — СтрРазделить() так не умеет. Результат последней — массив строк.

// Общий модуль с флажками «Клиент» и «Сервер», например СтрокиКлиентСервер.

// Текст между маркерами: ТекстМеждуМаркерами("Кабель [АРТ-1025] 3х2,5", "[", "]") = "АРТ-1025".
// Если маркер не найден, возвращает пустую строку.
Функция ТекстМеждуМаркерами(Знач Текст, Знач МаркерНачала, Знач МаркерКонца) Экспорт

	ПозицияНачала = СтрНайти(Текст, МаркерНачала);
	Если ПозицияНачала = 0 Тогда
		Возврат "";
	КонецЕсли;

	НачалоЗначения = ПозицияНачала + СтрДлина(МаркерНачала);
	Если НачалоЗначения > СтрДлина(Текст) Тогда
		Возврат ""; // маркер в самом конце: с такой позиции СтрНайти вызовет ошибку
	КонецЕсли;

	ПозицияКонца = СтрНайти(Текст, МаркерКонца, НаправлениеПоиска.СНачала, НачалоЗначения);
	Если ПозицияКонца = 0 Тогда
		Возврат "";
	КонецЕсли;

	Возврат Сред(Текст, НачалоЗначения, ПозицияКонца - НачалоЗначения);

КонецФункции

// Часть после последнего разделителя: имя файла из пути или URL, расширение.
// ПоследняяЧасть("https://example.ru/upload/price.xml", "/") = "price.xml"
// ПоследняяЧасть("price.2025.xml", ".") = "xml"
Функция ПоследняяЧасть(Знач Текст, Знач Разделитель) Экспорт

	Если Текст = "" Или Разделитель = "" Тогда
		Возврат Текст;
	КонецЕсли;

	Позиция = СтрНайти(Текст, Разделитель, НаправлениеПоиска.СКонца);
	Если Позиция = 0 Тогда
		Возврат Текст;
	КонецЕсли;

	Возврат Сред(Текст, Позиция + СтрДлина(Разделитель));

КонецФункции

// Деление по разделителю из нескольких символов: " | ", "; ", "::".
// СтрРазделить так не умеет: у нее каждый символ второго параметра - отдельный разделитель.
// РазделитьПоПодстроке("a | b | c", " | ") = "a", "b", "c"
Функция РазделитьПоПодстроке(Знач Текст, Знач Разделитель) Экспорт

	Части = Новый Массив;
	ДлинаТекста = СтрДлина(Текст);
	ДлинаРазделителя = СтрДлина(Разделитель);
	Если ДлинаРазделителя = 0 Тогда
		Части.Добавить(Текст);
		Возврат Части;
	КонецЕсли;

	Начало = 1;
	Пока Начало <= ДлинаТекста Цикл
		Позиция = СтрНайти(Текст, Разделитель, НаправлениеПоиска.СНачала, Начало);
		Если Позиция = 0 Тогда
			Прервать;
		КонецЕсли;
		Части.Добавить(Сред(Текст, Начало, Позиция - Начало));
		Начало = Позиция + ДлинаРазделителя;
	КонецЦикла;
	Части.Добавить(Сред(Текст, Начало)); // хвост после последнего разделителя

	Возврат Части;

КонецФункции

Пробелы, регистр и сравнение строк

Данные из Excel и с сайтов приходят с двойными и неразрывными пробелами, табуляциями и переводами строк внутри, и перед сравнением их приводят к одному виду. Здесь же «с заглавной буквы» (ТРег() для этого не годится) и обрезка текста по границе слова.

// Приводит строку к виду для поиска и сравнения: табуляции, переводы строк
// и неразрывные пробелы - в обычный пробел, двойные пробелы - в один, края обрезаны.
Функция НормализоватьПробелы(Знач Текст) Экспорт

	Пробельные = Символы.НПП + Символы.Таб + Символы.ВК + Символы.ПС;
	Для Номер = 1 По СтрДлина(Пробельные) Цикл
		Текст = СтрЗаменить(Текст, Сред(Пробельные, Номер, 1), " ");
	КонецЦикла;

	Пока СтрНайти(Текст, "  ") > 0 Цикл
		Текст = СтрЗаменить(Текст, "  ", " ");
	КонецЦикла;

	Возврат СокрЛП(Текст);

КонецФункции

// Сравнение без учета регистра и лишних пробелов:
// СтрокиСовпадают("ООО  «Ромашка»", "ооо «ромашка» ") = Истина.
Функция СтрокиСовпадают(Знач Строка1, Знач Строка2) Экспорт

	Возврат СтрСравнить(НормализоватьПробелы(Строка1), НормализоватьПробелы(Строка2)) = 0;

КонецФункции

// Первая буква заглавная, остальные без изменений:
// СЗаглавнойБуквы("оплата по счету ООО") = "Оплата по счету ООО".
// ТРег не подходит: он делает заглавной первую букву каждого слова, а остальные - строчными.
Функция СЗаглавнойБуквы(Знач Текст) Экспорт

	Текст = СокрЛ(Текст);
	Возврат ВРег(Лев(Текст, 1)) + Сред(Текст, 2);

КонецФункции

// Обрезает текст по границе слова и ставит многоточие - для SMS, колонок отчета, заголовков:
// КороткийТекст("Кабель силовой ВВГнг 3х2,5 медный", 20) = "Кабель силовой…"
Функция КороткийТекст(Знач Текст, Знач МаксДлина) Экспорт

	Текст = НормализоватьПробелы(Текст);
	Если СтрДлина(Текст) <= МаксДлина Тогда
		Возврат Текст;
	ИначеЕсли МаксДлина < 2 Тогда
		Возврат Лев(Текст, МаксДлина);
	КонецЕсли;

	Обрезано = Лев(Текст, МаксДлина - 1); // один символ оставляем под "…"
	Пробел = СтрНайти(Обрезано, " ", НаправлениеПоиска.СКонца);
	Если Пробел > 1 Тогда
		Обрезано = Лев(Обрезано, Пробел - 1);
	КонецЕсли;

	Возврат СокрП(Обрезано) + "…";

КонецФункции

Символ и КодСимвола: невидимые символы, цифры, имя файла

Если две строки выглядят одинаково, а = возвращает Ложь, внутри — невидимый символ или латинская буква вместо кириллической: неразрывный пробел (код 160), пробел нулевой ширины (8203), BOM (65279). КодыСимволов() показывает их явно, ТолькоЦифры() чистит телефон или ИНН, ИмяФайлаИзСтроки() убирает символы, запрещённые в именах файлов Windows.

// Пробельные и невидимые символы: в поле ввода и в отладчике их не видно.
Функция ЭтоНевидимыйСимвол(Код) Экспорт

	Возврат Код <= 32                   // управляющие символы и обычный пробел
		Или Код = 160                   // неразрывный пробел, Символы.НПП
		Или Код = 173                   // мягкий перенос
		Или (Код >= 8192 И Код <= 8207) // пробелы разной ширины, символы нулевой ширины
		Или Код = 8239                  // узкий неразрывный пробел
		Или Код = 65279;                // BOM в начале текста из файла

КонецФункции

// Строка посимвольно, невидимые символы - кодом в скобках. Показывает,
// почему две одинаковые на вид строки не равны:
// КодыСимволов("1" + Символы.НПП + "000") = "1 [160] 0 0 0".
Функция КодыСимволов(Знач Текст) Экспорт

	Части = Новый Массив;
	Для Номер = 1 По СтрДлина(Текст) Цикл
		Код = КодСимвола(Текст, Номер);
		Если ЭтоНевидимыйСимвол(Код) Тогда
			Части.Добавить("[" + Формат(Код, "ЧН=0; ЧГ=0") + "]");
		Иначе
			Части.Добавить(Сред(Текст, Номер, 1));
		КонецЕсли;
	КонецЦикла;

	Возврат СтрСоединить(Части, " ");

КонецФункции

// Только цифры: ТолькоЦифры("+7 (900) 000-00-00") = "79000000000".
Функция ТолькоЦифры(Знач Текст) Экспорт

	Цифры = Новый Массив;
	Для Номер = 1 По СтрДлина(Текст) Цикл
		Код = КодСимвола(Текст, Номер);
		Если Код >= 48 И Код <= 57 Тогда // символы "0".."9"
			Цифры.Добавить(Символ(Код));
		КонецЕсли;
	КонецЦикла;

	Возврат СтрСоединить(Цифры);

КонецФункции

// Имя файла из произвольной строки, например из представления документа
// "Реализация товаров и услуг ТД-000123 от 01.02.2025 12:00:00":
// запрещенные в Windows символы \ / : * ? " < > | заменяются на "_".
Функция ИмяФайлаИзСтроки(Знач Текст, Знач МаксДлина = 100) Экспорт

	Запрещенные = "\/:*?""<>|" + Символы.Таб + Символы.ВК + Символы.ПС;
	Для Номер = 1 По СтрДлина(Запрещенные) Цикл
		Текст = СтрЗаменить(Текст, Сред(Запрещенные, Номер, 1), "_");
	КонецЦикла;

	Текст = Лев(СокрЛП(Текст), МаксДлина);
	// Windows не принимает имя, которое заканчивается точкой или пробелом
	Пока СтрЗаканчиваетсяНа(Текст, ".") Или СтрЗаканчиваетсяНа(Текст, " ") Цикл
		Текст = Лев(Текст, СтрДлина(Текст) - 1);
	КонецЦикла;

	Возврат ?(Текст = "", "file", Текст);

КонецФункции

Разбор и сборка: СтрРазделить, СтрСоединить, СтрШаблон

Текст «ключ = значение» раскладывается в соответствие, массив значений собирается в строку CSV с правильными кавычками, текст ошибки — через СтрШаблон() и НСтр(). Числа и даты в CSV выводятся через Формат(), форматные строки разобраны в статье «Формат даты 1С».

// Разбирает текст "ключ = значение" (по паре на строку) в соответствие.
// Пустые строки, строки без "=" и комментарии с # пропускаются; ключи - в нижнем регистре.
// Из текста "Склад = Основной" + Символы.ПС + "Цена=Розничная" получится
// Результат["склад"] = "Основной", Результат["цена"] = "Розничная".
Функция ПарыКлючЗначение(Знач Текст) Экспорт

	Результат = Новый Соответствие;
	Текст = СтрЗаменить(Текст, Символы.ВК, ""); // переводы строк Windows: ВК + ПС
	Для Каждого Элемент Из СтрРазделить(Текст, Символы.ПС, Ложь) Цикл
		ТекущаяСтрока = СокрЛП(Элемент);
		Позиция = СтрНайти(ТекущаяСтрока, "=");
		Если Позиция < 2 Или СтрНачинаетсяС(ТекущаяСтрока, "#") Тогда
			Продолжить;
		КонецЕсли;
		Ключ = НРег(СокрП(Лев(ТекущаяСтрока, Позиция - 1)));
		Результат.Вставить(Ключ, СокрЛ(Сред(ТекущаяСтрока, Позиция + 1)));
	КонецЦикла;

	Возврат Результат;

КонецФункции

// Строка CSV из массива значений. Поле с разделителем, кавычкой или переводом строки
// берется в кавычки, кавычки внутри удваиваются. Числа - без пробелов между разрядами:
// значения "Кабель 3х2,5", 1234.5 и ООО "Ромашка" дадут
// Кабель 3х2,5;1234,5;"ООО ""Ромашка"""
Функция СтрокаCSV(Знач Значения, Знач Разделитель = ";") Экспорт

	Поля = Новый Массив;
	Для Каждого Значение Из Значения Цикл
		Если ТипЗнч(Значение) = Тип("Число") Тогда
			Поле = Формат(Значение, "ЧН=0; ЧГ=0");
		ИначеЕсли ТипЗнч(Значение) = Тип("Дата") Тогда
			Поле = Формат(Значение, "ДФ=дд.ММ.гггг");
		Иначе
			Поле = Строка(Значение);
		КонецЕсли;
		Если СтрНайти(Поле, Разделитель) > 0 Или СтрНайти(Поле, """") > 0 Или СтрНайти(Поле, Символы.ПС) > 0 Тогда
			Поле = """" + СтрЗаменить(Поле, """", """""") + """";
		КонецЕсли;
		Поля.Добавить(Поле);
	КонецЦикла;

	Возврат СтрСоединить(Поля, Разделитель);

КонецФункции

// Текст ошибки загрузки. Маркеры %1..%3 нумерованные, поэтому в переводе
// на другой язык порядок слов можно менять, не трогая код.
// ТекстОшибкиЗагрузки(1250, "Цена", "12 руб") =
// Строка 1250, колонка "Цена": не удалось распознать значение "12 руб"
Функция ТекстОшибкиЗагрузки(НомерСтроки, ИмяКолонки, Значение) Экспорт

	Шаблон = НСтр("ru = 'Строка %1, колонка ""%2"": не удалось распознать значение ""%3""'");
	Возврат СтрШаблон(Шаблон, Формат(НомерСтроки, "ЧГ=0"), ИмяКолонки, Значение);

КонецФункции

СтроковыеФункцииКлиентСервер: функции БСП

В БСП строковые функции лежат в общих модулях СтроковыеФункцииКлиентСервер (клиент и сервер), СтроковыеФункции (сервер), СтроковыеФункцииКлиент (клиент) и СтроковыеФункцииКлиентСерверРФ (проверка кириллицы). В таблице то, чего нет в платформе; в БСП 3.1.10 (КА 2.5) есть ещё ТолькоСимволыНациональногоАлфавитаВСтроке().

ФункцияЧто делает
РазложитьСтрокуВМассивПодстрок(Значение, Разделитель, ПропускатьПустыеСтроки, СокращатьНепечатаемыеСимволы)деление по разделителю любой длины; четвёртый параметр обрезает края частей
РазложитьСтрокуВМассивСлов(Значение, РазделителиСлов)слова без знаков препинания
ПодставитьПараметрыВСтрокуИзМассива(ШаблонСтроки, Параметры)маркеры %1…%N из массива, без ограничения в 10 значений
ВставитьПараметрыВСтроку(ШаблонСтроки, Параметры)именованные параметры вида [Имя] из структуры
ПараметрыИзСтроки(СтрокаПараметров, Разделитель)«Имя=Значение;…» в структуру
ТолькоЦифрыВСтроке(), ТолькоЛатиницаВСтроке()проверка состава строки
ДополнитьСтроку(Значение, ДлинаСтроки, Символ, Режим)дополняет до длины, по умолчанию нулями слева
УдалитьПовторяющиесяСимволы(Значение, УдаляемыйСимвол, Режим)убирает повторы символа с края, например ведущие нули
СократитьДвойныеКавычки(), УдалитьПоследнийСимволВСтроке()снимает кавычки по краям; процедура отрезает символы справа
ЗаменитьОдниСимволыДругими(ЗаменяемыеСимволы, Значение, СимволыЗамены)посимвольная замена по двум строкам
СтрокаВЧисло(), СтрокаВДату()преобразование без исключения: Неопределено или пустая дата
ЭтоУникальныйИдентификатор(), ИзвлечьТекстИзHTML()проверка формата UUID; текст HTML без тегов
СтроковыеФункции.СтрокаЛатиницей(), ПредставлениеПериодаВТексте()транслитерация; период текстом для заголовка отчёта
// Вызовы строковых модулей БСП (сверено по БСП 3.1.5 в УТ 11.4), результат - в комментарии.
// Процедура для серверного модуля: СтроковыеФункции доступен только на сервере,
// на клиенте ту же транслитерацию дает СтроковыеФункцииКлиент.СтрокаЛатиницей().
Процедура ПримерыСтроковыхФункцийБСП()

	// Разделитель любой длины, пустые части пропустить, края частей обрезать
	Части = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок("а || б ||  || в", "||", Истина, Истина);
	// "а", "б", "в"

	// "Имя=Значение;..." в структуру, например строка соединения с базой
	ПараметрыСоединения = СтроковыеФункцииКлиентСервер.ПараметрыИзСтроки("Srvr=""srv01"";Ref=""trade"";");
	// ПараметрыСоединения.Srvr = "srv01", ПараметрыСоединения.Ref = "trade"

	// Именованные параметры в квадратных скобках
	ТекстЗаголовка = СтроковыеФункцииКлиентСервер.ВставитьПараметрыВСтроку("Заказ [Номер] от [Дата]",
		Новый Структура("Номер, Дата", "ЗК-0042", "01.02.2025"));
	// "Заказ ЗК-0042 от 01.02.2025"

	// Дополнение до длины и обрезка повторов с края
	Код = СтроковыеФункцииКлиентСервер.ДополнитьСтроку("42", 6);                       // "000042"
	БезНулей = СтроковыеФункцииКлиентСервер.УдалитьПовторяющиесяСимволы("000042", "0"); // "42"

	// Проверки состава строки
	ВсеЦифры = СтроковыеФункцииКлиентСервер.ТолькоЦифрыВСтроке("7701 234", , Ложь);  // Истина: пробелы разрешены
	ВсяЛатиница = СтроковыеФункцииКлиентСервер.ТолькоЛатиницаВСтроке("price-list", Ложь); // Истина: дефис - разделитель слов
	ЭтоUUID = СтроковыеФункцииКлиентСервер.ЭтоУникальныйИдентификатор(Строка(Новый УникальныйИдентификатор)); // Истина

	// Преобразование без исключений: при ошибке - Неопределено
	Сумма = СтроковыеФункцииКлиентСервер.СтрокаВЧисло("1 234,50");                     // 1234.5
	НеЧисло = СтроковыеФункцииКлиентСервер.СтрокаВЧисло("12 шт");                     // Неопределено

	// Похожие латинские буквы - в кириллицу. Порядок параметров: что менять, где, на что
	Артикул = СтроковыеФункцииКлиентСервер.ЗаменитьОдниСимволыДругими("ABCEHKMOPTX", "AB-123", "АВСЕНКМОРТХ");
	// "АВ-123" - буквы уже кириллические

	// HTML в обычный текст и транслитерация для имени файла
	ТекстПисьма = СтроковыеФункцииКлиентСервер.ИзвлечьТекстИзHTML("<p>Счет <b>оплачен</b></p>"); // "Счет оплачен"
	ИмяФайла = СтроковыеФункции.СтрокаЛатиницей("Прайс-лист") + ".xlsx";              // латиница по правилам БСП

КонецПроцедуры

Разбор ключевых строк

  • Если НачалоЗначения > СтрДлина(Текст) и Пока Начало <= ДлинаТекста — СтрНайти() принимает начальную позицию только от 1 до длины строки. Без проверки функции падают, когда маркер или разделитель стоит последним.
  • СтрНайти(Текст, Разделитель, НаправлениеПоиска.СКонца) находит последнее вхождение без цикла; позиция всё равно отсчитывается от начала строки.
  • Сред(Текст, Начало) без третьего параметра возвращает остаток строки, а если начало за концом строки — пустую строку: разделитель в конце даёт пустую последнюю часть, как у СтрРазделить().
  • Пока СтрНайти(Текст, " ") > 0 — одного СтрЗаменить() мало: из трёх пробелов подряд после замены остаются два.
  • КодСимвола(Текст, Номер) берёт символ по номеру без промежуточного Сред(), а СтрСоединить(Цифры) склеивает накопленный массив один раз вместо сложения строк в цикле.
  • СтрЗаменить(Поле, """", """""") — в литерале 1С кавычка пишется двумя кавычками, так что одна кавычка меняется на две, как требует CSV.

Типичные ошибки

  • «Недопустимое значение параметра (параметр номер '4')» в СтрНайти() (в синтакс-помощнике — «Неверное значение параметра») — начальная позиция вышла за длину строки, обычно в цикле с Начало = Позиция + 1, когда искомое стоит последним.
  • Исключение в СтрНачинаетсяС() и СтрЗаканчиваетсяНа() — вторым параметром пришла пустая строка, например префикс из незаполненной настройки. СтрНайти() на пустой подстроке ошибки не даёт и возвращает 1.
  • «Процедура или функция с указанным именем не определена (СтрНайти)» — режим совместимости конфигурации ниже 8.3.6: используйте Найти() или поднимите режим.
  • Лишние элементы после СтрРазделить(Текст, "; ") — разделителем стали и точка с запятой, и пробел. Нужна РазделитьПоПодстроке() или РазложитьСтрокуВМассивПодстрок() из БСП.
  • «Недостаточно фактических параметров для заполнения параметра шаблона» в СтрШаблон() — в шаблоне есть %3, а значений передано два. Лишние значения, по синтакс-помощнику, тоже вызывают исключение.
  • «Преобразование значения к типу Число не может быть выполнено» — Число() получил «12 шт» или «1 500 руб.». Очистите строку или вызовите СтроковыеФункцииКлиентСервер.СтрокаВЧисло(): она вернёт Неопределено вместо исключения.
  • «1 234» в имени файла или коде — Строка() и СтрШаблон() выводят число с неразрывным пробелом между разрядами. Нужен Формат(Число, "ЧГ=0"), а для нуля ещё и ЧН=0: без него Формат(0) даёт пустую строку.
  • Одинаковые на вид строки не равны — внутри неразрывный пробел, BOM или латинская «A» вместо кириллической «А». СокрЛП() убирает неразрывный пробел только по краям.
  • ТРег портит названия: из «ООО «РОМАШКА»» получается «Ооо «Ромашка»». Для заглавной первой буквы — СЗаглавнойБуквы().

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

Как найти подстроку без учёта регистра?

Привести обе строки к одному регистру: СтрНайти(ВРег(Текст), ВРег(Подстрока)) > 0. Для проверки на равенство без учёта регистра есть СтрСравнить(Строка1, Строка2) = 0.

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

Лев(Текст, СтрДлина(Текст) - 1). В БСП есть процедура СтроковыеФункцииКлиентСервер.УдалитьПоследнийСимволВСтроке(Текст, ЧислоСимволов): она меняет саму переменную и ничего не возвращает.

Как дополнить число нулями слева?

Для числа — Формат(42, "ЧЦ=6; ЧВН=; ЧГ=0"), получится «000042». Для строки — СтроковыеФункцииКлиентСервер.ДополнитьСтроку("42", 6).

Как вставить перевод строки и кавычки в текст?

Перевод строки — Символы.ПС. Длинный литерал в модуле можно продолжить на следующей строке, начав её с символа |. Кавычка внутри литерала пишется двумя кавычками: "ООО ""Ромашка""".

Когда проще заказать

Если строки — часть задачи побольше (загрузка прайсов поставщиков с разбором наименований, выгрузка CSV для маркетплейса, поиск дублей в справочнике номенклатуры), её быстрее отдать программисту. Такие обработки делаются в рамках услуги отчёты и обработки 1С. Опишите задачу на странице «Разместить задание» — оценка бесплатная, ответ в течение рабочего дня.

По теме

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

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


1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.