Скрипты документов

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

DevBookmark_Scripts Обработчик при создании документа BeforeCreate:

Вызывается при создании документа.

input На вход передаются создаваемый документ и параметры его создания.

Обычно обработчик этого события используется для автоматического заполнения полей шапки создаваемого документа.

DevBookmark_Scripts Обработчик инициализации документа AfterLoad:

Вызывается после открытия документа, но не вызывается при создании нового документа.

input На вход передаются открываемый документ и флаг, определяющий будут ли загружены внутренние объекты документа.

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

DevBookmark_Scripts Обработчик перед сохранением документа BeforeSave:

Вызывается при сохранении создаваемого/редактируемого документа.

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

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

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

проверить есть ли отгружаемый товар на складе и при необходимости заменить его тем же товаром с другого склада и т.п.

output После успешного выполнения обработчика документ будет сохранен, а ядром будет вызван обработчик проведения, либо, в случае неудачного выполнения, будет возвращена ошибка.

DevBookmark_Scripts Транзакционные скрипты:

Вызываются ядром после успешного выполнения обработчика перед сохранением документа. Транзакционные скрипты ассоциируются с подтипами документа (для каждого подтипа документа их может быть несколько) и выполняются при сохранении документа соответствующего подтипа.

input На вход передаются документ, который обрабатывался предыдущим обработчиком, коллекция пар проводок (для балансовых итогов) и коллекция проводок (для небалансовых итогов).

Обработчик создает движения, записываемые впоследствии ядром в итоги.

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

DevBookmark_Scripts Обработчик при неудавшемся сохранении документа SaveFailed:

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

input На вход передаются сохраняемый документ и исключение, выданное во время сохранения.

DevBookmark_Scripts Обработчик после сохранения документа AfterSave:

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

input На вход передается документ, который обрабатывался предыдущим обработчиком.

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

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

DevBookmark_Scripts Обработчик генерации описания документа (значения поля Description) GenerateDescription:

Вызывается после сохранения документа, но перед обработчиком после сохранения.

input На вход передается документ и значение описания;

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

DevBookmark_Scripts Обработчик перед удалением документа BeforeDelete:

Вызывается перед удалением документа.

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

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

DevBookmark_Scripts Обработчик при неудавшемся удалении документа DeleteFailed:

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

input На вход передаются идентификатор удаляемого документа и исключение, выданное во время удаления.

DevBookmark_Scripts Обработчик после удаления документа AfterDelete:

Вызывается после успешного выполнения обработчика перед удалением, а также после успешного удаления документа (документа уже не существует), но до фиксации транзакции.

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

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

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

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

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

общий обработчик перед сохранением;

обработчик перед сохранением;

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

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

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

обработчик генерации описания документа;

общий обработчик после сохранения;

обработчик после сохранения;

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

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

общий обработчик перед удалением;

обработчик перед удалением;

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

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

общий обработчик после удаления;

обработчик после удаления;

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

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

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

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

общий обработчик при создании;

обработчик при создании.

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

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

общий обработчик инициализации документа;

обработчик инициализации документа.