13.02.2019, 12:42 | #1 |
Участник
|
динамический X++ запрос range по нескольким полям
Добрый ден,
Столкнулся с трудностями при переписывании данного SQL запроса: X++: while select BOMId from bomVersion group by routeOpr.IsTechnReasonable_ICL,bom.ItemId,ecoResProduct.RecId where bomVersion.ItemId==itemIdProduction && bomVersion.Active == NoYes::Yes && bomVersion.FromQty == #bomVersionFromQty && ( (bomVersion.FromDate==dateNull() && bomVersion.ToDate == dateNull())|| (bomVersion.FromDate<= systemDateGet() && bomVersion.ToDate >= systemDateGet())|| (bomVersion.FromDate<= systemDateGet() && bomVersion.ToDate == dateNull()) ) X++: ( (bomVersion.FromDate==dateNull() && bomVersion.ToDate == dateNull())|| (bomVersion.FromDate<= systemDateGet() && bomVersion.ToDate >= systemDateGet())|| (bomVersion.FromDate<= systemDateGet() && bomVersion.ToDate == dateNull()) X++: bomVersion.FromDate <= systemDateGet() && (bomVersion.ToDate == dateNull() || bomVersion.ToDate >= systemDateGet()) X++: static void Job74(Args _args) { Query query; Queryrun qr; QueryBuildDataSource qbdsBomVersion; BOMVersion bomVersion; query = new Query(); qbdsBomVersion = query.addDataSource(tableNum(BOMVersion)); qbdsBomVersion.addRange(fieldNum(BOMVersion,ItemId)).value(queryValue("7075")); qbdsBomVersion.addRange(fieldNum(BOMVersion,Active)).value(queryvalue(SysQuery::value(NoYes::Yes))); qbdsBomVersion.addRange(fieldNum(BOMVersion,FromQty)).value(queryValue("1")); qbdsBomVersion.addRange(fieldNum(BomVersion,FromDate)).value(strfmt("((%1.%2 <= %5) && ((%1.%3 == %4) || (%1.%3 >= %5)))", qbdsBomVersion.name(),fieldstr(BOMVersion,FromDate),fieldStr(BOMVersion,ToDate),date2strXpp(dateNull()),systemDateGet())); qr = new QueryRun(query); info(qr.query().dataSourceNo(1).toString()); X++: bomVersion.FromDate <= systemDateGet() && (bomVersion.ToDate == dateNull() || bomVersion.ToDate >= systemDateGet()) X++: qbdsBomVersion.addRange(fieldNum(BomVersion,FromDate)).value(strfmt("((%1.%2 <= %5) && ((%1.%3 == %4) || (%1.%3 >= %5)))", qbdsBomVersion.name(),fieldstr(BOMVersion,FromDate),fieldStr(BOMVersion,ToDate),date2strXpp(dateNull()),systemDateGet())); Возвращаемый SQL запрос такой: X++: SELECT * FROM BOMVersion(BOMVersion_1) WHERE ((ItemId = N'7075')) AND ((Active = 1)) AND ((FromQty = 1.E0)) AND ((((BOMVersion_1.FromDate <= 13.02.2019) && ((BOMVersion_1.ToDate == 01\01\1900) || (BOMVersion_1.ToDate >= 13.02.2019))))) https://docs.microsoft.com/en-us/dyn...n-query-ranges Заранее спасибо. Последний раз редактировалось dark_knight; 13.02.2019 в 13:04. |
|
13.02.2019, 12:58 | #2 |
Участник
|
Почему dateNull() завернут в date2strXpp, а systemDateGet() нет?
|
|
|
За это сообщение автора поблагодарили: dark_knight (1). |
13.02.2019, 13:46 | #3 |
Участник
|
Спасибо. Работает
|
|
13.02.2019, 17:33 | #4 |
Участник
|
А имеет ли смысл формировать расширенный фильтр?
Вроде бы все можно реализовать простыми range, воспользовавшись тем поведением, что создание двух range на одно поле сделает для них ИЛИ. Навскидку приходит на ум форма применимости номенклатуры в спецификациях BOMPartOf. |
|
13.02.2019, 21:54 | #5 |
Участник
|
Хотя даже и не обязательно создавать два range, вполне работает и по одному.
Вот часть установки фильтров как раз похожего случая когда нужно попадание даты в диапазон и дата окончания диапазона может быть открытой: X++: qbrTemp = findOrCreateRange_W(qbdsSetup, fieldNum(SysPolicySetup_OVK, FromDate)); qbrTemp.value(SysQuery::range(dateNull(), searhDate)); qbrTemp = findOrCreateRange_W(qbdsSetup, fieldNum(SysPolicySetup_OVK, ToDate)); rangeTemp = SysQuery::range(searhDate, dateNull()); rangeTemp += (', ' + SysQuery::valueEmptyString()); qbrTemp.value(rangeTemp); Код: SELECT * FROM SysPolicySetup_OVK WHERE ((PolicyType = 1)) AND ((PolicyStatus = 1)) AND ((FromDate<={ts '2019-02-13 00:00:00.000'})) AND ((ToDate>={ts '2019-02-13 00:00:00.000'} OR ToDate = {ts '1900-01-01 00:00:00.000'})) Последний раз редактировалось Raven Melancholic; 13.02.2019 в 21:57. |
|
|
За это сообщение автора поблагодарили: dark_knight (1). |
17.02.2019, 22:31 | #6 |
Участник
|
спасибо)) учту
|
|