|
![]() |
#1 |
Участник
|
Цитата:
самый правильный - это воспользоваться стандартными отчетами правильный - воспользоваться стандартными классами. например, RAssetSumCalc_Trans но, насколько я понимаю, вы хотите получить суммы одним запросом. это не совсем правильно с логической точки зрения, а также с точки зрения дальнейшей поддержки. но зато будет одни быстрый SQL-запрос. насколько я помню, аксапта 3.0 позволяет суммировать только тогда, когда во внешних селектах будут присутствовать агрегатные функции. т.е. в ax3.0 не работает код X++: select RAssetTable join sum(AmountCur) from RAssetTrans where RAssetTrans.AccountNum == RAssetTable.AccountNum; попробуйте задать агрегатную функцию count(recid) для внешней таблицы. X++: select count(recid) from RAssetTable join sum(AmountCur) from RAssetTrans where RAssetTrans.AccountNum == RAssetTable.AccountNum; но все-таки правильно - это воспользоваться стандартным функционалом. даже если запросов там будет больше. ================= кстати, ax2009 вполне работает с обоими запросами. |
|
![]() |
#2 |
Участник
|
Я обычно в таких случаях "выворачиваю" запрос так чтобы внешней оказалась та таблица по которой задана агрегатная функция. Тем более в данном примере дополнительные таблицы нужны разве что для фильтрации (поле 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(); } |
|
|
За это сообщение автора поблагодарили: ZornFire (1). |