Транзакционные скрипты – это скрипты, формирующие движения по итогам (проводки).
Транзакционные скрипты ассоциируются с подтипом документа и выполняются при сохранении документа этого подтипа.
Список всех транзакционных скриптов можно найти в справочнике "Scripts". Кроме того, транзакционные скрипты можно открыть (а также создать, удалить или переименовать) в формы редактирования типа документа, соответствующего его подтипу:
Транзакционные скрипты наследуются от класса DocumentTransactionScriptBase<T> (T – тип документа), который в свою очередь реализует интерфейс IDocumentTransactionScript<T>.
На вход скрипта передаются:
•сохраненный документ;
•коллекция пар проводок (для балансовых итогов);
•коллекция проводок (для небалансовых итогов).
Транзакционные скрипты вызываются ядром при каждом сохранении документа (после успешного выполнения обработчика перед сохранением документа). С каждым подтипом документа может быть ассоциировано несколько транзакционных скриптов, формирующих движения по различным итогам. При этом следует помнить, что очередность их вызова предсказать нельзя.
В результате успешного выполнения транзакционным скриптом возвращается массив движений, а ядром будет вызван обработчик после сохранения документа.
Ядро выполняет минимально необходимый набор запросов для приведения в соответствие набора движений в базе и набора сгенерированных транзакционным скриптом движений. Как следствие:
•если в базе нет движений, сгенерированных транзакционными скриптами, они будут добавлены;
•если в базе есть движения, которых нет в наборе, сгенерированном транзакционными скриптами, они будут удалены;
•и т.д.
Соответственно, если движение должно сохраняться в базе данных на протяжении всего периода жизни документа при изменении его подтипов, транзакционный скрипт, генерирующий это движение, должен быть привязан ко всем подтипам документа.
Движения содержат дату проведения документа. Соответственно изменение даты проведения документа, даже при отсутствии иных изменений, приводит к изменению всего набора движений. Это, в общем случае, не приводит к блокировкам при записи движений в итоги, но существенно увеличивает время выполнения транзакции. Рекомендуется избегать излишних изменений даты проведения документа. |
Транзакционные скрипты предназначены для формирования на основании документа массива движений по итогам. С их помощью крайне нежелательно производить любые другие манипуляции с документами. Для этих целей предназначены обработчики событий. |