|  23.07.2008, 16:30 | #1 | 
| Модератор |  Ошибка при выполнении queryRun.next()  Подскажите куда копать чтоб понять в чем ошибка. Ошибка: Невозможно выбрать запись в Складские операции (InventTrans). Ссылка: Заказ на продажу, . База данных SQL обнаружила ошибку. Сам запрос создан, но вылетает на queryRun.next(); Код queryRun.query().dataSourceNo(1).toString(); выдает результат собранного запроса в следующем виде: NAME: s VALUE: SELECT * FROM InventTrans GROUP BY InventTrans.ItemId ASC WHERE ((DatePhysical>={ts '2008-04-28 00:00:00.000'} AND DatePhysical<={ts '2008-07-23 00:00:00.000'})) AND ((((StatusIssue == 1) || (StatusIssue == 2) || (StatusReceipt == 1) || (StatusReceipt == 2)))) JOIN * FROM InventDim ORDER BY InventDim.InventLocationId ASC, InventDim.inventDimId ASC WHERE InventTrans.inventDimId = InventDim.inventDimId JOIN * FROM InventLocation WHERE InventDim.InventLocationId = InventLocation.InventLocationId TYPE: str Не пойму что произошло, буквально вчера работало. | 
|  | 
|  23.07.2008, 17:12 | #2 | 
| Участник | 
			
			у вас по первому датасорсу стоитгруппировка, а по втрому сортировка, по третьему вообще ничего нет. В общем группировку нужно делать по всем 3-м датасорсам, либо из 2-го и 3-го ничего не выбирать. (Выбирать только фиктивное поле TableId) | 
|  | |
| За это сообщение автора поблагодарили: Poleax (1). | |
|  23.07.2008, 17:13 | #3 | 
| Участник | 
			
			Хотя нет. У вас стоит Select * т.е. по идее не предполагалось группировки. Если так то на первом датасорсе нужно убрать GROUP BY | 
|  | 
|  23.07.2008, 17:28 | #4 | 
| MCTS | Цитата: 
		
			Сам запрос создан
		
	 
				__________________  В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню | 
|  | 
|  23.07.2008, 17:44 | #5 | 
| Модератор | 
			
			Logger ошибку понял.. спасибо. Щас добавлю поля группировки все встанет на свои места.  Просто я вспомнил очистил SySLastValue. А метод unpack от туда брал query. Russland сам Query создан в AOT подцепляю и немного дополняю его фильтрами. X++: void new() { ; super(); queryRun = new QueryRun(queryStr(InventTransMX20)); } void initQuery() { str s; ; queryRun. query(). dataSourceNo(1). addRange(fieldNum(InventTrans, DatePhysical)). value(SysQuery::range(fromDate, toDate)); //Статус расхода (Продано=1, Отпущено=2) Статус прихода (Куплено=1, Получено=2) s ="((StatusIssue == 1) || (StatusIssue == 2) || (StatusReceipt == 1) || (StatusReceipt == 2))"; //, StatusIssue::Sold, StatusIssue::Deducted, StatusReceipt::Purchased, StatusReceipt::Received); queryRun.query().dataSourceNo(1).addRange( fieldNum(InventTrans,recId)).value(s); } | 
|  | 
|  23.07.2008, 18:10 | #6 | 
| Боец | 
			
			Почти оффтоп: Заметил у вас строку  X++: value(SysQuery::range(fromDate, toDate)); X++: static void Job11(Args _args) { Query query = new Query(); QueryBuildDataSource qbds; QueryBuildRange qbr; TransDate fromDate, toDate; ; // fromDate = today(); qbds = query.addDataSource(tablenum(SalesTable)); qbr = qbds.addRange(fieldnum(SalesTable, CreatedDate)); // if (fromDate || toDate) qbr.value(SysQuery::range(fromDate, toDate)); info(qbds.toString()); } | 
|  | 
|  23.07.2008, 18:49 | #7 | 
| Модератор | 
			
			DSPIC у класса есть метод, там и проверяется. X++: public boolean validate(Object calledFrom) { boolean ret = super(calledFrom); if (!fromDate || !toDate) return checkFailed('Не задан интервал дат'); if (fromDate > toDate) return checkFailed('Некорректный интервал дат'); return ret; } Последний раз редактировалось Poleax; 23.07.2008 в 19:04. | 
|  |