Почему не срабатывают события поля ввода и точки останова в 1С

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

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

1. Дублирование элементов управления на многостраничных панелях

Самая распространенная причина в типовых и перенесенных из других конфигураций формах (например, формы справочников персонала, заимствованные из ЗУП в УТ 10.3) — это использование сложных многостраничных панелей. Проанализируем, как возникает данная коллизия:

  1. На форме присутствует элемент типа Панель с несколькими страницами (вкладками), которые могут переключаться программно в зависимости от настроек программы или вида учетных данных.
  2. Один и тот же реквизит объекта (например, ГрафикРаботы) размещен в виде отдельных полей ввода на нескольких страницах панели.
  3. Разработчик назначает обработчик события элементу, расположенному на первой странице, тогда как при открытии формы в режиме «1С:Предприятие» отображается вторая страница с абсолютно идентичным по внешнему виду, но другим по имени элементом управления, у которого обработчик не назначен.

Чтобы выявить дубли, откроем в конфигураторе форму объекта и проверим дерево элементов. Разберем порядок действий:

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

2. Специфика генерации события «ПриИзменении»

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

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

3. Программное переопределение действий формы

В типовых конфигурациях часто применяется динамическая перенастройка форм при их инициализации. Проверим модули формы на наличие вызовов метода УстановитьДействие.

Посмотрим на пример программного назначения и очистки событий:


// Программная установка нового действия для поля ввода
ЭлементыФормы.ПолеВводаГрафикРаботы.УстановитьДействие("ПриИзменении", Новый Действие("ПолеВводаГрафикРаботыПриИзменении"));

// Если в типовом коде передано Неопределено, ранее назначенное в конфигураторе событие сбрасывается:
ЭлементыФормы.ПолеВводаГрафикРаботы.УстановитьДействие("ПриИзменении", Неопределено);

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

4. Проверка свойств доступности и перекрытия элементов

Выясним, нет ли физических ограничений взаимодействия с элементом на форме:

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

5. Диагностика подключения отладчика

Если код события на самом деле отрабатывает, но точка останова игнорируется, проверим параметры подключения отладки:

  1. Откроем пункт главного меню Отладка -> Подключение... и убедимся, что отладчик подключен к целевому клиентскому сеансу (в обычном приложении — к процессу толстого клиента).
  2. Если вызов логики из обработчика события перенаправляется в общий модуль, проверим свойства этого модуля: у него должен быть установлен флаг Клиент (обычное приложение). Если модуль серверный, точка останова сработает только при условии запуска сервера «1С:Предприятия» в режиме отладки с ключом -debug.
  3. Выполним обновление конфигурации базы данных (клавиша F7) и перезапустим сеанс «1С:Предприятия», чтобы исключить рассинхронизацию исполняемого кода и конфигурации.
← На главную