|  15.03.2013, 13:21 | #1 | 
| Участник | SysReportRun и tmpTable 
			
			AX 2009 SP1 Начал смотреть возможность интерактивного вызова отчета при нажатии к примеру на кнопку, не могу понять как возможно передать параметры временной таблице, которая является датасорсом отчета. Код кнопки вызывающей отчет X++: Args args; SysReportRun reportRun; ; args.record(TestTable); reportRun = classFactory.formRunClass(args); reportRun.query().interactive(false); reportRun.report().interactive(false); reportRun.setTarget(PrintMedium::Screen); reportRun.run(); печать отчета из кода у меня та же проблема fetch выдает ошибку и решения так никакого там и не посоветовали. Если кто реализовывал такое покажите пример кода класса унаследованного от SysReportRun и методов отчета, что бы хоть понять как вообще такое должно работать. | 
|  | 
|  15.03.2013, 13:53 | #2 | 
| Участник | X++: reportRun.queryRun().setRecord(tmpTable); | 
|  | 
|  15.03.2013, 13:57 | #3 | 
| Участник | 
			
			Я так и делал в таком случае на методе fetch() возникает ошибка объект не инициализирован, хотя просматриваю отладчиком в переданной временной таблице данные есть.
		 | 
|  | 
|  15.03.2013, 14:22 | #4 | 
| Участник | 
			
			А reportRun.init() вы вызываете?
		 | 
|  | 
|  15.03.2013, 14:29 | #5 | 
| Участник | 
			
			Поясните про args... Он вроде как описан в переменных, но вроде как не проинициализирован... Типа args = new args()... По идее умирать должно еще при args.record(TestTable); Если тока при этом AX не пользует какой-то другой args... но при компиляции должно ругаться что такая вещь есть во внешнем контексте. | 
|  | 
|  15.03.2013, 14:36 | #6 | 
| Участник | Цитата:  Попробуйте презайти, почистить кэш. | 
|  | 
|  15.03.2013, 15:04 | #7 | 
| Участник | 
			
			Попробую привести полный пример кода Код кнопки X++: void clicked() { Args args; SysReportRun reportRun; ; args = new Args(); args.record(CreditTable); args.name(reportstr(ReportGraphLoan)); reportRun = ClassFactory.reportRunClass(args); reportRun.query().interactive(false); reportRun.report().interactive(false); reportRun.setTarget(PrintMedium::Screen); reportRun.run(); } X++: public tmpGraphLoanLines buildLines(CreditTable _ct) { tmpGraphLoanLines tmpLoanLines; int Months; Counter counter; TransDate transDate; Amount summDebet, sumPercent, summResponsible; WW_DateDiff dateDiff = new WW_DateDiff(); ; ct = _ct; Months = (year(ct.DateEnd)*12+mthOfYr(ct.DateEnd)) - (year(ct.DateBegin)*12+mthOfYr(ct.DateBegin)); summDebet = ct.SummCredit / Months; summResponsible = ct.SummCredit; tmpLoanLines.clear(); for(counter = 1; counter <= Months; counter++) { transDate = dateDiff.DateAddMonths(counter, ct.DateBegin); if (counter > 1) summResponsible -= summDebet; sumPercent = summResponsible * ct.Percents / 100 / 12; tmpLoanLines.TransDate = transDate; if(counter == Months) tmpLoanLines.TransDate = ct.DateEnd; tmpLoanLines.SummPayment = summDebet; tmpLoanLines.SumPaymentPercent = sumPercent; tmpLoanLines.SummPaymentTotal = tmpLoanLines.SummPayment + tmpLoanLines.SumPaymentPercent; tmpLoanLines.insert(); } return tmpLoanLines; } X++: public void init() { ; buildGraphLoan = new G_BuildGraphLoan(); ct = element.args().record(); element.query().dataSourceTable(tablenum(CreditTable)).addRange(fieldnum(CreditTable, Cash_CreditId)).value(strfmt('%1', ct.Cash_CreditId)); super(); } X++: public boolean fetch() { boolean ret; this.queryRun().setRecord(buildGraphLoan.buildLines(ct)); ret = super(); return ret; } | 
|  | 
|  15.03.2013, 15:17 | #8 | 
| Участник | 
			
			у вас объект buildGraphLoan инициализирутся в методе init, но метод этот вы не вызываете. Добавьте перед reportRun.run() X++: reportRun.init() | 
|  | 
|  15.03.2013, 15:25 | #9 | 
| Участник | 
			
			Добавил, все равно говорит объект не инициализирован, останавливается именно на методе fetch() на строке this.queryRun().setRecord(tmp); | 
|  | 
|  15.03.2013, 15:42 | #10 | 
| Участник | 
			
			Хм. Т.е. сам queryRun не инициализирован что ли? Проинициализировать его можно попробовать так: X++: this.queryRun(new QueryRun(this.query())); | 
|  | 
|  15.03.2013, 15:48 | #11 | 
| Участник | 
			
			Я только что прошагав отладчиком пришел к этому же выводу вот только попытавшись его инициализировать он выдал на этой строке  this.queryRun(new QueryRun(this.query())); ошибку что он не инициализирован.   | 
|  | 
|  15.03.2013, 16:38 | #12 | 
| Участник | 
			
			Чуствую не хватает reportRun._initParmDefault();
		 | 
|  | 
|  15.03.2013, 16:44 | #13 | 
| Участник | 
			
			Нужны вызовы инициализации аналогичные initParmDefault , которые проделывает стандартный класс RunbaseReportStd (RunBaseReport)... думается в этом направлении надо смотреть
		 | 
|  | 
|  | 
|  Похожие темы | ||||
| Тема | Ответов | |||
| tmpTable mandatory field | 2 | |||
| Проблема с LedgerJournalTrans | 14 | |||
| Отчеты,fetch | 14 | |||
| tmpTable+Cursor= Error.... | 18 | |||
| tmpTable | 2 | |||
| 
 |