Ввод данных в 1С:Предприятие часто требует строгого форматирования: номера телефонов с дефисами, даты в определённом виде, серийные номера с разделителями. Без маски ввода пользователи могут вносить информацию в произвольном формате, что приводит к ошибкам в отчётах, сложностям при поиске и проблемам с интеграцией. Например, телефон +79123456789 и 8-912-345-67-89 — это один и тот же номер, но система воспримет их как разные записи.
Маска ввода в 1С решает эту проблему: она автоматически форматирует данные по заданному шаблону прямо во время ввода. Это упрощает работу пользователей, снижает количество ошибок и ускоряет обработку информации. В этой статье разберём, как настроить маску для разных типов данных — от простых чисел до сложных комбинаций символов, — а также рассмотрим типовые ошибки и нюансы для различных версий платформы.
Что такое маска ввода и зачем она нужна
Маска ввода — это шаблон, который определяет, какие символы и в каком порядке пользователь может вводить в поле. Она работает как "трафарет": например, для телефона маска +7 (###) ###-##-## автоматически добавит скобки, дефисы и префикс страны, оставив пользователю только ввод цифр.
Основные задачи маски:
- 📞 Стандартизация данных: все телефоны, ИНН или серийные номера вводятся в одном формате, что упрощает поиск и аналитику.
- ⚡ Ускорение ввода: пользователю не нужно вручную проставлять разделители (точки, дефисы, пробелы).
- 🛡️ Защита от ошибок: маска блокирует ввод некорректных символов (например, букв в поле для чисел).
- 🔄 Совместимость с внешними системами: данные в едином формате легче экспортировать в банки, госорганы или другие программы.
Без маски поле для даты может принять значение 31.02.2023 (несуществующая дата) или 2023-12-31 (непривычный для пользователя формат). Маска же заставит вводить дату строго как ДД.ММ.ГГГГ, а при попытке указать 31 февраля покажет ошибку.
Типы масок ввода в 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 и выше)
В управляемых формах маска задаётся через свойство МаскаВвода элемента формы. Пошаговая инструкция:
- Откройте конфигуратор и найдите нужную форму (например, форму элемента справочника "Контрагенты").
- Перейдите в режим редактирования формы (
Конфигуратор → Объекты → [Ваш объект] → Формы). - Выделите поле, для которого нужна маска (например,
ТелефонилиИНН). - В палитре свойств найдите параметр
МаскаВводаи введите шаблон (например,+7 (###) ###-##-##). - Сохраните форму и обновите конфигурацию (
Конфигурация → Обновить конфигурацию базы данных).
Пример кода для программной установки маски (если нужно задать её динамически):
ЭлементыФормы.Телефон.МаскаВвода = "+7 (###) ###-##-##";
Для обычных форм (1С 8.2 и ниже)
В обычных формах маска настраивается через свойство Формат или программно. Алгоритм:
- Откройте форму в конфигураторе.
- Выделите реквизит формы (например,
ДатаДоговора). - В свойствах найдите
Формати выберите подходящий (например,ДФ=dd.MM.yyyyдля даты). - Для произвольных масок используйте обработчик события
ПриАктивизацииЭлемента:
Процедура ТелефонПриАктивизацииЭлемента(Элемент)
Элемент.Формат = "+7 (###) ###-##-##";
КонецПроцедуры
Убедитесь, что маска соответствует формату данных (например, не используйте буквенные символы для числового поля)
Протестируйте ввод некорректных данных (например, буквы в поле для телефона)
Проверьте отображение маски на мобильных устройствах (если используется тонкий клиент)
Сохраните резервную копию конфигурации перед изменениями-->
Примеры масок для типовых данных
Рассмотрим готовые шаблоны для самых распространённых полей в 1С:
- 📞 Телефон в формате +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.
Чтобы отформатировать данные в отчёте:
- Откройте схему компоновки данных (
.srфайл). - Найдите поле, которое нужно отформатировать (например,
Контрагент.Телефон). - В свойствах поля добавьте выражение для форматирования:
Формат(Контрагент.Телефон, "+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С?
В веб-клиенте маски ввода поддерживаются ограниченно. Решения:
- Используйте
JavaScript-обработчики на стороне клиента. - Настройте валидацию на сервере (проверка формата после отправки данных).
- Для полей с телефоном используйте специализированные компоненты (например, InputMask из библиотеки PrimeFaces, если используется 1С:Enterprise с веб-интерфейсом).
Как сделать маску для ввода времени (ЧЧ:ММ)?
Используйте шаблон ##:## и настройте проверку диапазона (часы от 00 до 23, минуты от 00 до 59):
Если Число(Лев(Значение, 2)) > 23 Или Число(Прав(Значение, 2)) > 59 Тогда
Сообщить("Некорректное время!");
Возврат Ложь;
КонецЕсли;
Можно ли использовать маски в мобильном приложении 1С?
В стандартном мобильном клиенте 1С:Предприятие маски ввода работают ограниченно. Альтернативы:
- Разработайте кастомный экран ввода с валидацией.
- Используйте регулярные выражения для проверки данных после ввода.
- Для телефонов настройте клавиатуру типа
PhonePad(цифры + символы+,*,#).