|
04.05.2007, 14:47 | #1 |
Участник
|
И опять временные таблицы
Уважаемые, я все перерыл, все (ВРОДЕ БЫ) делаю правильно...
X++: public void run() { Query q; QueryRun qr; RAssetTable _table; RAssetLending _lending; ; q = this.query(); qr = new QueryRun(q); while (qr.next()) { _table = qr.get(tablename2id("RAssetTable")); _lending = qr.get(tablename2id("RAssetLending")); _tmp.AssetGroup = _table.AssetGroup; _tmp.AssetId = _lending.assetId; _tmp.AssetLendDate = _lending.AssetLendDate; _tmp.AssetLocation = _lending.AssetLocationId; _tmp.ContractACcount = _lending.ContractACcount; _tmp.LendEmployee = _lending.AssetLendEmployee; _tmp.insert(); } super(); } 5. Далее в методе Init добавляю X++: TmpMyTableDS.setTmpData(_tmp); X++: public boolean prompt(boolean _enableCopy=TRUE, boolean _enablePages=TRUE, boolean _enableDevice=TRUE, boolean _enableProperties=TRUE, boolean _enablePrintTo=TRUE) { boolean ret; ret = super(_enableCopy, _enablePages, _enableDevice, _enableProperties, _enablePrintTo); this.queryRun().setCursor(_tmp); return ret; } Ошибка времени выполнения. : Неправильный тип аргумента функции. Трассировка стека: (C) \Classes\QueryRun\setCursor Уже полдня и так- и сяк пробую - ничего не выходит ( Последний раз редактировалось ek_Pendulum; 04.05.2007 в 14:49. |
|
04.05.2007, 14:55 | #2 |
Участник
|
А если убрать код из prompt() и добавть код в fetch:
X++: public boolean fetch() { boolean ret; ; this.queryRun().setRecord(_tmp); ret = super(); return ret; } |
|
04.05.2007, 15:05 | #3 |
Участник
|
kashperuk, сделал так и снова :
Ошибка времени выполнения. : <пустой класс> Объект не инициализирован. Трассировка стека : (C) \Classes\<unknown>\setRecord (C) \Reports\Report1\Methods\fetch - line 5 (C) \Classes\ReportRun\run (C) \Reports\Report1\Methods\run - line 25 (C) \Classes\SysReportRun\run - line 16 (C) \Classes\RunBaseReport\run - line 32 (C) \Classes\MyReportDialog\main - line 7 Последний раз редактировалось ek_Pendulum; 04.05.2007 в 15:12. |
|
04.05.2007, 15:29 | #4 |
NavAx
|
Попробуйте так:
1. в классе создайте метод TmpMyTable generateTmpMyTable(), который заполняет и возвращает таблицу. 2. перепишите init отчета: X++: public void init() { MyReportDialog caller; ; super(); caller = element.args().caller(); if (!caller) { throw error(Error::missingRecord(funcName())); } this.queryRun().setRecord(caller.generateTmpMyTable()); } 4. датасорсу можно вернуть нормальное имя TmpMyTable 5. Перестаньте ставить занак "_" перед именем переменных. Этот знак используется чтобы отличать параметры метода. К примеру: X++: static CustTable find(CustAccount _custAccount, boolean _forUpdate = false)
__________________
Isn't it nice when things just work? |
|
04.05.2007, 15:43 | #5 |
Участник
|
2 macklakov сделал все по вашему совету - итог один (но вылетает уже в дебаггере):
Ошибка времени выполнения. : <пустой класс> Объект не инициализирован. Трассировка стека : (C) \Classes\<unknown>\setRecord (C) \Reports\Report1\Methods\Init - line 15 (C) \Classes\ReportRun\run (C) \Reports\Report1\Methods\run - line 26 (C) \Classes\SysReportRun\run - line 16 (C) \Classes\RunBaseReport\run - line 32 (C) \Classes\MyReportDialog\main - line 7 |
|
04.05.2007, 16:11 | #6 |
NavAx
|
Значит где-то что-то сломано. "Чистый" наследник от RunBaseReport и "чистый" отчет должны отрабатывать. Как у вас вызывается отчет? Должен вызываться автоматически, через lastValueElementName
__________________
Isn't it nice when things just work? |
|
04.05.2007, 15:41 | #7 |
Участник
|
Пишите сразу в TmpMyTableDS. Зачем городить огород?
|
|
04.05.2007, 15:45 | #8 |
Участник
|
по тем сообщениям об ошибках, которые вы получаете, вывод можно сделать только один.
У вас нет запроса. Соответственно не формируется queryRun А вы в первом посте написали, что запрос есть (источник добавлен в узел DataSources отчета) Соответственно, ищите где вы ошиблись |
|
04.05.2007, 15:51 | #9 |
Участник
|
Ну да...в источнике отчета лежит временная таблица, которую я пытаюсь заполнять (и она вроде как заполняется , так как в дебагере я вижу сменяющиеся RecId'ы этой таблицы). если в коде ошибок нет, то у меня руки опускаются ((
Вот заполнение временной таблицы как советовал macklakov (уже в классе): X++: TmpMyTable generateTmpTable() { Query q; QueryRun qr; RAssetTable _table; RAssetLending _lending; TmpMyTable tmpTable; ; q = this.initQuery(); qr = new QueryRun(q); while (qr.next()) { _table = qr.get(tablename2id("RAssetTable")); _lending = qr.get(tablename2id("RAssetLending")); tmpTable.AssetGroup = _table.AssetGroup; tmpTable.AssetId = _lending.assetId; tmpTable.AssetLendDate = _lending.AssetLendDate; tmpTable.AssetLocation = _lending.AssetLocationId; tmpTable.ContractACcount = _lending.ContractACcount; tmpTable.LendEmployee = _lending.AssetLendEmployee; tmpTable.insert(); } Return tmpTable; } X++: protected Query initQuery() { Query query; QueryBuildDataSource qAssetLending; QueryBuildDataSource qAssetTable; ; query = new Query(); // qAssetLending=query.addDataSource(TableNum(RAssetLending), "RAssetLending"); qAssetLending.addSelectionField(FieldNum(RAssetLending, AssetLendEmployee)); qAssetLending.addSelectionField(FieldNum(RAssetLending, ContractCode)); qAssetLending.addSelectionField(FieldNum(RAssetLending, ContractACcount)); qAssetLending.addSelectionField(FieldNum(RAssetLending, AssetId)); qAssetLending.addSelectionField(FieldNum(RAssetLending, AssetLendDate)); qAssetLending.addSelectionField(FieldNum(RAssetLending, AssetLocationId)); qAssetLending.addSelectionField(FieldNum(RAssetLending, PropertyPart)); qAssetLending.addSortField(FieldNum(RAssetLending, AssetLendEmployee)); qAssetTable=qAssetLending.addDataSource(TableNum(RAssetTable), "RAssetTable"); qAssetTable.addSelectionField(FieldNum(RAssetTable, Name)); qAssetTable.addSelectionField(FieldNum(RAssetTable, AssetGroup)); qAssetTable.joinMode(JoinMode::InnerJoin); qAssetTable.fetchMode(0); qAssetTable.addLink(FieldNum(RAssetLending, AssetId), FieldNum(RAssetTable, AccountNum)); return query; } Последний раз редактировалось ek_Pendulum; 04.05.2007 в 15:57. |
|
04.05.2007, 16:01 | #10 |
SAP
|
Цитата:
если в коде ошибок нет, то у меня руки опускаются ((
|
|
04.05.2007, 16:06 | #11 |
Участник
|
Цитата:
собственно КАК? тоже занимаюсь этим весь день и итог - этот топик |
|
04.05.2007, 16:14 | #12 |
Участник
|
Так и вызывается
X++: identifiername lastValueElementName()
{
return reportStr(Report1);
} |
|
04.05.2007, 16:17 | #13 |
Злыдни
|
Первым делом залезьте в использование данных. Удалите настройки класса, которым пользуетесь. Попробуйте вызвать вновь. Половина ошибок с трассировкой возникает из-за того, что в SysLastValue прописывается чушь
__________________
люди...считают, что если техника не ломается, то ее не нужно ремонтировать. Инженеры считают, что если она не ломается, то нуждается в совершенствовании. |
|
04.05.2007, 16:21 | #14 |
Участник
|
Этим тоже я занимаюсь постоянно...ну не хочет и все тут работать
|
|
04.05.2007, 16:24 | #15 |
NavAx
|
Остается проект выкладывать на всеобщее ковыряние
__________________
Isn't it nice when things just work? |
|
04.05.2007, 16:35 | #16 |
Участник
|
Пожалуйста ...
Последний раз редактировалось ek_Pendulum; 04.05.2007 в 16:45. |
|
04.05.2007, 16:56 | #17 |
NavAx
|
Вам в школе не говорили, что copy/paste это очень-очень плохо? У вас отчет вовсе не по TmpAssetLending_RU и фильтры в классе на другие таблицы накладываются
__________________
Isn't it nice when things just work? |
|
04.05.2007, 17:07 | #18 |
Участник
|
Цитата:
Дополню : во временную таблицу я складываю уже отобранные фильтром записи, дабы потом группировку сделать необходимую Последний раз редактировалось ek_Pendulum; 04.05.2007 в 17:12. |
|
04.05.2007, 17:17 | #19 |
NavAx
|
1. читать документацию
2. переписать все вручную и вдумчиво
__________________
Isn't it nice when things just work? |
|
04.05.2007, 16:38 | #20 |
SAP
|
Не знаю у меня получилось передать курсор вот таким макаром.
X++: public boolean fetch() { boolean ret; TmpInventTableModule tmpInventTableModuleLocal; Counter i; QueryRun queryRuner = new QueryRun(element.query()); ; for (i = 0; i < 10; i++) { tmpInventTableModuleLocal.ItemId = int2str(i); tmpInventTableModuleLocal.insert(); } queryRuner.setCursor(tmpInventTableModuleLocal); while (queryRuner.next()) { tmpInventTableModuleLocal = queryRuner.get(tablenum(TmpInventTableModule)); info(tmpInventTableModuleLocal.ItemId); element.send(tmpInventTableModuleLocal); } return ret; } |
|
|
Похожие темы | ||||
Тема | Ответов | |||
И снова Query и временные таблицы | 19 | |||
Временные таблицы в отчете | 25 | |||
Временные таблицы | 6 | |||
Временные таблицы | 3 | |||
Временные таблицы в запросе | 4 |
|