Показать сообщение отдельно
Старый 05.12.2008, 17:48   #1  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
-> Изменение "курсора" в цикле
Всем привет.

Вероятно, конечно, баян, но я не нашёл...
Интуитивно так обычно не делал, но вот недавно наткнулся - решил поделиться.

Если внутри цикла while select (ну и не только наверное) изменить ссылку табличной переменной используемого курсора на что-то другое, то можно "отгрести" забавные результаты.
Проще продемонстрировать, чем объяснить.

Пример Jobа (Номер журнала задайте сами):
X++:
static void ZVV_TestCursorJob(Args _args)
{
    InventTrans inventTrans;

    InventJournalId _InventJournalId = "СЖ008968";
    ;

    while select inventTrans
        where inventtrans.TransType == InventTransType::InventTransfer
           && inventTrans.TransRefId == _InventJournalId
    {
        info(strFmt("%1 %2 %3", inventTrans.InventTransId, inventTrans.ItemId, inventTrans.Qty));
    }

    info(strrep('-',30));

    while select inventTrans
        where inventtrans.TransType == InventTransType::InventTransfer
           && inventTrans.TransRefId == _InventJournalId
    {
        info(strFmt("%1 %2 %3", inventTrans.InventTransId, inventTrans.ItemId, inventTrans.Qty));

        inventTrans = inventTrans::findRecId(inventTrans.RecId);
    }
}
Результат:
Код:
Сообщение (16:45:39)
Л_11776612 25472/001 -10,00
Л_11776612 25472/001 10,00
Л_11776613 25472/001 -10,00
Л_11776613 25472/001 10,00
Л_11776614 25472/001 -20,00
Л_11776614 25472/001 20,00
------------------------------
Л_11776612 25472/001 -10,00
Л_11776612 25472/001 -10,00
Л_11776612 25472/001 -10,00
Л_11776612 25472/001 -10,00
Л_11776612 25472/001 -10,00
Л_11776612 25472/001 -10,00
Найти такой баг в коде наверное не всегда может быть просто и очевидно..

3.0
__________________
Zhirenkov Vitaly