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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 12.05.2011, 16:54   #1  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от mr.ZF Посмотреть сообщение
Так вот, хочу понять как правильно написать код, чтобы все суммы амортизации из RAssetTrans сложить в одну сумму при чём по ToDate (по сегодня)
Есть несколько критериев правильности.
самый правильный - это воспользоваться стандартными отчетами
правильный - воспользоваться стандартными классами. например, RAssetSumCalc_Trans

но, насколько я понимаю, вы хотите получить суммы одним запросом. это не совсем правильно с логической точки зрения, а также с точки зрения дальнейшей поддержки. но зато будет одни быстрый SQL-запрос.

насколько я помню, аксапта 3.0 позволяет суммировать только тогда, когда во внешних селектах будут присутствовать агрегатные функции. т.е. в ax3.0 не работает код
X++:
select RAssetTable 
join sum(AmountCur) from RAssetTrans
where RAssetTrans.AccountNum == RAssetTable.AccountNum;
Название: 1.PNG
Просмотров: 1733

Размер: 16.5 Кб

попробуйте задать агрегатную функцию count(recid) для внешней таблицы.

X++:
select count(recid) from RAssetTable
join sum(AmountCur) from RAssetTrans
where RAssetTrans.AccountNum == RAssetTable.AccountNum;
=================
но все-таки правильно - это воспользоваться стандартным функционалом.
даже если запросов там будет больше.

=================
кстати, ax2009 вполне работает с обоими запросами.
__________________
полезное на axForum, github, vk, coub.
Старый 13.05.2011, 08:31   #2  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,448 / 1792 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от mazzy Посмотреть сообщение
попробуйте задать агрегатную функцию count(recid) для внешней таблицы.
Я обычно в таких случаях "выворачиваю" запрос так чтобы внешней оказалась та таблица по которой задана агрегатная функция. Тем более в данном примере дополнительные таблицы нужны разве что для фильтрации (поле AssetStandardId есть непосредствено в таблице проводок RAssetTrans)
X++:
static void Job15(Args _args)
{
    TextBuffer text = new TextBuffer();
    RAssetTrans RAssetTrans;
    RAssetTable RAssetTable;
    TransDate _transDate = 31\01\2011;
    ;

    while select sum(AmountMST) from RAssetTrans
    group by AccountNum, AssetStandardId, AssetTransType
    where 
        RAssetTrans.TransDate <= _transDate
//    exists join RAssetTable
//    where
//        RAssetTable.AccountNum == RAssetTrans.AccountNum
    {
        text.appendText(strfmt("%1\t%2\t%3\t%4\n",
                         RAssetTrans.AccountNum,
                         RAssetTrans.AssetStandardId,
                         RAssetTrans.AssetTransType, 
                         RAssetTrans.AmountMST));
    }
    
    text.toClipboard();
}
И ещё. Если выбирать суммы в валюте (AmountCUR), то не плохо было бы ещё выбрать и саму валюту (CurrencyCode). Если суммы нужны в основной валюте то выбирать нужно поле AmountMST.
За это сообщение автора поблагодарили: ZornFire (1).
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Универсальный изменятель значений полей wojzeh DAX: Программирование 17 26.09.2013 17:47
Последовательная замена множества уникальных значений на другие без возникновения дубликатов gl00mie DAX: Программирование 23 24.11.2010 15:05
Нужен пример кода для Аксы 3 zZ_TOP_Zz DAX: Программирование 3 28.06.2007 17:34
проблема с настройкой штрихового кода Nic DAX: Функционал 4 27.12.2004 09:04
QueryRange: отбор по сумме значений belugin DAX: Программирование 1 06.08.2004 16:44

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

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

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