|  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:41 | #5 | 
| Участник | 
			
			Пишите сразу в TmpMyTableDS. Зачем городить огород?
		 | 
|  | 
|  04.05.2007, 15:43 | #6 | 
| Участник |   
			
			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, 15:45 | #7 | 
| Участник | 
			
			по тем сообщениям об ошибках, которые вы получаете, вывод можно сделать только один. У вас нет запроса. Соответственно не формируется queryRun А вы в первом посте написали, что запрос есть (источник добавлен в узел DataSources отчета) Соответственно, ищите где вы ошиблись | 
|  | 
|  04.05.2007, 15:51 | #8 | 
| Участник | 
			
			Ну да...в источнике отчета лежит временная таблица, которую я пытаюсь заполнять (и она вроде как заполняется , так как в дебагере я вижу сменяющиеся 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 | #9 | 
| SAP | Цитата: 
		
			если в коде ошибок нет, то у меня руки опускаются ((
		
	 | 
|  | 
|  04.05.2007, 16:06 | #10 | 
| Участник |   Цитата: Цитата:   | 
|  | 
|  04.05.2007, 16:11 | #11 | 
| NavAx | 
			
			Значит где-то что-то сломано. "Чистый" наследник от RunBaseReport и "чистый" отчет должны отрабатывать. Как у вас вызывается отчет? Должен вызываться автоматически, через lastValueElementName
		 
				__________________ Isn't it nice when things just work? | 
|  | 
|  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:38 | #17 | 
| 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; } | 
|  | 
|  04.05.2007, 16:56 | #18 | 
| NavAx | 
			
			Вам в школе не говорили, что copy/paste это очень-очень плохо?   У вас отчет вовсе не по TmpAssetLending_RU и фильтры в классе на другие таблицы накладываются   
				__________________ Isn't it nice when things just work? | 
|  | 
|  04.05.2007, 17:07 | #19 | 
| Участник |   Цитата:  там два отчета..тот что не Copy.. - он используется, но где вы увидели,что он не по временной таблице...а фильтры накладываются на запрос вроде...что мне делать, я щас свихнусь  Дополню : во временную таблицу я складываю уже отобранные фильтром записи, дабы потом группировку сделать необходимую Последний раз редактировалось ek_Pendulum; 04.05.2007 в 17:12. | 
|  | 
|  04.05.2007, 17:17 | #20 | 
| NavAx | 
			
			1. читать документацию 2. переписать все вручную и вдумчиво 
				__________________ Isn't it nice when things just work? | 
|  | 
|  | 
|  Похожие темы | ||||
| Тема | Ответов | |||
| И снова Query и временные таблицы | 19 | |||
| Временные таблицы в отчете | 25 | |||
| Временные таблицы | 6 | |||
| Временные таблицы | 3 | |||
| Временные таблицы в запросе | 4 | |||
| 
 |