Ранее мы добавили свой дополнительный реквизит «СНИЛС» для внутреннего документа и сделали закладку с дополнительными реквизитами первой на форме.

Пришло время улучшить юзабилити нашего реквизита. Как известно СНИЛС имеет определённый формат ввода. Кроме того, он содержит контрольное число в виде двух последних цифр для проверки корректности его ввода. Учитывая это, будет хорошим тоном по отношению к пользователям, если мы поможем ему корректно указать СНИЛС для сотрудника, а в случае ошибки предупредить его об этом.

Делаем маску ввода для дополнительного реквизита

Номер СНИЛС представляет собой строку следующего формата «XXX-XXX-XXX XX», где Х это цифра от 0 до 9. Последняя группа символов XX представляет собой контрольное число. К сожалению типовой механизм не позволяет задать маску ввода для дополнительных реквизитов. Поэтому внесем изменения в программный код. Создание полей на форме для дополнительных реквизитов происходит динамически при создании формы на сервере, либо при изменении некоторых реквизитов в уже открытой форме. Первичный вызов процедуры создания дополнительных реквизитов выглядит так:

Само создание полей формы происходит в процедуре

Откроем общий модуль УправлениеСвойствами и найдем там эту процедуру. Внесем туда изменения — добавим в конце вызов своей процедуры:

Теперь в общий модуль маг_РаботаСДокументами добавим  саму реализацию этой процедуры:

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

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

Ввод СНИЛС по маске

Маска для поля СНИЛС

Подключаем обработчик события для дополнительного реквизита

Для проверки корректности ввода СНИЛС используем типовую функцию из 1С:ЗУП. Поместим данную функцию в наш общий модуль маг_РаботаСДокументами. Ниже сама функция:

Помните, мы программно назначили обработчик на поле дополнительного реквизита. Теперь добавим саму процедуру для обработчика ПриИзменении в модуль формы элемента справочника «ВнтуренниеДокументы»:

Теперь, если пользователь ошибется при вводе СНИЛСа, то система предупредит его и выдаст сообщение о некорректном значении:

Предупреждение о некорректном СНИЛСе

Предупреждение

Итоги

После небольших изменений в программе, поведение нашего дополнительного реквизита стало более дружелюбным к пользователю. Теперь при заполнении поля СНИЛСа легче визуально контролировать его правильность за счет маски ввода. Кроме того, даже если если пользователь ошибется при вводе, программа предупредит его об этом.