|
28.03.2011, 16:01 | #1 |
Участник
|
суммирование в отчете
Добрый день,
помогите разобратсья в отчете суммирую 3 поля qbds.addSelectionField(fieldNum(FlxPortJournal,FlxPortPcsArrival),SelectionField::Sum); qbds.addSelectionField(fieldNum(FlxPortJournal,FlxNumPassengersTotalArrival),SelectionField::Sum); можно ли так? qbds.addSelectionField(element.getcruisepassengers(),SelectionField::Sum); для третьего пишу метод display int getcruisepassengers() { if (FlxPortJournal_1.ShipsType == "Kruiisilaev") return FlxPortJournal_1.FlxNumPassengersTotalArrival; return 0; } для третьего поля сумму не считает? |
|
28.03.2011, 16:04 | #2 |
Участник
|
|
|
28.03.2011, 17:05 | #3 |
NavAx
|
Цитата:
Сообщение от romanja
можно ли так?
qbds.addSelectionField(element.getcruisepassengers(),SelectionField::Sum); для третьего пишу метод display int getcruisepassengers() { if (FlxPortJournal_1.ShipsType == "Kruiisilaev") return FlxPortJournal_1.FlxNumPassengersTotalArrival; return 0; } для третьего поля сумму не считает? X++: if (FlxPortJournal_1.ShipsType == "Kruiisilaev") qbds.addSelectionField(element.getcruisepassengers(),SelectionField::Sum); display int getcruisepassengers() { return fieldNum(FlxPortJournal,FlxNumPassengersTotalArrival); } |
|
28.03.2011, 17:33 | #4 |
Участник
|
чего то не того
ставит сумму и круизным и не круизным одну и ту же |
|
28.03.2011, 22:37 | #5 |
Участник
|
Не вводите людей в заблуждение. В аксапте нельзя применять агрегатные функции к вычисляемым полям (читай дисплей-методам). Т.е в чистом виде вычисляемых полей (в терминах SQL) в аксапте нет, а есть более сложный механизм дисплей-методов, работающих в контексте отдельных курсоров, а не таблицы в целом.
Если уж кровь из носа эту задачу нужно решить за один запрос, то я бы попытался приджойнить таблицу саму к себе, так чтобы напротив круизных записей суммы были, а напротив остальных нет. И соответственно третью сумму искать уже по этому дополнительному приджойненному столбцу. Но имхо всё это шаманство. Куда проще найти требуемую сумму дополнительным подзапросом. |
|
29.03.2011, 10:08 | #6 |
MCTS
|
У вас поле ShipsType попадает в выборку (добавлено в qbds)?
Для того, что бы условие в дисплей методе отрабатывало корректно, в qbds надо, например, добавить группировку по полю ShipsType.
__________________
Dynamics AX Experience |
|
30.03.2011, 10:32 | #7 |
Участник
|
добавил
qbds.addRange(fieldNum(FlxPortJournal,ShipsType)).value(); qbds.orderMode(OrderMode::GroupBy); не помогает похоже нужно работать с вложенным подзапросом X++: qr = new QueryRun(queryRun.query()); while (qr.next()) { portJournal = qr.get(tableNum(FlxPortJournal)); if (FlxPortJournal_1.ShipsType == "Kruiisilaev") select sum(FlxNumPassengersTotalArrival) from flxPortJournal_1 group by flxPortJournal_1.ShipsName; } |
|
30.03.2011, 11:08 | #8 |
Участник
|
Во первых, не addRange, а addSortField.
А во вторых... На сколько я понял, в вашей задаче первые две суммы должны считаться по всем строкам входящим в группу, а третья только по круизным. Это так? Вы всё-таки определитесь в каких разрезах вам нужны ваши три суммы (внутри каких групп должно происходить суммирование)? Может ли внутри такой группы находиться одновременно и круизные строки и не круизные? |
|
30.03.2011, 11:32 | #9 |
Участник
|
да тогда, qbds.addSortField(FieldNum(FlxPortJournal,ShipsType));
первые две суммы должны считаться по всем строкам , а третья только по круизным первые две qbds.addSelectionField(fieldNum(FlxPortJournal,FlxPortPcsArrival),SelectionField::Sum); qbds.addSelectionField(fieldNum(FlxPortJournal,FlxNumPassengersTotalArrival),SelectionField::Sum); а третье те же (FlxPortJournal,FlxNumPassengersTotalArrival),SelectionField::Sum); только с условием (FlxPortJournal_1.ShipsType == "Kruiisilaev") |
|
30.03.2011, 12:14 | #10 |
MCTS
|
Цитата:
Сообщение от romanja
да тогда, qbds.addSortField(FieldNum(FlxPortJournal,ShipsType));
первые две суммы должны считаться по всем строкам , а третья только по круизным первые две qbds.addSelectionField(fieldNum(FlxPortJournal,FlxPortPcsArrival),SelectionField::Sum); qbds.addSelectionField(fieldNum(FlxPortJournal,FlxNumPassengersTotalArrival),SelectionField::Sum); а третье те же (FlxPortJournal,FlxNumPassengersTotalArrival),SelectionField::Sum); только с условием (FlxPortJournal_1.ShipsType == "Kruiisilaev") Все три поля суммируются + группировка по ShipsType. Первые два поля выводятся в отчет обычным способом, а третье поле - дисплей методом из первого сообщения.
__________________
Dynamics AX Experience |
|
30.03.2011, 12:26 | #11 |
Участник
|
все заработала благодарю
|
|
30.03.2011, 11:45 | #12 |
Участник
|
Ответьте ещё на этот вопрос.
Или ещё лучше приведите здесь желаемый запрос на чистом SQL. Что бы у участников обсуждения не осталось никаких разночтений |
|
30.03.2011, 12:07 | #13 |
Участник
|
примерно так, не проверял
select sum(FlxPortPcsArrival),sum(FlxNumPassengersTotalArrival),t.cruisepassangers from flxPortJournal_1,( select sum(FlxNumPassengersTotalArrival) cruisepassangers from flxPortJournal_1 group by ShipsName)t group by ShipsName |
|
|
Похожие темы | ||||
Тема | Ответов | |||
Сортировка в Query в отчете | 7 | |||
Динамические контролы в отчете основанные на display-методе | 19 | |||
dialog в отчёте | 6 | |||
Не срабатывает один из footer-ов в отчете | 11 | |||
Установка Range в отчёте | 13 |
|