17.11.2020, 19:47 | #1 |
Участник
|
D365FO queryBuildDataSource.FindRange() не работает??
D365FO 10.0.12
Пишу RunBaseBatch. который делает автоматичские платежи по custTransOpen. где due date <= сегодня. Хотелось бы добавить возможность для пользователя выбрать вручную dueDate в фильтре запроса. Задумывалась такая логика: Изначально due date range очищается, Если пользователь выбирает вручную due date, то используем его. В данном случае пользователь выбрал неправильно- просто значение вместо диапазона: - due date == 2020-11-16 Если пользователь ничего не выбрал, автоматически добавляем диапазон: due date <= сегодня (2020-11-17) В реальности, пользователь выбрал значение вручную, но система все равно добавляет автоматический диапазон... Разве if(!qbds.findRange(fieldnum(CustTransOpen, dueDate))) не должен был увидеть уже имеющееся условие? X++: void run() { .... q = QueryRun.query(); /*в дебаггере: текущее значение имеет выбранный пользователем DueDate=2020-11-16: {SELECT MIN(dataAreaId), MIN(AccountNum), SUM(AmountCur) FROM CustTransOpen(CustTransOpen_1) GROUP BY CustTransOpen.AccountNum WHERE ((CustTransOpen(CustTransOpen_1).AccountNum = N'000000001')) AND ((CustTransOpen(CustTransOpen_1).DueDate = {ts '2020-11-16 00:00:00.000'}))} */ QueryBuildDataSource qbds = q.dataSourceTable(tableNum(CustTransOpen)); if(!qbds.findRange(fieldnum(CustTransOpen, dueDate))) { //несмотря на наличие DueDate range, дебаггер идет сюда и добавляется новый range qbds.addRange(fieldnum(CustTransOpen, dueDate)).value(queryRange(dateNull(), systemDateGet())); } Info(strFmt("Due date used: %1", qbds.rangeField(fieldnum(CustTransOpen, dueDate)).value())); /*в итоге получаем странный запрос с двумя разными фильтрами по due date: {SELECT MIN(dataAreaId), MIN(AccountNum), SUM(AmountCur) FROM CustTransOpen(CustTransOpen_1) GROUP BY CustTransOpen.AccountNum WHERE ((DueDate<={ts '2020-11-17 00:00:00.000'})) AND ((CustTransOpen(CustTransOpen_1).AccountNum = N'000000001')) AND ((CustTransOpen(CustTransOpen_1).DueDate = {ts '2020-11-16 00:00:00.000'}))} */ ..... } boolean unpack(container packedClass) { Integer locVersion = conPeek(packedClass,1); container locPackedQuery; switch (locVersion) { case #CurrentVersion: [locVersion,#CurrentList,locPackedQuery] = packedClass; break; default : return false; } if (locPackedQuery) { queryRun = new QueryRun(locPackedQuery); Query q = QueryRun.query(); QueryBuildDataSource qbds = q.dataSourceTable(tableNum(CustTransOpen)); if(qbds.findRange(fieldnum(CustTransOpen, dueDate))) { qbds.clearRange(fieldnum(CustTransOpen, dueDate)); } } else { return false; } return true; } |
|
|
|