Справка Инфо-Бухгалтер 10

Файлы описания событий

Файлы описания событий располагаются в директории ./events. При обработке событий принимаются во внимание все файлы, находящиеся в этой директории и имеющие расширение evd. Количество файлов описаний может быть любым, причем описания для одного и того же блока могут быть распределены по разным файлам. Множественность evd-файлов позволяет:

В файле описания указываются имена блоков, и для каждого блока определяются обработчики событий. Имя блока задается в квадратных скобках:

[<имя блока>]

Пробелы между именем и скобками допускаются и значения не имеют. Все описания ниже имени блока относятся к этому блоку, пока не встретится имя другого блока. Описания для одного и того же блока можно вводить многократно, как в одном файле, так и в разных - при обработке событий будут проанализированы все записи. Но в любом случае описания для блока должны предваряться его именем.

Обработчики событий для блока определяются по имени события или по имени семейства события. Перед именем семейства ставится знак амперсанда @. Указание обработчика для события по его имени всегда имеет больший приоритет. Если указан обработчик для события - обработчик для семейства не вызывается. Сам обработчик задается либо указанием имени исполняемого файла (ibx), либо директивой пересылки события на сервер - @. События могут пересылаться на сервер Инфо-Бухгалтер 10 или на прокси-сервер. В последнем случае необходимо указать после директивы имя прокси-сервера. Для одного и того же события можно указывать несколько различных обработчиков даже в рамках одного блока - в этом случае будут последовательно запущены все указанные обработчики.

Обработчик для события

<имя_события> = <имя_файла.ibx>

Обработчик для семейства событий

@<имя_семейства> = <имя_файла.ibx>

Передача события на сервер

<имя_события> = @ 

Передача всех событий семейства на сервер

@<имя_семейства> = @ 

Передача события на прокси-сервер

<имя_события> = @<имя прокси-сервера>

Передача всех событий семейства на прокси-сервер

@<имя_семейства> = @<имя прокси-сервера>

<имя_файла.ibx> - это имя исполняемого файла относительно локальных директорий для исполняемых файлов, установленных в настройках платформы.

Директива пересылки на сервер имеет смысл только в evd-файлах сетевого рабочего места. В evd-файлах на сервере и в локальной версии эта директива игнорируется. В evd-файлах на сервере всегда указываются имена расположенных там ibx-файлов. Поэтому в случае перехода на локальную версию можно просто поместить в одну директорию клиентские и серверные evd-файлы. При использовании такого подхода рекомендуется только давать разные имена семействам событий на сервере и на клиентском месте, иначе логика работы может исказиться. Если же в одну директорию установлены сервер и клиентское приложение - следует быть осторожным с объединением файлов описаний. Логика работы может быть нарушена, поскольку это не одно и то же, что локальная версия.

Для написания комментария используется точка с запятой в начале строки.

Для разделения содержимого evd-файлов на клиентскую и серверную части используются директивы препроцессора. Препроцессор обрабатывает evd-файл до его разбора и построения таблиц обработчиков. Платформа определяет символы препроцессора CLIENT и SERVER. Символ CLIENT определяется в случае сетевого рабочего места и в локальной версии. Символ SERVER определяется случае сервера и локальной версии. Препроцессор позволяет директивами #ifdef, #ifndef, #else и #endif исключать строки evd-файла в зависимотси от набора определенных символов. В помощью директивы #define можно определять собственные символы для включения или отключения каких-то обработчиков.

Пример evd-файла с директивами препроцессора:

; определяем собственный символ, для отключения лога его надо просто убрать или закомментировать
#define BLOCK_A_LOG


[БлокА]
; здесь устанавливаем обработчик для семейства "ЗапросДанныхБлока"
#ifdef SERVER
; это обработчик для сервера и локальной версии (база данных близко)
@ЗапросДанныхБлока = ЗапросДанныхСервер.ibx
#else
; этот обработчик только для сетевого рабочего места (база данных далеко)
@ЗапросДанныхБлока = ЗапросДанныхКлиент.ibx
#endif


#ifdef CLIENT
; дальше фрагмент только для сетевого рабочего места и локальной версии
#ifdef BLOCK_A_LOG
; определен символ BLOCK_A_LOG, то задаем обработчик событий записи в лог
@ЗаписьЛог = ЗаписатьФайлПротокола.ibx
#endif 
#endif 

Пример evd-файла на сетевом рабочем месте

; Набор описаний обработчиков блока "БлокА"
[БлокА]

; События семейства "СобытияОтБ" обрабатываются на рабочем месте 
; алгоритмом alg1.ibx
@СобытияОтБ = alg1.ibx

; Событие с именем "СобытиеОтБ1" обрабатывается алгоритмом alg2.ibx
; (даже если принадлежит семейству "СобытияОтБ")
СобытиеОтБ1 = alg2.ibx

; СобытиеОтС передается на сервер
СобытиеОтС = @

; СобытиеОтС2 передается на сервер, а также обрабатывается локально
СобытиеОтС2 = @
СобытиеОтС2 = alg3.ibx

; Набор описаний обработчиков блока "БлокБ"
[БлокБ]

; Для семейства "СобытияОтА" заданы два обработчика.
; Это означает, что при возникновении события этого семейства 
; будут последовательно вызваны оба алгоритма.
@СобытияОтА = DispB1.ibx
@СобытияОтА = DispB2.ibx

; все события семейства "СобытияОтС" передаются на сервер
@СобытияОтС = @

См. также: