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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 21.03.2008, 15:18   #1  
CasperSKY is offline
CasperSKY
Axapta Retail User
Аватар для CasperSKY
Axapta Retail User
 
53 / 10 (1) +
Регистрация: 22.02.2008
Очередные грабли while select
Проблема выборки ...
X++:
static server container calcQty1(ItemId           _itemId,
                                InventDimId      _inventDimId,
                                InventLocationId _inventLocationId,
                                InventParameters _inventParameters = InventParameters::find())
{
    InventSum        inventSum;
    InventSum        inventSum1;
    PurchTable       purchTable;
    InventDim        inventDim = InventDim::find(_inventDimId);
    InventDimParm    inventDimParm;
    Qty              MyOnHand;
    Qty              onHand;
    Qty              dcOnHand;
    Qty              ordered;

    Qty              invTrans;
    InventTrans purch;
    InventTrans      inventTrans;
    InventDim        tmpDim;
    date             dat;
;
    dat                                = today() - 2;
    inventDimParm.ItemIdFlag           = NoYes::Yes;
    inventDimParm.InventLocationIdFlag = NoYes::Yes;
    inventDim.InventLocationId         = 'РЦ';//_inventParameters.DistributionCenter;

    inventSum = InventSum::findSum(_itemId,
                                   inventDim,
                                   inventDimParm,
                                   InventSumFields::All);

    dcOnHand = inventSum.availPhysical();

   tmpDim   =  InventDim::findOrCreateInventLocationId(_inventLocationId);
    invTrans =  (select /*firstonly*/ sum(qty) from inventTrans order by TransRefID desc where inventTrans.ItemId == _itemId
                               && inventTrans.inventDimId == tmpDim.inventDimId
                               && inventTrans.TransType == InventTransType::Purch
                               && inventTrans.StatusReceipt == StatusReceipt::Ordered
                               && inventTrans.DatePhysical == str2date("",123)  ).Qty
                               && inventDim.RecId != 68956563
                               ;

    purch    =  InventTrans::findRecId( (select /*firstonly*/ sum(qty) from inventTrans order by TransRefID desc where inventTrans.ItemId == _itemId
                               && inventTrans.inventDimId == tmpDim.inventDimId
                               && inventTrans.TransType == InventTransType::Purch
                               && inventTrans.StatusReceipt == StatusReceipt::Ordered
                               && inventTrans.DatePhysical == str2date("",123)  ).RecId
                               && inventDim.RecId != 68956563);
    purchTable = PurchTable::find(purch.TransRefId);
    if(purchTable.createdDate < dat){
        invTrans = 0;
    }

    if (_inventLocationId != _inventParameters.DistributionCenter)
    {

   while select inventDim {

    if(inventdim.RecId != 32171 || inventdim.RecID != 2685644 || inventdim.RecID != 81579138 || inventDim.RecId != 68956563){

      inventDimParm = null;
        inventSum = InventSum::findSum(_itemId,
                                       inventDim,
                                       inventDimParm,
                                       InventSumFields::All);


   }
 }
    }
    onHand  = inventSum.availPhysical();
   // ordered = inventSum.Ordered;
    //ordered = invTrans;

    return [dcOnHand, onHand, ordered];
}
А конкретнее в ...

X++:
 while select inventDim {

    if(inventdim.RecId != 32171 || inventdim.RecID != 2685644 || inventdim.RecID != 81579138 || inventDim.RecId != 68956563){

      inventDimParm = null;
        inventSum = InventSum::findSum(_itemId,
                                       inventDim,
                                       inventDimParm,
                                       InventSumFields::All);


   }
чтобы не делал в результате условие "inventdim.RecId != 32171 || inventdim.RecID != 2685644 || inventdim.RecID != 81579138 || inventDim.RecId != 68956563" - не выполняется помогите понять де тут грабли
Старый 21.03.2008, 15:21   #2  
Lucky13 is offline
Lucky13
Участник
1C
 
714 / 198 (8) ++++++
Регистрация: 21.10.2004
Попробуйте поменять ИЛИ на И
Старый 21.03.2008, 15:24   #3  
CasperSKY is offline
CasperSKY
Axapta Retail User
Аватар для CasperSKY
Axapta Retail User
 
53 / 10 (1) +
Регистрация: 22.02.2008
Результат тот же ...
тем более что это значения одного столбца, они "и" немогут быть
Старый 21.03.2008, 15:30   #4  
Weez is offline
Weez
Участник
Axapta Retail User
 
250 / 84 (3) ++++
Регистрация: 18.01.2006
Адрес: Moscow city
Если вы не хотите, чтобы inventdim.RecId был равен какому-то из перечисленных значений - ставьте &&, а не ||
__________________
Существует 10 типов людей: одни понимают двоичную систему, другие - нет.
Старый 21.03.2008, 15:31   #5  
wolfstein is offline
wolfstein
Axapta Retail User
Axapta Retail User
 
51 / 91 (4) ++++
Регистрация: 05.07.2006
CasperSKY,
а зачем вы в условиях и сравнениях числовые значения используете, это во-первых?
во-вторых, вы отдельно второй кусок кода, который привели проверяли?
Старый 21.03.2008, 15:34   #6  
Lucky13 is offline
Lucky13
Участник
1C
 
714 / 198 (8) ++++++
Регистрация: 21.10.2004
Цитата:
Сообщение от CasperSKY Посмотреть сообщение
Результат тот же ...
тем более что это значения одного столбца, они "и" немогут быть
Могут. См. учебник по матлогике
Старый 21.03.2008, 15:39   #7  
CasperSKY is offline
CasperSKY
Axapta Retail User
Аватар для CasperSKY
Axapta Retail User
 
53 / 10 (1) +
Регистрация: 22.02.2008
Лана могут ... но результат тотже !
Старый 21.03.2008, 15:43   #8  
CasperSKY is offline
CasperSKY
Axapta Retail User
Аватар для CasperSKY
Axapta Retail User
 
53 / 10 (1) +
Регистрация: 22.02.2008
wolfstein, В условиях это я просто проверил их там быть недолжно а в сравнениях ... потому что инициализировать именно эти записи нет возможности кроме как числом... , проверил в КвериАналайзере работает как надо ... с И

Последний раз редактировалось CasperSKY; 21.03.2008 в 15:49.
Старый 21.03.2008, 15:49   #9  
Alex_KD is offline
Alex_KD
Участник
AxAssist
MCBMSS
Соотечественники
 
522 / 362 (14) ++++++
Регистрация: 06.07.2006
Адрес: Melbourne, Down Under
Жесткий код
Бест практис отдыхает.
Ставьте брейк поинты и проверяйте по кускам.
__________________
AxAssist 2012 - Productivity Tool for Dynamics AX 2012/2009/4.0/3.0
Старый 21.03.2008, 15:53   #10  
Alex_KD is offline
Alex_KD
Участник
AxAssist
MCBMSS
Соотечественники
 
522 / 362 (14) ++++++
Регистрация: 06.07.2006
Адрес: Melbourne, Down Under
X++:
str2date([COLOR=red]""[/COLOR],123)
Это datenull() чтоли?
__________________
AxAssist 2012 - Productivity Tool for Dynamics AX 2012/2009/4.0/3.0
Старый 21.03.2008, 15:56   #11  
CasperSKY is offline
CasperSKY
Axapta Retail User
Аватар для CasperSKY
Axapta Retail User
 
53 / 10 (1) +
Регистрация: 22.02.2008
Возможно и DateNull() Это не я писал я только правлю по заданию хотя половина тут ненужна ..всмысле учусь ..., а брейк поинты ставил ... он в св-вах пишет RecID = 68956563 и всё равно выполняет ...

Последний раз редактировалось CasperSKY; 21.03.2008 в 15:58.
Старый 21.03.2008, 16:07   #12  
wolfstein is offline
wolfstein
Axapta Retail User
Axapta Retail User
 
51 / 91 (4) ++++
Регистрация: 05.07.2006
Цитата:
Сообщение от CasperSKY Посмотреть сообщение
Возможно и DateNull() Это не я писал я только правлю по заданию хотя половина тут ненужна ..всмысле учусь ..., а брейк поинты ставил ... он в св-вах пишет RecID = 68956563 и всё равно выполняет ...
На сколько я понимаю вы этим кодом считаете остатки по складам?
Цитата:
В условиях это я просто проверил их там быть недолжно а в сравнениях ... потому что инициализировать именно эти записи нет возможности кроме как числом... , проверил в КвериАналайзере работает как надо ... с И
А почему не сделать так ?
X++:
InventDim::findOrCreateInventLocationId(InventLocationId inventLocationId)

Последний раз редактировалось wolfstein; 21.03.2008 в 16:11.
Старый 21.03.2008, 16:09   #13  
CasperSKY is offline
CasperSKY
Axapta Retail User
Аватар для CasperSKY
Axapta Retail User
 
53 / 10 (1) +
Регистрация: 22.02.2008
да по всем кроме указанных .... но касяк видимо не тут ... а в inventSum нада править, потому что убрав выборку получаем тот же результат
Старый 21.03.2008, 16:15   #14  
wolfstein is offline
wolfstein
Axapta Retail User
Axapta Retail User
 
51 / 91 (4) ++++
Регистрация: 05.07.2006
Цитата:
Сообщение от CasperSKY Посмотреть сообщение
да по всем кроме указанных .... но касяк видимо не тут ... а в inventSum нада править, потому что убрав выборку получаем тот же результат
В предыдущей вашей теме вам уже давали советы как считать остаток, используйте класс InventSumDate и его потомки.
Старый 23.03.2008, 12:30   #15  
Didukh84 is offline
Didukh84
Участник
 
57 / 10 (1) +
Регистрация: 09.06.2006
Уважаемый CasperSKY, может это звучит банально, но вы в таблице
inventdim строки с RecId равным вашему условию есть физически?
И если да, то может стоит поставить в where inventdim.RecID!= 0 (на всякий случай )
Как вариант еще вывести все значение RecID, возвращаемых через while select, в какой-то буфер и проверить есть ли они там.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
2 while select или join? _scorp_ DAX: Программирование 9 23.01.2009 16:02
Разница NotInTTS и Found Logger DAX: База знаний и проекты 6 18.09.2008 12:35
gatesasbait: Reverse keyword on Select Statements Blog bot DAX Blogs 0 08.02.2008 00:10
Fred Shen: Always use recId to know if a select statement returns a record Blog bot DAX Blogs 0 28.10.2006 16:40
Вопрос про Demand Planner slava09 DAX: Функционал 4 25.09.2006 11:43
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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