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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 13.04.2004, 15:19   #1  
Mystery is offline
Mystery
Участник
 
43 / 11 (1) +
Регистрация: 28.01.2004
Параметры отчета в RunBaseReport
Создал отчет с помощь мастера из трех таблиц. Создал для этого отчета класс RunBaseReport. При вызове класса появляется диалог, в котором перечислены кличевые поля таблиц отчета.



1. Как их убрать?
2. Как получить доступ к этим полям в программном коде?
Вложения
Тип файла: img32870-1 (8.1 Кб, 796 просмотров)
Старый 13.04.2004, 17:28   #2  
DMA is offline
DMA
Участник
 
109 / 19 (1) ++
Регистрация: 30.09.2003
Re: Параметры отчета в RunBaseReport
Цитата:
Изначально опубликовано Mystery
Создал отчет с помощь мастера из трех таблиц. Создал для этого отчета класс RunBaseReport. При вызове класса появляется диалог, в котором перечислены кличевые поля таблиц отчета.
Вообще-то это поля для указания критериев выборки данных для отчета.
Настраиваются они в Query отчета на каждом из датасорсов.

Цитата:

1. Как их убрать?
2. Как получить доступ к этим полям в программном коде?
Так убрать или доступ получить?? В обоих случаях зачем?
Старый 13.04.2004, 17:34   #3  
Mystery is offline
Mystery
Участник
 
43 / 11 (1) +
Регистрация: 28.01.2004
1. Убрать с формы
2. Получить доступ в програмном коде в классе RunBaseReport
Старый 13.04.2004, 17:54   #4  
DMA is offline
DMA
Участник
 
109 / 19 (1) ++
Регистрация: 30.09.2003
[QUOTE]Изначально опубликовано Mystery
1. Убрать с формы [QUOTE]
Вы уверены, что не хотите дать пользователю возможность выбора?
Чтобы убрать весь блок - установите свойство Ineractive отчета в No.

Цитата:
2. Получить доступ в програмном коде в классе RunBaseReport
Зачем вам это нужно?
Старый 13.04.2004, 18:06   #5  
Mystery is offline
Mystery
Участник
 
43 / 11 (1) +
Регистрация: 28.01.2004
Абсолютно уверен что не хочу дать пользователю возможность выбора. Программный код сам выбирает на основании довольно долгих процедур код листа который отображается с права в группе параметров только для ознакомительных целей.

Изменения свойства Interactive совсем не поменяло картины. Насколько мне помниться оно влияет только на отчет, а не на поведение RunBaseReport. То есть при запуске отчета сначала выдается диалог-запросов по query а потом показывается диалог самого отчета по параметрам вывода на печать (Interactive отчета не отображает второй диалог), первый диалог отключается свойством Interactive в самом query у отчета. Меня же интерисует класс RunBaseReport
За это сообщение автора поблагодарили: evv (1).
Старый 13.04.2004, 18:13   #6  
DMA is offline
DMA
Участник
 
109 / 19 (1) ++
Регистрация: 30.09.2003
Цитата:
Изначально опубликовано Mystery
Изменения свойства Interactive совсем не поменяло картины. Насколько мне помниться оно влияет только на отчет, а не на поведение RunBaseReport. То есть при запуске отчета сначала выдается диалог-запросов по query а потом показывается диалог самого отчета по параметрам вывода (Interactive не отображает второй диалог), а меня больше интерисует первый.
Извиняюсь...
Не вызывайте super() в методе dialog()
Старый 13.04.2004, 18:22   #7  
Mystery is offline
Mystery
Участник
 
43 / 11 (1) +
Регистрация: 28.01.2004
Вообще удалил метод диалог, не помогает. Тогда я перекрыл метод dialog вот так:
PHP код:
public Object dialog(DialogRunbase dialogboolean forceOnClient)
{
    return 
dialog;

Все стало работать как хотелось изначально, даже лутче (дилог вообще не выдается, а сразу показывается отчет), спасибо за помощь.
Старый 13.04.2004, 19:16   #8  
Shark is offline
Shark
Участник
Аватар для Shark
 
47 / 11 (1) +
Регистрация: 12.09.2003
Адрес: Москва
Еще один способ:
У Data Sources отчета в группе Ranges, у необходимого поля установите свойство Status=Hide
Старый 13.04.2004, 19:42   #9  
Mystery is offline
Mystery
Участник
 
43 / 11 (1) +
Регистрация: 28.01.2004
Спасибо, это очень интересное свойство я не пременно им воспользуюсь, теперь хочу разобраться со вторым вопросом:

как получить доступ к полям на форме из кода класса?

Поясню что мне нужно: метод main моего класса от RunBaseReport:

PHP код:
rptPaperBlank = new M082_GetPaperBlank();
if (
rptPaperBlank.prompt())
{
  
rptPaperBlank.queryRun().query().dataSourceName('tblPaperTable').range(1).value(paperTable.ID);
  
rptPaperBlank.run();

Мне не хочется чтоб параметр по Range устанавливался после промпта. Хочу поставить его до промпта и показать на форме. Как это сделать?
Старый 14.04.2004, 10:25   #10  
Sirius is offline
Sirius
Участник
 
151 / 10 (1) +
Регистрация: 10.01.2004
Адрес: Новосибирск
скажите, а как сделать так, чтобы
окно с предложением выбрать параметры отчета вообще не появлялось?
я что-то не смог этого сделать
Старый 14.04.2004, 10:30   #11  
Mystery is offline
Mystery
Участник
 
43 / 11 (1) +
Регистрация: 28.01.2004
Если ты про RunBaseReport то читай 7 пост, про перекрытие метода dialog
Если про отчет то читай 5-й пост про свойства Interactive у отчета и его query
Старый 14.04.2004, 10:42   #12  
Sirius is offline
Sirius
Участник
 
151 / 10 (1) +
Регистрация: 10.01.2004
Адрес: Новосибирск
спасибо - помогло

народ, а где-нибудь про это вообще написано или все вот так самому нада выискивать? :/
Старый 14.04.2004, 10:59   #13  
DMA is offline
DMA
Участник
 
109 / 19 (1) ++
Регистрация: 30.09.2003
Цитата:
Изначально опубликовано Mystery

как получить доступ к полям на форме из кода класса?
Поясню что мне нужно: метод main моего класса от RunBaseReport:
PHP код:
rptPaperBlank = new M082_GetPaperBlank();
if (
rptPaperBlank.prompt())
{
  
rptPaperBlank.queryRun().query().dataSourceName('tblPaperTable').range(1).value(paperTable.ID);
  
rptPaperBlank.run();

Мне не хочется чтоб параметр по Range устанавливался после промпта. Хочу поставить его до промпта и показать на форме. Как это сделать?
Еще раз.
Важно понимать, что это не поля на форме, а ranges от query вашего отчета.
У класса RunBaseReport есть метод initQuery. Перекройте его и перенесите туда ваш код где устанавливаются значения ranges.
PHP код:
  ...
  
rptPaperBlank.queryRun().query().dataSourceName('tblPaperTable').range(1).value
  
... 
Получите то, что хотели.
Кстати, рекоммендую вместо dataSourceName использовать
dataSourceTable(tableNum(...)), а в случае двух одинаковых таблиц в датасорсах dataSourceNo()
Старый 14.04.2004, 11:00   #14  
slava is offline
slava
сибиряк
Самостоятельные клиенты AX
 
468 / 23 (1) +++
Регистрация: 28.12.2001
Адрес: Москва
Цитата:
Изначально опубликовано Mystery
Все стало работать как хотелось изначально, даже лутче (дилог вообще не выдается, а сразу показывается отчет), спасибо за помощь. [/B]
"Дилог не выдается" - это тоже "не есть хорошо" В диалоге можно указать параметры пакетного выполнения отчета. Если уж Вам так необходимо скрыть поля выбора критериев, то можно перекрыть метод showQueryValues()

PHP код:
boolean showQueryValues()
{
    ;
    return 
false;

__________________
С уважением, Вячеслав.
Старый 14.04.2004, 11:27   #15  
lugachy is offline
lugachy
Участник
 
82 / 11 (1) +
Регистрация: 15.03.2004
Цитата:
Вообще удалил метод диалог, не помогает. Тогда я перекрыл метод dialog вот так:

X++ code:--------------------------------------------------------------------------------
public Object dialog(DialogRunbase dialog, boolean forceOnClient)
{
return dialog;
}--------------------------------------------------------------------------------


Все стало работать как хотелось изначально, даже лутче (дилог вообще не выдается, а сразу показывается отчет), спасибо за помощь.
Кажется именно это вам и предлогал сделать DMA! После удаления метода Диалог из вашего класса стал работать диалог из класса RunBaseReport! Пожалуйста, почитайте основы ООП, уделите особое внимание полиморфизму.

Цитата:
как получить доступ к полям на форме из кода класса?

Поясню что мне нужно: метод main моего класса от RunBaseReport:


X++ code:--------------------------------------------------------------------------------
rptPaperBlank = new M082_GetPaperBlank();
if (rptPaperBlank.prompt())
{
rptPaperBlank.queryRun().query().dataSourceName('tblPaperTable').range(1).value(paperTable.ID);
rptPaperBlank.run();
}--------------------------------------------------------------------------------


Мне не хочется чтоб параметр по Range устанавливался после промпта. Хочу поставить его до промпта и показать на форме. Как это сделать?
перенесите код в метод QueryRun, разместите его сразу после Супера, только разрешите аксапте все же строить окно с параметрами запроса (удалите свой метод Диалог). Не забудте в Query отчета добавить Range.

Выглядеть должно приблизительно так:

PHP код:
 public QueryRun queryRun()
{
    
QueryRun ret;

    
ret super();
    
    
ret.query().dataSourceNo(1).range(1).value('суперпуперпараметр');

    return 
ret;

Старый 14.04.2004, 11:41   #16  
Mystery is offline
Mystery
Участник
 
43 / 11 (1) +
Регистрация: 28.01.2004
Все что вы оба предлагаете уже опробовано но отвергнуто за ненадобностью. Мне нужно имено до строчки кода вызова промта присвоить значение. Не используя никаих других методов класса.

Чтобы было ясней: мне не хочется создавать парм методы, паки и унпаки. Я не хочу передовать никакие значения в конструктор или создавать свой инициализатор. У меня есть статический метод майн в котором идет долгая обработка чего-то по окончании которой получается суперпуперзначение, которое я не хочу передовать в новый класс, который создается для показа промта и вызова метода ран. Я хочу сохранить это значение во втовь созданом классе и показать в стандартном диалоге, это возможно или придется реальзовывать весь механизм с карентверсионами и карентлистами и всем что вы предлагаете?

Вся проблема только в том что до вызова метода промпт куериран не инициирован также как и остальные методы. Мне нужно достукиваться к ним до промпта.
Старый 14.04.2004, 12:12   #17  
DMA is offline
DMA
Участник
 
109 / 19 (1) ++
Регистрация: 30.09.2003
Цитата:
Изначально опубликовано Mystery
Все что вы оба предлагаете уже опробовано но отвергнуто за ненадобностью. Мне нужно имено до строчки кода вызова промта присвоить значение. Не используя никаих других методов класса.

Чтобы было ясней: мне не хочется создавать парм методы, паки и унпаки. Я не хочу передовать никакие значения в конструктор или создавать свой инициализатор. У меня есть статический метод майн в котором идет долгая обработка чего-то по окончании которой получается суперпуперзначение, которое я не хочу передовать в новый класс, который создается для показа промта и вызова метода ран. Я хочу сохранить это значение во втовь созданом классе и показать в стандартном диалоге, это возможно или придется реальзовывать весь механизм с карентверсионами и карентлистами и всем что вы предлагаете?
Мда, уважаемый Mystery... Ваши методы и подходы к программированию в Аксапте настолько новаторские, что я пожалуй воздержусь от каких либо советов
Желаю успехов в вашем нелегком деле
Старый 14.04.2004, 12:33   #18  
slava is offline
slava
сибиряк
Самостоятельные клиенты AX
 
468 / 23 (1) +++
Регистрация: 28.12.2001
Адрес: Москва
Цитата:
Изначально опубликовано Mystery
Почему -то мне кажется, что Вы идя по пути сокращения издержек на программирование (pack, unpack, .. не такие уж и страшние методы ) приходите к тому, что стандартный RunBaseRep Вас уже не устраивает. Не пытайтесь его переписать заново . Лучше еще раз перечитайте то что написали lugachy и DMA.
__________________
С уважением, Вячеслав.
Старый 14.04.2004, 12:33   #19  
lugachy is offline
lugachy
Участник
 
82 / 11 (1) +
Регистрация: 15.03.2004
Цитата:
Все что вы оба предлагаете уже опробовано но отвергнуто за ненадобностью. Мне нужно имено до строчки кода вызова промта присвоить значение. Не используя никаих других методов класса.

Чтобы было ясней: мне не хочется создавать парм методы, паки и унпаки. Я не хочу передовать никакие значения в конструктор или создавать свой инициализатор.
причина есть или просто нехочу?

Цитата:
У меня есть статический метод майн в котором идет долгая обработка чего-то по окончании которой получается суперпуперзначение, которое я не хочу передовать в новый класс, который создается для показа промта и вызова метода ран. Я хочу сохранить это значение во втовь созданом классе и показать в стандартном диалоге,
че то противоречие помоему какое-то

Цитата:

это возможно или придется реальзовывать весь механизм с карентверсионами и карентлистами и всем что вы предлагаете?
???
об этом речи совсем не шло.

Цитата:
Вся проблема только в том что до вызова метода промпт куериран не инициирован также как и остальные методы. Мне нужно достукиваться к ним до промпта.
Там, куда вам предлагают разместить код, куериран иннициализирован.

смотрите пример, читайте книжки, надеюсь поможет.
Вложения
Тип файла: xpo nick_test.xpo (7.2 Кб, 394 просмотров)
Старый 14.04.2004, 12:55   #20  
Mystery is offline
Mystery
Участник
 
43 / 11 (1) +
Регистрация: 28.01.2004
Какие-то все непонятливые собрались. Элементарнейшая задача. Наверное я плохо объясняю. Может это вам прояснит ситуацию:

1. Методы класса от RunBaseReport

PHP код:
class M082_GetPaperBlank extends RunBaseReport
{
    
M082_ptID   paperTableID;
}

public 
boolean showQueryValues()
{
    return 
false;
}

public 
M082_ptID parmPaperTableID(M082_ptID _paperTableID paperTableID)
{
    
paperTableID _paperTableID;

    return 
paperTableID;
}

public 
Object dialog(DialogRunbase dialogboolean forceOnClient)
{
    
Object          ret;
    
DialogField     _paperTableID;
    ;

    
ret super(dialogforceOnClient);
    
ret.addGroup("@DIS15689");
    
_paperTableID ret.addFieldValue(typeId(M082_ptID), paperTableID);
    
_paperTableID.active(false);

    return 
ret;
}

static 
void main(Args args)
{
...

    if (! 
args.caller() || ! args.dataset())
        throw 
error(strFmt("@SYS19306",funcName()));

    switch (
args.record().tableId)
    {
        case  (
tablenum(...)) :
...
расчет пуперзначения
...
            
rptPaperBlank = new M082_GetPaperBlank();
            
rptPaperBlank.parmPaperTableID(пуперзначение);
            if (
rptPaperBlank.prompt())
            {
                
rptPaperBlank.queryRun().query().dataSourceName('tblPaperTable').range(1).value(rptPaperBlank.parmPaperTableID());
                
rptPaperBlank.run();
            }
            break;
        default:
            throw 
error(strFmt("@SYS19306",funcName()));
    }

В результате получаем


Я бы очень был рад, если бы кто-то подсказал, как не использовать подобную технику, а просто перенести показ значения кода листа с моих параметров, которые я зделал через пармметод, в параметры по умолчанию как показывает класс, как показано на самом первом рисунке самой первой моей реплики согласно красной стрелки.
Вложения
Тип файла: img32966-1 (4.3 Кб, 967 просмотров)
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
axaptapedia: RunBaseReport Blog bot DAX Blogs 0 03.08.2008 20:10
Параметры menuitem отчета Zabr DAX: Программирование 2 17.05.2004 10:03
Русская локализация 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, время: 14:56.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.