Как перевести только первый символ строки в нижний регистр в 1С 8.3?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

Штатные возможности платформы 1С

Во встроенном языке 1С:Предприятие (включая актуальные версии платформы 8.3) отсутствует отдельная специализированная функция для изменения регистра исключительно первого символа строки.

Проанализируем доступные строковые функции платформы:

  1. НРег — переводит абсолютно все символы переданной строки в нижний регистр.
  2. ВРег — переводит все символы переданной строки в верхний регистр.
  3. ТРег — переводит строку в титульный регистр (первая буква каждого слова становится заглавной, а все остальные буквы принудительно преобразуются в строчные). Эта функция не решает задачу, так как меняет регистр каждого слова и портит аббревиатуры.

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

Основной способ: использование функций НРег, Лев и Сред

Разберем классический и наиболее лаконичный способ преобразования. Мы берем первый символ строки с помощью метода Лев, переводим его в нижний регистр функцией НРег и конкатенируем с остальной частью строки, полученной через метод Сред.

Посмотрим на пример правильного синтаксиса:


ИсходнаяСтрока = "Цвет Черный";
Результат = НРег(Лев(ИсходнаяСтрока, 1)) + Сред(ИсходнаяСтрока, 2);
// В переменной Результат будет значение: "цвет Черный"

Обратим внимание на синтаксис методов платформы 1С:

  1. Функция Лев(Строка, ЧислоСимволов) — первым параметром принимает исходную строку, вторым — количество символов слева.
  2. Функция Сред(Строка, НачальныйНомер, [ЧислоСимволов]) — первым параметром принимает исходную строку, вторым — позицию, начиная с которой извлекается подстрока (нумерация ведется с единицы). Если третий параметр опущен, извлекаются все символы до конца строки.

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

Альтернативный вариант: использование функции Прав

Рассмотрим альтернативную запись, в которой остаток строки извлекается с помощью функции Прав и вычисления длины строки через СтрДлина:


ИсходнаяСтрока = "Материал Дерево";
Результат = НРег(Лев(ИсходнаяСтрока, 1)) + Прав(ИсходнаяСтрока, СтрДлина(ИсходнаяСтрока) - 1);

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

Оформление в виде функции общего модуля и краевые случаи

Если подобное преобразование требуется выполнять регулярно (например, при генерации наименований видов номенклатуры в конфигурациях ERP, КА или УТ), вынесем логику в отдельную экспортную функцию общего модуля.

Разберем важные нюансы, которые следует учесть при реализации:

  1. Ведущие пробелы: если в начале строки случайно окажется пробел, функция Лев возьмет именно его, а первая буква останется заглавной. Рекомендуется предварительно удалить незначащие пробелы с помощью СокрЛ или СокрЛП.
  2. Аббревиатуры: если первое слово строки представляет собой аббревиатуру (например, «ГОСТ», «USB», «LED»), преобразование первого знака сделает текст некорректным («гOST», «uSB»). При необходимости можно добавить проверку первого слова перед изменением регистра.

Посмотрим на пример универсальной функции:


// Преобразует первый символ переданной строки в нижний регистр
//
// Параметры:
//  ВходнаяСтрока - Строка - исходный текст
//
// Возвращаемое значение:
//  Строка - преобразованный текст
//
Функция ПервыйСимволВНижнийРегистр(Знач ВходнаяСтрока) Экспорт
    
    ВходнаяСтрока = СокрЛ(ВходнаяСтрока);
    
    Если ПустаяСтрока(ВходнаяСтрока) Тогда
        Возврат "";
    КонецЕсли;
    
    Возврат НРег(Лев(ВходнаяСтрока, 1)) + Сред(ВходнаяСтрока, 2);
    
КонецФункции

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

← На главную