Показать сообщение отдельно
Старый 17.02.2023, 16:26   #21  
Ace of Database is offline
Ace of Database
Участник
Аватар для Ace of Database
 
877 / 649 (23) +++++++
Регистрация: 14.10.2004
Попробуйте класс ReqReaderWriterLock
Можно проверить, заблокирована ли конкретная запись.
Если не заблокирована, то заблокировать ее и обработать.
Если заблокирована, то пропустить её и начать обрабатывать следующую запись.

В качестве ключа в параметр _lockName метода tryEnterWriterLock передать уникальную строку, которая каким-то образом идентифицирует обрабатываемую запись.

X++:
    ReqReaderWriterLock lockCleanup = ReqReaderWriterLock::construct();
    
    while select myTable
    {
        if (lockCleanup.tryEnterWriterLock(int642str(myTable.RecId), 0)) // Блокируем, а если кем-то уже заблокировано, то обходим
        {
            ttsbegin;
            
            myTableUpd = MyTable::findRecId(myTable.RecId, true);
            
            //.....................
            myTableUpd.update();
            
            ttscommit;
        }
    }

    lockCleanup.releaseAllLocks();
__________________
Мои утилиты для Аксапты версий 3.0-2012: http://aceofdatabase.blogspot.com/

Последний раз редактировалось Ace of Database; 17.02.2023 в 16:56.
За это сообщение автора поблагодарили: sukhanchik (10).