Глава 1. Понятие обработчика событий
Общие сведения. 1
Последовательность выполнения обработчиков. 3
Создание внешнего обработчика. 5
Общие сведения
Обработчики событий позволяют отслеживать логику вашей работы в программе СБиС++: дают возможность выполнять определенный набор команд в зависимости от произошедших с записью событий. Обработчики привязываются к записям, т. е. записи одного формата имеют одинаковый набор обработчиков.
Обработчики событий подразделяются на внутренние и внешние.
Внутренние обработчики
Внутренние обработчики написаны на языке C++ и спрятаны в коде программы в файлах с расширением «*.dll» (sbis.dll и muzzle.dll - основные библиотеки программы). Список таких обработчиков довольно разнообразен, каждый из них отвечает за обработку определённых действий в программе. Вот только некоторый перечень типовых обработчиков СБиС++:
Имя | Область действия |
LinkLCond | Связанные записи |
LinkTreeCond | Иерархический список |
ColorHandler | Цвета и пометки |
ShiftHandler | Перемещение строк |
LinkTypeByteCond | Выборка по связи и типу |
AuthorHandler | Авторство |
UniqNumHandler | Формирование уникальных номеров |
FixChangeHandler | Фиксация изменений |
BranchLeafConverter | Преобразование узла в лист и обратно |
Обработчики группы Legacy | Наследие лиц, документов, номенклатуры и т. д. |
С полным списком всех доступных в программе обработчиков вы столкнётесь, например, при назначении обработчика событий в описании формата таблицы или обработчика записей в диалоге:

Рис. 1-1 – Выбор обработчика событий в описании формата таблицы «Документы»
Внешние обработчики
Внешние обработчики в отличие от внутренних находятся в отдельных файлах со следующими расширениями:
Расширение | Описание содержимого |
.sel-hdl | Обработчик событий выборки |
.dlg-hdl | Обработчик событий диалогов |
.bar-hdl | Обработчик событий панели инструментов |
.rec-hdl | Обработчик событий списка записей |
.tbl-hdl | Обработчик событий таблицы |
.htm-hdl | Обработчик событий html-отчетов |
Они написаны на языке СБиС++ и доступны для создания и редактирования любому пользователю.
Крайне не рекомендуется создавать обработчик для всей таблицы БД («.tbl-hdl»), лучше создавать обработчик событий окна или диалога.
Программа уже содержит некоторый набор обработчиков, необходимых при работе в СБиС++. Чтобы их увидеть, можно воспользоваться клавишами <Ctrl+O>. В появившемся окне выбрать вариант «Открыть обработчик»:

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

Рис. 1-3 – Список обработчиков для приходной накладной
Все они выстраиваются в цепочку по следующему правилу. Первыми выполняются внешние обработчики в порядке их загрузки, а уже потом внутренние. Причем последние в этой цепочке не показываются, они скрыты во внутреннем коде программы.
В списке могут показываться и правила операций (в нашем примере это «Приобретены ТМЦ»). С точки зрения языка СБиС++ правило операции – это тоже некоторый обработчик событий, описанных в этом правиле. Подробнее на этом остановимся немного позже.
При завершении выполнения команд одного обработчика следующий обработчик вызывается с помощью функции СледФункция():

Рис. 1-4 – Список всех доступных обработчиков
Если не указать явный вызов этой функции, то цепочка обработчиков будет прервана.
Бывают случаи, когда необходимо изменить последовательность выполнения действий. В этом случае может понадобиться следующая комбинация:
{
перем пРезультат=СледФункция();
...
вернуть пРезультат;
}
# сначала выполняются действия, описанные в следующей функции, а уже потом функция переходит к выполнению своих действий.
Создание внешнего обработчика
Для того, чтобы создать новый обработчик или отредактировать уже существующий, нужно стоя на объекте нажать <Ctrl+Shift+F12>. Если к данному объекту уже привязаны обработчики, то появится их список и отдельным пунктом «Создать новый обработчик». Если внешних обработчиков к этому объекту ещё не привязано, то программа выдаст соответствующее сообщение:

Рис. 1-5 – Запрос на создание внешнего обработчика
По умолчанию каждый новый обработчик создается в модуле «!Заплатки» в файле с соответствующим расширением и названием выборки. При желании обработчик можно переместить в любой файл с описанием обработчиков событий нужного объекта.
В открывшемся окне можно написать свои функции или выбрать шаблон события в выпадающем списке справа.

Рис. 1-6 – Список шаблонов событий
В правилах операций этот список несколько ограничен, в силу того, что выполнение некоторых функций в правилах невозможно.
При выборе уже имеется некоторое краткое описание выполнения этой функции:
функция ИмяДиалога( пИмя )
#
# Возвращает имя диалога для редактирования данной записи
# в пИмя передаётся текущее имя диалога
#
{
вернуть СледФункция();
}
В функции могут передаваться переменные, описание которых также приводится. Список допустимых функций для данного файла отображается при нажатии <Ctrl+L>:

Рис. 1-7 – Список функций данного файла
У функции, которая уже используется, имеется значок
. Для быстрого перехода к такой функции необходимо два раза щёлкнуть на её названии.


