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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 16.11.2005, 13:35   #1  
Def is offline
Def
Участник
 
50 / 32 (2) +++
Регистрация: 28.09.2005
Остатки номенклатуры
Возникла необходимость самостоятельно выбрать остатки по складу на некоторую дату
делаю так
1. выбираю InventSum
2. подтягиваю изменения InventTrans за некоторый период

выглядит примерно так

X++:
        while select itemid, sum(AvailPhysical) from inventSum
            group by itemid
        join  inventDimSum
            group by inventLocationId
            where inventDimSum.inventDimId == inventSum.inventDimId
        join inventTable
            where inventSum.ItemId == inventTable.ItemId &&
                  inventTable.ItemType == ItemType::BOM &&//остатки тока по спецификациям
                  inventTable.ItemGroupId like filter
        {
                select itemId from inventTransPostingPhysical
                    group by itemId
                    where inventTransPostingPhysical.inventTransPostingType     == InventTransPostingType::Physical     &&
                          inventTransPostingPhysical.transDate                  >=  _date &&
                          inventTransPostingPhysical.ItemId                     == inventSum.ItemId
                join sum(costAmountPhysical),sum(qty) from inventTrans
                    where inventTrans.voucherPhysical               == inventTransPostingPhysical.voucher        &&
                          inventTrans.datePhysical                  == inventTransPostingPhysical.transDate      &&
                          inventTrans.inventTransId                 == inventTransPostingPhysical.inventTransId
                join inventDimTrans
                    where inventDimTrans.inventDimId == inventTrans.inventDimId &&
                          inventDimSum.InventLocationId == inventDimTrans.InventLocationId;
                qty = inventSum.AvailPhysical - inventTrans.Qty;
и так далее

возникает следующий вопрос, если в InventSum нет записи даже с количесвом 0 то плакал весь мой запрос потому как обращение к InventTrans уже не будет и остток я потеряю

если когда то возникало движение по номенклатуре по конкретной InventDim
будет ли эта запись хранится там с нулевыми количествами или она оттуда успешно исчезает?
Старый 16.11.2005, 13:37   #2  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
Успешно останется.
Старый 16.11.2005, 13:38   #3  
Def is offline
Def
Участник
 
50 / 32 (2) +++
Регистрация: 28.09.2005
то есть запрос будет работать нормально?
Старый 16.11.2005, 13:39   #4  
George Nordic is offline
George Nordic
Модератор
Аватар для George Nordic
Злыдни
 
4,479 / 1250 (50) ++++++++
Регистрация: 17.12.2003
Адрес: Moscow
Записей в блоге: 9
А нельзя ли воспользоваться классом inventOnHand?? Кажется, он позволяет определить остатки на дату.

С Уважением,
Георгий
Старый 16.11.2005, 13:42   #5  
Def is offline
Def
Участник
 
50 / 32 (2) +++
Регистрация: 28.09.2005
мне хотелось бы получить одним запросом, а не ходить по всей номенклатуре и не смотреть остатки у каждой
Старый 16.11.2005, 13:46   #6  
Def is offline
Def
Участник
 
50 / 32 (2) +++
Регистрация: 28.09.2005
если номенклатуры (строк) много а остатков (строк) мало будет много лишних ненужных обращений к базе, хотя в свете того как это хранит inventSum кажется что получится одно и то же
Старый 16.11.2005, 13:46   #7  
George Nordic is offline
George Nordic
Модератор
Аватар для George Nordic
Злыдни
 
4,479 / 1250 (50) ++++++++
Регистрация: 17.12.2003
Адрес: Moscow
Записей в блоге: 9
Цитата:
Сообщение от Def
Возникла необходимость самостоятельно выбрать остатки по складу на некоторую дату
Тогда я бы не стал завязываться на InventSum.

С Уважением,
Георгий.
Старый 16.11.2005, 13:46   #8  
_AnK_ is offline
_AnK_
Участник
Аватар для _AnK_
Ex AND Project
 
160 / 31 (2) +++
Регистрация: 03.11.2005
Адрес: СПб
Надо использовать один из классов на основе InventSumDate. Иначе вы имеете шанс получить расхождения данных в стандартных отчетах и в ваших.
Старый 16.11.2005, 13:49   #9  
_AnK_ is offline
_AnK_
Участник
Аватар для _AnK_
Ex AND Project
 
160 / 31 (2) +++
Регистрация: 03.11.2005
Адрес: СПб
Цитата:
Сообщение от Def
мне хотелось бы получить одним запросом, а не ходить по всей номенклатуре и не смотреть остатки у каждой
тогда да, класс не катит. Если движение было, запись в InventSum останется.
Старый 16.11.2005, 13:56   #10  
George Nordic is offline
George Nordic
Модератор
Аватар для George Nordic
Злыдни
 
4,479 / 1250 (50) ++++++++
Регистрация: 17.12.2003
Адрес: Moscow
Записей в блоге: 9
Хм. Просто InventSum, насколько я помню, можно грохнуть и перестроить заново. На факт, что она при этом будет помнить остатки по всем датам. Учтите этот нюанс.
Она, по идее, должна хранить текущие остатки... никто не обязывает эту таблицу помнить историю.

С Уважением,
Георгий.
Старый 16.11.2005, 14:25   #11  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
Извините, а чем то, что Вы пишете в своем запросе, принципиально отличается от того, что делает класс?

Вы полагаете, что если будете использовать group by ItemId вместо внешнего цикла по номенклатуре, получите серьезный выигрыш в производительности? Для начала посмотрите профайлером на то, как выполняется функция расчета остатков на дату, на что расходуется больше всего времени.

Кстати, Ваш запрос уже как минимум неправильно посчитатет остатки по номенклатуре, которая была возвращена по отборочной накладной.
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
Старый 16.11.2005, 14:34   #12  
Def is offline
Def
Участник
 
50 / 32 (2) +++
Регистрация: 28.09.2005
вот я и хотел взвесить все за и против и найти оптимальныое решение
Старый 16.11.2005, 14:42   #13  
Def is offline
Def
Участник
 
50 / 32 (2) +++
Регистрация: 28.09.2005
на самом деле я там указывал на случай если много номенклатуры к примеру 100 тыс единиц а остаков только 10 тыс единиц уже 90% обращений к базе в случае обхода номенклатуры и использования метода класса будут бесполезными
нежели напрямую выбрать записи из InventSum. Но как выяснилось в процессе диалога сомнительно что эффект дейсвительно будет.
Старый 16.11.2005, 14:54   #14  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
Выбирайте только ту номенклатуру, которая есть в InventSum (в форме Создание строк в Заказах и Закупках номенклатура делится на новую и существующую именно по такому принципу). А потом лучше все равно к классу обращайтесь.

Вообще, не стоит дублировать функциональность. Особенно стандартную. Представьте, что она будет обновлена в сервис-паке. Тогда Ваши остатки будут отличаться от стандартных. Впрочем, об этом Вам уже сказали.
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
Старый 16.11.2005, 15:29   #15  
_AnK_ is offline
_AnK_
Участник
Аватар для _AnK_
Ex AND Project
 
160 / 31 (2) +++
Регистрация: 03.11.2005
Адрес: СПб
Цитата:
Сообщение от Def
вот я и хотел взвесить все за и против и найти оптимальныое решение
есть мнение что чем меньше своего кода, тем оптимальнее решение.
Старый 16.11.2005, 15:39   #16  
Def is offline
Def
Участник
 
50 / 32 (2) +++
Регистрация: 28.09.2005
в принципе вот то что я хотел получить

X++:
static void Reamins(Args _args)
{
    InventSumDatePhysicalDim        Remains = new InventSumDatePhysicalDim();
    InventSum                       inventSum;
    inventDimParm                   inventDimParm;
    inventDim                       inventDim;
    ;
    while select inventSum
    group by itemId
    join inventDim
    group by inventlocationId
        where inventDim.inventDimId == inventSum.InventDimId
    {
        inventDimParm.initFromInventDim(inventDim);
        remains = new InventSumDatePhysicalDim();
        Remains.parmItemId(inventSum.ItemId);
        Remains.parmInventDimParm(inventDimParm);
        Remains.parmInventDim(inventDim);
        Remains.parmPerDate(systemdateget());
        remains.init();

        info(strfmt('%1 %2 %3',inventSum.ItemId,inventDim.InventLocationId,Remains.physicalQuantity()));
    }
}
Старый 16.11.2005, 16:12   #17  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
Я бы только еще поменял
X++:
remains = new InventSumDatePhysicalDim();
Remains.parmItemId(inventSum.ItemId);
Remains.parmInventDimParm(inventDimParm);
Remains.parmInventDim(inventDim);
Remains.parmPerDate(systemdateget());
remains.init();
на
X++:
remains = InventSumDatePhysicalDim::newParameters(systemDateGet(),
                                                  inventSum.itemId,
                                                  inventDim,
                                                  inventDimParm);
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
Теги
остатки, остатки на дату

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Планирование номенклатуры с типом Основное средство AlexeyBP DAX: Функционал 19 29.01.2009 07:42
Обороты и остатки номенклатуры по счетам pyramid DAX: Программирование 47 08.12.2008 19:20
Не могу изменить название номенклатуры slava09 DAX: Функционал 14 21.03.2007 18:01
Остатки dog37 DAX: Программирование 6 02.06.2005 11:25
Конфигуратор продуции - создание новой номенклатуры против создания новой конфигураци OliaM DAX: Функционал 6 15.04.2005 20:11
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 05:41.