Difference between revisions of "Template:Алгоритмы обработки документов"
m (1 revision imported) |
|
(No difference)
|
Latest revision as of 07:56, 7 February 2021
Ниже даны примерные алгоритмы обработки или отмены обработки документа. Внутри событий обработки или отмены обработки документа (OnPublish, OnUnpublish), когда события работают в режиме автоматического включения транзакции, работа с накопителями может быть построена по следующему алгоритму:
- Начальная проверка информации, если информация не прошла проверку, выйти из события и возвратить ошибку.
- Удаление движений накопителей текущего документа с помощью ClearStorages. Накопители будут в этот момент заблокированы и другие пользователи будут ждать их разблокировки, чтобы обработать свои документы. Данный шаг можно улучшить, если блокировать накопители последовательно при обработке, что увеличит их время доступности.
- Проверка информации, использующая остатки или движения в накопителях. Такую проверку сложнее выполнить до удаления движений текущего документа, так как они могут мешать проверке (к примеру, проверка остатков товара на складе в документе списания остатков). Если информация не прошла проверку, выйти из события и возвратить ошибку. Накопители будут разблокированы автоматически, транзакция отменена, документ возвращен в исходное состояние.
- Создание таблиц с новыми движениями накопителей (InitStorageTab и пр.) (этот и предыдущий пункт могут быть смешаны).
- Сохранение таблиц движения документа в накопители документа SaveStorage (этот и предыдущие пункты могут быть смешаны).
- При успешном выходе из события транзакция будет закреплена, накопители автоматически разблокированы.
Вне событий обработки или отмены обработки документа, либо когда события не работают в режиме автоматического включения транзакции, работа с накопителями может быть построена по следующему алгоритму:
- Начальная проверка информации, если информация не прошла проверку, не инициировать изменение документа.
- Сброс флага успешной транзакции
- Инициирование режима транзакции BeginTransaction, защита внутреннего блока с помощью конструкции
Try .. Finally
- Попытка блокировки накопителей и удаления движений документа в помощью ClearStorages. Важно понимать, что сервер будет ожидать некоторое время, если накопители уже были заблокированы, однако, после определенного времени, будет возвращена ошибка о невозможности блокировки в данный момент, которая будет превращена в исключение.
- Для обработки документа устанавливается пометка обработки, для отмены обработки пометка снимается (PublishedMark).
- Проверка информации, использующая остатки или движения в накопителях. Такую проверку сложнее выполнить до удаления движений текущего документа, так как они могут мешать проверке (к примеру, проверка остатков товара на складе в документе списания остатков). Если информация не прошла проверку, может вызвать исключение или выйти из функции с ошибкой, конструкция
Finally
должна будет отменить транзакцию и возвратить текущий документ в исходное состояние, если это требуется. - Создание таблиц и сохранение таблиц движений с накопителями для текущего документа (InitStorageTab и SaveStorage).
- Сохранение текущего документа с помощью функции Save, на случай, если документ был изменен до начала выполнения операции.
- Установка флага спешной транзакции
- Внутри конструкции
Finally
, если флаг успешной транзакции установлен, зафиксировать транзакцию, иначе отменить транзакцию и возвратить документ в исходное состояние, если это требуется.