AXForum  
Zurück   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Kennwort vergessen?
Registrieren Forum Rules Hilfe Benutzerliste Heutige Beiträge Suchen

 
 
Themen-Optionen Thema durchsuchen Ansicht
Alt 16.11.2005, 13:35   #1  
Def ist offline
Def
Участник
 
50 / 32 (2) +++
Registriert seit: 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
будет ли эта запись хранится там с нулевыми количествами или она оттуда успешно исчезает?
Alt 16.11.2005, 13:37   #2  
Wamr ist offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1.737 / 868 (32) +++++++
Registriert seit: 15.01.2002
Ort: Москва
Blog-Einträge: 7
Успешно останется.
Alt 16.11.2005, 13:38   #3  
Def ist offline
Def
Участник
 
50 / 32 (2) +++
Registriert seit: 28.09.2005
то есть запрос будет работать нормально?
Alt 16.11.2005, 13:39   #4  
George Nordic ist offline
George Nordic
Модератор
Benutzerbild von George Nordic
Злыдни
 
4.480 / 1255 (50) ++++++++
Registriert seit: 17.12.2003
Ort: Moscow
Blog-Einträge: 9
А нельзя ли воспользоваться классом inventOnHand?? Кажется, он позволяет определить остатки на дату.

С Уважением,
Георгий
Alt 16.11.2005, 13:42   #5  
Def ist offline
Def
Участник
 
50 / 32 (2) +++
Registriert seit: 28.09.2005
мне хотелось бы получить одним запросом, а не ходить по всей номенклатуре и не смотреть остатки у каждой
Alt 16.11.2005, 13:46   #6  
Def ist offline
Def
Участник
 
50 / 32 (2) +++
Registriert seit: 28.09.2005
если номенклатуры (строк) много а остатков (строк) мало будет много лишних ненужных обращений к базе, хотя в свете того как это хранит inventSum кажется что получится одно и то же
Alt 16.11.2005, 13:49   #7  
_AnK_ ist offline
_AnK_
Участник
Benutzerbild von _AnK_
Ex AND Project
 
160 / 31 (2) +++
Registriert seit: 03.11.2005
Ort: СПб
Zitat:
Zitat von Def
мне хотелось бы получить одним запросом, а не ходить по всей номенклатуре и не смотреть остатки у каждой
тогда да, класс не катит. Если движение было, запись в InventSum останется.
Alt 16.11.2005, 13:46   #8  
George Nordic ist offline
George Nordic
Модератор
Benutzerbild von George Nordic
Злыдни
 
4.480 / 1255 (50) ++++++++
Registriert seit: 17.12.2003
Ort: Moscow
Blog-Einträge: 9
Zitat:
Zitat von Def
Возникла необходимость самостоятельно выбрать остатки по складу на некоторую дату
Тогда я бы не стал завязываться на InventSum.

С Уважением,
Георгий.
Alt 16.11.2005, 13:46   #9  
_AnK_ ist offline
_AnK_
Участник
Benutzerbild von _AnK_
Ex AND Project
 
160 / 31 (2) +++
Registriert seit: 03.11.2005
Ort: СПб
Надо использовать один из классов на основе InventSumDate. Иначе вы имеете шанс получить расхождения данных в стандартных отчетах и в ваших.
Alt 16.11.2005, 13:56   #10  
George Nordic ist offline
George Nordic
Модератор
Benutzerbild von George Nordic
Злыдни
 
4.480 / 1255 (50) ++++++++
Registriert seit: 17.12.2003
Ort: Moscow
Blog-Einträge: 9
Хм. Просто InventSum, насколько я помню, можно грохнуть и перестроить заново. На факт, что она при этом будет помнить остатки по всем датам. Учтите этот нюанс.
Она, по идее, должна хранить текущие остатки... никто не обязывает эту таблицу помнить историю.

С Уважением,
Георгий.
Alt 16.11.2005, 14:25   #11  
Maxim Gorbunov ist offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2.483 / 646 (26) +++++++
Registriert seit: 27.11.2001
Ort: 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
Alt 16.11.2005, 14:34   #12  
Def ist offline
Def
Участник
 
50 / 32 (2) +++
Registriert seit: 28.09.2005
вот я и хотел взвесить все за и против и найти оптимальныое решение
Alt 16.11.2005, 14:42   #13  
Def ist offline
Def
Участник
 
50 / 32 (2) +++
Registriert seit: 28.09.2005
на самом деле я там указывал на случай если много номенклатуры к примеру 100 тыс единиц а остаков только 10 тыс единиц уже 90% обращений к базе в случае обхода номенклатуры и использования метода класса будут бесполезными
нежели напрямую выбрать записи из InventSum. Но как выяснилось в процессе диалога сомнительно что эффект дейсвительно будет.
Alt 16.11.2005, 15:29   #14  
_AnK_ ist offline
_AnK_
Участник
Benutzerbild von _AnK_
Ex AND Project
 
160 / 31 (2) +++
Registriert seit: 03.11.2005
Ort: СПб
Zitat:
Zitat von Def
вот я и хотел взвесить все за и против и найти оптимальныое решение
есть мнение что чем меньше своего кода, тем оптимальнее решение.
Alt 16.11.2005, 14:54   #15  
Maxim Gorbunov ist offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2.483 / 646 (26) +++++++
Registriert seit: 27.11.2001
Ort: 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
Alt 16.11.2005, 15:39   #16  
Def ist offline
Def
Участник
 
50 / 32 (2) +++
Registriert seit: 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()));
    }
}
Alt 16.11.2005, 16:12   #17  
Maxim Gorbunov ist offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2.483 / 646 (26) +++++++
Registriert seit: 27.11.2001
Ort: 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
Stichworte
остатки, остатки на дату

 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Планирование номенклатуры с типом Основное средство 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

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Gehe zu

Рейтинг@Mail.ru
Alle Zeitangaben in WEZ +3. Es ist jetzt 02:31 Uhr.
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.