Ввод данных в 1С:Предприятие часто требует строгого форматирования: номера телефонов с дефисами, даты в определённом виде, серийные номера с разделителями. Без маски ввода пользователи могут вносить информацию в произвольном формате, что приводит к ошибкам в отчётах, сложностям при поиске и проблемам с интеграцией. Например, телефон +79123456789 и 8-912-345-67-89 — это один и тот же номер, но система воспримет их как разные записи.

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

Что такое маска ввода и зачем она нужна

Маска ввода — это шаблон, который определяет, какие символы и в каком порядке пользователь может вводить в поле. Она работает как "трафарет": например, для телефона маска +7 (###) ###-##-## автоматически добавит скобки, дефисы и префикс страны, оставив пользователю только ввод цифр.

Основные задачи маски:

  • 📞 Стандартизация данных: все телефоны, ИНН или серийные номера вводятся в одном формате, что упрощает поиск и аналитику.
  • Ускорение ввода: пользователю не нужно вручную проставлять разделители (точки, дефисы, пробелы).
  • 🛡️ Защита от ошибок: маска блокирует ввод некорректных символов (например, букв в поле для чисел).
  • 🔄 Совместимость с внешними системами: данные в едином формате легче экспортировать в банки, госорганы или другие программы.

Без маски поле для даты может принять значение 31.02.2023 (несуществующая дата) или 2023-12-31 (непривычный для пользователя формат). Маска же заставит вводить дату строго как ДД.ММ.ГГГГ, а при попытке указать 31 февраля покажет ошибку.

📊 Для каких данных вы чаще всего используете маски ввода в 1С?
Номера телефонов
Дата и время
Серийные номера документов
ИНН/КПП
Другое

Типы масок ввода в 1С и их синтаксис

В 1С:Предприятие 8 маски ввода задаются с помощью специальных символов-заполнителей. Каждый символ определяет правило для ввода:

Символ Значение Пример
# Цифра (0-9), обязательный символ ###-###123-456
? Буква (A-Z, а-я), обязательный символ ???-###ABC-123
& Любой символ (буква или цифра), обязательный &&&-###X1Y-987
., -, (, ), / Разделители, вводятся автоматически (###) ###-##-##(912) 345-67-89
; Преобразование символов в верхний регистр ???;ABC (даже если ввели abc)

Комбинация этих символов позволяет создавать сложные шаблоны. Например, маска для ИНН юридического лица (10 цифр) будет выглядеть как ##########, а для серийного номера паспорта#### ?????? (4 цифры + 6 букв).

💡

Если маска содержит символ ; в конце, все буквы будут автоматически преобразованы в верхний регистр. Это удобно для полей с аббревиатурами (например, ООО; → всегда ООО, даже если пользователь ввёл ооо).

Как задать маску ввода для поля в форме

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

Для управляемых форм (1С 8.3 и выше)

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

  1. Откройте конфигуратор и найдите нужную форму (например, форму элемента справочника "Контрагенты").
  2. Перейдите в режим редактирования формы (Конфигуратор → Объекты → [Ваш объект] → Формы).
  3. Выделите поле, для которого нужна маска (например, Телефон или ИНН).
  4. В палитре свойств найдите параметр МаскаВвода и введите шаблон (например, +7 (###) ###-##-##).
  5. Сохраните форму и обновите конфигурацию (Конфигурация → Обновить конфигурацию базы данных).

Пример кода для программной установки маски (если нужно задать её динамически):

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

Для обычных форм (1С 8.2 и ниже)

В обычных формах маска настраивается через свойство Формат или программно. Алгоритм:

  1. Откройте форму в конфигураторе.
  2. Выделите реквизит формы (например, ДатаДоговора).
  3. В свойствах найдите Формат и выберите подходящий (например, ДФ=dd.MM.yyyy для даты).
  4. Для произвольных масок используйте обработчик события ПриАктивизацииЭлемента:
Процедура ТелефонПриАктивизацииЭлемента(Элемент)

Элемент.Формат = "+7 (###) ###-##-##";

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

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

Протестируйте ввод некорректных данных (например, буквы в поле для телефона)

Проверьте отображение маски на мобильных устройствах (если используется тонкий клиент)

Сохраните резервную копию конфигурации перед изменениями-->

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

Рассмотрим готовые шаблоны для самых распространённых полей в :

  • 📞 Телефон в формате +7 (XXX) XXX-XX-XX:
    +7 (###) ###-##-##
    Подходит для российских номеров. Для международных форматов используйте +## (###) ###-##-##.
  • 📅 Дата в формате ДД.ММ.ГГГГ:
    ##.##.####
    Для автоматического добавления точек используйте формат даты через свойство Формат.
  • 🆔 ИНН физического лица (12 цифр):
    ################
  • 📄 Серийный номер паспорта (4 цифры + 6 цифр):
    #### ######
  • 💳 Номер банковской карты (16 цифр, группы по 4):
    #### #### #### ####

Для серийных номеров оборудования, где используются буквы и цифры (например, SN-123A456B), подойдёт маска:

??-####?##?
Как запретить ввод пробелов в маске?

Если в шаблоне маски не указан пробел, система автоматически удалит его при вводе. Например, маска ####-#### преобразует ввод "1234 5678" в "1234-5678".

Типовые ошибки и как их избежать

Даже опытные разработчики сталкиваются с проблемами при настройке масок. Вот самые распространённые ошибки и способы их решения:

⚠️ Внимание: Если маска содержит символы, не поддерживаемые шрифтом формы (например, специальные знаки вроде § или ), поле может отображаться некорректно. Используйте только стандартные разделители: -, ., /, (, ) и пробел.
  • Маска не применяется:

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

  • Пользователь может ввести некорректные символы:

    Если маска допускает ввод букв в числовое поле (например, & вместо #), добавьте проверку на стороне сервера:

    Если Не ЗначениеЗаполнено(Значение) Или Не Значение = СоответствиеРегВыражению(Значение, "^[0-9]+$") Тогда
    

    Предупреждение("Допустимы только цифры!", 60);

    Возврат Ложь;

    КонецЕсли;

  • Маска сбивается при редактировании:

    Это происходит, если поле привязано к реквизиту с типом Строка нефиксированной длины. Задайте фиксированную длину строки (например, 12 символов для ИНН).

Ещё одна частая проблема — несовместимость масок с мобильным клиентом 1С. На смартфонах клавиатура может игнорировать разделители (например, автоматически заменять дефис на пробел). В этом случае:

  • Используйте JavaScript-обработчики для веб-клиента.
  • Настройте альтернативный ввод через диалоговое окно.

Динамические маски: как менять шаблон в зависимости от условий

Иногда формат данных зависит от контекста. Например, маска для номера договора может отличаться для физических и юридических лиц. В таких случаях маску нужно задавать программно.

Пример: динамическая маска для поля НомерДокумента в зависимости от типа контрагента:

Процедура НомерДокументаПриАктивизацииЭлемента(Элемент)

Если Объект.ТипКонтрагента = Перечисление.ТипыКонтрагентов.ЮридическоеЛицо Тогда

Элемент.МаскаВвода = "??-###/##"; // Например, "АБ-123/23"

Иначе

Элемент.МаскаВвода = "########"; // Просто 8 цифр

КонецЕсли;

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

Для более сложных условий (например, маска зависит от страны или вида документа) используйте Переключатель:

Процедура УстановитьМаскуДляТелефона(Элемент, Страна)

Если Страна = "Россия" Тогда

Элемент.МаскаВвода = "+7 (###) ###-##-##";

ИначеЕсли Страна = "Казахстан" Тогда

Элемент.МаскаВвода = "+7 (###) ###-##-##"; // Аналогично, но можно добавить префикс +7 7

Иначе

Элемент.МаскаВвода = "+### (###) ###-##-##"; // Международный формат

КонецЕсли;

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

💡

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

Маски ввода в отчётах и печатаемых формах

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

Чтобы отформатировать данные в отчёте:

  1. Откройте схему компоновки данных (.sr файл).
  2. Найдите поле, которое нужно отформатировать (например, Контрагент.Телефон).
  3. В свойствах поля добавьте выражение для форматирования:
Формат(Контрагент.Телефон, "+7 (###) ###-##-##")

Для табличных документов (например, в печатных формах УПД или счётов-фактур) используйте метод УстановитьФормат:

ТабличныйДокумент.Область(1,1).Текст = Формат(НомерТелефона, "+7 (###) ###-##-##");
⚠️ Внимание: В отчётах маска применяется только к отображению данных, но не изменяет их фактическое значение в базе. Если телефон хранится как 79123456789, а в отчёте показывается как +7 (912) 345-67-89, при экспорте в Excel или PDF будет использоваться отформатированный вариант.

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

Можно ли сделать маску, которая автоматически добавляет префикс +7 к телефону?

Да, используйте шаблон +7 (###) ###-##-##. Символ + и цифра 7 будут добавляться автоматически, а пользователь введёт только оставшиеся 10 цифр. Если номер уже начинается с 8, его можно заменить на 7 через обработчик события ПриИзменении:

Если Лев(Значение, 1) = "8" Тогда

Значение = "7" + Сред(Значение, 2);

КонецЕсли;

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

Используйте символ # вместо & или ?. Например, маска ########## разрешает только цифры. Для дополнительной проверки добавьте код:

Если Не ЗначениеЗаполнено(Значение) Или Не Значение = СоответствиеРегВыражению(Значение, "^[0-9]+$") Тогда

Сообщить("Допустимы только цифры!");

Возврат Ложь;

КонецЕсли;

Почему маска не работает в веб-клиенте 1С?

В веб-клиенте маски ввода поддерживаются ограниченно. Решения:

  1. Используйте JavaScript-обработчики на стороне клиента.
  2. Настройте валидацию на сервере (проверка формата после отправки данных).
  3. Для полей с телефоном используйте специализированные компоненты (например, InputMask из библиотеки PrimeFaces, если используется 1С:Enterprise с веб-интерфейсом).
Как сделать маску для ввода времени (ЧЧ:ММ)?

Используйте шаблон ##:## и настройте проверку диапазона (часы от 00 до 23, минуты от 00 до 59):

Если Число(Лев(Значение, 2)) > 23 Или Число(Прав(Значение, 2)) > 59 Тогда

Сообщить("Некорректное время!");

Возврат Ложь;

КонецЕсли;

Можно ли использовать маски в мобильном приложении 1С?

В стандартном мобильном клиенте 1С:Предприятие маски ввода работают ограниченно. Альтернативы:

  • Разработайте кастомный экран ввода с валидацией.
  • Используйте регулярные выражения для проверки данных после ввода.
  • Для телефонов настройте клавиатуру типа PhonePad (цифры + символы +, *, #).