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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 19.12.2008, 09:54   #1  
laxel is offline
laxel
Участник
 
36 / 10 (1) +
Регистрация: 11.08.2008
Адрес: РК, Алматы
Фильтрация отчета.
Доброго времени суток, уважаемые программисты.

Сразу к делу ). задача состоит в том чтоб отфильтровать отчет, у которого в боди находится только одна строчка (активная на гриде) и фильтруется она по номеру журнала и строке.

Я пытался сделать так:

public void init()
{
Query q;
QueryRun qr;
QueryBuildDatasource qbds;
QueryBuildRange qbr,qbr1;
;
super();
q = this.query();
ledgerJournalTrans = element.args().record();

qbr = q.dataSourceTable(tablenum(LedgerJournalTrans)).findRange(fieldnum(LedgerJournalTrans, JournalNum));
if(!qbr)qbr = q.dataSourceTable(tablenum(LedgerJournalTrans)).addRange(fieldnum(LedgerJournalTrans, JournalNum));
qbr.value(ljt.JournalNum);

qbr1 = q.dataSourceTable(tablenum(LedgerJournalTrans)).findRange(fieldnum(LedgerJournalTrans, AccountNum));
if(!qbr1)qbr1 = q.dataSourceTable(tablenum(LedgerJournalTrans)).addRange(fieldnum(LedgerJournalTrans, AccountNum));
qbr1.value(ljt.AccountNum);

//this.query(q);
//element.query(q);
}

отчет ни как не реагирует, выводит все подряд. может я не там вобще делаю (init самого отчета). направте на путь истиный )

p.s. я только начинаю работать с аксаптой, так что не судите строго.

заранее благодарю, с уважением Александр.
Старый 19.12.2008, 09:59   #2  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
Судить будем

вместо
qbr = q.dataSourceTable(tablenum(LedgerJournalTrans)).findRange(fieldnum(LedgerJournalTrans, JournalNum));
if(!qbr)qbr = q.dataSourceTable(tablenum(LedgerJournalTrans)).addRange(fieldnum(LedgerJournalTrans, JournalNum));

юзайте
qbr = q.dataSourceTable(tablenum(LedgerJournalTrans)).findOrCreateRange(fieldnum(LedgerJournalTrans, JournalNum));

qbr.value(ljt.JournalNum);

заменить на
qbr.value(queryValue(ljt.JournalNum));
Старый 19.12.2008, 10:06   #3  
coolibin is offline
coolibin
Участник
 
264 / 68 (3) ++++
Регистрация: 07.04.2005
Возможно? причина в том, что Вы пытаетесь использовать this.query()
а нужно this.queryRun().query()
Старый 19.12.2008, 10:14   #4  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
Что за отчёт? Самописный или как?
Старый 19.12.2008, 10:23   #5  
laxel is offline
laxel
Участник
 
36 / 10 (1) +
Регистрация: 11.08.2008
Адрес: РК, Алматы
спасибо на сколько я понимаю, это просто сокращает код..
Старый 19.12.2008, 10:25   #6  
laxel is offline
laxel
Участник
 
36 / 10 (1) +
Регистрация: 11.08.2008
Адрес: РК, Алматы
вы имеете виду авто или генерируемый? если так, то генерируемый
Старый 19.12.2008, 10:26   #7  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
Я имею ввиду стандартный или нет.
qbr.value(queryValue(ljt.JournalNum)); не сокращает код, а просто так нужно.
Старый 19.12.2008, 10:39   #8  
laxel is offline
laxel
Участник
 
36 / 10 (1) +
Регистрация: 11.08.2008
Адрес: РК, Алматы
отчет, создавал я.
Попробовал, ругается вот на что:
qbr = q.dataSourceTable(tablenum(LedgerJournalTrans)).findOrCreateRange(fieldnum(LedgerJournalTrans, JournalNum));
findOrCreateRange - не может найти.

q = this.queryRun().query();
говорит что QueryRun не инициализирован....
Старый 19.12.2008, 10:44   #9  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
->
Цитата:
Сообщение от laxel Посмотреть сообщение
может я не там вобще делаю (init самого отчета). направте на путь истиный )
Место вполне допустимое, хотя более частоиспользуемым в таких случаях является init датасорса, имхо.

PS используйте Global::findOrCreateRange_RU()
__________________
Zhirenkov Vitaly
Старый 19.12.2008, 10:53   #10  
laxel is offline
laxel
Участник
 
36 / 10 (1) +
Регистрация: 11.08.2008
Адрес: РК, Алматы
Цитата:
Сообщение от ZVV Посмотреть сообщение
PS используйте Global::findOrCreateRange_RU()
теперь я кажется понимаю в чем дело, у меня международная аксапта....

даже если писать с if, не работет, опять все подряд выдает...
Старый 19.12.2008, 10:53   #11  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
->
Цитата:
Сообщение от laxel Посмотреть сообщение
теперь я кажется понимаю в чем дело, у меня международная аксапта....
тогда sysQuery::findOrCreateRange()
__________________
Zhirenkov Vitaly
Старый 19.12.2008, 11:01   #12  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
->
Правда все эти бантики не решают исходную проблему...

А попробуйте всё-таки сделать это на ините датасорса, ничего не поменяется?

Можно кстати включить SQL-трэйс и посмотреть уходящий запрос, чтоб убедиться, что запрос действительно не изменился, а то может он просто неправильно сформирован по каким-то другим причинам?
__________________
Zhirenkov Vitaly
Старый 19.12.2008, 11:14   #13  
laxel is offline
laxel
Участник
 
36 / 10 (1) +
Регистрация: 11.08.2008
Адрес: РК, Алматы
2 ZVV
да, я уже попробовал, как увидел ваше сообщение.. та же самая история...

мне кажется, что я просто изменяю лишь копию, и потом не вношу изменения в оригинал,
т.е. я беру объект
"q = this.query();"
ограничиваю рейнджами "q", но не вношу изменений в this
как видите я пробовал уже this.query(q);(если честно я не знаю можно так или нет, просто инстинктивно написал)
весь форум облазил, ничего не нашел, уже третий день бьюсь над этим...
Старый 19.12.2008, 11:18   #14  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
а почему ljt.JournalNum, а не ledgerJournalTrans.JournalNum ? В же курсор из аргс получаете в ledgerJournalTrans, значит и значение для фильтра надо из него брать, а то получается скорее всего туда пустой фильтр уходит...
Старый 19.12.2008, 11:25   #15  
laxel is offline
laxel
Участник
 
36 / 10 (1) +
Регистрация: 11.08.2008
Адрес: РК, Алматы
вы имеете виду LedgerJournalTrans = element.args().record(); - обьявление,
qbr.value(queryValue(LedgerJournalTrans.JournalNum)); обращение? если так, то так и было это для краткости было написано...
извините что запутал...
Старый 19.12.2008, 11:30   #16  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
Ааа, понятно . Попробуйте, перекрыть fetch:
X++:
element.send(element.args().record());
return true;
это обходной маневр, но судя по первому посту, это и требуется

PS: в качесте шаманства, можно попробовать сбросить настройки пользователя :
(Сервис Параметры Использование данных).

Последний раз редактировалось Eldar9x; 19.12.2008 в 11:37.
За это сообщение автора поблагодарили: Jorj (1), laxel (1).
Старый 19.12.2008, 11:37   #17  
DAX is offline
DAX
Участник
 
28 / 18 (1) ++
Регистрация: 03.12.2008
Цитата:
Сообщение от laxel Посмотреть сообщение
2 ZVV
да, я уже попробовал, как увидел ваше сообщение.. та же самая история...

мне кажется, что я просто изменяю лишь копию, и потом не вношу изменения в оригинал,
т.е. я беру объект
"q = this.query();"
ограничиваю рейнджами "q", но не вношу изменений в this
как видите я пробовал уже this.query(q);(если честно я не знаю можно так или нет, просто инстинктивно написал)
весь форум облазил, ничего не нашел, уже третий день бьюсь над этим...
ну вроде нормально, скопировали query (q = this.query()), модифицировали и и подали модифицированую версию(this.query(q))... единственное что приходит в голову это попробовать всё это засунуть в метод fetch() перед супером

а и еще можно попробовать стереть данные, которые привязаны к вашему юзер айди, из таблицы SysLastValue

Последний раз редактировалось DAX; 19.12.2008 в 11:40.
Старый 19.12.2008, 11:40   #18  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
->
не знаю, не знаю...
у меня всё работает, сделал просто пример: отчёт, один датасорс LedgerTable
инит отчёта:
X++:
public void init()
{
    Query q;
    QueryBuildDatasource qbds;
    QueryBuildRange qbr;
;

    super();

    q = this.query();
    qbds = q.dataSourceTable(tablenum(LedgerTable));

    qbr = sysQuery::findOrCreateRange(qbds,fieldnum(LedgerTable, AccountNum));
    qbr.value(QueryValue('01.00.0.0'));
}
Результат - в отчёте один счёт.
(3.0.сп3 кр3)

Вывод - вы наверное чего-то не договариваете, что-то у вас в отчёте ещё есть, влияющее на данное поведение.
Можете вложить в сообщение экспортный файл своего отчёта - можно будет глянуть..
__________________
Zhirenkov Vitaly
Старый 19.12.2008, 11:48   #19  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
Сбросьте настройки пользователя.
Происходит следующее, сначала вы запускаете отчет без кода в ините. Выводятся все строки. Потом добавляете ограничение в init и снова запускаете отчет, но только запрос теперь берется из сохраненный, и поэтому никакого эффекта.
Старый 19.12.2008, 11:52   #20  
laxel is offline
laxel
Участник
 
36 / 10 (1) +
Регистрация: 11.08.2008
Адрес: РК, Алматы
попробовал...
public boolean fetch()
{
element.send(element.args().record());
return true;
} вот так
//------------------------------------
public boolean fetch()
{
boolean ret;
ret = super();
element.send(element.args().record());
ret = true;
return ret;
} и вот так...
//-----------------------------------------

public boolean fetch()
{
boolean ret;
element.send(element.args().record());
ret = super();
ret = true;
return ret;
} и вот так...


не получается...

вставил info(info (strfmt('%1 %2', LedgerJournalTrans.JournalNum, LedgerJournalTrans.Voucher));

выводит те самые данные по которым должен быть фильтр....

2 DAX

попробовал, таже самая история.......
Изображения
 
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Время формирования отчета Yprit DAX: Программирование 2 04.09.2006 12:00
Как изменить заголовок окна предв.просмотра отчета Владимир Максимов DAX: Программирование 6 03.07.2006 15:34
Обращения к полям отчета Oz DAX: Программирование 4 25.02.2004 13:04
Русская локализация Axapta 3 ? SlavaK DAX: Администрирование 59 01.07.2003 22:38
Формирование отчета с динамически изменяемым числом столбцов. rumpleteazer DAX: Программирование 1 06.09.2002 11:25

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

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

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