Маска ввода в 1С 8.3: символы, конфигуратор и код

· 9 мин

Содержание

Маска в 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.

Полный перечень символов смотрите в синтакс-помощнике — свойство «Маска» поля ввода. Если в символе не уверены, проверьте его там, прежде чем ставить в рабочую форму.

Как задать маску в конфигураторе

Это самый частый способ — маска прописывается один раз при разработке формы и работает для всех.

  1. Откройте конфигуратор и форму, где лежит нужное поле (например, форму элемента справочника Контрагенты).
  2. На форме выделите поле ввода — то, что связано с реквизитом типа «Строка».
  3. Откройте палитру свойств поля (F4 или меню Правка → Свойства).
  4. Найдите группу свойств, отвечающую за ввод, и свойство Маска.
  5. Впишите строку маски, например +7 (999) 999-99-99 для телефона.
  6. Сохраните и обновите конфигурацию базы данных (F7, затем принять изменения).

Маска работает только для поля, связанного с реквизитом типа «Строка». Если реквизит имеет тип «Число» или «Дата», свойство Маска либо недоступно, либо не даст ожидаемого результата — для таких типов есть свойство «Формат».

Настройка маски в конфигураторе
Выполнено: 0 / 5

💡 Задавайте строке достаточную длину. Если маска телефона рассчитана на 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 цифр)99999999997701234567
ИНН физлица/ИП (12 цифр)999999999999770112345678
КПП (9 знаков)999999999770101001
СНИЛС999-999-999 99112-233-445 95
Расчётный счёт (20 цифр)9999999999999999999940702810…
БИК (9 цифр)999999999044525225
Серия и № паспорта РФ99 99 99999945 09 123456

Разделители из маски сохраняются в строке вместе с цифрами. Если СНИЛС введён по маске 999-999-999 99, в реквизите окажется строка с дефисами и пробелом. Для ИНН и КПП разделители обычно не нужны — поэтому их маски делают без них, «слитно».

Для расчётного счёта (20 цифр) разделители тоже лучше не ставить: номер хранят сплошной строкой, а группируют по разрядам уже при печати платёжки, а не в поле ввода.

Когда в значении есть и буквы, и цифры, подключают буквенные символы. Пара частых примеров:

ДанныеМаскаЧто получится
Госномер автоU 999 UU 99А 123 ВС 77
Серия и № договораUU-9999/9999ДГ-2023/0045
Код с буквами и цифрамиNNNNNNA1B2C3

Символ U принимает любую букву и переводит её в верхний регистр, поэтому для госномера оператору не придётся держать включённым Caps Lock. Для свободного текста без приведения регистра берите X или N.

Маски для дат и чисел: когда они не нужны

Частая ошибка новичка — пытаться наложить маску на дату или число. Для них маска не применяется: платформа сама предоставляет под эти типы специальный ввод.

  • 📅 Дата. Поле типа «Дата» показывает календарь и разбор на день-месяц-год. Внешний вид задаёт не маска, а свойство Формат: например ДФ=dd.MM.yyyy для короткой даты или ДЛФ=D для длинной.
  • 🔢 Число. Для числовых полей разрядность и знаки после запятой задаёт тоже Формат: ЧЦ=15; ЧДЦ=2 — это 15 знаков всего и 2 после запятой.

Проще запомнить так: маска управляет вводом в строковое поле, а формат — выводом (отображением) любого типа. Если нужно ограничить ввод цифр с жёстким шаблоном — это маска. Если нужно красиво показать дату, сумму, процент — это формат.

Если число по смыслу должно оставаться строкой (например, номер телефона, где важен ведущий +7 и ноль), храните его в строковом реквизите и применяйте маску. Как «Число» телефон хранить нельзя — потеряете плюс и ведущие нули.

Маски и формат в отчётах и печатных формах

Здесь важно развести два механизма, потому что по запросу «маска в отчёте» чаще ищут именно форматирование вывода.

В печатных формах (макетах табличного документа) за внешний вид значения в ячейке отвечает свойство Формат, а не маска. Маска — это инструмент ввода, а в макете ничего не вводят, там только выводят. Чтобы телефон или счёт красиво разбить на группы при печати, собирают строку в коде через СтрЗаменить или Формат, либо задают формат ячейке.

В отчётах на СКД форматирование полей тоже задаётся через формат (вкладка оформления, свойство формата поля), а не через маску. Маска в отчёте имеет смысл только на форме параметров — если пользователь вводит, скажем, ИНН как условие отбора. Тогда поле параметра можно связать с маской так же, как обычное поле ввода.

Если нужно, чтобы в печатной форме телефон выглядел как +7 (999) 123-45-67, а в базе хранились только цифры, разберите хранимую строку в коде и соберите её по разрядам при заполнении макета. Маска в этом не участвует — она отвечала только за ввод.

Правило простое: вводит пользователь — думайте про маску; показываете готовое значение — про формат.

Проверьте себя
Какой символ маски в 1С означает одну цифру?
Можно ли маской проверить правильность контрольного числа ИНН?
Для какого типа реквизита работает свойство «Маска»?

Ошибки при настройке масок и как их обойти

  • ❌ Маска на числе или дате. Самый частый случай. Для этих типов используют свойство Формат, маска им не нужна.
  • ❌ Длина строки меньше маски. Если реквизит — «Строка» длиной 10, а маска телефона требует больше знаков с разделителями, хвост обрежется. Ставьте длину с запасом или делайте строку неограниченной длины.
  • ❌ Забыли про разделители в значении. Маска 999-999-999 99 кладёт в поле дефисы и пробел. Если дальше по этой строке ищете или сверяете СНИЛС «слитно», сравнение не сойдётся. Либо убирайте разделители из маски, либо чистите строку перед сравнением.
  • ❌ Слишком жёсткая маска. Если в базу попадают нестандартные номера (городские, зарубежные), фиксированная маска телефона не даст их ввести. Для таких полей маску либо не ставят, либо переключают в коде.
  • ❌ Маска вместо проверки. Маска не заменяет контроль корректности. Контрольное число ИНН, СНИЛС, длину счёта проверяйте кодом в обработчике ОбработкаПроверкиЗаполнения — маска только задаёт форму.

Прежде чем менять маску на форме рабочей базы, проверьте изменение в копии. Если маска окажется короче уже введённых значений, при открытии старых записей часть символов может не отобразиться.

Частые вопросы о масках ввода

Маска не пускает буквы в телефон — это нормально?
Да. Символ 9 в маске разрешает только цифры. Если нужно поле с буквами (например, добавочный «доб.»), либо уберите маску, либо используйте для буквенной части символ X или N.
Почему свойство «Маска» неактивно у моего поля?
Скорее всего, поле связано с реквизитом типа «Число» или «Дата». Маска работает только для строковых полей. Поменяйте тип реквизита на «Строка» или задавайте внешний вид через свойство «Формат».
Как хранить телефон без разделителей, но показывать с ними?
Храните в строке только цифры, а разделители показывайте маской. Учтите: по умолчанию разделители из маски попадают в значение. Если нужно чистое хранение, либо делайте маску без разделителей, либо убирайте их из строки в коде перед записью.
Можно ли одну маску менять в зависимости от значения?
Да, через код. В обработчике изменения реквизита присваивайте Элементы.Поле.Маска разные строки — так делают для ИНН на 10 и 12 цифр.
Маска проверяет контрольную цифру СНИЛС?
Нет. Маска следит только за формой: столько-то цифр, разделители на своих местах. Контрольное число СНИЛС и ИНН проверяют отдельным кодом при проверке заполнения.