AXForum  
Go Back   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Forgotten Your Password?
Register Forum Rules FAQ Members List Today's Posts Search Mark Forums Read

 
 
Thread Tools Search this Thread Display Modes
Old 19.12.2008, 09:54   #1  
laxel is offline
laxel
Участник
 
36 / 10 (1) +
Join Date: 11.08.2008
Location: РК, Алматы
Фильтрация отчета.
Доброго времени суток, уважаемые программисты.

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

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

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. я только начинаю работать с аксаптой, так что не судите строго.

заранее благодарю, с уважением Александр.
Old 19.12.2008, 09:59   #2  
Sada is offline
Sada
Программатор
Sada's Avatar
 
1,450 / 153 (8) ++++++
Join Date: 29.03.2005
Location: Толи Барнаул, толи Москва
Судить будем

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

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

PS используйте Global::findOrCreateRange_RU()
__________________
Zhirenkov Vitaly
Old 19.12.2008, 10:53   #10  
laxel is offline
laxel
Участник
 
36 / 10 (1) +
Join Date: 11.08.2008
Location: РК, Алматы
Quote:
Originally Posted by ZVV View Post
PS используйте Global::findOrCreateRange_RU()
теперь я кажется понимаю в чем дело, у меня международная аксапта....

даже если писать с if, не работет, опять все подряд выдает...
Old 19.12.2008, 10:53   #11  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Join Date: 13.02.2004
Location: Минск
->
Quote:
Originally Posted by laxel View Post
теперь я кажется понимаю в чем дело, у меня международная аксапта....
тогда sysQuery::findOrCreateRange()
__________________
Zhirenkov Vitaly
Old 19.12.2008, 11:01   #12  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Join Date: 13.02.2004
Location: Минск
->
Правда все эти бантики не решают исходную проблему...

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

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

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

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

Last edited by Eldar9x; 19.12.2008 at 11:37.
This post has been rated by: Jorj (1), laxel (1).
Old 19.12.2008, 11:37   #17  
DAX is offline
DAX
Участник
 
28 / 18 (1) ++
Join Date: 03.12.2008
Quote:
Originally Posted by laxel View Post
2 ZVV
да, я уже попробовал, как увидел ваше сообщение.. та же самая история...

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

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

Last edited by DAX; 19.12.2008 at 11:40.
Old 19.12.2008, 11:40   #18  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Join Date: 13.02.2004
Location: Минск
->
не знаю, не знаю...
у меня всё работает, сделал просто пример: отчёт, один датасорс 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
Old 19.12.2008, 11:48   #19  
Eldar9x is offline
Eldar9x
MCTS
Eldar9x's Avatar
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Join Date: 29.09.2006
Location: Казань
Сбросьте настройки пользователя.
Происходит следующее, сначала вы запускаете отчет без кода в ините. Выводятся все строки. Потом добавляете ограничение в init и снова запускаете отчет, но только запрос теперь берется из сохраненный, и поэтому никакого эффекта.
Old 19.12.2008, 11:52   #20  
laxel is offline
laxel
Участник
 
36 / 10 (1) +
Join Date: 11.08.2008
Location: РК, Алматы
попробовал...
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

попробовал, таже самая история.......
Attached Images
 
 

Similar Threads
Thread Thread Starter Forum Replies Last Post
Время формирования отчета 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
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump

Рейтинг@Mail.ru
All times are GMT +3. The time now is 01:50.
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Contacts E-mail, Advertising.