Показать сообщение отдельно
Старый 25.11.2010, 16:03   #1  
Evgeniy2020 is offline
Evgeniy2020
Участник
 
309 / 68 (3) ++++
Регистрация: 10.04.2007
Адрес: Москва, САО, СЗАО
Epic Fail Остатки на дату InventSumDateValueReportDim
Epic Fail Остатки на дату InventSumDateValueReportDim

Здравствуйте,
была простая задача: получить остатки на определенную дату.
в компании используется складская аналитика Склад. (только).
Задачка простая на 30.09.2010 получить остатки по номенклатуре вида:
Номенлкатура, Склад, Количество, Сумма

по идее все должно работать за счет стандартного класса InventSumDateValueReportDim

как бы не так
есть номенклатура 'ЦТ0085140'
по ней движение появилось 05.11.2010
до этой даты 05.11.2010 НЕТ ПРОВОДОК в InventTrans с такой номенклатурой по любой складской аналитке

05.11.2010 куплено 20 штук
20.11.2010 продано 1 штука
на текущий день 19 штук осталось


на 30.09.2010 по этой номенклатуре должно быть ровно 0
по всем складским аналитикам.

но увы.


X++:
 InventDimId _inventDimId;
    date        _date;
    itemId      _itemId;
    Qty qty, qty2;
    InventSumDateValueReportDim     Invent; // класс расчета на определенную дату
    InventDim                       inventDimLoc;
    InventDimParm                   inventDimParmLoc;
    ;
    _itemId = 'ЦТ0085140';
    _inventDimId = 'ЦАН00069498';
    _date = mkdate(30,9,2010);
    inventDimParmLoc.InventLocationIdFlag = NoYes::Yes;
    inventDimParmLoc.InventGTDIdFlag_RU   = NoYes::No;
    inventDimLoc = inventDim::find(_inventDimId);
    Invent = InventSumDateValueReportDim::newParameters(
        _date,
        _itemId,
        inventDimLoc,
        inventDimParmLoc);
    qty  = Invent.PostedQty() - Invent.deductedQty() + Invent.receivedQty();
    qty2 = Invent.PostedQty();
   info(StrFmt("%1  %2",qty ,qty2));
упорно возвращает 19


а вот такой код возвращает все верно 0

X++:
 inventTrans   inventTrans;
 
    select sum(Qty) from inventTrans
    group by inventDimId, itemId
    where
    inventTrans.ItemId == 'ЦТ0085140' &&
    inventTrans.DatePhysical <= mkdate(30,09,2010) &&
    inventTrans.StatusIssue <= StatusIssue::Deducted &&
    inventTrans.StatusReceipt<= StatusReceipt::Received &&
    inventTrans.inventDimId == 'ЦАН00069498';
    info(strfmt("%1", inventTrans.Qty));

Вопрос: неужели на стандартный класс нельзя положиться,
если движение по номенклатуре началось позже указанной даты?
выдает ерунду.

Последний раз редактировалось Evgeniy2020; 25.11.2010 в 16:09.