Маска ввода в 1С 8.3: символы, конфигуратор и код
Содержание
Маска в 1С задаётся в свойстве «Маска» поля ввода — в конфигураторе через палитру свойств или программно строкой вида Элементы.Телефон.Маска = "+7 (999) 999-99-99". Символ 9 в такой строке означает любую цифру, а скобки, пробелы и дефисы подставляются сами — пользователь вводит только значащие знаки.
Маска нужна там, где формат строго фиксирован: телефон, ИНН, СНИЛС, номер счёта, серия и номер документа. Она не даёт ввести букву вместо цифры, сама расставляет разделители и делает ввод одинаковым у всех операторов. Ниже — как собрать маску из символов шаблона, где её включить и чем маска отличается от формата для дат и чисел.
Для чего в поле ввода нужна маска
Маска — это шаблон, который накладывается на строковое поле формы и ограничивает ввод по позициям. В каждой позиции разрешён только определённый тип знака: цифра, буква или любой символ. Всё остальное платформа просто не принимает — клавиша не срабатывает.
Что это даёт на практике:
- 🔢 Нельзя ввести мусор. В поле телефона не получится набрать буквы или лишние цифры.
- ➖ Разделители ставятся автоматически. Оператор печатает
9991234567, а в поле появляется+7 (999) 123-45-67. - 📏 Длина фиксирована. Маска из десяти знаков
9не даст ввести ни девять цифр, ни одиннадцать. - 👁️ Единый вид. У всех пользователей номер выглядит одинаково, что удобно для поиска и выгрузок.
Маска контролирует только форму записи, а не смысл. Проверить контрольное число ИНН или СНИЛС она не умеет — для этого нужен код в обработчике проверки заполнения.
Из каких символов собирается шаблон
Строка маски состоит из символов-шаблонов и обычных символов-разделителей. Символ-шаблон задаёт тип знака в позиции, разделитель подставляется как есть.
Основные символы шаблона в 1С 8.3:
| Символ | Что принимает в позиции |
|---|---|
9 | одна цифра |
# | цифра, пробел или знак «+» / «−» |
U | буква, приводится к ВЕРХНЕМУ регистру |
L | буква, приводится к нижнему регистру |
N | буква или цифра |
X | любой символ |
\ | экранирует следующий знак (трактует его как разделитель) |
| любой другой знак | подставляется как разделитель (пробел, -, (, ), .) |
Самый ходовой символ — 9 под цифру. На нём строятся почти все практические маски: телефоны, ИНН, счета, коды. Буквенные символы U и L пригодятся для серий документов, где нужны заглавные буквы.
Маску собирают слева направо: ставят символ-шаблон под каждую значащую позицию, а между ними — разделители. Разберём на серии и номере договора в формате «ДГ-2023/0045»:
UU— две буквы, автоматически в верхнем регистре;-— разделитель, подставится сам;9999— четыре цифры года;/— разделитель;9999— четыре цифры номера.
Итоговая маска: UU-9999/9999. Пользователь печатает только буквы и цифры, дефис и слэш встают на места сами.
Если разделитель совпадает с символом-шаблоном (например, в маске должна быть буква «X» как текст, а не «любой символ»), экранируйте её обратной косой: \X.
Полный перечень символов смотрите в синтакс-помощнике — свойство «Маска» поля ввода. Если в символе не уверены, проверьте его там, прежде чем ставить в рабочую форму.
Как задать маску в конфигураторе
Это самый частый способ — маска прописывается один раз при разработке формы и работает для всех.
- Откройте конфигуратор и форму, где лежит нужное поле (например, форму элемента справочника
Контрагенты). - На форме выделите поле ввода — то, что связано с реквизитом типа «Строка».
- Откройте палитру свойств поля (
F4или менюПравка → Свойства). - Найдите группу свойств, отвечающую за ввод, и свойство
Маска. - Впишите строку маски, например
+7 (999) 999-99-99для телефона. - Сохраните и обновите конфигурацию базы данных (
F7, затем принять изменения).
Маска работает только для поля, связанного с реквизитом типа «Строка». Если реквизит имеет тип «Число» или «Дата», свойство Маска либо недоступно, либо не даст ожидаемого результата — для таких типов есть свойство «Формат».
💡 Задавайте строке достаточную длину. Если маска телефона рассчитана на 11 цифр плюс разделители, а длина реквизита — 10, лишние знаки обрежутся и маска «поедет».
Как установить маску программно
Иногда маску нужно переключать на лету — например, одна маска для российского ИНН из 10 цифр (юрлицо) и другая из 12 (ИП или физлицо). Тогда её задают в коде.
Свойство Маска есть у элемента формы — поля ввода. Обращаются к нему через коллекцию Элементы:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Элементы.Телефон.Маска = "+7 (999) 999-99-99";
Элементы.ИНН.Маска = "9999999999";
Элементы.СНИЛС.Маска = "999-999-999 99";
КонецПроцедуры
Переключение маски в зависимости от значения — тоже в коде. Например, при смене вида контрагента:
&НаКлиенте
Процедура ВидКонтрагентаПриИзменении(Элемент)
Если Объект.ВидКонтрагента = "ЮрЛицо" Тогда
Элементы.ИНН.Маска = "9999999999"; // 10 цифр
Иначе
Элементы.ИНН.Маска = "999999999999"; // 12 цифр
КонецЕсли;
КонецПроцедуры
💡 Имя в Элементы.Телефон — это имя элемента формы (поля), а не имя реквизита. Их часто путают: реквизит может называться Телефон, а поле на форме — ТелефонПоле. Смотрите имя именно в дереве элементов формы.
Готовые маски: телефон, ИНН, СНИЛС и счёт
Собрал практичные шаблоны, которые можно вставлять сразу. Все построены на символе 9.
| Данные | Маска | Что получится |
|---|---|---|
| Телефон (моб.) | +7 (999) 999-99-99 | +7 (999) 123-45-67 |
| ИНН юрлица (10 цифр) | 9999999999 | 7701234567 |
| ИНН физлица/ИП (12 цифр) | 999999999999 | 770112345678 |
| КПП (9 знаков) | 999999999 | 770101001 |
| СНИЛС | 999-999-999 99 | 112-233-445 95 |
| Расчётный счёт (20 цифр) | 99999999999999999999 | 40702810… |
| БИК (9 цифр) | 999999999 | 044525225 |
| Серия и № паспорта РФ | 99 99 999999 | 45 09 123456 |
Разделители из маски сохраняются в строке вместе с цифрами. Если СНИЛС введён по маске 999-999-999 99, в реквизите окажется строка с дефисами и пробелом. Для ИНН и КПП разделители обычно не нужны — поэтому их маски делают без них, «слитно».
Для расчётного счёта (20 цифр) разделители тоже лучше не ставить: номер хранят сплошной строкой, а группируют по разрядам уже при печати платёжки, а не в поле ввода.
Когда в значении есть и буквы, и цифры, подключают буквенные символы. Пара частых примеров:
| Данные | Маска | Что получится |
|---|---|---|
| Госномер авто | U 999 UU 99 | А 123 ВС 77 |
| Серия и № договора | UU-9999/9999 | ДГ-2023/0045 |
| Код с буквами и цифрами | NNNNNN | A1B2C3 |
Символ U принимает любую букву и переводит её в верхний регистр, поэтому для госномера оператору не придётся держать включённым Caps Lock. Для свободного текста без приведения регистра берите X или N.
Маски для дат и чисел: когда они не нужны
Частая ошибка новичка — пытаться наложить маску на дату или число. Для них маска не применяется: платформа сама предоставляет под эти типы специальный ввод.
- 📅 Дата. Поле типа «Дата» показывает календарь и разбор на день-месяц-год. Внешний вид задаёт не маска, а свойство
Формат: напримерДФ=dd.MM.yyyyдля короткой даты илиДЛФ=Dдля длинной. - 🔢 Число. Для числовых полей разрядность и знаки после запятой задаёт тоже
Формат:ЧЦ=15; ЧДЦ=2— это 15 знаков всего и 2 после запятой.
Проще запомнить так: маска управляет вводом в строковое поле, а формат — выводом (отображением) любого типа. Если нужно ограничить ввод цифр с жёстким шаблоном — это маска. Если нужно красиво показать дату, сумму, процент — это формат.
Если число по смыслу должно оставаться строкой (например, номер телефона, где важен ведущий +7 и ноль), храните его в строковом реквизите и применяйте маску. Как «Число» телефон хранить нельзя — потеряете плюс и ведущие нули.
Маски и формат в отчётах и печатных формах
Здесь важно развести два механизма, потому что по запросу «маска в отчёте» чаще ищут именно форматирование вывода.
В печатных формах (макетах табличного документа) за внешний вид значения в ячейке отвечает свойство Формат, а не маска. Маска — это инструмент ввода, а в макете ничего не вводят, там только выводят. Чтобы телефон или счёт красиво разбить на группы при печати, собирают строку в коде через СтрЗаменить или Формат, либо задают формат ячейке.
В отчётах на СКД форматирование полей тоже задаётся через формат (вкладка оформления, свойство формата поля), а не через маску. Маска в отчёте имеет смысл только на форме параметров — если пользователь вводит, скажем, ИНН как условие отбора. Тогда поле параметра можно связать с маской так же, как обычное поле ввода.
Если нужно, чтобы в печатной форме телефон выглядел как +7 (999) 123-45-67, а в базе хранились только цифры, разберите хранимую строку в коде и соберите её по разрядам при заполнении макета. Маска в этом не участвует — она отвечала только за ввод.
Правило простое: вводит пользователь — думайте про маску; показываете готовое значение — про формат.
Ошибки при настройке масок и как их обойти
- ❌ Маска на числе или дате. Самый частый случай. Для этих типов используют свойство
Формат, маска им не нужна. - ❌ Длина строки меньше маски. Если реквизит — «Строка» длиной 10, а маска телефона требует больше знаков с разделителями, хвост обрежется. Ставьте длину с запасом или делайте строку неограниченной длины.
- ❌ Забыли про разделители в значении. Маска
999-999-999 99кладёт в поле дефисы и пробел. Если дальше по этой строке ищете или сверяете СНИЛС «слитно», сравнение не сойдётся. Либо убирайте разделители из маски, либо чистите строку перед сравнением. - ❌ Слишком жёсткая маска. Если в базу попадают нестандартные номера (городские, зарубежные), фиксированная маска телефона не даст их ввести. Для таких полей маску либо не ставят, либо переключают в коде.
- ❌ Маска вместо проверки. Маска не заменяет контроль корректности. Контрольное число ИНН, СНИЛС, длину счёта проверяйте кодом в обработчике
ОбработкаПроверкиЗаполнения— маска только задаёт форму.
Прежде чем менять маску на форме рабочей базы, проверьте изменение в копии. Если маска окажется короче уже введённых значений, при открытии старых записей часть символов может не отобразиться.
Частые вопросы о масках ввода
Маска не пускает буквы в телефон — это нормально?
9 в маске разрешает только цифры. Если нужно поле с буквами (например, добавочный «доб.»), либо уберите маску, либо используйте для буквенной части символ X или N.Почему свойство «Маска» неактивно у моего поля?
Как хранить телефон без разделителей, но показывать с ними?
Можно ли одну маску менять в зависимости от значения?
Элементы.Поле.Маска разные строки — так делают для ИНН на 10 и 12 цифр.