Разработка и Конфигурация · 10 мин
ВРег в 1С: что это и как работает функция
ВРег в 1С — функция перевода строки в верхний регистр. Синтаксис в коде и запросах, отличия от НРег и ТРег, типичные ошибки и примеры сравнения строк.
ВРег — это встроенная функция платформы 1С:Предприятие, которая преобразует строку в верхний регистр: все буквы становятся заглавными, а цифры и символы остаются без изменений. Название расшифровывается как «верхний регистр». Функция доступна и во встроенном языке 1С, и в языке запросов, что делает её одним из базовых инструментов при работе со строковыми данными.
Чаще всего ВРег применяют для сравнения строк без учёта регистра: «Контрагент», «КОНТРАГЕНТ» и «контрагент» после преобразования станут одинаковыми. Это востребовано при поиске дублей, сопоставлении данных из внешних источников, проверке пользовательского ввода и построении отборов в запросах.
Функция корректно работает и с кириллицей, и с латиницей: «пример» превратится в «ПРИМЕР», «example» — в «EXAMPLE». При этом важно понимать, что ВРег не меняет исходное значение «на месте», а возвращает новую строку — результат нужно присвоить переменной или использовать в выражении.
Что такое ВРег и где она доступна
ВРег — часть стандартной библиотеки строковых функций платформы. Она существует в двух воплощениях: как функция встроенного языка (используется в модулях объектов, форм, общих модулях) и как функция языка запросов (используется в тексте запроса в конструкторе или вручную). Синтаксис в обоих случаях одинаковый: ВРег(Строка).
Во встроенном языке функция принимает один параметр — строку — и возвращает строку. Если передать пустую строку, результатом будет пустая строка. Если значение не строкового типа, его нужно предварительно привести к строке функцией Строка(), иначе возможна ошибка преобразования типа.
В языке запросов ВРег применяется к полям строкового типа и к параметрам. Типичное использование — секция ГДЕ для отбора без учёта регистра или поле выборки, когда результат нужно вывести заглавными буквами.
Синтаксис и примеры в коде 1С
Базовый пример во встроенном языке выглядит так: переменной присваивается результат вызова функции. Исходная строка при этом не изменяется — ВРег возвращает новое значение.
ИсходнаяСтрока = "Привет, Мир!";
Результат = ВРег(ИсходнаяСтрока);
// Результат = "ПРИВЕТ, МИР!"
// ИсходнаяСтрока осталась "Привет, Мир!"
На практике ВРег редко используют одиночно — чаще в связке с другими строковыми функциями. Классическая комбинация — ВРег(СокрЛП(Значение)): сначала убираются пробелы по краям, затем строка приводится к верхнему регистру. Такой приём нормализует пользовательский ввод перед сравнением или поиском.
- 1Уберите лишние пробелы: СокрЛП(Строка1) и СокрЛП(Строка2)
- 2Приведите обе строки к одному регистру: ВРег(СокрЛП(Строка1))
- 3Сравните результаты оператором равенства
- 4При совпадении выполните нужную логику, при различии — обработайте расхождение
Пример типовой проверки в коде: Если ВРег(СокрЛП(ВводПользователя)) = ВРег("Администратор") Тогда ... КонецЕсли;. Такой подход устойчив к тому, как именно пользователь ввёл данные — с заглавной буквы, полностью строчными или вперемешку.
ВРег в языке запросов
В запросах ВРег чаще всего встречается в условии отбора. Пример: найти контрагента по наименованию независимо от того, как оно записано в базе и как его ввёл пользователь.
ВЫБРАТЬ
Контрагенты.Ссылка
ИЗ
Справочник.Контрагенты КАК Контрагенты
ГДЕ
ВРег(Контрагенты.Наименование) = ВРег(&Наименование)
Обратите внимание: ВРег применена к обеим сторонам сравнения — и к полю, и к параметру. Если применить функцию только к полю, а параметр передать в произвольном регистре, сравнение может не сработать. Это одна из самых частых причин «пустого» результата запроса.
Также ВРег можно использовать в списке выборки, чтобы вывести данные заглавными буквами, например для печатных форм: ВРег(Контрагенты.НаименованиеПолное) КАК НаименованиеЗаглавными.
Чем ВРег отличается от НРег и ТРег
В платформе есть три родственные функции регистра, и их часто путают. ВРег переводит всё в верхний регистр, НРег — в нижний, ТРег — в «титульный» (каждое слово с заглавной буквы). Выбор зависит от задачи.
| Функция | Результат для «пример строки» | Типовое применение |
|---|---|---|
| ВРег | ПРИМЕР СТРОКИ | Сравнение без учёта регистра, поиск дублей |
| НРег | пример строки | Сравнение, нормализация email и логинов |
| ТРег | Пример Строки | Оформление ФИО, названий для вывода |
Для сравнения строк без учёта регистра одинаково подходят и ВРег, и НРег — результат сравнения будет тем же. Выбор между ними — вопрос стиля. А вот ТРег для сравнения использовать нельзя: она меняет регистр по-своему и не гарантирует одинакового результата для строк, отличающихся только регистром.
Что выбрать для задачи
Подходят для сравнения строк и поиска дублей. Результат эквивалентен, выбирайте любую
Только для визуального оформления текста. Не подходит для сравнения и поиска
Когда регистр значим: пароли, коды, артикулы, где "А1" и "а1" — разные значения
Типичные задачи, где нужна ВРег
Поиск дублей в справочниках — самая массовая задача. Когда в базу попадают «ООО Ромашка», «ООО РОМАШКА» и «ооо ромашка», прямое сравнение их не объединит. Группировка по ВРег(СокрЛП(Наименование)) в запросе покажет группы потенциальных дублей, которые затем можно обработать.
Вторая частая задача — сопоставление данных при загрузке из файлов и внешних систем. Данные из Excel или сторонних учётных систем часто приходят в непредсказуемом регистре, и нормализация через ВРег позволяет надёжно находить соответствия с элементами справочников.
Третий сценарий — проверка пользовательского ввода: коды, ключевые слова, ответы на контрольные вопросы. Приведение ввода к верхнему регистру делает проверку независимой от того, как пользователь нажимал клавиши.
При поиске дублей одной ВРег обычно недостаточно: добавьте СокрЛП для краевых пробелов, а при необходимости — замену двойных пробелов и неразрывных пробелов (Символ(160)) на обычные. Именно невидимые символы чаще всего мешают совпадению строк, которые выглядят одинаково.
Ограничения и частые ошибки
ВРег работает только со строками. Попытка передать число, дату или ссылку без предварительного преобразования приведёт к ошибке или неожиданному результату. Перед вызовом используйте Строка(Значение), если тип данных не гарантирован.
Вторая ловушка — забыть, что функция возвращает новое значение. Конструкция ВРег(МояСтрока); без присваивания результата ничего не делает: строка останется прежней. Правильно: МояСтрока = ВРег(МояСтрока);.
Третья проблема — сравнение с параметром запроса, который сам не приведён к верхнему регистру. Правило простое: обе стороны сравнения должны быть нормализованы одинаково.
Как проверить, что ВРег работает правильно
Проверить функцию можно прямо в конфигураторе через внешнюю обработку или консоль кода: выполните Сообщить(ВРег("тест 123")) — должно вывестись «ТЕСТ 123». Если цифры и пробелы сохранились, а буквы стали заглавными, функция работает штатно.
Для запроса проверка — это сравнение результата с эталоном: заведите тестовый элемент с известным наименованием в смешанном регистре и выполните запрос с условием ВРег(Наименование) = ВРег(&Параметр), передав параметр в другом регистре. Запись должна найтись.
Как проверить результат
Буквы заглавные, цифры и символы без изменений
Строка не изменилась — результат не присвоен
Записи находятся при любом регистре параметра
Находит только при точном совпадении регистра — параметр не нормализован
Варианты в разном регистре попадают в одну группу
Одинаковые на вид строки в разных группах — мешают пробелы или неразрывные символы
FAQ
Чем ВРег отличается от НРег в 1С?
ВРег переводит строку в верхний регистр (заглавные буквы), НРег — в нижний (строчные). Для сравнения строк без учёта регистра обе функции дают одинаковый эффект: важно лишь применить одну и ту же функцию к обеим сравниваемым строкам.
Меняет ли ВРег исходную строку?
Нет. Функция возвращает новую строку, а исходное значение остаётся прежним. Чтобы «изменить» переменную, результат нужно ей же и присвоить: Строка = ВРег(Строка);.
Работает ли ВРег с русскими буквами?
Да, функция корректно обрабатывает кириллицу и латиницу: «пример» станет «ПРИМЕР», «example» — «EXAMPLE». Цифры, пробелы и знаки препинания не изменяются.
Почему запрос с ВРег в условии работает медленно?
Применение функции к полю в секции ГДЕ не позволяет использовать индекс по этому полю, и СУБД перебирает всю таблицу. На больших объёмах лучше хранить нормализованную копию значения в отдельном реквизите и искать по ней.
Можно ли использовать ВРег для сравнения паролей или кодов?
Не стоит. Для паролей, артикулов и кодов регистр, как правило, значим: «Ab1» и «AB1» могут быть разными значениями. ВРег применяют там, где регистр не имеет смысла, — наименования, ФИО, адреса, пользовательский ввод ключевых слов.
Что делать, если строки выглядят одинаково, но ВРег- сравнение не срабатывает?
Почти всегда причина в невидимых символах: пробелы по краям, двойные пробелы, неразрывный пробел (Символ(160)), табуляция. Добавьте СокрЛП и при необходимости замену неразрывных пробелов через СтрЗаменить перед сравнением.
Что важно запомнить
ВРег — функция 1С для перевода строки в верхний регистр, доступная в коде и в запросах. Главное применение — сравнение строк без учёта регистра. Нормализуйте обе стороны сравнения, не забывайте присваивать результат и учитывайте влияние на индексы в запросах.