Почему в строковом поле 1С разрешен ввод только цифр и где искать скрытые ограничения?

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей IT и автоматизация бизнеса
← На главную

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

1. Проверка свойств реквизита в дереве метаданных

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

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

  1. Откроем дерево конфигурации и найдем интересующий объект (например, справочник или документ).
  2. Раскроем ветку Реквизиты (или найдем нужный реквизит в стандартных реквизитах объекта).
  3. Двойным щелчком мыши или через контекстное меню откроем окно свойств реквизита.
  4. Найдем свойство Маска. Для удобства поиска в палитре свойств можно включить сортировку по алфавиту. Если в этом поле задан шаблон, например состоящий из символов 9 (разрешены только цифры), его необходимо очистить.
  5. Проверим свойство Формат редактирования. Если в нем жестко задан числовой формат или шаблон маски, он также будет ограничивать ввод пользователя.

2. Динамическая установка маски и формата в программном коде

В типовых конфигурациях (таких как «1С:Управление торговлей», ERP или КА) интерфейс часто настраивается динамически при открытии формы с помощью механизмов Библиотеки стандартных подсистем (БСП). В этом случае в конфигураторе свойства могут быть пустыми, но заполняться при инициализации формы.

Проверим модули формы и связанные общие модули:

  1. Изучим обработчики событий формы ПриСозданииНаСервере, ПриЧтенииНаСервере и ПриОткрытии.
  2. Выполним глобальный поиск по имени элемента формы (например, Элементы.НомерСчета) во всем модуле. Обратим внимание на прямое переопределение свойств маски:

// Пример программного ограничения ввода в типовых механизмах
Элементы.НомерСчета.Маска = "99999 99999 99999 99999";

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

3. Проверка событий элементов формы

Помимо очевидного обработчика ОкончаниеВводаТекста, ограничение или постобработка введенных данных могут быть реализованы через другие события элемента управления и формы:

  1. Событие формы ОбработкаВводаСтроки.
  2. Событие элемента АвтоПодбор, в котором может перехватываться набранный текст.
  3. Событие ПриИзменении, где алгоритм может принудительно очищать строку от нецифровых символов регулярным выражением или функциями работы со строками сразу после того, как поле потеряет фокус.

4. Влияние расширений конфигурации

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

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

5. Проблемы кэширования метаданных и динамического обновления

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

Для гарантированного сброса некорректного поведения выполним следующие шаги:

  1. Перезапустим клиентское приложение 1С.
  2. Очистим локальный кэш пользователя, запустив сеанс с ключом командной строки /ClearCache, либо удалив временные папки в каталогах AppData\Local\1C\1cv8 и AppData\Roaming\1C\1cv8.
  3. При сохранении изменений в конфигураторе выполним полное обновление структуры базы данных.

6. Пользовательские настройки формы

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

Для проверки перейдем в пользовательский режим, откроем проблемную форму, нажмем кнопку Еще в командной панели и выберем пункт Установить стандартные настройки.

← На главную