Попробуйте класс 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();