Для 1с поле ввода с типом строка можно применить маску ввода. В 1с маска задает формат представления данных и ограничивает вводимой информации. Это очень удобно бывает во многих жизненных задачках, например ввод телефона, ввод специального кода или представления номера. В 1с маску можно задать как интерактивно «в режиме конфигуратора», так и программно.
Для 1с поле ввода маска доступны следующие форматы ограничители.
Ввод только числовых данных:
* 9 – вводятся только цифры
* # – вводятся цифры и знаки «+» «-» и пробел
* h ввод шестеричных цифр
Ввод цифр и букв:
* @ – ввод символов алфавита, и при этом они будут преобразованы в верхний регистр
* N – разрешен ввод алфавитных символов но уже можно контролировать регистр.
* U – вводи символов алфавита с преобразованием в верхней регистр. Отличие между U и @ не смог найти.
* ! – любой введенный символ автоматический преобразуется к верхнему регистру
* X – разрешен ввод только латиницы
Для запрет ввода символа «^» в 1с поле ввода, необходимо прописать этот символ в маску
В маске могут присутствовать специальные символы «.» , «(», «)», «-» и «,» и некоторые другие, они позволяют форматировать строку.
Например, нам нужно указать, что номер вводится с указанием кода города. То нужно прописать 1с маску ввода «9 (999) 999 99 99» или «9 (999) 999-99-99». Все зависит от требуемого формата представления строки. Или допустим нам нужно ввести формат дополнительного номера накладной типа «код подразделение.месяц.год», тогда маска будет «UUUU.99.9999» или «UUUU/99/9999»
Стоит помнить что, задавая маску – мы обязаны задать её полностью такой длины, какой длины вводится строка. Либо если существуют несколько форматов строки, короткий и длинный – то можно задать две и более масок, через запятую.
Например, вводим сотовый телефон клиента, либо городской (без указания кода города), тогда 1c маска будет 9 (999) 999-99-99;999-99-99
Из справки 1С:
ПолеВвода (TextBox) — Маска (Mask)
Использование: Чтение и запись.
Описание:
Тип: Строка. Содержит посимвольную строку маски интерактивного ввода текста в поле.
В строке маски допустимо использование следующих специальных символов:
! — любой введенный символ преобразуется в верхний регистр;
9 — допустимо ввести произвольный символ цифры;
# — допустимо ввести произвольный символ цифры или — (знак минус) или + (знак плюс) или пробел;
N — допустимо ввести любые алфавитно-цифровые символы (буквы или цифры);
U — допустимо ввести любые алфавитно-цифровые символы (буквы или цифры) и любой введенный символ преобразуется в верхний регистр;
X (латинского алфавита) — допустимо ввести произвольный символ;
^ — не допустимо вводить этот символ интерактивно пользователем, он может устанавливаться только из языка;
h — допустим ввод символов обозначения шестнадцатеричных цифр;
@ – допустимо ввести любые алфавитно-цифровые символы (буквы или цифры) в верхнем регистре или пробел.
При помещении значения из поля ввода с маской в текстовый реквизит, связанный с этим полем ввода, происходит следующее преобразование: на тех позициях, где в маске стоит символ «@», а в строке пробел – пробел удаляется. Если в маске из специальных символов используются только символы «@», то все символы текста, соответствующие символам маски, не являющимся специальными символами, удаляются после по-следнего непустого блока из символов «@». Например, при маске «@@.@@.@@.» текст «41. 2. .» преобразуется в «41.2».
Для того, чтобы использовать в маске один из специальных символов, нужно использовать перед ним символ «».
Допускается указание нескольких масок в одном параметре. Маски разделяются символом «;». В этом случае использоваться будет та маска, к которой подходит введенный текст.
Недоступно на сервере 1С:Предприятие. Не используется в модуле внешнего соединения.
Содержание:
1. Что такое поле Маска ввода
2. Ограничения в масках ввода в 1С
1. Что такое поле Маска ввода
В данной статье будет описано, что такое поле «Маска ввода» в 1С. Также будут приведены все форматы и ограничители, которые доступны в поле «Маска ввода».
Когда в системе 1С есть поле ввода, которое имеет тип «строка», то в таком случае к нему есть возможность применить маску ввода данных. Данная функция отвечает за форматирование внешнего вида информации и за её количество. Маска ввода может находить практическое применение: маска ввода даты, маска ввода номера телефона, кода из сообщения.
Сама маска ввода может быть задана и при помощи конфигуратора, и текстом программы.
2. Ограничения в масках ввода в 1С
Рассмотрим, какие существуют форматы и ограничители свойств масок ввода в системе 1С.
Форматы-ограничители для поля «Маска ввода»:
· 9 – вводиться могут только цифры;
· # — вводиться могут все цифры, пробел и знаки «+» и «-»;
· h – вводиться могут только шестеричные цифры;
· @ — вводиться могут буквенные символы, при этом все они будут становиться верхним регистром;
· N – вводиться могут любые буквенные символы, регистр при этом не меняется;
· U – аналогично «@» — можно вводить буквенные символы, и они будут преобразованы в верхний регистр;
· I – можно вводить любые символы, но все они будут преобразованы в верхний регистр;
· X – вводиться могут любые символы латиницы.
Чтобы запретить вводить какой-либо конкретный знак, это нужно прописать до того, как сделать маску ввода.
Символы «.», «(», «)», «-» и «,» также могут быть прописаны в маске ввода, с их помощью происходит форматирование строки. Рассмотрим примеры заданий масок ввода:
Пример №1: пусть нужно сделать маску ввода телефона, при этом, в нём должен присутствовать код города. В таком случае в системе 1С нужно написать маску ввода «9 (999) 999 99 99».
Пример №2: пусть нужно вводить в поле информацию кода накладной, вида «код.подразделение.месяц.год», в этом случае маска ввода будет выглядеть следующим образом – «UUUU.99.9999».
Замечание: при задании маски ввода её длина должна соответствовать длине строки. В случае, когда в строке может быть несколько форматов, потребуется написать несколько масок ввода — через точку с запятой.
Пример №3: пусть нужно ввести либо мобильный номер телефона, либо домашний (городской), тогда маска ввода номера будет выглядеть следующим образом – «9 (999) 999 99 99;999-99-99».
Если поместить значение из маски ввода в текст, который имеет привязку к данному полю, то значения преобразуются следующим образом: если в маске ввода символ «@», при этом в строке находится пробел, то пробел будет удалён.
Если в маске ввода есть только символы «@», то из текста все значения (которые не специальные символы) будут удалены после крайнего блока, заполненного символами «@».
Пример №4: пусть есть маска ввода следующего вида – «@@.@@.@@», а текст ввели «35. 3. .», данный текст будет преобразован в «35.3».
Чтобы прописать в маске ввода один из символов, который является специальным, необходимо перед данным символом поставить «».
В данной статье было описано, что такое маска ввода в 1С, а также описаны все критерии, параметры и форматирование масок ввода с примерами того, как они работают на практике.
Специалист компании «Кодерлайн»
Айдар Фархутдинов
Для 1с поле ввода с типом строка можно применить маску ввода. В 1с маска задает формат представления данных и ограничивает вводимой информации. Это очень удобно бывает во многих жизненных задачках, например ввод телефона, ввод специального кода или представления номера. В 1с маску можно задать как интерактивно «в режиме конфигуратора», так и программно.
Для 1с поле ввода маска доступны следующие форматы ограничители.
Ввод только числовых данных:
* 9 – вводятся только цифры
* # – вводятся цифры и знаки «+» «-» и пробел
* h ввод шестеричных цифр
Ввод цифр и букв:
* @ – ввод символов алфавита, и при этом они будут преобразованы в верхний регистр
* N – разрешен ввод алфавитных символов но уже можно контролировать регистр.
* U – вводи символов алфавита с преобразованием в верхней регистр. Отличие между U и @ не смог найти.
* ! – любой введенный символ автоматический преобразуется к верхнему регистру
* X – разрешен ввод только латиницы
Для запрет ввода символа «^» в 1с поле ввода, необходимо прописать этот символ в маску
В маске могут присутствовать специальные символы «.» , «(», «)», «-» и «,» и некоторые другие, они позволяют форматировать строку.
Например, нам нужно указать, что номер вводится с указанием кода города. То нужно прописать 1с маску ввода «9 (999) 999 99 99» или «9 (999) 999-99-99». Все зависит от требуемого формата представления строки. Или допустим нам нужно ввести формат дополнительного номера накладной типа «код подразделение.месяц.год», тогда маска будет «UUUU.99.9999» или «UUUU/99/9999»
Стоит помнить что, задавая маску – мы обязаны задать её полностью такой длины, какой длины вводится строка. Либо если существуют несколько форматов строки, короткий и длинный – то можно задать две и более масок, через запятую.
Например, вводим сотовый телефон клиента, либо городской (без указания кода города), тогда 1c маска будет 9 (999) 999-99-99;999-99-99
Из справки 1С:
ПолеВвода (TextBox) — Маска (Mask)
Использование: Чтение и запись.
Описание:
Тип: Строка. Содержит посимвольную строку маски интерактивного ввода текста в поле.
В строке маски допустимо использование следующих специальных символов:
! — любой введенный символ преобразуется в верхний регистр;
9 — допустимо ввести произвольный символ цифры;
# — допустимо ввести произвольный символ цифры или — (знак минус) или + (знак плюс) или пробел;
N — допустимо ввести любые алфавитно-цифровые символы (буквы или цифры);
U — допустимо ввести любые алфавитно-цифровые символы (буквы или цифры) и любой введенный символ преобразуется в верхний регистр;
X (латинского алфавита) — допустимо ввести произвольный символ;
^ — не допустимо вводить этот символ интерактивно пользователем, он может устанавливаться только из языка;
h — допустим ввод символов обозначения шестнадцатеричных цифр;
@ – допустимо ввести любые алфавитно-цифровые символы (буквы или цифры) в верхнем регистре или пробел.
При помещении значения из поля ввода с маской в текстовый реквизит, связанный с этим полем ввода, происходит следующее преобразование: на тех позициях, где в маске стоит символ «@», а в строке пробел – пробел удаляется. Если в маске из специальных символов используются только символы «@», то все символы текста, соответствующие символам маски, не являющимся специальными символами, удаляются после по-следнего непустого блока из символов «@». Например, при маске «@@.@@.@@.» текст «41. 2. .» преобразуется в «41.2».
Для того, чтобы использовать в маске один из специальных символов, нужно использовать перед ним символ «».
Допускается указание нескольких масок в одном параметре. Маски разделяются символом «;». В этом случае использоваться будет та маска, к которой подходит введенный текст.
Недоступно на сервере 1С:Предприятие. Не используется в модуле внешнего соединения.
Информация взята с сайта http://helpf.pro
на форме есть реквизит тип ПолеВВода, длина 4. Как задать ему маску цифры и только латинские буквы?
Если маска NNNN тогда можно вводить цифры и любые буквы вне зависимости от языка раскладки клавы.
Если маска 99;ХХ тогда первые два символа цифры а третий и четвертый любые буквы латинские.
Из справки 1С:
ПолеВвода (TextBox) — Маска (Mask)
Использование: Чтение и запись.
Описание:
Тип: Строка. Содержит посимвольную строку маски интерактивного ввода текста в поле.
В строке маски допустимо использование следующих специальных символов:
! — любой введенный символ преобразуется в верхний регистр;
9 — допустимо ввести произвольный символ цифры;
# — допустимо ввести произвольный символ цифры или — (знак минус) или + (знак плюс) или пробел;
N — допустимо ввести любые алфавитно-цифровые символы (буквы или цифры);
U — допустимо ввести любые алфавитно-цифровые символы (буквы или цифры) и любой введенный символ преобразуется в верхний регистр;
X (латинского алфавита) — допустимо ввести произвольный символ;
^ — не допустимо вводить этот символ интерактивно пользователем, он может устанавливаться только из языка;
h — допустим ввод символов обозначения шестнадцатеричных цифр;
@ – допустимо ввести любые алфавитно-цифровые символы (буквы или цифры) в верхнем регистре или пробел.
При помещении значения из поля ввода с маской в текстовый реквизит, связанный с этим полем ввода, происходит следующее преобразование: на тех позициях, где в маске стоит символ «@», а в строке пробел – пробел удаляется. Если в маске из специальных символов используются только символы «@», то все символы текста, соответствующие символам маски, не являющимся специальными символами, удаляются после по-следнего непустого блока из символов «@». Например, при маске «@@.@@.@@.» текст «41. 2. .» преобразуется в «41.2».
Для того, чтобы использовать в маске один из специальных символов, нужно использовать перед ним символ «».
Допускается указание нескольких масок в одном параметре. Маски разделяются символом «;». В этом случае использоваться будет та маска, к которой подходит введенный текст.
Ранее мы добавили свой дополнительный реквизит «СНИЛС» для внутреннего документа и сделали закладку с дополнительными реквизитами первой на форме.
Пришло время улучшить юзабилити нашего реквизита. Как известно СНИЛС имеет определённый формат ввода. Кроме того, он содержит контрольное число в виде двух последних цифр для проверки корректности его ввода. Учитывая это, будет хорошим тоном по отношению к пользователям, если мы поможем ему корректно указать СНИЛС для сотрудника, а в случае ошибки предупредить его об этом.
Делаем маску ввода для дополнительного реквизита
Номер СНИЛС представляет собой строку следующего формата «XXX-XXX-XXX XX», где Х это цифра от 0 до 9. Последняя группа символов XX представляет собой контрольное число. К сожалению типовой механизм не позволяет задать маску ввода для дополнительных реквизитов. Поэтому внесем изменения в программный код. Создание полей на форме для дополнительных реквизитов происходит динамически при создании формы на сервере, либо при изменении некоторых реквизитов в уже открытой форме. Первичный вызов процедуры создания дополнительных реквизитов выглядит так:
|
&НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) ... УправлениеСвойствами.ПриСозданииНаСервере(ЭтаФорма, ДополнительныеПараметры); ... КонецПроцедуры |
Само создание полей формы происходит в процедуре
|
УправлениеСвойствами.ЗаполнитьДополнительныеРеквизитыВФорме() |
Откроем общий модуль УправлениеСвойствами и найдем там эту процедуру. Внесем туда изменения — добавим в конце вызов своей процедуры:
|
Процедура ЗаполнитьДополнительныеРеквизитыВФорме(Форма, Объект = Неопределено, ПоляНадписей = Ложь, СкрытьУдаленные = Неопределено) Экспорт ... маг_РаботаСДокументами.ЗаполнитьДополнительныеРеквизитыВФорме(Форма, ОписаниеОбъекта, ПоляНадписей) ; ... КонецПроцедуры |
Теперь в общий модуль маг_РаботаСДокументами добавим саму реализацию этой процедуры:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
Процедура ЗаполнитьДополнительныеРеквизитыВФорме(Форма, Объект, ПоляНадписей) Экспорт Если ТипЗнч(Объект.Ссылка) <> Тип(«СправочникСсылка.ВнутренниеДокументы») Тогда Возврат; КонецЕсли; ВидДокументаСтрокой = «»+Форма.Объект.ВидДокумента; Если ВидДокументаСтрокой = «Заявка на прием» тогда //Получим уникальное имя для реквизита СНИЛС ИмяДопРеквизита = маг_ПовторноеИспользование.УникальноеИмяДопРеквизита(Объект.ВидДокумента, «СНИЛС»); Рек = Форма.Элементы.Найти(ИмяДопРеквизита); Если Рек <> Неопределено тогда Рек.Маска = «999-999-999 99»; Рек.УстановитьДействие(«ПриИзменении», «маг_СНИЛСПриИзменении»); КонецЕсли; КонецЕсли; КонецПроцедуры |
Здесь мы сначала получаем уникально имя для нашего реквизита. По нему мы сможем обращаться как к самому реквизиту формы, так и к полю формы. Для получения уникального имени используем следующую функцию, поместим ее в общий модуль маг_ПовторноеИспользование:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
Функция УникальноеИмяДопРеквизита(ВидДокумента, ИмяРеквизита) Экспорт УстановитьПривилегированныйРежим(Истина); Набор = ВидДокумента.НаборСвойств; Результат = «»; Запрос = Новый Запрос; Запрос.Текст = «ВЫБРАТЬ ПЕРВЫЕ 1 | ВЫБОР | КОГДА Наборы.ПометкаУдаления | ТОГДА &ПустойНабор | ИНАЧЕ Наборы.Ссылка | КОНЕЦ КАК Набор, | Наборы.Свойство |ИЗ | Справочник.НаборыДополнительныхРеквизитовИСведений.ДополнительныеРеквизиты КАК Наборы |ГДЕ | Наборы.Ссылка = &Ссылка | И Наборы.Свойство.Заголовок = &Наименование»; Запрос.УстановитьПараметр(«Наименование», ИмяРеквизита); Запрос.УстановитьПараметр(«Ссылка», Набор); Запрос.УстановитьПараметр(«ПустойНабор», Справочники.НаборыДополнительныхРеквизитовИСведений.ПустаяСсылка()); РезультатЗапроса = Запрос.Выполнить(); Выб = РезультатЗапроса.Выбрать(); Если Выб.Следующий() тогда ИмяУникальнаяЧасть = СтрЗаменить(ВРег(Строка(Выб.Набор.УникальныйИдентификатор())), «-«, «x») + «_» + СтрЗаменить(ВРег(Строка(Выб.Свойство.УникальныйИдентификатор())), «-«, «x»); Результат = «ДополнительныйРеквизитЗначение_» + ИмяУникальнаяЧасть; КонецЕсли; Возврат Результат; КонецФункции |
После того как по уникальному имени получили ссылку на поле формы, устанавливаем для него маску ввода, а так же назначаем обработчик ПриИзменении для проверки корректности ввода СНИЛСа (об этом ниже). После внесения этих дополнений, значение СНИЛСа на форме должно вводиться по маске как показано на картинке ниже:
Маска для поля СНИЛС
Подключаем обработчик события для дополнительного реквизита
Для проверки корректности ввода СНИЛС используем типовую функцию из 1С:ЗУП. Поместим данную функцию в наш общий модуль маг_РаботаСДокументами. Ниже сама функция:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
Функция СтраховойНомерПФРСоответствуетТребованиям(СтраховойНомер) Экспорт Результат = Истина; СтрокаЦифр=СтрЗаменить(Лев(СтраховойНомер,11),«-«,«»); Если ПустаяСтрока(СтрокаЦифр) Тогда Возврат Ложь; КонецЕсли; Попытка П1 = Число(СтрокаЦифр); КонтрольноеЧисло=Число(Прав(СтраховойНомер,2)); Исключение Возврат Ложь; КонецПопытки; Если Число(Лев(СтрокаЦифр,9)) > 1001998 Тогда Всего=0; Для Сч = 1 По 9 Цикл Всего=Всего+Число(Сред(СтрокаЦифр,10—Сч,1))*Сч КонецЦикла; Остаток=Всего%101; Остаток=?(Остаток=100,0,Остаток); Если Остаток<>КонтрольноеЧисло Тогда Результат = Ложь; КонецЕсли; Иначе Результат = Ложь; КонецЕсли; Возврат Результат; КонецФункции |
Помните, мы программно назначили обработчик на поле дополнительного реквизита. Теперь добавим саму процедуру для обработчика ПриИзменении в модуль формы элемента справочника «ВнтуренниеДокументы»:
|
&НаКлиенте Процедура маг_СНИЛСПриИзменении(Элемент) Если НЕ маг_РаботаСДокументами.СтраховойНомерПФРСоответствуетТребованиям(Элемент.ТекстРедактирования) тогда ПоказатьПредупреждение(,«СНИЛС указан неверно!!!»); КонецЕсли; КонецПроцедуры |
Теперь, если пользователь ошибется при вводе СНИЛСа, то система предупредит его и выдаст сообщение о некорректном значении:
Предупреждение
Итоги
После небольших изменений в программе, поведение нашего дополнительного реквизита стало более дружелюбным к пользователю. Теперь при заполнении поля СНИЛСа легче визуально контролировать его правильность за счет маски ввода. Кроме того, даже если если пользователь ошибется при вводе, программа предупредит его об этом.



