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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 26.04.2005, 09:22   #1  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
Интересная задачка по getFirst - getNext
Задача - просуммировать физ. наличие по выделенным строкам в форме "В наличии" (InventOnHandItem).

Если считать по BP, то результат будет неправильный (значение из текущей записи)
PHP код:
void clicked()
{
    
InventSum   inventSumLocal;
    
InventQty   qty;
    ;

    
super();

    for(
inventSumLocal InventSum_ds.getFirst(1) ? InventSum_ds.getFirst(1) : InventSum_ds.cursor();
        
InventSumLocal;
        
InventSumLocal InventSum_ds.getNext())
    {
        
qty += InventSumLocal.PhysicalInvent;
    }

    
info(strFmt("PhysicalInvent = %1"qty));

Какие будут предложения?
Старый 26.04.2005, 10:38   #2  
George Nordic is offline
George Nordic
Модератор
Аватар для George Nordic
Злыдни
 
4,479 / 1250 (50) ++++++++
Регистрация: 17.12.2003
Адрес: Moscow
Записей в блоге: 9
Приветствую, Wamr!

Предложения вот такие:
PHP код:
      for(inventSumLocal InventSum_ds.getFirst(true) ? InventSum_ds.getFirst(true) : InventSum_ds.cursor();
         
inventSumLocal.PhysicalInvent;
         
inventSumLocal InventSum_ds.getNext())
    {
        
qty += InventSumLocal.PhysicalInvent;
    }
    
info(strFmt("PhysicalInvent = %1"qty)); 
Обрати внимание, что inventSumLocal.RecId == 0 (?)

C Уважением,
Георгий.
Старый 26.04.2005, 10:38   #3  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
Прикольно.

В общем, такой эффект от того, что в при приведении типов Common -> boolean используется (InventSumLocal.RecId != 0) В форме "В наличии" запрос так переколбасивается, что RecId просто не выбирается из InventSum.

Бороться с этим можно по-разному. Например, так: добавьте в InventSum_ds.init() последней строкой (после вызова initQueryInventSum()) следующий код:
PHP код:
inventSum_ds.query().dataSourceTable(this.table()).addSelectionField(fieldNum(InventSumRecId), SelectionField::Min); 
Тогда для всех строчек InventSum_ds будет выбираться ненулевой RecId. А больше ничего и не надо.
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
Старый 26.04.2005, 10:39   #4  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
Не, Георгий, так не пойдет. А если среди суммируемых строк будет и строка с нулевым PhysicalInvent?
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
Старый 26.04.2005, 12:01   #5  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
Я знал, что вам понравится

Максим, как всегда, прав.

Георгий, наверное имел ввиду, сделать inventSumLocal.ItemId ?
но это повличет интересный эффект - если маркировать строчки снизу вверх, то все посчитается правильно, а сверху вниз нет
Старый 26.04.2005, 12:08   #6  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
А ItemId, кстати, тоже не обязательно будет выбираться. С помощью кнопки Отображение аналитики в форме В наличии код номенклатуры можно отключить
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
Старый 26.04.2005, 12:14   #7  
George Nordic is offline
George Nordic
Модератор
Аватар для George Nordic
Злыдни
 
4,479 / 1250 (50) ++++++++
Регистрация: 17.12.2003
Адрес: Moscow
Записей в блоге: 9
Цитата:
Изначально опубликовано Wamr
Георгий, наверное имел ввиду, сделать inventSumLocal.ItemId?
Ну, я искал альтернативу RecId

Но эффект все равно забавный "Улыбнуло. Афтар пеши исчто!"

С Уважением,
Георгий.
Старый 26.04.2005, 12:17   #8  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
Максим, аха.. отключить-то можно, и даже из грида пропадет... но в запросе-то останется (только что проверил)
Старый 26.04.2005, 12:33   #9  
trud is offline
trud
Участник
Лучший по профессии 2017
 
1,039 / 1633 (57) ++++++++
Регистрация: 07.06.2003
Записей в блоге: 1
Предложу более универсальное решение, которое будет работать независимо от того, какие поля заполнены в InventSum

PHP код:
    InventSum   inventSumLocal;
    
Common      inventSumCommon;
    
InventQty   qty;
    ;

    
super();

    for(
inventSumCommon InventSum_ds.getFirst() ? InventSum_ds.getFirst() : InventSum_ds.cursor();
        
inventSumCommon.TableId != tablenum(Common);
        
inventSumCommon InventSum_ds.getNext())
    {
        
InventSumLocal inventSumCommon;
        
qty += InventSumLocal.PhysicalInvent;
    }
    
info(strFmt("PhysicalInvent = %1"qty)); 
Старый 26.04.2005, 13:17   #10  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
Цитата:
Изначально опубликовано Wamr
Максим, аха.. отключить-то можно, и даже из грида пропадет... но в запросе-то останется (только что проверил)
OK. Согласен.
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
Старый 26.04.2005, 13:22   #11  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
Цитата:
Изначально опубликовано trud
Предложу более универсальное решение, которое будет работать независимо от того, какие поля заполнены в InventSum
Тоже интересный вариант. Только true Вы забыли передать в getFirst().
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
Старый 26.04.2005, 15:03   #12  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
Интересный, только имеет тотже трабл, что и вариант Георгия.

Почему-то все забывают про тройной оператор "? : ", в котором делается сравнение с курсором RecId =0. В результате вместо первой записи из выделенных всегда берется текущая запись.

PHP код:
    InventSum   inventSumLocal;
    
Common      inventSumCommon;
    
InventQty   qty;
    ;

    
super();

    for(
inventSumCommon InventSum_ds.getFirst(1).TableId != tablenum(Common) ?
        
InventSum_ds.getFirst(1) : InventSum_ds.cursor();
        
inventSumCommon.TableId != tablenum(Common);
        
inventSumCommon InventSum_ds.getNext())
    {
        
InventSumLocal inventSumCommon;
        
qty += InventSumLocal.PhysicalInvent;
    }
    
info(strFmt("PhysicalInvent = %1"qty)); 
Старый 26.04.2005, 15:13   #13  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
Я, кстати, тоже заметил, когда тестировал этот вариант, что один раз сглюкнуло, но почему - разбираться не стал. Спасибо, Wamr.
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Задачка с запросом в форме SHiSHok DAX: Программирование 16 17.07.2014 13:50
Вопрос по InventJournalTrans_ds.getNext() propeller DAX: Программирование 11 14.02.2009 16:31
ALEG: Интересная статья про иерархию финансовых аналитик в Microsoft Dynamics AX 4.0 Blog bot DAX Blogs 0 09.11.2006 06:00
XBRL (Extensible Business Reporting Language) OliaM DAX: Функционал 9 24.01.2005 02:16
интересная ситуация с суммовыми разницами anny DAX: Функционал 7 27.08.2004 16:11
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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