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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 08.04.2015, 16:37   #1  
Art_Tanis is offline
Art_Tanis
Участник
 
225 / 36 (2) +++
Регистрация: 04.02.2014
Помощь с запросом суммарное колличество по блокированным паллетам
Добрый день!
Подскажите пожалуйста как правильно составить запрос - в итоге мне надо получить суммарно заблокированное количество по артикулу в разрезе аналитик - склад, сайт.


Такой вариант вот плохо работает:
X++:
static void Job56(Args _args)
{
    InventSum          inventSum;
    WmsPallet          wmsPallet;
    InventDim          inventDim;
    ;
    while select inventSum
        where inventSum.ItemId == "a25009"
        &&  inventSum.Closed == NoYes::No
        &&  inventSum.ClosedQty == NoYes::No
        join inventDim
        where inventDim.inventDimId == inventSum.InventDimId
        {
            If(wmsPallet::find(inventDim.wMSPalletId).IsPalletBlocked == NoYes::Yes)
                {
                    inventSum.PhysicalInvent += inventSum.PhysicalInvent;
                    }
            }

        info(strfmt("%1", inventSum.PhysicalInvent));
Подскажите каким образом здесь улчше подключить таблицу WMSpallet?
Старый 08.04.2015, 17:37   #2  
Kiot is offline
Kiot
Участник
 
12 / 11 (1) +
Регистрация: 25.01.2012
X++:
InventSum          inventSum;
    WmsPallet          wmsPallet;
    InventDim          inventDim;
    ;
    while select inventSum
        where inventSum.ItemId == "a25009"
        &&  inventSum.Closed == NoYes::No
        &&  inventSum.ClosedQty == NoYes::No
        join inventDim
        where inventDim.inventDimId == inventSum.InventDimId
        exist join wmsPallet
              where wmsPallet.wMSPalletId == inventDim.wMSPalletId 
              &&     wmsPallet.IsPalletBlocked == NoYes::Yes
          
        {
                    inventSum.PhysicalInvent += inventSum.PhysicalInvent;
            }

        info(strfmt("%1", inventSum.PhysicalInvent));
Не знаю как точно поле для связи называется на таблице WMSPallet

Последний раз редактировалось Kiot; 08.04.2015 в 17:40.
Старый 08.04.2015, 17:39   #3  
axm2013
Гость
 
n/a
Post
select sum(..) from inventSum
group by ItemId,
where ...
exists join inventDim
where inventDim.inventDimId == inventSum.InventDimId
exists join wmsPallet
where...

?
За это сообщение автора поблагодарили: Art_Tanis (1).
Старый 08.04.2015, 17:42   #4  
Art_Tanis is offline
Art_Tanis
Участник
 
225 / 36 (2) +++
Регистрация: 04.02.2014
Вот почему то возвращает ноль. Щас буду деббажить. А паллета заблокированная есть.
Старый 08.04.2015, 17:46   #5  
Art_Tanis is offline
Art_Tanis
Участник
 
225 / 36 (2) +++
Регистрация: 04.02.2014
Работает вот это:

select sum(PhysicalInvent) from inventSum
group by ItemId
where inventSum.ItemId == "a25009"
&& inventSum.Closed == NoYes::No
&& inventSum.ClosedQty == NoYes::No
exists join inventDim
where inventDim.inventDimId == inventSum.InventDimId
exists join wmsPallet
where wmsPallet.wMSPalletId == inventDim.wMSPalletId
&& wmsPallet.IsPalletBlocked == NoYes::Yes;

info(strfmt("%1", inventSum.PhysicalInvent));
Старый 09.04.2015, 09:45   #6  
Art_Tanis is offline
Art_Tanis
Участник
 
225 / 36 (2) +++
Регистрация: 04.02.2014
Еще один вопрос. В зависимости от флага в таблице InventDimParm необходимо добавлять параметр аргумента InventDim к поиску:
X++:
protected qty calcInventSummBlockedFromDim(ItemId _itemId, InventDim _inventDim, inventDimParm _inventDimParm)
{
    InventSum          inventSum;
    WmsPallet          wmsPallet;
    InventDim          inventDim;
    ;
    
if (_inventDimParm.IvnentSiteId == NoYes::Yes)
{   
select sum(PhysicalInvent) from inventSum
        group by ItemId
        where inventSum.ItemId == _itemId
            && inventSum.Closed == NoYes::No
            && inventSum.ClosedQty == NoYes::No
    exists join inventDim
        where inventDim.inventDimId == inventSum.InventDimId
        && inventDim.InventSiteId == _inventDim.InventSiteId
            exists join wmsPallet
        where wmsPallet.wMSPalletId == inventDim.wMSPalletId
            && wmsPallet.IsPalletBlocked == NoYes::Yes;
}           


    return inventSum.PhysicalInvent;
}
Как сделать для выбранных аналитик? по которым флаг принимает значение да.
Старый 09.04.2015, 11:06   #7  
skuull is offline
skuull
Участник
Most Valuable Professional
Лучший по профессии 2014
 
700 / 752 (27) +++++++
Регистрация: 08.03.2013
Адрес: ХЗ
Посмотрите перекресные ссылки по макросу #InventDimExistsJoin (он в АОТ). Этот макрос используется для фильтра выборки по аналитикам выбраным в парм таблице. Найдется 1000 и 1 пример.
Старый 09.04.2015, 11:08   #8  
Art_Tanis is offline
Art_Tanis
Участник
 
225 / 36 (2) +++
Регистрация: 04.02.2014
Спасибо. Сделал. Должен сказать комьюнити очень активное. Всем большое спасибо.
Старый 09.04.2015, 14:07   #9  
RVS is offline
RVS
Сенбернар
Аватар для RVS
Злыдни
 
696 / 130 (6) +++++
Регистрация: 27.02.2003
Адрес: Королев МО
Иногда лучше жевать, чем говорить (с) реклама
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Помощь с запросом Art_Tanis DAX: Программирование 7 23.03.2015 12:56
Выборка произвольных записей одним запросом db DAX: Программирование 1 23.09.2010 14:15
Помогите с SQL запросом malex DAX: Программирование 8 26.07.2005 13:43
расчеты с персоналом. мат. помощь shumelka DAX: Функционал 1 13.04.2004 11:29
Очень нужна Ваша помощь!!! Vasilenko Alexsandr DAX: Прочие вопросы 2 05.11.2003 11:51

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

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

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