Показать сообщение отдельно
Старый 20.09.2019, 20:50   #1  
alicedr is offline
alicedr
Участник
 
173 / 43 (2) +++
Регистрация: 06.07.2012
Адрес: Канада
AX2012 CU13 MCRHoldCodeTrans добавлен в отдельной транзакции
добрый вечер!
какая-то странная проблема, наверное связанная с областью видимости транзакций, но...
AX2012 CU13
Надо при выполнеии определенных условий во время разноски накладной поставить ордер на Hold (добавить в MCRHoldCodeTrans). Потом по сюжету идет throw error.

После этого идет откат транзакции, и добавленный обычным способом холд откатывается.

Чтобы холд остался, добавляю его в MCRHoldCodeTrans в отдельной транзакцией. Добавляется и виден в форме по книпке "functions/order holds" после отката, но кнопки на форме не блокируются. F5 не помогает.

Если к имеющемуся в форме я добавляю еще один такой же вручную, кнопки блокируются. Удаляю только что добавленный - кнопки все равно блокируются, то есть первый холд начинает работать.

Подскажите в чем проблема и почему первый холд не работает поначалу, хотя виден, потому что временное (надеюсь!) помутнение рассудка не позволяет увидеть решение.
Добавляю так:
X++:
static void holdSalesOrder(SalesId _salesId, MCRHoldCode _holdCode)
{
    MCRHoldCodeTrans holdtrans;
    UserConnection   connection ;

    select firstonly RecId from holdtrans
        where holdtrans.InventRefId      == _salesId
            && holdtrans.mcrCleared      == NoYes::No
            && holdtrans.mcrHoldCode == _holdCode;

    if(!holdtrans.RecId)
    {
        connection = new UserConnection();
        holdtrans.setConnection(connection);
        connection.ttsbegin();
        
        holdtrans.InventRefId = _salesId;
        holdtrans.mcrHoldCode = _holdCode;

        if (holdtrans.validateWrite())
        {
            holdtrans.insert();
        }
        connection.ttscommit();
        connection.finalize();

    }
}