При формировании наименований номенклатуры по шаблонам, составлении динамических описаний или склейке свойств через запятую часто возникает необходимость привести первое слово дополнительного свойства к строчной (маленькой) букве, не изменяя при этом регистр всей остальной части строки. Рассмотрим, есть ли для этой операции штатная функция во встроенном языке 1С:Предприятие 8.3 и как правильно решить эту задачу программно.
Во встроенном языке 1С:Предприятие (включая актуальные версии платформы 8.3) отсутствует отдельная специализированная функция для изменения регистра исключительно первого символа строки.
Проанализируем доступные строковые функции платформы:
НРег — переводит абсолютно все символы переданной строки в нижний регистр.ВРег — переводит все символы переданной строки в верхний регистр.ТРег — переводит строку в титульный регистр (первая буква каждого слова становится заглавной, а все остальные буквы принудительно преобразуются в строчные). Эта функция не решает задачу, так как меняет регистр каждого слова и портит аббревиатуры.Таким образом, для перевода первого символа в нижний регистр необходимо собрать результирующую строку из двух частей с помощью базовых строковых методов.
Разберем классический и наиболее лаконичный способ преобразования. Мы берем первый символ строки с помощью метода Лев, переводим его в нижний регистр функцией НРег и конкатенируем с остальной частью строки, полученной через метод Сред.
Посмотрим на пример правильного синтаксиса:
ИсходнаяСтрока = "Цвет Черный";
Результат = НРег(Лев(ИсходнаяСтрока, 1)) + Сред(ИсходнаяСтрока, 2);
// В переменной Результат будет значение: "цвет Черный"
Обратим внимание на синтаксис методов платформы 1С:
Лев(Строка, ЧислоСимволов) — первым параметром принимает исходную строку, вторым — количество символов слева.Сред(Строка, НачальныйНомер, [ЧислоСимволов]) — первым параметром принимает исходную строку, вторым — позицию, начиная с которой извлекается подстрока (нумерация ведется с единицы). Если третий параметр опущен, извлекаются все символы до конца строки.Платформа 1С устойчива к граничным значениям: если переменная ИсходнаяСтрока содержит пустую строку "" или строку из одного символа, выражение не вызовет ошибки времени выполнения (исключения) и отработает корректно.
Рассмотрим альтернативную запись, в которой остаток строки извлекается с помощью функции Прав и вычисления длины строки через СтрДлина:
ИсходнаяСтрока = "Материал Дерево";
Результат = НРег(Лев(ИсходнаяСтрока, 1)) + Прав(ИсходнаяСтрока, СтрДлина(ИсходнаяСтрока) - 1);
Такой подход также дает нужный результат, однако вариант с использованием метода Сред является более предпочтительным, так как не требует лишнего вызова функции СтрДлина и проще читается в коде конфигурации.
Если подобное преобразование требуется выполнять регулярно (например, при генерации наименований видов номенклатуры в конфигурациях ERP, КА или УТ), вынесем логику в отдельную экспортную функцию общего модуля.
Разберем важные нюансы, которые следует учесть при реализации:
Лев возьмет именно его, а первая буква останется заглавной. Рекомендуется предварительно удалить незначащие пробелы с помощью СокрЛ или СокрЛП.Посмотрим на пример универсальной функции:
// Преобразует первый символ переданной строки в нижний регистр
//
// Параметры:
// ВходнаяСтрока - Строка - исходный текст
//
// Возвращаемое значение:
// Строка - преобразованный текст
//
Функция ПервыйСимволВНижнийРегистр(Знач ВходнаяСтрока) Экспорт
ВходнаяСтрока = СокрЛ(ВходнаяСтрока);
Если ПустаяСтрока(ВходнаяСтрока) Тогда
Возврат "";
КонецЕсли;
Возврат НРег(Лев(ВходнаяСтрока, 1)) + Сред(ВходнаяСтрока, 2);
КонецФункции
Такую функцию удобно разместить в специализированном модуле строковых функций или в модуле переопределяемой логики формирования наименований объектов.