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

Транзакционные скрипты – это скрипты, формирующие движения по итогам (проводки).

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

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

Scripts_DocTransactions

Транзакционные скрипты наследуются от класса DocumentTransactionScriptBase<T> (T – тип документа), который в свою очередь реализует интерфейс IDocumentTransactionScript<T>.

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

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

коллекция пар проводок (для балансовых итогов);

коллекция проводок (для небалансовых итогов).

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

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

Ядро выполняет минимально необходимый набор запросов для приведения в соответствие набора движений в базе и набора сгенерированных транзакционным скриптом движений. Как следствие:

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

если в базе есть движения, которых нет в наборе, сгенерированном транзакционными скриптами, они будут удалены;

и т.д.

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

35_important

Движения содержат дату проведения документа. Соответственно изменение даты проведения документа, даже при отсутствии иных изменений, приводит к изменению всего набора движений. Это, в общем случае, не приводит к блокировкам при записи движений в итоги, но существенно увеличивает время выполнения транзакции. Рекомендуется избегать излишних изменений даты проведения документа.

35_important

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