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. |
|