В процессе доработки обычных форм в конфигурациях 1С разработчики нередко сталкиваются с ситуацией: в конфигураторе создан обработчик события (например, ПриИзменении), процедура корректно прописана в модуле формы, установлена точка останова, однако при интерактивной работе с полем ввода отладчик не останавливается, а код внутри процедуры не выполняется. Разберем по шагам ключевые причины такого поведения и способы их устранения.
Самая распространенная причина в типовых и перенесенных из других конфигураций формах (например, формы справочников персонала, заимствованные из ЗУП в УТ 10.3) — это использование сложных многостраничных панелей. Проанализируем, как возникает данная коллизия:
Панель с несколькими страницами (вкладками), которые могут переключаться программно в зависимости от настроек программы или вида учетных данных.ГрафикРаботы) размещен в виде отдельных полей ввода на нескольких страницах панели.Чтобы выявить дубли, откроем в конфигураторе форму объекта и проверим дерево элементов. Разберем порядок действий:
Панель и сопоставим имена полей, привязанных к реквизиту.Иногда отсутствие реакции связано с механикой работы платформы «1С:Предприятие». Рассмотрим важные нюансы формирования события ПриИзменении у поля ввода:
Enter, выбрать значение из выпадающего списка или переместить фокус на другой элемент управления (потеря фокуса).ПриИзменении не генерируется платформой.АвтоПодборТекста или ОкончаниеВводаТекста. Для перехвата самого факта открытия формы выбора используем событие НачалоВыбора.В типовых конфигурациях часто применяется динамическая перенастройка форм при их инициализации. Проверим модули формы на наличие вызовов метода УстановитьДействие.
Посмотрим на пример программного назначения и очистки событий:
// Программная установка нового действия для поля ввода
ЭлементыФормы.ПолеВводаГрафикРаботы.УстановитьДействие("ПриИзменении", Новый Действие("ПолеВводаГрафикРаботыПриИзменении"));
// Если в типовом коде передано Неопределено, ранее назначенное в конфигураторе событие сбрасывается:
ЭлементыФормы.ПолеВводаГрафикРаботы.УстановитьДействие("ПриИзменении", Неопределено);
Выполним глобальный поиск по модулю формы (в процедурах ПередОткрытием, ПриОткрытии, а также в процедурах общих модулей, куда передается форма) по ключевому слову УстановитьДействие, чтобы убедиться, что обработчик не перезаписывается во время работы.
Выясним, нет ли физических ограничений взаимодействия с элементом на форме:
ТолькоПросмотр и Доступность. Если реквизит заблокирован для изменения, интерактивный ввод недоступен, а значит, события модификации значения вызываться не будут.Надпись или декоративная Рамка группы, клики мыши перехватываются верхним слоем. В результате поле ввода не получает фокус должным образом.Если код события на самом деле отрабатывает, но точка останова игнорируется, проверим параметры подключения отладки:
-debug.F7) и перезапустим сеанс «1С:Предприятия», чтобы исключить рассинхронизацию исполняемого кода и конфигурации.