|
|
#1 |
|
Участник
|
super() 2 раза
Добрый день.
Возникла нужда распечатать один и тот же отчет 2 раза по нажатию одной кнопки. В классе отчета (наследник RunBasereport) выставляю ranges после чего вызываю super() - отчет печатается нормально. Дальше я в том же методе run ставлю другие ranges и снова вызываю super() - отчет не печатается вовсе. Нельзя так делать, да? ![]() Можно конечно класс 2 раза вызывать по кнопке (натыкав флаги в классе), но усложнять не хочется
|
|
|
|
|
#2 |
|
Участник
|
попробуйте сделай reset запроса (queryRun)
|
|
|
|
|
#3 |
|
Участник
|
Не сработало.
Вообще, если при первом вызове супера попадаешь в Init отчета, то при повторном вызове Init вообще не вызывается, кидает сразу в ExecuteSection основоного набора данных отчета. |
|
|
|
|
#4 |
|
Участник
|
|
|
|
|
|
#5 |
|
Участник
|
ок, вызову его 2 раза. спасибо
|
|
|
|
|
#6 |
|
Участник
|
совсем упустил из виду тот момент, что при двух вызовах класса, будет 2 раза вызываться и диалог с параметрами. 2 раза он не нужен, а вот параметры, которые пользователь вбивает в диалоге, нужны в обоих случаях. В первый раз они достаются стандартным getFromDialog, а как бы их во второй раз получить, не вызывая Prompt (а, следовательно, и unpack)? параметры подойдут те, которые были сохранены в первом вызове (включая настройки принтера). Может была у кого-нибудь подобная задача, посмотреть бы на код...
|
|
|
|
|
#7 |
|
Участник
|
Вообще-то, в приведенной мной выше ссылке действие происходит в методе run класса, который вызывает отчет - соответственно диалог уже отработал и значения вернул.
а уже внутри мы делаем цикл (в вашем случае 2 раза). То есть диалог вызывается только 1 раз (это диалог класса). почитайте тот код, что я запостил. |
|
|
|
|
#8 |
|
Участник
|
Прочитал, попробовал у себя, результат не порадовал.
rr.run(); - в этом месте вываливается промпт отчета (как если открть отчет в репозитарии напрямую), причем в нем нет ни одного значения ранее определнных рейнджей. Может пишу что не так? Сейчас приведу фрагмент.. |
|
|
|
|
#9 |
|
Участник
|
Код, вызывающий отчет:
Код: ReportRun rr;
Args args = new Args(reportStr(DamageActEx));
;
query = queryrun.query();
qbsPDT = query.dataSourceTable(tableNum(PriceDiscTable));
args.caller(this);
qbsPDT.findRange(fieldNum(PriceDiscTable, FromDate)).value(queryValue(fromDate));
qbsPDT.findRange(fieldNum(PriceDiscTable, Relation)).value(queryValue(PriceType::LineDiscSales));
qbsPDT.findRange(fieldNum(PriceDiscTable, AccountRelation)).value(queryValue(accountRelation));
qbsPDT.addRange(fieldNum(PriceDiscTable, InventLocationId)).value(InventLocationId);
qbsPDT.addRange(fieldNum(PriceDiscTable, ReDisc)).value(queryValue(NoYes::Yes));
//super();
rr = new ReportRun(args);
rr.printJobSettings(this.printJobSettings().packPrintJobSettings());
rr.init();
rr.run(); |
|
|
|
|
#10 |
|
Участник
|
поставь свойство interactive на отчете и на запросе в false
Если же отчет менять нельзя, попробуй перед rr.init() вставить Код: rr.report().interactive(false);
rr.report().query().interactive(false);Последний раз редактировалось kashperuk; 25.09.2006 в 18:20. |
|
|
|
|
#11 |
|
Участник
|
Убрал интерактивность - промт отчета пропал, хорошо. А вот рейнджи почему-то не пердались, в отчет попадает все
|
|
|
|
|
#12 |
|
Участник
|
Все верно. Ты ведь меняешь запрос который в классе.
То есть тебе нужно: 1. Или менять непосредственно запрос отчета (код ниже) 2. Или менять код класса, а потом присваивать его запросу отчета rr.report().query(queryRun.query()) 3. Я обычно просто передаю параметр в отчет, а уже в нем меняю запрос в зависимости от переданного параметра. Цитата:
Сообщение от Smith
Код, вызывающий отчет:
Код: ReportRun rr;
Args args = new Args(reportStr(DamageActEx));
;
args.caller(this);
rr = new ReportRun(args);
rr.printJobSettings(this.printJobSettings().packPrintJobSettings());
query = rr.report().query();
qbsPDT = query.dataSourceTable(tableNum(PriceDiscTable));
qbsPDT.findRange(fieldNum(PriceDiscTable, FromDate)).value(queryValue(fromDate));
qbsPDT.findRange(fieldNum(PriceDiscTable, Relation)).value(queryValue(PriceType::LineDiscSales));
qbsPDT.findRange(fieldNum(PriceDiscTable, AccountRelation)).value(queryValue(accountRelation));
qbsPDT.addRange(fieldNum(PriceDiscTable, InventLocationId)).value(InventLocationId);
qbsPDT.addRange(fieldNum(PriceDiscTable, ReDisc)).value(queryValue(NoYes::Yes));
rr.report().interactive(false);
rr.report().query().interactive(false);
rr.init();
rr.run(); |
|
|
|
|
#13 |
|
Участник
|
код не передал рейнджи
![]() Я до этого попробовал передать параметр в отчет непосредственно и уже там эти рейнджи выставлять - так работает. Но, если б код выше сработал, было бы лучше. Он более нагляден. |
|
|
|
|
#14 |
|
Участник
|
код не передал range потому что я напутал немного в нем.
)Простите. попробуйте спустить код, который получает запрос из отчета и устанавливает фильтры после rr.init() - запрос то формируется там. |
|
|
|
|
#15 |
|
Дмитрий Ерин
|
У Русского офиса MBS была
См. отчет Кассовая книга (+ Отчет кассира) - \Classes\RCashReport_CashBook
__________________
|
|
|
|
| За это сообщение автора поблагодарили: Smith (1). | |
|
|
#16 |
|
Участник
|
Вот так запускал:
Код: ReportRun rr;
Args args = new Args(reportStr(DamageActEx));
;
args.caller(this);
rr = new ReportRun(args);
rr.printJobSettings(this.printJobSettings().packPrintJobSettings());
rr.init();
query = rr.report().query();
qbsPDT = query.dataSourceTable(tableNum(PriceDiscTable));
qbsPDT.findRange(fieldNum(PriceDiscTable, FromDate)).value(queryValue(fromDate));
//ranges
rr.run(); |
|
|
|
|
#17 |
|
Участник
|
странно. Будет время на досуге, посмотрю, вообще должны бы.
а я смотрю вы используете findRange() - у вас все эти range добавлены в отчете в АОТ на запросе? |
|
|
|
| За это сообщение автора поблагодарили: Smith (1). | |
|
|
#18 |
|
Участник
|
конечно
|
|
|
|
|
#19 |
|
Участник
|
Все, сделал
спасибо, kashperuk, что столько тут со мной провозились ![]() И спасибо Ruff'у за ссылку, именно с нее и получился рабочий вариант. Выглядит так: Код: Query query;
QueryBuildDataSource qbsPDT;
;
//1 отчет
query = queryrun.query();
qbsPDT = query.dataSourceTable(tableNum(PriceDiscTable));
qbsPDT.findRange(fieldNum(PriceDiscTable, FromDate)).value(queryValue(FromDate));
//ranges
super();
//2 отчет
reportRun = null;
this.makeReportRun(this.lastValueElementName());
this.makeQueryRun();
query = queryrun.query();
qbsPDT = query.dataSourceTable(tableNum(PriceDiscTable));
//Новые рейнджи
qbsPDT.findRange(fieldNum(PriceDiscTable, FromDate)).value(queryValue(newFromDate));
//ranges
super(); |
|
|
| Теги |
| повторный запуск отчета |
|
|
|