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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 27.03.2002, 17:09   #1  
Rem is offline
Rem
Участник
 
17 / 10 (1) +
Регистрация: 27.03.2002
Отчеты
Допустим, что где то в отчете я должен вывести какую-либо вычисляемую величину. Например среднее по столбцу, или например среднее арифмитическое отклонение... Как это делается в Аксапте ?
Я создавал Control в отчете и устанавливал его свойство DataMethod. В DataMethod писал например return 10; - работает. А как в этом методе получить доступ ко всем значениям выводимым в отчете.
И еще один вопрос - зачем нужны (и нужны ли) ProgrammableSection ?

Спасибо.
Старый 28.03.2002, 06:14   #2  
Andrew Besedin is offline
Andrew Besedin
Участник
 
121 / 15 (1) ++
Регистрация: 25.01.2002
Привет!
Чтобы вывести некую агрегатную ф-цию, создай в DataSours'е отчета поле, равное нужной функции (учти, что при этом обычные поля исчезнут).
Или так: можно в executeSection стандартного Body добавить код для подсчета необходимой функции, а в конце просто вывести переменную через display-метод.

Программируемые секции - вещь исключительно нужная, как только ты захочешь сделать что-нибудь хоть чуть-чуть нестандартно
__________________
С уважением,
Андрей Беседин
Старый 28.03.2002, 09:24   #3  
Rem is offline
Rem
Участник
 
17 / 10 (1) +
Регистрация: 27.03.2002
Цитата:
Andrew Besedin
Чтобы вывести некую агрегатную ф-цию, создай в DataSours'е отчета поле, равное нужной функции (учти, что при этом обычные поля исчезнут).
Понятно. А как мне поступить, если мне необходимо отобразить как поля таблицы, так и некую агрегатную функцию ?

Цитата:
Или так: можно в executeSection стандартного Body добавить код для подсчета необходимой функции, а в конце просто вывести переменную через display-метод.
Вот это меня и интересует. Как в методе получить доступ к выводимым данным ?Допустим я вывожу следующую таблицу:

A B C

1 3 6
-1 4 7
0 6 5
1 3 4
1 5 3

И мне необходимо вывести еще один столбец, получаемый следующим образом:
- если A>0 то (B+C)
-если А<0 то (B-C)
- если А=0, то выводим сумму ПО ВСЕМУ отчету разности (B-C)

Чтобы решить эту задачу(для примера она у меня абстрактная и практически не нужная), я должен иметь доступ к каждой выводимой на экран записи. Какой метод мне необходимо для этого перекрыть и каким образом в этом методе получать значения выводимых полей ?

Спасибо за ответы.
Старый 28.03.2002, 10:11   #4  
slava is offline
slava
сибиряк
Самостоятельные клиенты AX
 
468 / 23 (1) +++
Регистрация: 28.12.2001
Адрес: Москва
пользуй простой real - control ссылающийся на dataMethod
а в нем :
<pre>
display Real myMethod()
{
;
if (myTable.A < 0)
return myTable.B + myTable.C;
else
return myTable.B - myTable.C;
................
}
</pre>
__________________
С уважением, Вячеслав.
Старый 28.03.2002, 11:39   #5  
Andrew Besedin is offline
Andrew Besedin
Участник
 
121 / 15 (1) ++
Регистрация: 25.01.2002
2Rem:
Цитата:
Изначально опубликовано Rem

- если А=0, то выводим сумму ПО ВСЕМУ отчету разности (B-C)
... а вот с этого места поподробнее можно? Допиши столбец D - какими значениями он должен быть заполнен?
Ну и конечно, приглядись к тому, что написал Слава(slava). В этом самом методе ты же можешь делать всевозможные селекты (если нужно "ПО ВСЕМУ")
__________________
С уважением,
Андрей Беседин
Старый 28.03.2002, 12:05   #6  
Rem is offline
Rem
Участник
 
17 / 10 (1) +
Регистрация: 27.03.2002
2slava:

Большое спасибо. Это именно то, что мне нужно было понять.


Цитата:
Andrew Besedin
а вот с этого места поподробнее можно? Допиши столбец D - какими значениями он должен быть заполнен?
A B C D

1 3 6 9
-1 4 7 -3
0 6 5 = (3-6)+(4-7)+(6-5)+(3-4)+(5-3)
1 3 4 7
1 5 3 8

То есть в данном случае я должен обращаться не к отдельным строкам отчета, а ко всему отчету сразу, так как значение должно быть подсчитано еще до вывода отчета на экран.

Пробовал завести глобальную переменную и вычислять эту сумму в методе, но в данном случае эта переменная будет изменяться по мере "появления" строк отчета. Следовательно этот способ здесь не подходит.

Можно конечно сделать SUM(B)-SUM(C) - это сработает в данном конкретном случае, но в следующий раз понадобится вычислять более сложное выражение и хотелось бы понять, как это делается в общем случае.
Старый 28.03.2002, 12:23   #7  
slava is offline
slava
сибиряк
Самостоятельные клиенты AX
 
468 / 23 (1) +++
Регистрация: 28.12.2001
Адрес: Москва
вот как раз для конкретного случая и будет
<pre>
display Real myMethod()
{
;
.................
if (myTable.A = 0)
return (select sum(B) from myTable).B -
(select sum(C) from myTable).C;
................
}
</pre>
А что ты подразумеваешь под общим случаем? Это просто будет другая частность или нет?
__________________
С уважением, Вячеслав.
Старый 28.03.2002, 13:10   #8  
Rem is offline
Rem
Участник
 
17 / 10 (1) +
Регистрация: 27.03.2002
Да это как раз "общий случай", то есть я имел в виду тот случай, когда мы можем применить функцию sql, а общий - когда нет.

Ну например, если мне нужна не сумма разностей полей, а сумма разностей кубов полей (во усложнил то), то есть SUM(B*B*B)-SUM(C*C*C) - (B*B*B) - это я имею в виду для каждоой строки.

То есть для первой строки вычисляем B*B*B-C*C*C, для второй, третей... и все это суммируем. А полученный результат и выводим когда myTable.A = 0.

Понимая, что случай абсолютно не реальный, но хотелось бы разобраться.
Старый 29.03.2002, 14:56   #9  
Rem is offline
Rem
Участник
 
17 / 10 (1) +
Регистрация: 27.03.2002
Помогите пожалуйста !!!!!!
Удалите пожалуйста это сообщение. Я ошибся.
Старый 29.03.2002, 14:57   #10  
Rem is offline
Rem
Участник
 
17 / 10 (1) +
Регистрация: 27.03.2002
Помогите пожалуйста !!!!!!
Создал еще один отчет, который выводит данные все из той же таблицы. Создал в этом отчете метод, пишу:

display Real myMethod()
{
;
.................
if (myTable.

Аксапта ругается, нет мол такого поля в таблице. КАК НЕТ ?????? Да вот же оно.
В чем дело ???

Стал сравнивать два отчета - все одно и тоже, все но С ОДНИМ ОТЛИЧИЕМ.

Если в АОТ

MyReport\DataSources\Query\Data Sources\myTable посмотреть на окошко свойств, а именно на свойство Table, то в работающем отчете оно серенькое и недоступное для изменения, а во втором отчете (том, что не работает) оно активно, да еще есть выпадающий список, позволяющий мне выбрать любую другую таблицу.

Это из-за этого у меня не видна таблица в моем методе во втором отчете ???

А как мне поправить это дело ??

P.S. Сам метод у меня расположен в MyReport\Methods\myMethod. Это правильно ?



Помогите пожалуйста.
Старый 01.04.2002, 11:10   #11  
Rem is offline
Rem
Участник
 
17 / 10 (1) +
Регистрация: 27.03.2002
Странно. Пришел после выходных - все работает. Но ведь не работало же !!!

Не была видна эта переменная. В чем же дело ???

Никто не сталкивался с тем, что иногда переменная, которая должна быть видна, почему-то невидима ?
Старый 01.04.2002, 11:22   #12  
slava is offline
slava
сибиряк
Самостоятельные клиенты AX
 
468 / 23 (1) +++
Регистрация: 28.12.2001
Адрес: Москва
Почитай здесь
http://www.axforum.info/forums/showt...E5%EB%EE%F7%E8
__________________
С уважением, Вячеслав.
Старый 01.04.2002, 20:41   #13  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Изначально опубликовано Rem
Никто не сталкивался с тем, что иногда переменная, которая должна быть видна, почему-то невидима ?
А то! Только наутро голова болит...
__________________
полезное на axForum, github, vk, coub.
Старый 02.04.2002, 13:06   #14  
Rem is offline
Rem
Участник
 
17 / 10 (1) +
Регистрация: 27.03.2002
Цитата:
slava
Почитай здесь
Спасибо.

В продолжениt темы об отчетах. У меня есть форма, на ней две клавиши. При нажатии на них должен вызываться один и тот же отчет (созданный ранее с помощью АОТ), но с разными параметрами. То есть при нажатии на первую клавишу должны выводиться данные где поле А>10, при нажатии на другую - где А<10.

1. Как реализовать передачу параметров в отчет ? Можно ли это сделать с помощью АОТ и как это сделать с помощью кода ?

2. Как и главное где(в каком методе) принять этот параметр в отчете ?

Спасибо всем за помощь.
Старый 02.04.2002, 13:18   #15  
slava is offline
slava
сибиряк
Самостоятельные клиенты AX
 
468 / 23 (1) +++
Регистрация: 28.12.2001
Адрес: Москва
В АОТ создай 2 Menu Items. (Если хочешь вызывать отчеты, то пусть у них будет тип OutPut).
Пусть по ним вызывается твой отчет. В свойствах этих MenuItems (свойства Parameters) установи значение >10 , и в другом <10.
Из кода значения Parameters меняются так:
<b> MenuFunction _майМеню = new MenuFunction(menuItemDisplayStr(AA_testMenu),MenuItemType::OutPut);</b>

На форме создай 2 MenuItemButton control. В свойстве MenuItemName укажи название твоих менюайтемов. Кликаем по ним...

А в методе init() отчета (до супера()) анализируй что тебе приперлось из caller'a.
<b>element.args().parm();</b>
он вернет тебе параметры, которые передались в отчет из вызывающего объекта.
__________________
С уважением, Вячеслав.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
в следующей версии, "6.0" (или 201Х) т.н. "страндартных" отчетов не будет. ВСЕ отчеты будут построены на RS George Nordic DAX Blogs 23 21.08.2009 09:56
Фин отчеты: может ли работать по нескольким компаниям сразу Arahnid DAX: Функционал 3 30.05.2007 17:46
Отчеты по клиентам Anastasiya DAX: Функционал 2 19.03.2005 12:11
CrystalReport и внутренние отчеты Anais DAX: Программирование 7 19.10.2004 16:26
Авансовые отчеты - Копировать из источников mpa DAX: Функционал 11 05.04.2004 09:42

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

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

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