|
21.03.2008, 16:06 | #1 |
Участник
|
Ошибка при генерации отчета
Добрый день!
У меня вопрос довольно общий, поэтому надеюсь на ответ Иногда при генерации отчета выходит ошибка: Error executing code: QueryBuildRange object not initialized. Подскажите, пожалуйста, как с этим бороться!! Заранее спасибо! |
|
21.03.2008, 16:21 | #2 |
Axapta Retail User
|
Мне кажется, что как раз это не общий вопрос, а частный
Поэтому задавайте конкретный вопрос, какой отчет, стандартный или сами его писали? А так можно тоже ответить обобщая - инициализируйте QueryBuildRange |
|
21.03.2008, 16:42 | #3 |
Участник
|
Цитата:
Отчет не Асаптовский, а сделанный по заказу и то не нами. Я столько времени потратила на то, чтобы воспроизвести ошибку, а она - зараза не вылезает! Нам прислали ее скриншот (смотри присоединенный файл). Вот и не знаем почему она появляется и как сделать так, чтобы у клиента она тоже не возникала... |
|
21.03.2008, 16:49 | #4 |
Axapta Retail User
|
Цитата:
Сообщение от Iskorka
Дело в том, что мы работаем с клиентом, который имеет дело с Аксаптой уже более 10 лет, поэтому там столько изменений, что эту базу можно назвать их собственной
Отчет не Асаптовский, а сделанный по заказу и то не нами. Я столько времени потратила на то, чтобы воспроизвести ошибку, а она - зараза не вылезает! Нам прислали ее скриншот (смотри присоединенный файл). Вот и не знаем почему она появляется и как сделать так, чтобы у клиента она тоже не возникала... Напишите, плиз, здесь код метода fetch() отчета bisInventTransferJournal. |
|
21.03.2008, 16:52 | #5 |
Участник
|
Цитата:
X++: public boolean fetch() { TmpInventJournalTrans myJournalTrans; InventJournalTrans InventJournalTransQuery; QueryRun qr = new QueryRun(this); if ( qr.prompt() ) { While (qr.next()) { InventJournalTransQuery = qr.get(TableNum(InventJournalTrans)); this.FillinTmp(InventJournalTransQuery); } qr.setCursor(tmpInventJournalTrans); this.execute(1); While Select tmpInventJournalTrans { element.send(tmpInventJournalTrans); } return true; } return false; } |
|
21.03.2008, 17:25 | #6 |
Axapta Retail User
|
Хорошо бы было проект самого отчета еще посмотреть.
Либо код перекрытого метода prompt() \Reports\bisInventTransferJournal\Data Sources\Query\Methods\prompt |
|
21.03.2008, 17:31 | #7 |
Участник
|
Цитата:
X++: public boolean prompt() { boolean ret; Query qr; QueryBuildRange qbr_FromWhs,qbr_ToWhs,qbr_FromLocation,qbr_ToLocation; QueryBuildRange qbr_DateRange,qbr_JournalType, qbr_EmplId; QueryBuildDataSource qbds,qbds1; Object ReportRun; ret = super(); qr = this.query(); qbds = qr.dataSourceTable(tableNum(tmpInventJournalTrans)); qbr_FromWhs = qbds.FindRange(fieldNum(tmpInventJournalTrans,FromInventLocationId)); qbr_ToWhs = qbds.findRange(fieldNum(tmpInventJournalTrans,ToInventLocationId)); qbr_FromLocation = qbds.findRange(fieldNum(tmpInventJournalTrans,FromWMSLocationId)); qbr_ToLocation = qbds.findRange(fieldNum(tmpInventJournalTrans,ToWMSLocationId)); qbds1 = qr.dataSourceTable(TableNum(InventJournalTrans)); qbr_DateRange = qbds1.findRange(fieldNum(InventJournalTrans,TransDate)); qbr_JournalType = qbds1.findRange(fieldNum(InventJournalTrans,JournalType)); qbr_EmplId = qbds1.findRange(fieldNum(InventJournalTrans,entEmplId)); reportrun = element.report(); reportrun.FromWhs(qbr_FromWhs.value()); reportrun.ToWhs(qbr_ToWhs.value()); reportrun.FromLocation(qbr_FromLocation.value()); reportrun.ToLocation(qbr_ToLocation.value()); reportrun.DateRange(qbr_DateRange.value()); reportrun.JournalType(qbr_JournalType.value()); reportrun.EmplId(qbr_EmplId.value()); return ret; } |
|
21.03.2008, 18:09 | #8 |
Axapta Retail User
|
Какой-то из Range, которые используются в методе prompt() не существует. Поэтому FindRange не возвратит Range и соответственно он будет не инициализирован и будет ругаться при получении value().
В вашем случае лучше вместо findRange использовать метод класса Global::findOrCreateRange_RU(QueryBuildDataSource _ds, FieldID _fieldID) если он есть. Если его нет, то вот его код: X++: static QueryBuildRange findOrCreateRange_RU(QueryBuildDataSource _ds, FieldID _fieldID) { QueryBuildRange range; ; range = _ds.findRange(_fieldID); // Create object if needed if(! range) { range = _ds.addRange(_fieldID); } return range; } |
|
21.03.2008, 18:27 | #9 |
Участник
|
Спасибо большое!!!
Только вот еще вопрос: мне необходимо знать при каких условиях эта ошибка появляется, для того, чтобы протестить это. |
|
21.03.2008, 20:30 | #10 |
NavAx
|
Попробуйте почистить данные этого отчета в sysLastValues для всех пользователей.
|
|
22.03.2008, 14:36 | #11 |
Участник
|
Посмотрите перечень Range (фильтров) на самом отчете в АОТ.
Скорее всего, какого-то из тех, который ищется в коде, там не будет. Цитата:
Сообщение от raz
Попробуйте почистить данные этого отчета в sysLastValues для всех пользователей.
|
|