Строка в 1С встречается почти в каждой доработке: наименования и артикулы, номера документов, данные обмена. Здесь собраны все функции работы со строками встроенного языка 8.3 — от СтрДлина() и Сред() до СтрШаблон() и СтрРазделить(), таблица замены устаревших функций и модуль БСП СтроковыеФункцииКлиентСервер. К каждому разделу — готовые функции для общего модуля. Строковые функции языка запросов разобраны в статье «Строка в запросе 1С».
Описание каждой функции — в конфигураторе: меню «Справка → Синтакс-помощник», ветка «Глобальный контекст», раздел «Функции работы со значениями типа Строка». Устаревшая Найти() лежит в разделе «Прочие процедуры и функции» с пометкой «Функция является устаревшей».
Символы в строке нумеруются с единицы. Если не сказано иное, функция доступна на сервере, в тонком и веб-клиенте и во внешнем соединении. Версии — по синтакс-помощнику платформы 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…%10 | 8.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 |
ВРег(А) = ВРег(Б) | СтрСравнить(А, Б) = 0 | 8.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.СтрНайти() (в синтакс-помощнике — «Неверное значение параметра») — начальная позиция вышла за длину строки, обычно в цикле с Начало = Позиция + 1, когда искомое стоит последним.СтрНачинаетсяС() и СтрЗаканчиваетсяНа() — вторым параметром пришла пустая строка, например префикс из незаполненной настройки. СтрНайти() на пустой подстроке ошибки не даёт и возвращает 1.Найти() или поднимите режим.СтрРазделить(Текст, "; ") — разделителем стали и точка с запятой, и пробел. Нужна РазделитьПоПодстроке() или РазложитьСтрокуВМассивПодстрок() из БСП.СтрШаблон() — в шаблоне есть %3, а значений передано два. Лишние значения, по синтакс-помощнику, тоже вызывают исключение.Число() получил «12 шт» или «1 500 руб.». Очистите строку или вызовите СтроковыеФункцииКлиентСервер.СтрокаВЧисло(): она вернёт Неопределено вместо исключения.Строка() и СтрШаблон() выводят число с неразрывным пробелом между разрядами. Нужен Формат(Число, "ЧГ=0"), а для нуля ещё и ЧН=0: без него Формат(0) даёт пустую строку.СокрЛП() убирает неразрывный пробел только по краям.СЗаглавнойБуквы().Привести обе строки к одному регистру: СтрНайти(ВРег(Текст), ВРег(Подстрока)) > 0. Для проверки на равенство без учёта регистра есть СтрСравнить(Строка1, Строка2) = 0.
Лев(Текст, СтрДлина(Текст) - 1). В БСП есть процедура СтроковыеФункцииКлиентСервер.УдалитьПоследнийСимволВСтроке(Текст, ЧислоСимволов): она меняет саму переменную и ничего не возвращает.
Для числа — Формат(42, "ЧЦ=6; ЧВН=; ЧГ=0"), получится «000042». Для строки — СтроковыеФункцииКлиентСервер.ДополнитьСтроку("42", 6).
Перевод строки — Символы.ПС. Длинный литерал в модуле можно продолжить на следующей строке, начав её с символа |. Кавычка внутри литерала пишется двумя кавычками: "ООО ""Ромашка""".
Если строки — часть задачи побольше (загрузка прайсов поставщиков с разбором наименований, выгрузка CSV для маркетплейса, поиск дублей в справочнике номенклатуры), её быстрее отдать программисту. Такие обработки делаются в рамках услуги отчёты и обработки 1С. Опишите задачу на странице «Разместить задание» — оценка бесплатная, ответ в течение рабочего дня.
Станьте частью сообщества!
Войдите или зарегистрируйтесь, и вы сможете участвовать в обсуждениях.