Разработка и Конфигурация · 11 мин
Как задать маску реквизита в 1С
Как задать маску реквизита в 1С: настройка маски ввода в конфигураторе и программно, символы маски, типовые примеры для телефона, ИНН, даты и проверка результата.
Маска ввода в 1С — это шаблон, который ограничивает формат данных, вводимых пользователем в поле формы. Она применяется к реквизитам строкового типа и помогает гарантировать, что телефон, ИНН, номер договора или код будут записаны в едином формате, без лишних символов и пропусков позиций.
Задать маску можно двумя способами: в конфигураторе через свойство «Маска» у реквизита формы или у элемента управления, а также программно — через свойство Маска объекта ПолеФормы. Оба подхода используют один и тот же язык описания маски, встроенный в платформу 1С:Предприятие.
Важно понимать ограничение: маска работает только в толстом и тонком клиенте для полей ввода строкового типа и контролирует именно процесс ввода, а не содержимое базы данных. Если данные записываются программно, маска их не проверяет — для этого нужны отдельные проверки в коде.
Какие символы используются в маске 1С
Платформа 1С поддерживает собственный набор управляющих символов маски. Они не совпадают с регулярными выражениями, поэтому переносить шаблоны из других языков нельзя — синтаксис нужно писать именно по правилам платформы.
!— любой введённый символ переводится в верхний регистр;9— цифра или пробел, необязательная позиция;#— цифра, обязательная позиция;N— буква или цифра, обязательная позиция;@— буква, цифра или пробел, необязательная позиция;h— шестнадцатеричная цифра (0–9, A–F), обязательная позиция;H— шестнадцатеричная цифра, необязательная позиция;X— любой символ, обязательная позиция;^— любой символ, кроме пробела, обязательная позиция.
Все остальные символы в строке маски воспринимаются как литералы — они отображаются в поле ввода как есть и не редактируются пользователем. Например, в маске для телефона +7 (###) ###-##-## скобки, дефисы и «+7» — фиксированные литералы, а пользователь вводит только цифры.
Как задать маску в конфигураторе
Самый простой способ — установить маску статически, в режиме конфигурирования. Это подходит, когда формат реквизита не меняется в зависимости от контекста: например, ИНН организации всегда состоит из 10 цифр.
Порядок действий: откройте конфигуратор, найдите нужный объект (справочник, документ или регистр) и откройте его форму. В дереве элементов формы выделите поле ввода, связанное с реквизитом, и откройте палитру свойств. Найдите свойство «Маска» и введите строку шаблона, например ########## для десятизначного ИНН юридического лица.
Убедитесь, что реквизит имеет строковый тип с достаточной длиной: длина строки должна вмещать не только вводимые символы, но и все литералы маски. Для маски телефона +7 (###) ###-##-## потребуется строка длиной не менее 18 символов, иначе значение обрежется при записи.
- 1Откройте форму объекта в конфигураторе и выделите нужное поле ввода
- 2В палитре свойств найдите свойство «Маска» и введите шаблон
- 3Проверьте, что тип реквизита — строка, а её длина вмещает все символы и литералы маски
- 4Сохраните конфигурацию и обновите конфигурацию базы данных
- 5Откройте форму в режиме Предприятие и проверьте ввод вручную
Как задать маску программно
Программная установка маски нужна, когда формат зависит от условий: например, маска ИНН у физического лица — 12 цифр, а у организации — 10. В этом случае маску назначают в обработчиках формы на клиенте или на сервере.
// Пример: установка маски в зависимости от вида контрагента
&НаКлиенте
Процедура УстановитьМаскуИНН()
Если Объект.ВидКонтрагента = ПредопределенноеЗначение(
"Перечисление.ВидыКонтрагентов.ФизическоеЛицо") Тогда
Элементы.ИНН.Маска = "############"; // 12 цифр
Иначе
Элементы.ИНН.Маска = "##########"; // 10 цифр
КонецЕсли;
КонецПроцедуры
Обращение идёт через коллекцию Элементы формы: Элементы.ИмяПоля.Маска = "...". Менять маску удобно в обработчике ПриИзменении поля-переключателя (вида контрагента, типа документа) и в ПриОткрытии, чтобы форма сразу открывалась с корректным шаблоном.
Элементы.Телефон.Маска = "+7 (###) ###-##-##";Типовые примеры масок для распространённых реквизитов
Ниже собраны шаблоны, которые чаще всего применяются в прикладных решениях. Перед использованием сверьте требования к формату конкретного реквизита в вашей конфигурации — длина и состав могут отличаться.
| Реквизит | Маска | Комментарий |
|---|---|---|
| Телефон (РФ) | +7 (###) ###-##-## | Литералы скобок и дефисов хранятся вместе со значением |
| ИНН организации | ########## | 10 обязательных цифр |
| ИНН физического лица | ############ | 12 обязательных цифр |
| КПП | ######### | 9 обязательных цифр |
| ОГРН | ############# | 13 обязательных цифр |
| Номер договора | NNN-NNN/NN | Буквы и цифры, разделительные дефисы |
Для реквизитов с переменным количеством символов (например, добавочный номер) используйте необязательные позиции 9 и @ — пользователь сможет оставить их пустыми, и маска не заблокирует ввод.
Ограничения и подводные камни
Главное ограничение — маска не является механизмом контроля данных. Она работает только при ручном вводе в поле формы. Обмены, загрузки из файлов, веб-сервисы и программная запись объектов обходят маску полностью. Если формат критичен, добавьте проверку в обработчике ПередЗаписью или ОбработкаПроверкиЗаполнения модуля объекта.
Второй момент — веб-клиент. Поведение масок в веб-клиенте исторически отличалось от тонкого клиента, и часть сценариев (например, посимвольное ограничение при вставке из буфера обмена) может работать иначе. Обязательно тестируйте форму во всех клиентах, которые используются в вашей организации.
Третий риск — смена маски для уже заполненных данных. Если в базе есть значения, записанные без литералов (например, телефон «4951234567»), то после включения маски +7 (###) ###-##-## старые значения могут отображаться некорректно. Потребуется пакетная обработка, приводящая существующие данные к новому формату.
Проверка результата и типичные ошибки
После настройки откройте форму в режиме 1С:Предприятие и проверьте три сценария: ввод корректного значения, попытку ввода недопустимых символов (букв в поле ИНН) и вставку значения из буфера обмена. Поле должно принимать только разрешённые символы, а литералы — подставляться автоматически.
Дополнительно проверьте запись объекта: сохраните элемент, закройте форму и откройте заново. Значение должно отображаться в том же формате, без обрезания. Если хвост строки пропал — увеличьте длину строкового реквизита в метаданных.
Как проверить результат
Литералы подставляются автоматически, курсор перепрыгивает через скобки и дефисы
Курсор замирает или литералы стираются вручную — маска не применена к этому элементу
Значение отображается полностью в заданном формате
Строка обрезана — недостаточна длина реквизита в метаданных
Лишние символы отбрасываются, формат сохраняется
Вставляется произвольный текст — проверьте поведение в используемом клиенте
Значения отображаются корректно
Данные искажены — нужна пакетная обработка формата
Когда маска не подходит: альтернативы
Маска — не единственный способ контроля ввода. Для числовых кодов иногда проще использовать числовой тип реквизита с ограничением длины, а для сложных форматов (email, расчётные счета с контрольным разрядом) — программную проверку, потому что маска не умеет вычислять контрольные суммы и проверять логику значения.
Для реквизитов, которые должны соответствовать сложному шаблону, применяют проверку в ОбработкаПроверкиЗаполнения с анализом строки посимвольно или через функции работы со строками. Это надёжнее маски, так как срабатывает при любом способе записи объекта, включая обмены.
Как выбрать подход
Частые вопросы
Можно ли задать маску для реквизита типа «Число»?
Нет, свойство «Маска» применяется только к строковым полям ввода. Для чисел используйте ограничения длины и точности в типе реквизита, а также свойства поля формы «МинимальноеЗначение» и «МаксимальноеЗначение».
Почему маска не срабатывает при загрузке данных из файла?
Маска контролирует только ручной ввод в поле формы. Программная запись, обмены и загрузки обходят её. Для таких сценариев добавьте проверку формата в обработчике ОбработкаПроверкиЗаполнения модуля объекта.
Сохраняются ли литералы маски (скобки, дефисы) в базе данных?
Да, литералы входят в значение строкового реквизита и хранятся вместе с введёнными символами. Учитывайте это при поиске, сравнении строк и выгрузках во внешние системы, а также закладывайте длину реквизита с запасом.
Как сделать часть символов необязательной?
Используйте символы необязательных позиций: 9 — цифра или пробел, @ — буква, цифра или пробел, H — необязательная шестнадцатеричная цифра. Пользователь сможет оставить эти позиции пустыми, и ввод не заблокируется.
Маска работает в тонком клиенте, но не в веб-клиенте. Что делать?
Поведение масок в веб-клиенте может отличаться, особенно при вставке из буфера обмена. Проверьте сценарий в браузере, обновите платформу до актуального релиза, а для критичных форматов продублируйте контроль серверной проверкой в модуле объекта.
Можно ли изменить маску динамически при изменении другого поля?
Да. В обработчике ПриИзменении управляющего поля задайте новое значение свойства Элементы.ИмяПоля.Маска. При этом учтите, что уже введённое значение может не соответствовать новому шаблону — его стоит очистить или преобразовать программно.
Что важно запомнить
Маска задаётся в свойстве поля формы статически или программно, использует собственный синтаксис платформы (#, 9, N, @, X и другие символы) и работает только для строковых реквизитов при ручном вводе. Длина реквизита должна вмещать литералы, старые данные требуют приведения к формату, а контроль данных при обменах обеспечивается отдельной серверной проверкой.