AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 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.
Старый 25.11.2010, 16:18   #2  
petr is offline
petr
Участник
Соотечественники
 
557 / 201 (8) ++++++
Регистрация: 30.05.2005
Адрес: Швейцария
Цитата:
Сообщение от Evgeniy2020 Посмотреть сообщение
_inventDimId = 'ЦАН00069498';
...
inventDimLoc = inventDim::find(_inventDimId);
Никогда такого больше не пишите, даже в джобах!!!

должно быть inventDimLoc.InventLocationId = "Склад по которому хотите узнать остатки"

inventDimLoc = inventDim::find(_inventDimId); - просто удалите эту строчку.

Заработало?

P.S. Извините, если резковато получилось.

Последний раз редактировалось petr; 25.11.2010 в 16:19. Причина: добоавление
Старый 25.11.2010, 16:18   #3  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
Ставьте KB2215421 или RU6
Цитата:
If you backdate the reports to a date before the item was created for the first in, first out (FIFO) items, physical value adjustments are incorrectly calculated. The physical value adjustments that are posted in the future period are not reversed in the reports. These amounts are reflected in the posted physical value and in the inventory value in the reports. Therefore, even though no item exists, the reports show data.
__________________
-ТСЯ или -ТЬСЯ ?
За это сообщение автора поблагодарили: Logger (3), lev (2), Evgeniy2020 (1).
Старый 25.11.2010, 16:32   #4  
Evgeniy2020 is offline
Evgeniy2020
Участник
 
309 / 68 (3) ++++
Регистрация: 10.04.2007
Адрес: Москва, САО, СЗАО
to Petr:

исправил аналитику, но ситуацию не поменялась.
также 19 штук возвращается.

при этом это ax 3.0 sp 4
странно что такое раньше не открывалось.
Старый 25.11.2010, 17:03   #5  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
Цитата:
Сообщение от Vadik Посмотреть сообщение
...
Цитата:
If you backdate the reports to a date before the item was created for the first in, first out (FIFO) items, physical value adjustments are incorrectly calculated. The physical value adjustments that are posted in the future period are not reversed in the reports. These amounts are reflected in the posted physical value and in the inventory value in the reports. Therefore, even though no item exists, the reports show data.
Расчет остатков на дату обсуждался на форуме уже много раз (достаточно посмотреть внизу на список похожих тем). Но что странно, НИ В ОДНОЙ из тем не нашел упоминание про указанную фичу.
Или плохо искал, или это очевидно для всех или ещё что...
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
Старый 25.11.2010, 17:09   #6  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
Цитата:
Сообщение от lev Посмотреть сообщение
Но что странно, НИ В ОДНОЙ из тем не нашел упоминание про указанную фичу
А я люблю, как в старые добрые времена, холодными зимними вечерами с трубочкой и бокалом коньяка у камина почитать свежий fixlist или rss из knowledge base


А если серьезно - ну был косяк, ну исправили, чего ж тут обсуждать - надо проверить на себе и исправить
__________________
-ТСЯ или -ТЬСЯ ?
Старый 25.11.2010, 17:18   #7  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,158 / 1286 (47) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Цитата:
Сообщение от Vadik Посмотреть сообщение
ну был косяк, ну исправили ... надо проверить на себе и исправить
Увы, у автора:
Цитата:
ax 3.0 sp 4
Можно выложить сюда все операции по этой номенклатуре и сопоставления (например, в файле Excel)?
Старый 25.11.2010, 17:55   #8  
Evgeniy2020 is offline
Evgeniy2020
Участник
 
309 / 68 (3) ++++
Регистрация: 10.04.2007
Адрес: Москва, САО, СЗАО
2 Raven Melancholic:

у меня простая ситуация в верхний джоб подставляю любую номенклатуру
по которой движение началось позже даты 30.09.2010

взял для примера следующую номенклатуру у которой
первая закупка в Inventrans 10.11.2010

и те же грабли
в моем случае ерунда выдается если взять любую номенклатуру
по которой движение начинается после указанной даты (в данном случае 30.09.,2010 т.е. даты на которую получаем остатки)

попробуйте у себя верхний джоб и номенклатуру возьмите у которой
первая проводка в InvenTrans > 30.09.2010
Старый 25.11.2010, 18:00   #9  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
Цитата:
Сообщение от Evgeniy2020 Посмотреть сообщение
2 Raven Melancholic:

у меня простая ситуация в верхний джоб подставляю любую номенклатуру
по которой движение началось позже даты 30.09.2010

взял для примера следующую номенклатуру у которой
первая закупка в Inventrans 10.11.2010

и те же грабли
в моем случае ерунда выдается если взять любую номенклатуру
по которой движение начинается после указанной даты (в данном случае 30.09.,2010 т.е. даты на которую получаем остатки)

попробуйте у себя верхний джоб и номенклатуру возьмите у которой
первая проводка в InvenTrans > 30.09.2010
я у себя воспроизвел вашу ситуацию, только использовал класс InventSumDatePhysicalDim... та же самая картина. эта проблема распространяется на всю иерархию классов InventSumDate* видимо.

З.Ы. Ax 3.0 SP3
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
За это сообщение автора поблагодарили: Logger (3).
Старый 25.11.2010, 18:00   #10  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,158 / 1286 (47) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Цитата:
Сообщение от Evgeniy2020 Посмотреть сообщение
попробуйте у себя верхний джоб и номенклатуру возьмите у которой
первая проводка в InvenTrans > 30.09.2010
Взял. Не повторилось (DAX4 SP2)
Старый 25.11.2010, 20:11   #11  
Evgeniy2020 is offline
Evgeniy2020
Участник
 
309 / 68 (3) ++++
Регистрация: 10.04.2007
Адрес: Москва, САО, СЗАО
Тогда остается найти отличия в Иерархии с тем что есть у Raven Melancholic.
я возможно загляну в другие версии и попробую сравнить, а также с хотфиксом.
после этого станет ясно
Старый 13.08.2014, 12:45   #12  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,867 / 3123 (112) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Попробовал багу, не воспроизвелось.
По ходу дела пока разбирал алгоритм работы классов, наткнулся на фильтрацию по InventTrans.valueOpen:
\Classes\InventSumDatePhysicalDim\selectInventTransPicked
\Data Dictionary\Tables\InventTrans\Methods\qtyPickedDate
X++:
        select sum(Qty) from inventTrans
            where inventTrans.ItemId         == _itemId                    &&
                  inventTrans.StatusReceipt  == StatusReceipt::None        &&
                  inventTrans.StatusIssue    == StatusIssue::Picked        &&
                  inventTrans.ValueOpen      == InventTransOpen::Yes       &&
                  inventTrans.DateInvent     >  _perDate
        #inventDimExistsJoin(inventTrans.InventDimId,inventDim,_inventDimCriteria,_inventDimParm);
Интересно какой смысл фильтровать по InventTrans.valueOpen, особенно для отчетов выдающих остатки на дату. По идее, результат вычисления остатка на дату не должен зависеть от того закрыта проводка сейчас или нет.
За это сообщение автора поблагодарили: gl00mie (3).
Старый 13.08.2014, 14:47   #13  
Cardagant is offline
Cardagant
Участник
 
317 / 54 (2) ++++
Регистрация: 11.10.2011
Как вариант, повысить производительность работы с InventTrans, уменьшив, где возможно, количество обрабатываемых записей. Правда, с агрегацией по одному полю ускорение может быть незначительным.

Последний раз редактировалось Cardagant; 13.08.2014 в 15:02.
Старый 13.08.2014, 15:56   #14  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,867 / 3123 (112) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
По поводу ускорения я тоже подумал.
Но не ценой же корректности возвращаемого результата !
Старый 13.08.2014, 19:06   #15  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,651 / 1158 (42) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от Logger Посмотреть сообщение
По поводу ускорения я тоже подумал.
Но не ценой же корректности возвращаемого результата !
А в чем не корректность? Разве может быть закрыта проводка в статусе расхода "Скомплектовано"?
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
За это сообщение автора поблагодарили: Logger (3).
Старый 13.08.2014, 19:22   #16  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,867 / 3123 (112) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Да, вы правы. Я это пропустил. Анализировал как учитываются проводки у которых статус уже поменялся до Продано и забыл что здесь такие не участвуют.

Т.е. видимо в этом случае данное условие используют как хинт подсказывающий оптимизатору схватить высокоселективный в этих условиях индекс OpenItemIdx. А сама выборка не сужается.
Теги
остатки на дату

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Складские остатки на дату Logger DAX: Программирование 13 06.10.2010 16:20
Остатки на дату InventSumDatePhysical Raven Melancholic DAX: Программирование 6 10.05.2007 15:29
Остатки товара на определенную дату Lucky13 DAX: Программирование 7 27.03.2007 14:27
Остатки на дату. Bars DAX: База знаний и проекты 119 15.02.2006 20:35
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 16:43.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.