|
![]() |
#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. |
|
![]() |
#2 |
Участник
|
А если убрать код из prompt() и добавть код в fetch:
X++: public boolean fetch() { boolean ret; ; this.queryRun().setRecord(_tmp); ret = super(); return ret; } |
|
![]() |
#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. |
|
![]() |
#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? |
|
![]() |
#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 |
|
![]() |
#6 |
NavAx
|
Значит где-то что-то сломано. "Чистый" наследник от RunBaseReport и "чистый" отчет должны отрабатывать. Как у вас вызывается отчет? Должен вызываться автоматически, через lastValueElementName
__________________
Isn't it nice when things just work? |
|
![]() |
#7 |
Участник
|
Пишите сразу в TmpMyTableDS. Зачем городить огород?
|
|
![]() |
#8 |
Участник
|
по тем сообщениям об ошибках, которые вы получаете, вывод можно сделать только один.
У вас нет запроса. Соответственно не формируется queryRun А вы в первом посте написали, что запрос есть (источник добавлен в узел DataSources отчета) Соответственно, ищите где вы ошиблись |
|
![]() |
#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. |
|
![]() |
#10 |
SAP
|
Цитата:
если в коде ошибок нет, то у меня руки опускаются ((
|
|
![]() |
#11 |
Участник
|
![]() Цитата:
Цитата:
![]() |
|
![]() |
#12 |
Участник
|
Так и вызывается
X++: identifiername lastValueElementName()
{
return reportStr(Report1);
} |
|
![]() |
#13 |
Злыдни
|
Первым делом залезьте в использование данных. Удалите настройки класса, которым пользуетесь. Попробуйте вызвать вновь. Половина ошибок с трассировкой возникает из-за того, что в SysLastValue прописывается чушь
__________________
люди...считают, что если техника не ломается, то ее не нужно ремонтировать. Инженеры считают, что если она не ломается, то нуждается в совершенствовании. |
|
![]() |
#14 |
Участник
|
![]() Цитата:
![]() |
|
![]() |
#15 |
NavAx
|
Остается проект выкладывать на всеобщее ковыряние
__________________
Isn't it nice when things just work? |
|
![]() |
#16 |
Участник
|
![]()
Пожалуйста ...
Последний раз редактировалось ek_Pendulum; 04.05.2007 в 16:45. |
|
![]() |
#17 |
NavAx
|
Вам в школе не говорили, что copy/paste это очень-очень плохо?
![]() ![]()
__________________
Isn't it nice when things just work? |
|
![]() |
#18 |
Участник
|
![]() Цитата:
![]() ![]() Дополню : во временную таблицу я складываю уже отобранные фильтром записи, дабы потом группировку сделать необходимую Последний раз редактировалось ek_Pendulum; 04.05.2007 в 17:12. |
|
![]() |
#19 |
NavAx
|
1. читать документацию
2. переписать все вручную и вдумчиво
__________________
Isn't it nice when things just work? |
|
![]() |
#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 |
|