К статье
Практический материал

Разработка и Конфигурация · 10 мин

Как сделать первую букву заглавной в 1С

Как сделать первую букву строки заглавной в 1С: ТРег, ВРег, НРег, работа с ФИО и предложениями. Примеры кода, типичные ошибки и проверка результата.

Задача сделать первую букву строки заглавной возникает в 1С постоянно: при формировании ФИО в печатных формах, при выводе наименований товаров, при обработке текста комментариев и при импорте данных из внешних источников, где регистр букв может быть произвольным. Встроенный язык 1С предлагает несколько функций для работы с регистром, и выбор правильной зависит от того, что именно нужно получить на выходе.

Ключевой момент: функции ВРег() и НРег() меняют регистр всей строки целиком, а для заглавной только первой буквы чаще всего используют ТРег() или комбинацию из ВРег(), Лев() и Сред(). Неправильный выбор функции — самая частая причина того, что «Иванов Иван Иванович» превращается в «ИВАНОВ ИВАН ИВАНОВИЧ» или «иванов иван иванович» там, где это недопустимо.

Ниже разобраны все рабочие способы с примерами кода, указаны ограничения каждого подхода и типичные ошибки, которые приводят к порче данных в справочниках и документах.

Какие функции регистра есть во встроенном языке 1С

В языке 1С доступны три базовые функции для изменения регистра символов строки. Каждая решает свою задачу, и смешивать их без понимания результата нельзя.

  • ВРег(Строка) — переводит все буквы строки в верхний регистр: «привет» → «ПРИВЕТ»;
  • НРег(Строка) — переводит все буквы строки в нижний регистр: «Привет» → «привет»;
  • ТРег(Строка) — переводит первую букву каждого слова в верхний регистр, остальные — в нижний: «иванов иван» → «Иванов Иван».

Отдельной функции «первая буква строки заглавная, остальное без изменений» в языке нет. Этот результат получают комбинацией функций работы со строками, что подробно разобрано ниже.

Как сделать заглавной первую букву каждого слова через ТРег()

Если задача — привести ФИО, название организации или наименование товара к виду «С Заглавной Буквы», достаточно одной функции ТРег(). Она сама определяет границы слов по пробелам и ряду других разделителей.

ФИО = "ИВАНОВ иВАН иВАНОВИЧ";

Результат = ТРег(ФИО);

// Результат: "Иванов Иван Иванович"

Перед применением ТРег() полезно убрать лишние пробелы функцией СокрЛП(), а при импорте из внешних файлов — заменить двойные пробелы одинарными. Иначе лишние пробелы сохранятся в очищенной строке и попадут в печатные формы.

У ТРег() есть важное ограничение: функция обрабатывает и слова после дефиса, и некоторые служебные символы. Например, «САЛТЫКОВ-ЩЕДРИН» станет «Салтыков-Щедрин» — это корректно. Но аббревиатуры вроде «ООО» превратятся в «Ооо», что для печатных форм контрагентов обычно неприемлемо.

Как сделать заглавной только первую букву строки

Когда нужно, чтобы заглавной была только самая первая буква всей строки, а остальной текст остался нетронутым (например, комментарий или текст предложения), используется комбинация ВРег(), Лев() и Сред().

Порядок действий
  1. 1
    Уберите лишние пробелы: Строка = СокрЛП(Строка)
  2. 2
    Проверьте, что строка не пустая: СтрДлина(Строка) > 0
  3. 3
    Возьмите первый символ и переведите его в верхний регистр: ВРег(Лев(Строка; 1))
  4. 4
    Присоедините остаток строки без изменений: Сред(Строка; 2)
  5. 5
    Сохраните результат и проверьте вывод на тестовом примере
Функция ПерваяЗаглавная(Строка)

Строка = СокрЛП(Строка);

Если СтрДлина(Строка) = 0 Тогда

Возврат "";

КонецЕсли;

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

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

Текст = "пришёл товар по накладной № 152.";

Результат = ПерваяЗаглавная(Текст);

// Результат: "Пришёл товар по накладной № 152."

Обратите внимание: Сред(Строка; 2) возвращает всю строку, начиная со второго символа, поэтому остальной текст сохраняет исходный регистр. Это принципиальное отличие от ТРег(), которая принудительно переводит остальные буквы в нижний регистр.

Если нужно, чтобы первый символ был заглавным, а весь остальной текст — строчными (классический вид предложения), замените вторую часть на НРег(Сред(Строка; 2)). Но учтите: собственные имена и аббревиатуры внутри текста при этом потеряют заглавные буквы.

Как обработать ФИО, адреса и наименования

ФИО сотрудников и контактных лиц

Для ФИО стандартный подход — ТРег() после предварительной очистки. Двойные фамилии через дефис обрабатываются корректно: обе части получат заглавную букву. Инициалы, введённые строчными («иванов и.и.»), станут «Иванов И.И.».

Адреса и сложные строки

С адресами ТРег() работает неоднозначно: «г москва, ул ленина, д 5» превратится в «Г Москва, Ул Ленина, Д 5». Сокращения «г», «ул», «д» станут заглавными, что не всегда соответствует требованиям к оформлению. Для адресов лучше использовать типовые механизмы контактной информации конфигурации, где структура уже разложена по полям.

Наименования товаров и аббревиатуры

Для номенклатуры слепое применение ТРег() опасно: «Кабель ВВГнг 3х2.5» превратится в «Кабель Ввгнг 3х2.5», что исказит маркировку. Здесь безопаснее функция первой заглавной буквы из предыдущего раздела — она не трогает остальной текст.

Сравнение вариантов

ТРег(Строка)

Подходит для ФИО и простых названий. Ограничение: ломает аббревиатуры (ООО, ВВГ) и приводит остальные буквы к нижнему регистру.

ВРег(Лев(Строка;1)) + Сред(Строка;2)

Подходит для предложений, комментариев и наименований с аббревиатурами: меняется только первый символ, остальной текст не тронут.

ВРег(Лев(...)) + НРег(Сред(...))

Даёт классический вид предложения, но уничтожает заглавные буквы внутри текста — не подходит для строк с именами и маркировками.

Как проверить результат и не испортить данные

Перед тем как встраивать обработку в рабочий код, проверьте её на реальных примерах из вашей базы. Удобно вывести исходное и обработанное значение рядом через Сообщить() в консоли кода или во временной обработке.

Для Каждого СтрокаТест Из ТестовыеСтроки Цикл

Сообщить("[" + СтрокаТест + "] -> [" + ТРег(СтрокаТест) + "]");

КонецЦикла;

Особое внимание уделите пустым строкам и строкам из одних пробелов: Лев() к пустой строке вернёт пустую строку, ошибки не будет, но результат будет бессмысленным. Всегда добавляйте проверку СтрДлина(СокрЛП(Строка)) = 0 перед обработкой.

Если обработка применяется к данным справочника групповой обработкой, сначала выполните её в режиме «только показать изменения», не записывая объекты. Записывайте результаты только после визуальной проверки выборки.

Контрольные точки

Как проверить результат

Первая буква строки
Норма

Заглавная, остальной текст не изменён

Тревожный признак

Вся строка в верхнем регистре — использована ВРег() вместо комбинации

Аббревиатуры (ООО, ИП, ВВГ)
Норма

Сохранили исходный регистр

Тревожный признак

Превратились в Ооо, Ип — применена ТРег() к неподходящему типу данных

Пустые строки и строки из пробелов
Норма

Возвращается пустая строка без ошибки

Тревожный признак

Ошибка выполнения или неожиданные символы в результате

Двойные фамилии через дефис
Норма

Обе части с заглавной буквы

Тревожный признак

Вторая часть строчная — использована функция первой буквы вместо ТРег()

Типичные ошибки при работе с регистром

Большинство проблем возникает не из-за сложности функций, а из-за неверного выбора подхода под конкретный тип данных. Ниже — ошибки, которые встречаются чаще всего.

Типичные ошибки
01
Использование ВРег() для первой заглавной буквы — вся строка становится верхним регистром, печатные формы выглядят грубо и не проходят согласование
02
Применение ТРег() к наименованиям с аббревиатурами и маркировками — ООО превращается в Ооо, маркировки кабелей и ГОСТы искажаются
03
Отсутствие проверки на пустую строку — обработка падает или возвращает мусор при обмене данными с незаполненными полями
04
Групповая запись обработанных значений в справочник без резервной копии и предварительного просмотра — массовая порча данных, которую сложно откатить
05
Забытый СокрЛП() перед обработкой — лишние пробелы в начале строки делают первую 'букву' пробелом, и заглавной становится невидимый символ

Отдельно отметим ситуацию с небуквенным первым символом. Если строка начинается с цифры или знака препинания, ВРег() просто вернёт его без изменений — ошибки не будет, но и заглавной буквы не появится. Если такие строки возможны, решите заранее, считать ли это нормой или искать первую букву в строке циклом.

Удобно один раз написать функцию ПерваяЗаглавная() в общем модуле и вызывать её во всех местах, где формируются печатные формы и представления. Это избавляет от дублирования кода и гарантирует одинаковое поведение во всей конфигурации.
ПЗ
Практическое замечание

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

Чем ТРег() отличается от ВРег()?

ВРег() переводит в верхний регистр всю строку целиком, а ТРег() делает заглавной только первую букву каждого слова, остальные буквы приводя к нижнему регистру. Для ФИО подходит ТРег(), для аббревиатур — ВРег(), для первой буквы предложения — ни одна из них напрямую.

Как сделать заглавной первую букву, если строка начинается с пробелов?

Сначала примените СокрЛП(Строка), чтобы убрать начальные и конечные пробелы, и только после этого берите первый символ через Лев(). Иначе первым символом окажется пробел, и видимый текст останется со строчной буквы.

Как обработать фамилию с дефисом, например «салтыков-щедрин»?

Функция ТРег() корректно обрабатывает дефис как разделитель: результатом будет «Салтыков-Щедрин». Если вы пишете собственную обработку посимвольно, добавьте дефис в список символов, после которых следующая буква становится заглавной.

Можно ли сделать первую букву заглавной в запросе 1С?

В языке запросов 1С нет прямого аналога ТРег(). В запросе доступны только функции для всей строки, поэтому сложную обработку регистра выполняют уже после выборки — в цикле по результату запроса средствами встроенного языка.

ТРег() испортила аббревиатуры в наименованиях, как исправить?

Для строк с аббревиатурами замените ТРег() на комбинацию ВРег(Лев(Строка;1)) + Сред(Строка;2) — она меняет только первый символ и не трогает остальной текст. Если данные уже записаны, восстановите исходные значения из резервной копии или из источника обмена.

Работает ли ТРег() с английским и другими языками?

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

Итог

Что важно запомнить

Для заглавной первой буквы каждого слова используйте ТРег(), для заглавной только в начале строки — ВРег(Лев(Строка;1)) + Сред(Строка;2). Всегда очищайте строку через СокрЛП(), проверяйте на пустоту и не применяйте ТРег() к строкам с аббревиатурами. Перед групповой обработкой справочников делайте копию базы и проверяйте результат на тестовой выборке.