Показать сообщение отдельно
Старый 28.01.2008, 13:53   #5  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,971 / 3267 (116) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Более простой способ воспроизвести баг.
Пусть у нас есть 2 лота из описания выше, выполняем для них такой код

X++:
// Запускать на сервере - в джоб поставить недостаточно, потому что джоб всегда на клиенте исполняется.
// лучше поставить в статический метод какого то класса
server static void test()
{
    InventTransID       InventTransID;
    Object              Object;
    Object              Object2;
    Qty grd_calcQty(InventTransId    _inventTransId, boolean _disablecache, str _s)
    {
        InventTrans inventTrans;
        ;
        inventTrans = null;
        if (_disablecache)
            inventTrans.disableCache(true);

        select sum(qty) from inventTrans
            index hint TransIdIdx
            where inventTrans.inventTransId         == _inventTransId   &&
                       //    inventTrans.StatusIssue >= StatusIssue::ReservPhysical
                       // && inventTrans.StatusIssue <= StatusIssue::OnOrder

                (inventTrans.statusIssue == StatusIssue::ReservPhysical ||
                inventTrans.statusIssue  == StatusIssue::ReservOrdered   ||
                inventTrans.statusIssue  == StatusIssue::OnOrder)

                ;
        info(strFMT("%3 DisableCache = %1 Количество %2",
            inventTrans.disableCache(),
            inventTrans.Qty,
            _s)); // здесь в плохом случае возвращает 0 для ЛОТ2. Если все в порядке то -5
    }
    ;
    ttsBegin;

    InventTransID = "ЛОТ1"; //  ЛОТ1 Количество 4 (2 физрезерв; 2 скомплектовано)
    Object = InventTrans::viewCacheInventTransId(InventTransId, true);
//    GRD_calcQty(InventTransId);


    InventTransID = "ЛОТ2"; //  ЛОТ2 Количество 5 (5 физрезерв)

    GRD_calcQty(InventTransId, false, "Кеширование не отключали.");
    GRD_calcQty(InventTransId, true , "Отключили кеширование.");

    Object2 = InventTrans::viewCacheInventTransId(InventTransId, true);
    GRD_calcQty(InventTransId, false, "Кеширование не отключали. Создан RecordViewCache по второму лоту");
    GRD_calcQty(InventTransId, true , "Отключили кеширование.  Создан RecordViewCache по второму лоту");

    ttsCommit;
}

Последний раз редактировалось Logger; 28.01.2008 в 14:02. Причина: подправил джоб