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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 25.01.2011, 16:20   #1  
AngelDominantes is offline
AngelDominantes
Участник
 
76 / 9 (1) +
Регистрация: 30.12.2010
Отчеты
Доброго времени суток.
Есть таблица из 4 полей. Необходимо получать отчет лишь по определенным записям, я создал на каждое поле Display метод такого типа:
X++:
 Table _table;
 ;
 select * from _table
  where _table.field == this.field;
 return  _table.field_2;
Отчет вызывается по нажатию MenuItem на форме c гридом, необходимо что бы из таблицы Table выбирались те записи, значение ключевого поля в которых равно значению этого поля на записе выбранной в гриде. Приведенный алгоритм выводит все записи таблицы Table. Где ошибка?
Старый 25.01.2011, 16:38   #2  
samolalex is offline
samolalex
Участник
Аватар для samolalex
Самостоятельные клиенты AX
 
259 / 107 (4) +++++
Регистрация: 18.06.2010
Адрес: Москва
Вы в свойствах вашей кнопки MenuItemButton указали DataSource?
В методе init() вашего отчета нужно сделать проверку на наличие переданного курсора из grid'а и указать фильтр, который будет служить связкой между таблицей и записью из grid'а.
Примерно так:
X++:
public void init()
{
    Args            parameters;
    ;

    super();

    parameters = element.args();

    if(!parameters.record())
        throw error('Отчет должен вызываться с параметрами!');
    else if(parameters.record().TableId == tablenum(  ))
           = parameters.record();

    this.query().dataSourceTable(tableNum( )).addRange(fieldNum( ,  )).value(  . );
}
Таблицу из грида нужно объявить либо в ClassDeclaration, либо в этом же методе.

P.S. Для того, чтобы не отображалась форма запроса(SysQueryForm) при запуске отчета, нужно в свойствах Query отчета Interactive поставить в No.
__________________
С уважением, Александр.

Последний раз редактировалось samolalex; 25.01.2011 в 17:13.
Старый 25.01.2011, 16:47   #3  
pitersky is offline
pitersky
северный Будда
Аватар для pitersky
Ex AND Project
Соотечественники
 
1,514 / 435 (18) +++++++
Регистрация: 26.09.2007
Адрес: Солнечная система
Чего-то я не понял
Если запуск по нажатию MenuItemButton, то что означает конструкция "this.field"? Никаких полей у класса нет.
Может быть всё-таки имеется в виду простой button?
__________________
С уважением,
Вячеслав
Старый 25.01.2011, 16:53   #4  
samolalex is offline
samolalex
Участник
Аватар для samolalex
Самостоятельные клиенты AX
 
259 / 107 (4) +++++
Регистрация: 18.06.2010
Адрес: Москва
Цитата:
Сообщение от pitersky Посмотреть сообщение
Чего-то я не понял
Если запуск по нажатию MenuItemButton, то что означает конструкция "this.field"? Никаких полей у класса нет.
Видимо методы у AngelDominantes табличные.
__________________
С уважением, Александр.
Старый 25.01.2011, 22:54   #5  
AngelDominantes is offline
AngelDominantes
Участник
 
76 / 9 (1) +
Регистрация: 30.12.2010
Цитата:
Сообщение от samolalex Посмотреть сообщение
Видимо методы у AngelDominantes табличные.
Да методы табличные, немного разобрался и понял, что в Display методы не передается указатель с грида, точнее я не знаю как его оттуда вытащить, если в init() отчета его возможно получить, то как его передать или использовать именно в Display?
Старый 25.01.2011, 23:45   #6  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,448 / 1786 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от AngelDominantes Посмотреть сообщение
Да методы табличные, немного разобрался и понял, что в Display методы не передается указатель с грида, точнее я не знаю как его оттуда вытащить, если в init() отчета его возможно получить, то как его передать или использовать именно в Display?
Так. Сдаётся мне, что у вас полный сумбур в голове

Вы писали:
Цитата:
Сообщение от AngelDominantes Посмотреть сообщение
я создал на каждое поле Display метод такого типа:
X++:
 Table _table;
 ;
 select * from _table
  where _table.field == this.field;
 return  _table.field_2;
Для чего вы сделали эти дисплей методы?

Цитата:
Сообщение от AngelDominantes Посмотреть сообщение
Необходимо получать отчет лишь по определенным записям
Забудем на время про дисплей-методы (ведь их использование никоим образом не влияет на решение этой задачи).

Каким образом у вас работает "отчёт"?
В его методе init есть цикл для обхода записей таблицы? Он основан на Query?
Перекрыт ли метод fetch?
Старый 26.01.2011, 00:27   #7  
AngelDominantes is offline
AngelDominantes
Участник
 
76 / 9 (1) +
Регистрация: 30.12.2010
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Так. Сдаётся мне, что у вас полный сумбур в голове

Вы писали:

Для чего вы сделали эти дисплей методы?


Забудем на время про дисплей-методы (ведь их использование никоим образом не влияет на решение этой задачи).

Каким образом у вас работает "отчёт"?
В его методе init есть цикл для обхода записей таблицы? Он основан на Query?
Перекрыт ли метод fetch?
Отчет построен с помощью мастера отчетов, в мастере выбрал Display методы в качестве отображаемой информации, виды Display методов выложил выше.Использовал Display методы, так как необходимо лишь выбрать некоторые записи в таблице, поле-критерий выборки записей располагается на гриде. Строго не судите если что-то концептуально не правильно, я только учусь.
Старый 26.01.2011, 08:59   #8  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,448 / 1786 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от AngelDominantes Посмотреть сообщение
Использовал Display методы, так как необходимо лишь выбрать некоторые записи в таблице
Разберитесь с тем, что такое дисплей-методы (сейчас у вас неправильное представление о них).
Дисплей метод - это аналог вычисляемых полей; они не имеют параметров, а работают лишь в контексте вызывающего курсора (this); при помощи их невозможно ограничить выборку

Цитата:
Сообщение от AngelDominantes Посмотреть сообщение
Строго не судите если что-то концептуально не правильно, я только учусь.
Читали morphx.pdf?
Старый 26.01.2011, 09:27   #9  
AngelDominantes is offline
AngelDominantes
Участник
 
76 / 9 (1) +
Регистрация: 30.12.2010
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Разберитесь с тем, что такое дисплей-методы (сейчас у вас неправильное представление о них).
Дисплей метод - это аналог вычисляемых полей; они не имеют параметров, а работают лишь в контексте вызывающего курсора (this); при помощи их невозможно ограничить выборку


Читали morphx.pdf?
Понятно, эту книжку только начал осваивать, читал другие, а каким образом тогда возможно ограничить выборку, что нужно для этого применять?
Старый 26.01.2011, 09:41   #10  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,448 / 1786 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от AngelDominantes Посмотреть сообщение
каким образом тогда возможно ограничить выборку, что нужно для этого применять?
Для этого нужно программировать модификацию запроса (Query) на основании которого строится отчёт. Например так как в ответе samolalex.
Старый 27.01.2011, 11:17   #11  
AngelDominantes is offline
AngelDominantes
Участник
 
76 / 9 (1) +
Регистрация: 30.12.2010
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Для этого нужно программировать модификацию запроса (Query) на основании которого строится отчёт. Например так как в ответе samolalex.
К примеру следующий код:
X++:
public boolean fetch()
{
QueryRun qr;
Boolean ret;
qr = new QueryRun(element);
qr.next();
....
qr указывает как я понимаю на Query Reporta, а что именно делает qr.next()? будет указывать на след запись в таблице DataSource или на след DataSource?
Старый 27.01.2011, 11:42   #12  
kornix is offline
kornix
MCP
MCBMSS
Злыдни
Ex AND Project
 
414 / 146 (5) +++++
Регистрация: 24.02.2009
Адрес: Санкт-Петербург
Цитата:
Сообщение от AngelDominantes Посмотреть сообщение
К примеру следующий код:
X++:
public boolean fetch()
{
QueryRun qr;
Boolean ret;
qr = new QueryRun(element);
qr.next();
....
qr указывает как я понимаю на Query Reporta, а что именно делает qr.next()? будет указывать на след запись в таблице DataSource или на след DataSource?
На следующую запись. Посмотрите как используется такие циклы в Reports/Tutorial_Joins..

Последний раз редактировалось kornix; 27.01.2011 в 11:45.
За это сообщение автора поблагодарили: AngelDominantes (1).
Старый 27.01.2011, 11:44   #13  
AngelDominantes is offline
AngelDominantes
Участник
 
76 / 9 (1) +
Регистрация: 30.12.2010
Цитата:
Сообщение от kornix Посмотреть сообщение
На следующую запись.
А не подскажите как можно обратиться к конкретному полю записи?
Старый 27.01.2011, 11:49   #14  
kornix is offline
kornix
MCP
MCBMSS
Злыдни
Ex AND Project
 
414 / 146 (5) +++++
Регистрация: 24.02.2009
Адрес: Санкт-Петербург
Цитата:
Сообщение от AngelDominantes Посмотреть сообщение
А не подскажите как можно обратиться к конкретному полю записи?
В этой теме есть примеры
Старый 27.01.2011, 12:06   #15  
AngelDominantes is offline
AngelDominantes
Участник
 
76 / 9 (1) +
Регистрация: 30.12.2010
Цитата:
Сообщение от kornix Посмотреть сообщение
В этой теме есть примеры
Обратиться к конкретному полю можно через табличную переменную, таблицы из DataSource используя след функцию, может кому пригодиться

PHP код:
...
tableVar qr.get(tableNum(Table));
... 
Старый 27.01.2011, 12:14   #16  
AX2009
Гость
 
n/a
Заодно правописание -ТСЯ и -ТЬСЯ тут запости, вдруг тоже кому пригодится
Теги
query, отчет, report

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Изменить отчеты Dreadlock DAX: Программирование 2 04.06.2010 14:17
Фин отчеты: может ли работать по нескольким компаниям сразу Arahnid DAX: Функционал 3 30.05.2007 17:46
Шаблонные отчеты Bug DAX: Программирование 2 18.10.2005 16:41
Отчеты по клиентам Anastasiya DAX: Функционал 2 19.03.2005 12:11
CrystalReport и внутренние отчеты Anais DAX: Программирование 7 19.10.2004 16:26

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

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

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