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

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

Как задать маску реквизита в 1С

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

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

Задать маску можно двумя способами: в конфигураторе через свойство «Маска» у реквизита формы или у элемента управления, а также программно — через свойство Маска объекта ПолеФормы. Оба подхода используют один и тот же язык описания маски, встроенный в платформу 1С:Предприятие.

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

Какие символы используются в маске 1С

Платформа 1С поддерживает собственный набор управляющих символов маски. Они не совпадают с регулярными выражениями, поэтому переносить шаблоны из других языков нельзя — синтаксис нужно писать именно по правилам платформы.

  • ! — любой введённый символ переводится в верхний регистр;
  • 9 — цифра или пробел, необязательная позиция;
  • # — цифра, обязательная позиция;
  • N — буква или цифра, обязательная позиция;
  • @ — буква, цифра или пробел, необязательная позиция;
  • h — шестнадцатеричная цифра (0–9, A–F), обязательная позиция;
  • H — шестнадцатеричная цифра, необязательная позиция;
  • X — любой символ, обязательная позиция;
  • ^ — любой символ, кроме пробела, обязательная позиция.

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

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

Самый простой способ — установить маску статически, в режиме конфигурирования. Это подходит, когда формат реквизита не меняется в зависимости от контекста: например, ИНН организации всегда состоит из 10 цифр.

Порядок действий: откройте конфигуратор, найдите нужный объект (справочник, документ или регистр) и откройте его форму. В дереве элементов формы выделите поле ввода, связанное с реквизитом, и откройте палитру свойств. Найдите свойство «Маска» и введите строку шаблона, например ########## для десятизначного ИНН юридического лица.

Убедитесь, что реквизит имеет строковый тип с достаточной длиной: длина строки должна вмещать не только вводимые символы, но и все литералы маски. Для маски телефона +7 (###) ###-##-## потребуется строка длиной не менее 18 символов, иначе значение обрежется при записи.

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

Как задать маску программно

Программная установка маски нужна, когда формат зависит от условий: например, маска ИНН у физического лица — 12 цифр, а у организации — 10. В этом случае маску назначают в обработчиках формы на клиенте или на сервере.

// Пример: установка маски в зависимости от вида контрагента

&НаКлиенте

Процедура УстановитьМаскуИНН()

Если Объект.ВидКонтрагента = ПредопределенноеЗначение(

"Перечисление.ВидыКонтрагентов.ФизическоеЛицо") Тогда

Элементы.ИНН.Маска = "############"; // 12 цифр

Иначе

Элементы.ИНН.Маска = "##########"; // 10 цифр

КонецЕсли;

КонецПроцедуры

Обращение идёт через коллекцию Элементы формы: Элементы.ИмяПоля.Маска = "...". Менять маску удобно в обработчике ПриИзменении поля-переключателя (вида контрагента, типа документа) и в ПриОткрытии, чтобы форма сразу открывалась с корректным шаблоном.

bsl
Элементы.Телефон.Маска = "+7 (###) ###-##-##";

Типовые примеры масок для распространённых реквизитов

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

РеквизитМаскаКомментарий
Телефон (РФ)+7 (###) ###-##-##Литералы скобок и дефисов хранятся вместе со значением
ИНН организации##########10 обязательных цифр
ИНН физического лица############12 обязательных цифр
КПП#########9 обязательных цифр
ОГРН#############13 обязательных цифр
Номер договораNNN-NNN/NNБуквы и цифры, разделительные дефисы

Для реквизитов с переменным количеством символов (например, добавочный номер) используйте необязательные позиции 9 и @ — пользователь сможет оставить их пустыми, и маска не заблокирует ввод.

Ограничения и подводные камни

Главное ограничение — маска не является механизмом контроля данных. Она работает только при ручном вводе в поле формы. Обмены, загрузки из файлов, веб-сервисы и программная запись объектов обходят маску полностью. Если формат критичен, добавьте проверку в обработчике ПередЗаписью или ОбработкаПроверкиЗаполнения модуля объекта.

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

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

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

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

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

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

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

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

Литералы подставляются автоматически, курсор перепрыгивает через скобки и дефисы

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

Курсор замирает или литералы стираются вручную — маска не применена к этому элементу

Сохранение и повторное открытие объекта
Норма

Значение отображается полностью в заданном формате

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

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

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

Лишние символы отбрасываются, формат сохраняется

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

Вставляется произвольный текст — проверьте поведение в используемом клиенте

Старые данные в базе
Норма

Значения отображаются корректно

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

Данные искажены — нужна пакетная обработка формата

Типичные ошибки
01
Маска длиннее реквизита: длина строки в метаданных меньше шаблона с литералами — значение обрезается при записи
02
Использование регулярных выражений вместо синтаксиса платформы: конструкции вида \d{10} не работают в свойстве «Маска»
03
Ожидание контроля данных: маска не проверяет записи, созданные программно или загруженные обменом — нужна отдельная валидация в модуле объекта
04
Игнорирование веб-клиента: маска, проверенная только в тонком клиенте, может вести себя иначе в браузере
05
Смена маски без обработки старых данных: ранее введённые значения отображаются искажённо

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

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

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

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

Как выбрать подход

Формат фиксированный и простой (телефон, ИНН, КПП), ввод только ручнойДостаточно маски в свойствах поля формы
Формат зависит от условий (вид контрагента, тип документа)Назначайте маску программно в обработчиках формы
Данные приходят из обменов, загрузок или веб-сервисовДобавьте проверку в ОбработкаПроверкиЗаполнения модуля объекта
Нужна проверка контрольной суммы или логики значенияМаска не подходит — используйте программную валидацию

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

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

Нет, свойство «Маска» применяется только к строковым полям ввода. Для чисел используйте ограничения длины и точности в типе реквизита, а также свойства поля формы «МинимальноеЗначение» и «МаксимальноеЗначение».

Почему маска не срабатывает при загрузке данных из файла?

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

Сохраняются ли литералы маски (скобки, дефисы) в базе данных?

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

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

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

Маска работает в тонком клиенте, но не в веб-клиенте. Что делать?

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

Можно ли изменить маску динамически при изменении другого поля?

Да. В обработчике ПриИзменении управляющего поля задайте новое значение свойства Элементы.ИмяПоля.Маска. При этом учтите, что уже введённое значение может не соответствовать новому шаблону — его стоит очистить или преобразовать программно.

Итог

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

Маска задаётся в свойстве поля формы статически или программно, использует собственный синтаксис платформы (#, 9, N, @, X и другие символы) и работает только для строковых реквизитов при ручном вводе. Длина реквизита должна вмещать литералы, старые данные требуют приведения к формату, а контроль данных при обменах обеспечивается отдельной серверной проверкой.