Разработка и Конфигурация · 10 мин
Как сделать первую букву заглавной в 1С
Как сделать первую букву строки заглавной в 1С: ТРег, ВРег, НРег, работа с ФИО и предложениями. Примеры кода, типичные ошибки и проверка результата.
Задача сделать первую букву строки заглавной возникает в 1С постоянно: при формировании ФИО в печатных формах, при выводе наименований товаров, при обработке текста комментариев и при импорте данных из внешних источников, где регистр букв может быть произвольным. Встроенный язык 1С предлагает несколько функций для работы с регистром, и выбор правильной зависит от того, что именно нужно получить на выходе.
Ключевой момент: функции ВРег() и НРег() меняют регистр всей строки целиком, а для заглавной только первой буквы чаще всего используют ТРег() или комбинацию из ВРег(), Лев() и Сред(). Неправильный выбор функции — самая частая причина того, что «Иванов Иван Иванович» превращается в «ИВАНОВ ИВАН ИВАНОВИЧ» или «иванов иван иванович» там, где это недопустимо.
Ниже разобраны все рабочие способы с примерами кода, указаны ограничения каждого подхода и типичные ошибки, которые приводят к порче данных в справочниках и документах.
Какие функции регистра есть во встроенном языке 1С
В языке 1С доступны три базовые функции для изменения регистра символов строки. Каждая решает свою задачу, и смешивать их без понимания результата нельзя.
ВРег(Строка)— переводит все буквы строки в верхний регистр: «привет» → «ПРИВЕТ»;НРег(Строка)— переводит все буквы строки в нижний регистр: «Привет» → «привет»;ТРег(Строка)— переводит первую букву каждого слова в верхний регистр, остальные — в нижний: «иванов иван» → «Иванов Иван».
Отдельной функции «первая буква строки заглавная, остальное без изменений» в языке нет. Этот результат получают комбинацией функций работы со строками, что подробно разобрано ниже.
Как сделать заглавной первую букву каждого слова через ТРег()
Если задача — привести ФИО, название организации или наименование товара к виду «С Заглавной Буквы», достаточно одной функции ТРег(). Она сама определяет границы слов по пробелам и ряду других разделителей.
ФИО = "ИВАНОВ иВАН иВАНОВИЧ";
Результат = ТРег(ФИО);
// Результат: "Иванов Иван Иванович"
Перед применением ТРег() полезно убрать лишние пробелы функцией СокрЛП(), а при импорте из внешних файлов — заменить двойные пробелы одинарными. Иначе лишние пробелы сохранятся в очищенной строке и попадут в печатные формы.
У ТРег() есть важное ограничение: функция обрабатывает и слова после дефиса, и некоторые служебные символы. Например, «САЛТЫКОВ-ЩЕДРИН» станет «Салтыков-Щедрин» — это корректно. Но аббревиатуры вроде «ООО» превратятся в «Ооо», что для печатных форм контрагентов обычно неприемлемо.
Как сделать заглавной только первую букву строки
Когда нужно, чтобы заглавной была только самая первая буква всей строки, а остальной текст остался нетронутым (например, комментарий или текст предложения), используется комбинация ВРег(), Лев() и Сред().
- 1Уберите лишние пробелы: Строка = СокрЛП(Строка)
- 2Проверьте, что строка не пустая: СтрДлина(Строка) > 0
- 3Возьмите первый символ и переведите его в верхний регистр: ВРег(Лев(Строка; 1))
- 4Присоедините остаток строки без изменений: Сред(Строка; 2)
- 5Сохраните результат и проверьте вывод на тестовом примере
Функция ПерваяЗаглавная(Строка)
Строка = СокрЛП(Строка);
Если СтрДлина(Строка) = 0 Тогда
Возврат "";
КонецЕсли;
Возврат ВРег(Лев(Строка; 1)) + Сред(Строка; 2);
КонецФункции
Текст = "пришёл товар по накладной № 152.";
Результат = ПерваяЗаглавная(Текст);
// Результат: "Пришёл товар по накладной № 152."
Обратите внимание: Сред(Строка; 2) возвращает всю строку, начиная со второго символа, поэтому остальной текст сохраняет исходный регистр. Это принципиальное отличие от ТРег(), которая принудительно переводит остальные буквы в нижний регистр.
Если нужно, чтобы первый символ был заглавным, а весь остальной текст — строчными (классический вид предложения), замените вторую часть на НРег(Сред(Строка; 2)). Но учтите: собственные имена и аббревиатуры внутри текста при этом потеряют заглавные буквы.
Как обработать ФИО, адреса и наименования
ФИО сотрудников и контактных лиц
Для ФИО стандартный подход — ТРег() после предварительной очистки. Двойные фамилии через дефис обрабатываются корректно: обе части получат заглавную букву. Инициалы, введённые строчными («иванов и.и.»), станут «Иванов И.И.».
Адреса и сложные строки
С адресами ТРег() работает неоднозначно: «г москва, ул ленина, д 5» превратится в «Г Москва, Ул Ленина, Д 5». Сокращения «г», «ул», «д» станут заглавными, что не всегда соответствует требованиям к оформлению. Для адресов лучше использовать типовые механизмы контактной информации конфигурации, где структура уже разложена по полям.
Наименования товаров и аббревиатуры
Для номенклатуры слепое применение ТРег() опасно: «Кабель ВВГнг 3х2.5» превратится в «Кабель Ввгнг 3х2.5», что исказит маркировку. Здесь безопаснее функция первой заглавной буквы из предыдущего раздела — она не трогает остальной текст.
Сравнение вариантов
Подходит для ФИО и простых названий. Ограничение: ломает аббревиатуры (ООО, ВВГ) и приводит остальные буквы к нижнему регистру.
Подходит для предложений, комментариев и наименований с аббревиатурами: меняется только первый символ, остальной текст не тронут.
Даёт классический вид предложения, но уничтожает заглавные буквы внутри текста — не подходит для строк с именами и маркировками.
Как проверить результат и не испортить данные
Перед тем как встраивать обработку в рабочий код, проверьте её на реальных примерах из вашей базы. Удобно вывести исходное и обработанное значение рядом через Сообщить() в консоли кода или во временной обработке.
Для Каждого СтрокаТест Из ТестовыеСтроки Цикл
Сообщить("[" + СтрокаТест + "] -> [" + ТРег(СтрокаТест) + "]");
КонецЦикла;
Особое внимание уделите пустым строкам и строкам из одних пробелов: Лев() к пустой строке вернёт пустую строку, ошибки не будет, но результат будет бессмысленным. Всегда добавляйте проверку СтрДлина(СокрЛП(Строка)) = 0 перед обработкой.
Если обработка применяется к данным справочника групповой обработкой, сначала выполните её в режиме «только показать изменения», не записывая объекты. Записывайте результаты только после визуальной проверки выборки.
Как проверить результат
Заглавная, остальной текст не изменён
Вся строка в верхнем регистре — использована ВРег() вместо комбинации
Сохранили исходный регистр
Превратились в Ооо, Ип — применена ТРег() к неподходящему типу данных
Возвращается пустая строка без ошибки
Ошибка выполнения или неожиданные символы в результате
Обе части с заглавной буквы
Вторая часть строчная — использована функция первой буквы вместо ТРег()
Типичные ошибки при работе с регистром
Большинство проблем возникает не из-за сложности функций, а из-за неверного выбора подхода под конкретный тип данных. Ниже — ошибки, которые встречаются чаще всего.
Отдельно отметим ситуацию с небуквенным первым символом. Если строка начинается с цифры или знака препинания, ВРег() просто вернёт его без изменений — ошибки не будет, но и заглавной буквы не появится. Если такие строки возможны, решите заранее, считать ли это нормой или искать первую букву в строке циклом.
Удобно один раз написать функцию ПерваяЗаглавная() в общем модуле и вызывать её во всех местах, где формируются печатные формы и представления. Это избавляет от дублирования кода и гарантирует одинаковое поведение во всей конфигурации.
Частые вопросы
Чем ТРег() отличается от ВРег()?
ВРег() переводит в верхний регистр всю строку целиком, а ТРег() делает заглавной только первую букву каждого слова, остальные буквы приводя к нижнему регистру. Для ФИО подходит ТРег(), для аббревиатур — ВРег(), для первой буквы предложения — ни одна из них напрямую.
Как сделать заглавной первую букву, если строка начинается с пробелов?
Сначала примените СокрЛП(Строка), чтобы убрать начальные и конечные пробелы, и только после этого берите первый символ через Лев(). Иначе первым символом окажется пробел, и видимый текст останется со строчной буквы.
Как обработать фамилию с дефисом, например «салтыков-щедрин»?
Функция ТРег() корректно обрабатывает дефис как разделитель: результатом будет «Салтыков-Щедрин». Если вы пишете собственную обработку посимвольно, добавьте дефис в список символов, после которых следующая буква становится заглавной.
Можно ли сделать первую букву заглавной в запросе 1С?
В языке запросов 1С нет прямого аналога ТРег(). В запросе доступны только функции для всей строки, поэтому сложную обработку регистра выполняют уже после выборки — в цикле по результату запроса средствами встроенного языка.
ТРег() испортила аббревиатуры в наименованиях, как исправить?
Для строк с аббревиатурами замените ТРег() на комбинацию ВРег(Лев(Строка;1)) + Сред(Строка;2) — она меняет только первый символ и не трогает остальной текст. Если данные уже записаны, восстановите исходные значения из резервной копии или из источника обмена.
Работает ли ТРег() с английским и другими языками?
Да, функция корректно обрабатывает латиницу и кириллицу, а также большинство букв национальных алфавитов. Правило одно: первая буква каждого слова становится заглавной, остальные — строчными, независимо от языка строки.
Что важно запомнить
Для заглавной первой буквы каждого слова используйте ТРег(), для заглавной только в начале строки — ВРег(Лев(Строка;1)) + Сред(Строка;2). Всегда очищайте строку через СокрЛП(), проверяйте на пустоту и не применяйте ТРег() к строкам с аббревиатурами. Перед групповой обработкой справочников делайте копию базы и проверяйте результат на тестовой выборке.