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

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

ВРег в 1С: что это и как работает функция

ВРег в 1С — функция перевода строки в верхний регистр. Синтаксис в коде и запросах, отличия от НРег и ТРег, типичные ошибки и примеры сравнения строк.

ВРег — это встроенная функция платформы 1С:Предприятие, которая преобразует строку в верхний регистр: все буквы становятся заглавными, а цифры и символы остаются без изменений. Название расшифровывается как «верхний регистр». Функция доступна и во встроенном языке 1С, и в языке запросов, что делает её одним из базовых инструментов при работе со строковыми данными.

Чаще всего ВРег применяют для сравнения строк без учёта регистра: «Контрагент», «КОНТРАГЕНТ» и «контрагент» после преобразования станут одинаковыми. Это востребовано при поиске дублей, сопоставлении данных из внешних источников, проверке пользовательского ввода и построении отборов в запросах.

Функция корректно работает и с кириллицей, и с латиницей: «пример» превратится в «ПРИМЕР», «example» — в «EXAMPLE». При этом важно понимать, что ВРег не меняет исходное значение «на месте», а возвращает новую строку — результат нужно присвоить переменной или использовать в выражении.

Что такое ВРег и где она доступна

ВРег — часть стандартной библиотеки строковых функций платформы. Она существует в двух воплощениях: как функция встроенного языка (используется в модулях объектов, форм, общих модулях) и как функция языка запросов (используется в тексте запроса в конструкторе или вручную). Синтаксис в обоих случаях одинаковый: ВРег(Строка).

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

В языке запросов ВРег применяется к полям строкового типа и к параметрам. Типичное использование — секция ГДЕ для отбора без учёта регистра или поле выборки, когда результат нужно вывести заглавными буквами.

Синтаксис и примеры в коде 1С

Базовый пример во встроенном языке выглядит так: переменной присваивается результат вызова функции. Исходная строка при этом не изменяется — ВРег возвращает новое значение.

ИсходнаяСтрока = "Привет, Мир!";

Результат = ВРег(ИсходнаяСтрока);

// Результат = "ПРИВЕТ, МИР!"

// ИсходнаяСтрока осталась "Привет, Мир!"

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

Сравнение строк без учёта регистра
  1. 1
    Уберите лишние пробелы: СокрЛП(Строка1) и СокрЛП(Строка2)
  2. 2
    Приведите обе строки к одному регистру: ВРег(СокрЛП(Строка1))
  3. 3
    Сравните результаты оператором равенства
  4. 4
    При совпадении выполните нужную логику, при различии — обработайте расхождение

Пример типовой проверки в коде: Если ВРег(СокрЛП(ВводПользователя)) = ВРег("Администратор") Тогда ... КонецЕсли;. Такой подход устойчив к тому, как именно пользователь ввёл данные — с заглавной буквы, полностью строчными или вперемешку.

ВРег в языке запросов

В запросах ВРег чаще всего встречается в условии отбора. Пример: найти контрагента по наименованию независимо от того, как оно записано в базе и как его ввёл пользователь.

ВЫБРАТЬ

Контрагенты.Ссылка

ИЗ

Справочник.Контрагенты КАК Контрагенты

ГДЕ

ВРег(Контрагенты.Наименование) = ВРег(&Наименование)

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

Также ВРег можно использовать в списке выборки, чтобы вывести данные заглавными буквами, например для печатных форм: ВРег(Контрагенты.НаименованиеПолное) КАК НаименованиеЗаглавными.

Чем ВРег отличается от НРег и ТРег

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

ФункцияРезультат для «пример строки»Типовое применение
ВРегПРИМЕР СТРОКИСравнение без учёта регистра, поиск дублей
НРегпример строкиСравнение, нормализация email и логинов
ТРегПример СтрокиОформление ФИО, названий для вывода

Для сравнения строк без учёта регистра одинаково подходят и ВРег, и НРег — результат сравнения будет тем же. Выбор между ними — вопрос стиля. А вот ТРег для сравнения использовать нельзя: она меняет регистр по-своему и не гарантирует одинакового результата для строк, отличающихся только регистром.

Что выбрать для задачи

ВРег или НРег

Подходят для сравнения строк и поиска дублей. Результат эквивалентен, выбирайте любую

ТРег

Только для визуального оформления текста. Не подходит для сравнения и поиска

Без преобразования

Когда регистр значим: пароли, коды, артикулы, где "А1" и "а1" — разные значения

Типичные задачи, где нужна ВРег

Поиск дублей в справочниках — самая массовая задача. Когда в базу попадают «ООО Ромашка», «ООО РОМАШКА» и «ооо ромашка», прямое сравнение их не объединит. Группировка по ВРег(СокрЛП(Наименование)) в запросе покажет группы потенциальных дублей, которые затем можно обработать.

Вторая частая задача — сопоставление данных при загрузке из файлов и внешних систем. Данные из Excel или сторонних учётных систем часто приходят в непредсказуемом регистре, и нормализация через ВРег позволяет надёжно находить соответствия с элементами справочников.

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

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

Ограничения и частые ошибки

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

Вторая ловушка — забыть, что функция возвращает новое значение. Конструкция ВРег(МояСтрока); без присваивания результата ничего не делает: строка останется прежней. Правильно: МояСтрока = ВРег(МояСтрока);.

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

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

Как проверить, что ВРег работает правильно

Проверить функцию можно прямо в конфигураторе через внешнюю обработку или консоль кода: выполните Сообщить(ВРег("тест 123")) — должно вывестись «ТЕСТ 123». Если цифры и пробелы сохранились, а буквы стали заглавными, функция работает штатно.

Для запроса проверка — это сравнение результата с эталоном: заведите тестовый элемент с известным наименованием в смешанном регистре и выполните запрос с условием ВРег(Наименование) = ВРег(&Параметр), передав параметр в другом регистре. Запись должна найтись.

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

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

Результат ВРег в коде
Норма

Буквы заглавные, цифры и символы без изменений

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

Строка не изменилась — результат не присвоен

Условие запроса с ВРег
Норма

Записи находятся при любом регистре параметра

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

Находит только при точном совпадении регистра — параметр не нормализован

Поиск дублей
Норма

Варианты в разном регистре попадают в одну группу

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

Одинаковые на вид строки в разных группах — мешают пробелы или неразрывные символы

FAQ

Чем ВРег отличается от НРег в 1С?

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

Меняет ли ВРег исходную строку?

Нет. Функция возвращает новую строку, а исходное значение остаётся прежним. Чтобы «изменить» переменную, результат нужно ей же и присвоить: Строка = ВРег(Строка);.

Работает ли ВРег с русскими буквами?

Да, функция корректно обрабатывает кириллицу и латиницу: «пример» станет «ПРИМЕР», «example» — «EXAMPLE». Цифры, пробелы и знаки препинания не изменяются.

Почему запрос с ВРег в условии работает медленно?

Применение функции к полю в секции ГДЕ не позволяет использовать индекс по этому полю, и СУБД перебирает всю таблицу. На больших объёмах лучше хранить нормализованную копию значения в отдельном реквизите и искать по ней.

Можно ли использовать ВРег для сравнения паролей или кодов?

Не стоит. Для паролей, артикулов и кодов регистр, как правило, значим: «Ab1» и «AB1» могут быть разными значениями. ВРег применяют там, где регистр не имеет смысла, — наименования, ФИО, адреса, пользовательский ввод ключевых слов.

Что делать, если строки выглядят одинаково, но ВРег- сравнение не срабатывает?

Почти всегда причина в невидимых символах: пробелы по краям, двойные пробелы, неразрывный пробел (Символ(160)), табуляция. Добавьте СокрЛП и при необходимости замену неразрывных пробелов через СтрЗаменить перед сравнением.

Итог

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

ВРег — функция 1С для перевода строки в верхний регистр, доступная в коде и в запросах. Главное применение — сравнение строк без учёта регистра. Нормализуйте обе стороны сравнения, не забывайте присваивать результат и учитывайте влияние на индексы в запросах.