1С ВРег, 1С НРег, 1С ТРег – изменение «регистра» символов


Функции 1С ВРег(Строка) и 1С НРег(Строка) приводит все символы в строке к верхнему (АБВГД) или нижнему (абвгд) регистру.

Функция 1С ТРег(Строка) приводит все символы в строке к нижнему (абвгд) регистру, а первую букву в каждом слове к верхнему (АБВГД).


Например:

  • Выполняем 1С ВРег(«ПРИвет»)
  • 1С возвращает «ПРИВЕТ»
  • Выполняем 1С НРег(«приВЕТ»)
  • 1С возвращает «привет»
  • Выполняем 1С ТРег(«СЕРГЕЕВ-лопатин андрей с»)
  • 1С возвращает «Сергеев-Лопатин Андрей С»

Функция 1С ТРег() используется при обработке полей, где пользователь должен ввести ФИО. Например в обработчике ПриИзменении у текстового поля на форме, с именем реквизита формы ФиоКонтактногоЛица:
ФиоКонтактногоЛица = ТРег(СокрЛП(ФиоКонтактногоЛица));

Функции 1С ВРег() и 1С НРег() используются чаще всего в условиях (сравнении) данных, введенных пользователем с шаблоном. Например – во многих типовых конфигурациях есть справочник стран мира, а в нем элемент «РОССИЯ». При работе документа нам известно, что если выбрана «РОССИЯ», то поле ГТД «не видно».

Если мы напишем:
Если СтранаСсылка.Наименование = "Россия" Тогда

То эта строка может не сработать. Программируя, мы не знаем как точно будет называться элемент — «Россия», «россия» или «РОССИЯ». При сравнении же учитывается регистр букв.

Поэтому при сравнении лучше использовать 1С ВРег:
Если ВРЕГ(СокрЛП(СтранаСсылка.Наименование)) = "РОССИЯ" Тогда

Тогда мы точно будем уверены, что как бы не ввел пользователь – сравнение сработает.

На примере нашего анализатор текста сделаем с помощью 1С ВРег, 1С НРег и 1С ТРег – «нормализации» ФИО – первая буква в фамилии, имени и отчестве с большой, а остальные с маленькой, а к сокращениям добавим точку (про анализатор текста см. выше «Функции работы со строками 1С»). Примерно также работает 1С ТРег(), кроме добавления точки к сокращениям.

Допустим:

  • что нам на «входе» подается строка, содержащая ФИО в «неизвестном нам виде, как ввел пользователь»
  • ФИО может быть как полная фамилия, а имя и отчество в сокращенном, так и полностью
  • регистр букв неизвестен



Только зарегистрированные пользователи VIP группы могут видеть этот контент.


Пример использования созданных нами функций:
НормализацияФИО("ПЕТРОВ-немерович сергей александрович");
НормализацияФИО("бегемотов с а");

Сообщения от 1С в результате выполнения этого кода:
ФИО было: ПЕТРОВ-немерович сергей александрович
ФИО стало: Петров-Немерович Сергей Александрович
ФИО было: бегемотов с а
ФИО стало: Бегемотов С. А.

Обратите внимание на следующие использованные конструкции.
Момент 1:
НормализированныйТекст = НРЕГ(СтрЗаменить(СокрЛП(ФИО), ".", ""));

Мы могли написать это так:
НормализированныйТекст = СокрЛП(ФИО);
НормализированныйТекст = СтрЗаменить(НормализированныйТекст, ".", "");
НормализированныйТекст = НРЕГ(НормализированныйТекст);

Но вызов функции можно «вкладывать» друг в друга, для экономии текста программы.

Момент 2:
РазрешенныйСимвол = Найти(РазрешенныеСимволы, Буква);
Если не РазрешенныйСимвол Тогда

Мы могли написать это так:
Позиция = Найти(РазрешенныеСимволы, Буква);
Если Позиция = 0 Тогда

Но значения «булево» (истина, ложь) можно выразить в числах (ложь – 0, истина – остальное), и наоборот. Чем мы и воспользовались, получив более читаемый текст.
Момент 3:
Результат = Результат + ?(ЗапрещенныйСимвол, ВРЕГ(НормализированныйТекст), НормализированныйТекст) + ?(ДлинаСлова = 0, ".", "");

Мы могли написать это так:
Если ЗапрещенныйСимвол Тогда
     Результат = Результат + ВРЕГ(НормализованныйТекст);
Иначе
     Результат = Результат + НормализованныйТекст;
КонецЕсли;
Если ДлинаСлова = 0 Тогда
     Результат = Результат + ".";
КонецЕсли;

Но оператор ?(условие, что делать если да, что делать если нет) позволяет прописывать условные действия в более компактном виде.


Проголосовать за этот пост:

1 Star2 Stars3 Stars4 Stars5 Stars (16 голосов, среднее: 3,00 из 5)
Загрузка...

Добавить комментарий