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

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

Как создать маску ввода в 1С

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

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

Механизм масок встроен в платформу 1С:Предприятие и доступен без дополнительного программирования: достаточно заполнить свойство «Маска» у поля ввода в конфигураторе. Для нестандартных ситуаций маску можно задать программно или заменить проверкой в обработчиках событий. Ниже разберём все способы, синтаксис специальных символов и типичные ошибки.

Где в 1С задаётся маска ввода

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

Второй вариант — программное назначение через встроенный язык. Это удобно, когда формат зависит от контекста: например, для российского контрагента телефон вводится с кодом +7, а для иностранного — в свободной форме. В этом случае маску устанавливают в обработчике ПриСозданииНаСервере или ПриИзменении связанного реквизита.

Синтаксис специальных символов маски

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

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

Все прочие символы в строке маски воспринимаются как литералы и выводятся в поле как есть. Например, в шаблоне +7 (###) ###-##-## скобки, пробелы и дефисы появятся сами, а пользователь просто набирает десять цифр подряд.

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

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

Рассмотрим настройку на примере поля «Телефон» в карточке контрагента. Порядок действий одинаков для любой управляемой формы в типовых и самописных конфигурациях.

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

Если форма объекта не создана разработчиком, платформа генерирует её автоматически — тогда свойство «Маска» редактировать негде. В этом случае создайте форму вручную через конструктор форм или задайте маску программно в расширении конфигурации, не затрагивая типовой код.

Для полей табличных частей и динамических списков маска задаётся аналогично: выделяется колонка, и в её свойствах заполняется шаблон. Это удобно для ввода одинаковых кодов в строках документа.

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

Большинство практических задач закрывается небольшим набором шаблонов. Ниже — проверенные варианты, которые можно копировать и адаптировать под свою длину данных.

  • Телефон РФ: +7 (###) ###-##-## — десять обязательных цифр, код оператора в скобках.
  • ИНН юридического лица: ########## — ровно десять цифр.
  • ИНН физического лица: ############ — двенадцать цифр.
  • Номер договора с буквами: NNN-#### — три буквы или цифры, дефис, четыре цифры.
  • Артикул фиксированной длины: UU-###### — две заглавные буквы и шесть цифр.
  • Число с необязательной дробной частью: ###99 — три обязательные и две необязательные цифры.

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

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

Программная установка и изменение маски

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

bsl
&НаКлиенте
Процедура СтранаПриИзменении(Элемент)
    Если Объект.Страна = "Россия" Тогда
        Элементы.Телефон.Маска = "+7 (###) ###-##-##";
    Иначе
        Элементы.Телефон.Маска = "";
    КонецЕсли;
КонецПроцедуры

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

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

Когда маска не подходит: альтернативы

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

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

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

Формат строго фиксирован (ИНН, телефон, код)Используйте свойство «Маска» — это самый простой и наглядный вариант.
Длина значения сильно варьируется (email, адрес, международный телефон)Откажитесь от маски, проверяйте значение регулярным выражением при записи.
Данные приходят из обменов и загрузокДобавьте проверку формата в обработчике ПриЗаписи или в процедуре загрузки — маска здесь не работает.
Нужно автоматически исправлять ввод (убирать пробелы, менять регистр)Используйте обработчик ПриИзменении или ОкончаниеВводаТекста с нормализацией значения.

Для проверки по сложным правилам (контрольная сумма ИНН, валидность email) маска принципиально не подходит — она проверяет только позиции символов. Такие проверки реализуются кодом, а маску при этом можно оставить как первый уровень защиты от случайных опечаток.

Как проверить, что маска работает правильно

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

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

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

Ввод цифр подряд
Норма

Разделители (скобки, дефисы) подставляются автоматически

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

Приходится вводить разделители вручную — шаблон задан неверно

Попытка ввести букву в позицию цифры
Норма

Символ блокируется, поле не принимает ввод

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

Буква вводится — в шаблоне стоит N или @ вместо #

Сохранение незаполненного поля
Норма

Значение сохраняется без лишних символов маски или с ними осознанно

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

В базе хранятся «пустые» скобки и дефисы — проверьте логику записи

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

Вставленное значение соответствует формату

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

Вставляется любой текст — добавьте проверку при записи

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

Типичные ошибки при работе с масками

Типичные ошибки
01
Использование # для необязательных позиций — пользователь не сможет сохранить значение, пока не заполнит все обязательные разряды.
02
Ожидание, что маска проверит данные при обмене — при загрузке из файлов и синхронизации маска игнорируется, в базу попадают значения любого формата.
03
Маска на числовом поле с неподходящей длиной — значение обрезается или ввод ведёт себя непредсказуемо; для строк с цифрами используйте строковый тип.
04
Смена маски без обработки уже введённого значения — старое содержимое остаётся в прежнем формате и ломает отчёты и поиск.
05
Слишком жёсткий шаблон для телефонов — международные номера и добавочные не влезают, пользователи начинают вводить данные в обход, в другие поля.

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

Итог

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

Маска ввода в 1С настраивается в свойстве «Маска» поля формы или программно. Используйте # для обязательных цифр, 9 для необязательных, N для букв и цифр. Маска работает только при ручном вводе — для обменов и загрузок добавляйте проверку в коде. После настройки обязательно протестируйте ввод в режиме предприятия.

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

Почему маска не срабатывает при копировании значения?

Маска контролирует только посимвольный ручной ввод. Вставка из буфера обмена, программная запись и загрузка из файлов проходят мимо неё. Чтобы защититься от некорректных данных, добавьте проверку формата в обработчике ПриЗаписи объекта или нормализуйте значение в обработчике ПриИзменении поля.

Можно ли задать маску для поля с типом «Число»?

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

Как сделать маску необязательной для части символов?

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

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

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

Как изменить маску в типовой конфигурации без снятия с поддержки?

Используйте расширение конфигурации: заимствуйте форму объекта в расширение и задайте маску в обработчике ПриОткрытии программно через Элементы.ИмяПоля.Маска. Такой подход не затрагивает типовой код и сохраняет возможность автоматического обновления конфигурации.

Чем маска отличается от проверки регулярным выражением?

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