Как в 1С 7.7 отследить изменение пометки в Списке Значений?

Программист 1С v7.7 IT и автоматизация бизнеса
← На главную

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

Метод 1: Использование формулы элемента «Текст»

Этот метод является наиболее «штатным», так как он не требует использования сторонних библиотек. Суть заключается в том, что при любом взаимодействии с формой (клик мышью, перемещение курсора) 1С обновляет контекст формы и пересчитывает формулы всех элементов, размещенных на ней.

Для реализации этого метода выполним следующие действия:

  1. Добавим на форму элемент Текст.
  2. В поле «Формула» этого элемента пропишем вызов функции, которая будет отвечать за проверку состояния списка.
  3. В коде модуля формы создадим эту функцию. Она будет сравнивать текущее состояние пометки в списке с сохраненным ранее состоянием (например, в переменной или реквизите).

Рассмотрим структуру проверки состояния списка:


Если Список.РазмерСписка() > 0 Тогда
    Для поз = 1 По Список.РазмерСписка() Цикл
        // Проверяем текущее состояние пометки элемента
        Если Список.Пометка(поз) = 1 Тогда
            // Здесь обрабатываем логику, если элемент помечен
        КонецЕсли;
    КонецЦикла;
КонецЕсли;

Важное замечание: Чтобы отловить именно момент изменения, нам нужно хранить «предыдущее» состояние списка в глобальной переменной модуля формы. При каждом вызове функции из формулы элемента Текст мы будем сравнивать текущий статус пометок с сохраненным. Если обнаружится различие — значит, произошло событие клика.

Метод 2: Применение внешней компоненты 1С++ (FormEx)

Если нам требуется профессиональное решение, исключающее «грязные» методы опроса формы, мы можем использовать внешнюю компоненту 1С++, а именно её расширение FormEx. Это позволяет нам работать с интерфейсом на более низком уровне, перехватывая системные сообщения Windows.

Используя объект Сервис из состава FormEx, мы можем установить обработчик на событие WM_LBUTTONDOWN (нажатие левой кнопки мыши). Это позволяет мгновенно реагировать на действие пользователя без задержек, характерных для опроса формы.

Преимущества использования компоненты:

Метод 3: Имитация списка через Таблицу Значений

Иногда самым надежным способом оказывается отказ от стандартного СписокЗначений в пользу ТаблицаЗначений. Это дает нам полный контроль над каждым кликом пользователя.

Разберем, как это реализовать:

  1. Размещаем на форме ТаблицаЗначений.
  2. Первую колонку делаем числовой (в ней будет храниться 0 или 1 — состояние нашей «пометки»).
  3. Для отображения используем картинки (флажки), что делает интерфейс наглядным для пользователя.
  4. Используем стандартное событие ПриНажатииСтроки.

При нажатии на строку мы анализируем, в какую колонку попал клик. Если это колонка с пометкой, мы инвертируем значение и перерисовываем картинку. Это событие 1С ловит штатно и без каких-либо дополнительных настроек.

Подведем итоги

Выбор метода зависит от ваших задач:

Помните, что при работе с СписокЗначений в 1С 7.7 мы всегда должны искать баланс между простотой реализации и надежностью работы кода.

← На главную