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

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

Как задать маску в 1С: настройка маски ввода и формата строки

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

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

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

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

Какие маски бывают в 1С и чем они отличаются

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

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

Сравнение вариантов

Маска ввода (свойство Маска)

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

Форматная строка (свойство Формат, функция Формат())

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

Проверка в коде (СтрПодобнаПоШаблону, обработчики)

Подходит для валидации значений при загрузке, обмене, программной записи. Требует написания кода.

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

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

Маска работает только для реквизитов строкового типа. Если реквизит имеет тип «Число» или «Дата», свойство маски либо недоступно, либо не даст ожидаемого эффекта — для таких полей используйте форматную строку. Также учтите: длина строки реквизита должна вмещать все символы шаблона, включая скобки, дефисы и пробелы, иначе значение обрежется при записи.

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

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

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

&НаКлиенте

Процедура ПриОткрытии(Отказ)

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

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

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

Символы шаблона и готовые примеры масок

В шаблоне маски используются управляющие символы: 9 — необязательная цифра, # — обязательная цифра, N — обязательный алфавитно-цифровой символ, U — буква с преобразованием в верхний регистр, X — обязательный произвольный символ, ! — любой символ с переводом в верхний регистр, h — символ шестнадцатеричного числа. Все остальные символы (скобки, дефисы, пробелы) вставляются в поле как постоянные разделители.

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

НазначениеМаскаКомментарий
Телефон (мобильный)9(999)999-99-99Первая цифра и код обязательны по факту заполнения
ИНН организации##########10 обязательных цифр
ИНН физлица############12 обязательных цифр
Код подразделения###-###Шесть цифр через дефис
Артикул с буквамиUU-#####Две буквы в верхнем регистре и пять цифр

Как задать формат строки для чисел и дат

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

Примеры форматных строк: ЧЦ=15; ЧДЦ=2; ЧРД=, — число с двумя знаками после запятой; ДФ=dd.MM.yyyy — дата в привычном виде; ЧН=0 — подстановка нуля вместо пустого значения. Конструктор форматной строки в конфигураторе позволяет собрать нужный вариант мышью и сразу увидеть пример результата — это самый безопасный способ подобрать формат без ошибок синтаксиса.

СуммаСтрокой = Формат(СуммаДокумента, "ЧЦ=15; ЧДЦ=2; ЧГ=3,0");

ДатаСтрокой = Формат(ТекущаяДатаСеанса(), "ДЛФ=D");

Параметр ЧГ управляет группировкой разрядов (разделением тысяч пробелом): значение ЧГ=3,0 включает группировку, ЧГ=0 — отключает. Это важно при выгрузке данных в другие системы, где пробелы в числах могут сломать импорт.

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

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

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

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

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

Ввод значения в поле
Норма

Разделители подставляются автоматически, лишние символы не вводятся

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

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

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

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

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

Значение обрезано — увеличьте длину строки реквизита

Отчёт или печатная форма
Норма

Значение выводится в нужном виде

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

Вид отличается — настройте формат в макете отдельно

Ограничения и когда лучше не использовать маску

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

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

Итог

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

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

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

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

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

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

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

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

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

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

Да, через расширение конфигурации: форма заимствуется в расширение, и маска задаётся там. Типовая конфигурация остаётся на поддержке, а обновления проходят без конфликтов.

Чем отличается функция Формат() от маски при выводе в отчёт?

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