Обработчик событий документа – это скрипт, автоматически выполняемый в случае ряда событий, происходящих с документом. Для каждого типа документа может быть создан свой обработчик событий. Для создания обработчика необходимо нажать кнопку Event script в форме редактирования типа документа. По умолчанию при создании нового типа документа обработчик событий не создается.
Список всех обработчиков событий документов можно найти в справочнике "Scripts". Кроме того, обработчик событий конкретного типа документа можно открыть из его формы редактирования:
Обработчики событий документов реализуют интерфейс IDocumentEventHandler.
Обработчик может реагировать на следующие события, происходящие с документом:
•BeforeCreate – обработчик выполняется непосредственно перед созданием документа, после нажатия пользователем кнопки создания нового документа. Если у документа есть несколько начальных подтипов, то выполнение обработчика будет предварять открытие формы выбора подтипа.
на входе на обработчик передаются:
•создаваемый документ;
•параметры его создания;
•BeforeClone – обработчик выполняется перед клонированием документа. Он позволяет подготовить документ к клонированию: очистить ненужные табличные части, сбросить поля, не нужные в начальных поттипах и так далее.
на входе на обработчик передаются:
•оригинальный документ, который будет клонироваться;
•дополнительные параметры создания документа, в том числе код подтипа;
•AfterLoad – обработчик выполняется после открытия документа, но не выполняется в случае создания нового документа. С его помощью можно, например, загрузить дополнительные данные в документ.
на входе на обработчик передаются:
•открываемый документ;
•флаг, определяющий будут ли загружены внутренние объекты документа. Внутренними объектами документа являются, например, его свойства-ссылки. В случае указания на необходимость загрузки внутренних объектов в качестве значений таких свойств-ссылок будут загружены записи, на которые они ссылаются, целиком. В противном случае будут загружены лишь идентификаторы записей, на которые ссылаются свойства-ссылки;
•BeforeSave – обработчик выполняется непосредственно перед сохранением документа, после нажатия пользователем кнопки сохранения документа. С его помощью можно, например, проверить данные и при необходимости изменить их перед сохранением.
на входе на обработчик передается сохраняемый документ;
•AfterSave – обработчик выполняется после сохранения документа, в том числе после выполнения обработчика BeforeSave, но до фиксации транзакции. С его помощью можно отменить сохранение, выдав исключение, и отменить все внесенные в документ изменения (внести изменения в уже сохраненный документ нельзя).
на входе на обработчик передается сохраненный документ;
•SaveFailed – обработчик выполняется в случае выдачи исключения во время операции сохранения документа.
на входе на обработчик передаются:
•сохраняемый документ;
•исключение, выданное во время сохранения;
•GenerateDescription – обработчик выполняется после сохранения документа, но перед обработчиком события AfterSave. С его помощью можно сгенерировать описание документа (значения поля Description), которое по умолчанию генерируется по шаблону {DocumentType}({DocumentSubtype}) #{ID} {TRANSACTION_DATE}.
на входе на обработчик передаются:
•сохраняемый документ;
•значение описания;
•BeforeDelete – обработчик выполняется непосредственно перед удалением документа, после нажатия пользователем кнопки удаления документа. С его помощью можно отменить процесс удаления, выдав исключение.
на входе на обработчик передается идентификатор удаляемого документа;
•AfterDelete – обработчик выполняется после удаления документа (документа уже не существует), в том числе после выполнения обработчика BeforeDelete, но до фиксации транзакции. С его помощью можно отменить удаление, выдав исключение.
на входе на обработчик передается идентификатор удаленного документа;
•DeleteFailed – обработчик выполняется в случае выдачи исключения во время операции удаления документа.
на входе на обработчик передаются:
•идентификатор удаляемого документа;
•исключение, выданное во время удаления.
Кроме обработчика событий конкретного типа документа (который может и не быть создан), существует общий обработчик событий документов CommonDocumentEventHandler, который реагирует на события, происходящие с любыми документами. Он реагирует на те же события, но всегда выполняется перед обработчиком событий конкретного типа документа.
Обработчик событий CommonDocumentEventHandler можно найти в справочнике "Scripts" или открыть через списковую форму справочника Document types:
Последовательность вызовов обработчиков событий документа:
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 документа.