Разработка и Конфигурация · 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. Символ @ автоматически приведёт введённые буквы к верхнему регистру, что удобно для единообразия хранения.
Элементы.Телефон.Маска = "+9 (999) 999-99-99";Как установить маску программно
Программная установка нужна, когда маска зависит от контекста: для российских контрагентов один формат телефона, для иностранных — другой. Код размещают в модуле формы, обычно в обработчике «ПриСозданииНаСервере» или в обработчике изменения поля, от которого зависит маска.
Элементы.Телефон.Маска = "+9 (999) 999-99-99";
Чтобы менять маску по условию, используйте обработчик «ПриИзменении» соответствующего поля. Например, при выборе страны «Россия» ставится маска с кодом +7, при выборе другой страны маска очищается, чтобы не мешать вводу международного формата.
Если поле привязано к реквизиту составного типа, проверьте, что в момент установки маски поле работает именно со строкой. Иначе маска может молча игнорироваться, и вы потратите время на поиск несуществующей ошибки в шаблоне.
- 1Откройте форму объекта в конфигураторе или заимствуйте её в расширение
- 2Выделите поле ввода и найдите в палитре свойств свойство «Маска»
- 3Впишите шаблон, например +9 (999) 999-99-99 для телефона
- 4Убедитесь, что реквизит имеет строковый тип достаточной длины
- 5Обновите конфигурацию и проверьте ввод в режиме предприятия
Проверка результата и типичные ошибки
После настройки откройте форму в режиме 1С:Предприятие и попробуйте ввести значение. Признак корректной работы: курсор движется строго по позициям шаблона, служебные символы (скобки, дефисы) подставляются сами, ввод букв в цифровые позиции блокируется.
Как проверить результат
Скобки и дефисы появляются автоматически
Можно ввести любые символы — маска не применилась
В базе хранится строка в заданном формате
Значение обрезается — не хватает длины строки реквизита
Вставляются только допустимые символы
Вставка ломает формат или отклоняется полностью
Частая проблема — несовпадение длины реквизита и маски. Если реквизит объявлен как Строка(11), а маска со служебными символами занимает 18 позиций, значение при сохранении обрежется. Всегда задавайте длину строки с запасом: для телефона в формате +7 (XXX) XXX-XX-XX нужно минимум 18 символов.
Ограничения масок и альтернативы
Маска — инструмент форматирования, а не контроля. Она не проверит, что ИНН проходит контрольное соотношение, а телефон реально существует. Для таких проверок используются обработчики «ПриИзменении» и «ПередЗаписью» с программной валидацией, а для ИНН — штатные механизмы проверки контрагентов в типовых конфигурациях.
Для полей с датами и числами вместо маски применяйте свойства «Формат» и «Формат редактирования» — они управляют отображением и вводом значений соответствующих типов. Для сложных сценариев, например ввода телефона с выбором страны, удобнее хранить части номера в отдельных реквизитах (код страны, код города, номер) и собирать представление программно.
Как выбрать действие
Частые вопросы
Почему свойство «Маска» не отображается в палитре свойств поля?
Скорее всего, реквизит, к которому привязано поле, имеет не строковый тип — число, дату или ссылку на справочник. Маска доступна только для строк. Измените тип реквизита на «Строка» с достаточной длиной, и свойство появится.
Можно ли сделать необязательные позиции в маске?
Да. Символ 9 требует обязательного ввода цифры, а # и U допускают пропуск позиции. Однако на практике необязательные позиции внутри маски часто запутывают пользователей — для переменной длины надёжнее оставить поле без маски и форматировать значение программно.
Работает ли маска в тонком и веб-клиенте?
Маска поддерживается в управляемых формах, однако поведение при вводе и вставке из буфера может немного отличаться между толстым, тонким и веб-клиентом. Если пользователи работают в разных клиентах, проверьте ввод в каждом из них перед выкаткой доработки.
Как очистить маску, чтобы разрешить свободный ввод?
Программно присвойте свойству пустую строку: Элементы.Телефон.Маска = "". После этого поле снова принимает любые символы. Такой приём используют, когда формат данных заранее неизвестен, например для международных телефонов.
Маска мешает вставке номера из буфера обмена. Что делать?
При вставке платформа пытается сопоставить текст с шаблоном, и лишние символы (например, уже имеющиеся скобки и пробелы) могут ломать результат. Варианты решения: упростить маску до чисто цифровой, обрабатывать вставку в обработчике «ИзменениеТекстаРедактирования» с очисткой от нецифровых символов или отказаться от маски в пользу программного форматирования после ввода.
Что важно запомнить
Маска задаётся в свойстве поля ввода или программно, работает только со строковыми реквизитами и лишь форматирует ввод, не проверяя корректность данных. Следите за длиной строки реквизита и тестируйте ввод во всех используемых клиентах.