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

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

Список всех обработчиков событий документов можно найти в справочнике "Scripts". Кроме того, обработчик событий конкретного типа документа можно открыть из его формы редактирования:

Scripts_DocEventHandlers

Обработчики событий документов реализуют интерфейс IDocumentEventHandler.

Обработчик может реагировать на следующие события, происходящие с документом:

BeforeCreate – обработчик выполняется непосредственно перед созданием документа, после нажатия пользователем кнопки создания нового документа. Если у документа есть несколько начальных подтипов, то выполнение обработчика будет предварять открытие формы выбора подтипа.

input на входе на обработчик передаются:

создаваемый документ;

параметры его создания;

BeforeClone – обработчик выполняется перед клонированием документа. Он позволяет подготовить документ к клонированию: очистить ненужные табличные части, сбросить поля, не нужные в начальных поттипах и так далее.

input на входе на обработчик передаются:

оригинальный документ, который будет клонироваться;

дополнительные параметры создания документа, в том числе код подтипа;

AfterLoad – обработчик выполняется после открытия документа, но не выполняется в случае создания нового документа. С его помощью можно, например, загрузить дополнительные данные в документ.

input на входе на обработчик передаются:

открываемый документ;

флаг, определяющий будут ли загружены внутренние объекты документа. Внутренними объектами документа являются, например, его свойства-ссылки. В случае указания на необходимость загрузки внутренних объектов в качестве значений таких свойств-ссылок будут загружены записи, на которые они ссылаются, целиком. В противном случае будут загружены лишь идентификаторы записей, на которые ссылаются свойства-ссылки;

BeforeSave – обработчик выполняется непосредственно перед сохранением документа, после нажатия пользователем кнопки сохранения документа. С его помощью можно, например, проверить данные и при необходимости изменить их перед сохранением.

input на входе на обработчик передается сохраняемый документ;

AfterSave – обработчик выполняется после сохранения документа, в том числе после выполнения обработчика BeforeSave, но до фиксации транзакции. С его помощью можно отменить сохранение, выдав исключение, и отменить все внесенные в документ изменения (внести изменения в уже сохраненный документ нельзя).

input на входе на обработчик передается сохраненный документ;

SaveFailed – обработчик выполняется в случае выдачи исключения во время операции сохранения документа.

input на входе на обработчик передаются:

сохраняемый документ;

исключение, выданное во время сохранения;

GenerateDescription – обработчик выполняется после сохранения документа, но перед обработчиком события AfterSave. С его помощью можно сгенерировать описание документа (значения поля Description), которое по умолчанию генерируется по шаблону {DocumentType}({DocumentSubtype}) #{ID} {TRANSACTION_DATE}.

input на входе на обработчик передаются:

сохраняемый документ;

значение описания;

BeforeDelete – обработчик выполняется непосредственно перед удалением документа, после нажатия пользователем кнопки удаления документа. С его помощью можно отменить процесс удаления, выдав исключение.

input на входе на обработчик передается идентификатор удаляемого документа;

AfterDelete – обработчик выполняется после удаления документа (документа уже не существует), в том числе после выполнения обработчика BeforeDelete, но до фиксации транзакции. С его помощью можно отменить удаление, выдав исключение.

input на входе на обработчик передается идентификатор удаленного документа;

DeleteFailed – обработчик выполняется в случае выдачи исключения во время операции удаления документа.

input на входе на обработчик передаются:

идентификатор удаляемого документа;

исключение, выданное во время удаления.

Кроме обработчика событий конкретного типа документа (который может и не быть создан), существует общий обработчик событий документов CommonDocumentEventHandler, который реагирует на события, происходящие с любыми документами. Он реагирует на те же события, но всегда выполняется перед обработчиком событий конкретного типа документа.

Обработчик событий CommonDocumentEventHandler можно найти в справочнике "Scripts" или открыть через списковую форму справочника Document types:

Scripts_DocCommonEventHandlers

Последовательность вызовов обработчиков событий документа:

1.При сохранении:

обработчик события BeforeSave CommonDocumentEventHandler;

обработчик события BeforeSave документа;

транзакционные скрипты;

валидаторы транзакций;

сохранение шапки и данных табличных частей в БД;

сохранение транзакций в итогах;

обработчик события GenerateDescription документа;

обработчик события AfterSave CommonDocumentEventHandler;

обработчик события AfterSave документа;

Если на любом этапе сохранения произошла какая-либо ошибка, будет вызван обработчик события SaveFailed (сначала CommonDocumentEventHandler, потом документа).

2.При удалении:

обработчик события BeforeDelete CommonDocumentEventHandler;

обработчик события BeforeDelete документа;

удаление документа в БД;

удаление транзакций из итогов;

обработчик события AfterDelete CommonDocumentEventHandler;

обработчик события AfterDelete документа;

Если на любом этапе удаления произошла какая-либо ошибка, будет вызван обработчик события DeleteFailed (сначала CommonDocumentEventHandler, потом документа).

3.При создании:

создание объекта соответствующего класса;

получение нового идентификатора;

присвоение указанного подтипа;

обработка переданных параметров (параметры, названия которых совпадают с полями документа, автоматически присваиваются полям документа);

обработчик события BeforeCreate CommonDocumentEventHandler;

обработчик события BeforeCreate документа.

4.При загрузке документа:

загрузка документа из БД и инициализация объекта;

обработчик события AfterLoad CommonDocumentEventHandler;

обработчик события AfterLoad документа.