К статье
Практический материал

Разработка и Конфигурация · 9 мин

Маска в 1С: как сделать и настроить маску ввода

Как сделать маску в 1С: настройка маски ввода для телефона, даты и ИНН, символы маски, программная установка, типичные ошибки и проверка результата.

Маска ввода в 1С — это шаблон, который ограничивает и форматирует данные прямо во время набора в поле формы: пользователь вводит цифры телефона, а программа сама подставляет скобки, пробелы и дефисы. Маски применяют для телефонов, дат, ИНН, номеров документов, банковских счетов и любых других значений с фиксированной структурой.

Настроить маску можно двумя способами: через свойство «Маска» поля ввода в конфигураторе (без единой строки кода) или программно через объект «ОписаниеТипов» и свойство элемента формы. Первый способ подходит для типовых доработок и расширений, второй — когда маска должна меняться в зависимости от условий, например от страны контрагента.

Важно понимать ограничение: маска работает только для строковых значений и не заменяет проверку корректности данных. Она помогает ввести значение в нужном формате, но не гарантирует, что телефон существует или ИНН проходит контроль по контрольной сумме — это решается отдельными проверками.

Где задаётся маска ввода в конфигураторе

Самый простой путь — открыть форму объекта в конфигураторе, выделить нужное поле ввода и в палитре свойств найти свойство «Маска». Оно находится в группе свойств, связанных с вводом данных. В поле значения вписывается строка-шаблон, после чего форму достаточно обновить и проверить в режиме предприятия.

Если форма объекта генерируется автоматически и вы не хотите изменять типовую конфигурацию, используйте расширение конфигурации: заимствуйте форму в расширение и задайте маску там. Это безопасный путь — при обновлении типовой конфигурации ваша доработка не потеряется.

Учтите, что свойство «Маска» доступно не для всех типов полей. Оно применимо к полям ввода со строковым типом данных. Если реквизит имеет тип «Число» или «Дата», маску задать нельзя — для дат используется свойство «Формат» и «Формат редактирования», а для чисел — форматная строка с разделителями групп.

Символы маски и их значение

Шаблон маски строится из специальных символов, каждый из которых определяет, что пользователь может ввести в данной позиции. Все остальные символы в шаблоне (скобки, дефисы, пробелы) выводятся как есть и пропускаются при вводе.

СимволЗначениеПример позиции
9Цифра от 0 до 9, ввод обязателенРазряд телефона или ИНН
#Цифра или знаки + и -, ввод необязателенКод страны с необязательным знаком
hШестнадцатеричная цифра, необязательный вводСпециальные коды
@Буква, ввод обязателен; буквы переводятся в верхний регистрСерия документа
NЛюбой алфавитно-цифровой символ, обязательный вводНомер с буквами и цифрами
!Любой символ, регистр переводится в верхнийКоды с произвольными символами
UЛатинская буква или цифра, необязательный вводНеобязательные позиции кода

Точный набор поддерживаемых символов зависит от версии платформы 1С, поэтому перед использованием редких символов сверьтесь с синтакс-помощником по свойству «Маска» поля ввода. Самые ходовые в практике — 9 для цифр и @ для букв.

Готовые шаблоны масок для типовых задач

Телефон

Для российского номера в формате +7 (XXX) XXX-XX-XX используется маска: +9 (999) 999-99-99. Пользователь просто набирает одиннадцать цифр подряд, а скобки и дефисы появляются автоматически. Если нужен формат без кода страны, подойдёт (999) 999-99-99.

ИНН и другие коды

Для ИНН юридического лица (10 цифр) маска выглядит как 9999999999, для ИНН физического лица (12 цифр) — 999999999999. Для банковского счёта из двадцати цифр — соответственно строка из двадцати девяток. Для серии и номера паспорта удобна маска 99 99 999999.

Номера с буквами

Если номер содержит буквы, например серия документа из двух букв и шесть цифр, применяйте комбинацию: @@ 999999. Символ @ автоматически приведёт введённые буквы к верхнему регистру, что удобно для единообразия хранения.

1c
Элементы.Телефон.Маска = "+9 (999) 999-99-99";

Как установить маску программно

Программная установка нужна, когда маска зависит от контекста: для российских контрагентов один формат телефона, для иностранных — другой. Код размещают в модуле формы, обычно в обработчике «ПриСозданииНаСервере» или в обработчике изменения поля, от которого зависит маска.

Элементы.Телефон.Маска = "+9 (999) 999-99-99";

Чтобы менять маску по условию, используйте обработчик «ПриИзменении» соответствующего поля. Например, при выборе страны «Россия» ставится маска с кодом +7, при выборе другой страны маска очищается, чтобы не мешать вводу международного формата.

Если поле привязано к реквизиту составного типа, проверьте, что в момент установки маски поле работает именно со строкой. Иначе маска может молча игнорироваться, и вы потратите время на поиск несуществующей ошибки в шаблоне.

Порядок действий
  1. 1
    Откройте форму объекта в конфигураторе или заимствуйте её в расширение
  2. 2
    Выделите поле ввода и найдите в палитре свойств свойство «Маска»
  3. 3
    Впишите шаблон, например +9 (999) 999-99-99 для телефона
  4. 4
    Убедитесь, что реквизит имеет строковый тип достаточной длины
  5. 5
    Обновите конфигурацию и проверьте ввод в режиме предприятия

Проверка результата и типичные ошибки

После настройки откройте форму в режиме 1С:Предприятие и попробуйте ввести значение. Признак корректной работы: курсор движется строго по позициям шаблона, служебные символы (скобки, дефисы) подставляются сами, ввод букв в цифровые позиции блокируется.

Контрольные точки

Как проверить результат

Ввод цифр в поле телефона
Норма

Скобки и дефисы появляются автоматически

Тревожный признак

Можно ввести любые символы — маска не применилась

Сохранение значения
Норма

В базе хранится строка в заданном формате

Тревожный признак

Значение обрезается — не хватает длины строки реквизита

Вставка из буфера обмена
Норма

Вставляются только допустимые символы

Тревожный признак

Вставка ломает формат или отклоняется полностью

Частая проблема — несовпадение длины реквизита и маски. Если реквизит объявлен как Строка(11), а маска со служебными символами занимает 18 позиций, значение при сохранении обрежется. Всегда задавайте длину строки с запасом: для телефона в формате +7 (XXX) XXX-XX-XX нужно минимум 18 символов.

Типичные ошибки
01
Маска для числового реквизита — свойство недоступно или игнорируется, переведите тип на строку
02
Длина строки меньше длины маски — значение обрезается при записи в базу
03
Ожидание, что маска проверит корректность — маска только форматирует, валидация делается отдельно
04
Жёсткая маска для международных телефонов — пользователи не могут ввести номер другой страны

Ограничения масок и альтернативы

Маска — инструмент форматирования, а не контроля. Она не проверит, что ИНН проходит контрольное соотношение, а телефон реально существует. Для таких проверок используются обработчики «ПриИзменении» и «ПередЗаписью» с программной валидацией, а для ИНН — штатные механизмы проверки контрагентов в типовых конфигурациях.

Для полей с датами и числами вместо маски применяйте свойства «Формат» и «Формат редактирования» — они управляют отображением и вводом значений соответствующих типов. Для сложных сценариев, например ввода телефона с выбором страны, удобнее хранить части номера в отдельных реквизитах (код страны, код города, номер) и собирать представление программно.

Маршрут решения

Как выбрать действие

Нужен единый формат ввода строки без логикиЗадайте маску в палитре свойств поля формы
Формат зависит от условий (страна, вид документа)Устанавливайте маску программно в обработчике изменения управляющего поля
Поле имеет тип «Дата» или «Число»Используйте свойства «Формат» и «Формат редактирования» вместо маски
Нужна проверка корректности значенияДобавьте программную валидацию в обработчиках формы — маска её не заменяет

Частые вопросы

Почему свойство «Маска» не отображается в палитре свойств поля?

Скорее всего, реквизит, к которому привязано поле, имеет не строковый тип — число, дату или ссылку на справочник. Маска доступна только для строк. Измените тип реквизита на «Строка» с достаточной длиной, и свойство появится.

Можно ли сделать необязательные позиции в маске?

Да. Символ 9 требует обязательного ввода цифры, а # и U допускают пропуск позиции. Однако на практике необязательные позиции внутри маски часто запутывают пользователей — для переменной длины надёжнее оставить поле без маски и форматировать значение программно.

Работает ли маска в тонком и веб-клиенте?

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

Как очистить маску, чтобы разрешить свободный ввод?

Программно присвойте свойству пустую строку: Элементы.Телефон.Маска = "". После этого поле снова принимает любые символы. Такой приём используют, когда формат данных заранее неизвестен, например для международных телефонов.

Маска мешает вставке номера из буфера обмена. Что делать?

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

Итог

Что важно запомнить

Маска задаётся в свойстве поля ввода или программно, работает только со строковыми реквизитами и лишь форматирует ввод, не проверяя корректность данных. Следите за длиной строки реквизита и тестируйте ввод во всех используемых клиентах.