При разработке интерфейсов на платформе 1С:Предприятие 7.7 мы часто сталкиваемся с тем, что стандартные объекты управления не всегда обладают событиями, которые нам необходимы для реализации гибкого интерфейса. Одной из таких классических задач является необходимость отследить момент установки или снятия пометки (флажка) в элементе формы СписокЗначений. Платформа 7.7 не предоставляет штатного обработчика уровня ПриИзмененииПометки, поэтому нам приходится прибегать к нестандартным подходам.
Этот метод является наиболее «штатным», так как он не требует использования сторонних библиотек. Суть заключается в том, что при любом взаимодействии с формой (клик мышью, перемещение курсора) 1С обновляет контекст формы и пересчитывает формулы всех элементов, размещенных на ней.
Для реализации этого метода выполним следующие действия:
Текст.Рассмотрим структуру проверки состояния списка:
Если Список.РазмерСписка() > 0 Тогда
Для поз = 1 По Список.РазмерСписка() Цикл
// Проверяем текущее состояние пометки элемента
Если Список.Пометка(поз) = 1 Тогда
// Здесь обрабатываем логику, если элемент помечен
КонецЕсли;
КонецЦикла;
КонецЕсли;
Важное замечание: Чтобы отловить именно момент изменения, нам нужно хранить «предыдущее» состояние списка в глобальной переменной модуля формы. При каждом вызове функции из формулы элемента Текст мы будем сравнивать текущий статус пометок с сохраненным. Если обнаружится различие — значит, произошло событие клика.
Если нам требуется профессиональное решение, исключающее «грязные» методы опроса формы, мы можем использовать внешнюю компоненту 1С++, а именно её расширение FormEx. Это позволяет нам работать с интерфейсом на более низком уровне, перехватывая системные сообщения Windows.
Используя объект Сервис из состава FormEx, мы можем установить обработчик на событие WM_LBUTTONDOWN (нажатие левой кнопки мыши). Это позволяет мгновенно реагировать на действие пользователя без задержек, характерных для опроса формы.
Преимущества использования компоненты:
Иногда самым надежным способом оказывается отказ от стандартного СписокЗначений в пользу ТаблицаЗначений. Это дает нам полный контроль над каждым кликом пользователя.
Разберем, как это реализовать:
ТаблицаЗначений.ПриНажатииСтроки.При нажатии на строку мы анализируем, в какую колонку попал клик. Если это колонка с пометкой, мы инвертируем значение и перерисовываем картинку. Это событие 1С ловит штатно и без каких-либо дополнительных настроек.
Выбор метода зависит от ваших задач:
Помните, что при работе с СписокЗначений в 1С 7.7 мы всегда должны искать баланс между простотой реализации и надежностью работы кода.