|
![]() |
#1 |
Участник
|
вопрос по запросу
Подскажите, пожалуйста, такой синтаксис работает на MS DAX 4.0 ?
queryBuildRange.value(strFmt('((ItemType == %1) || (ItemId == "%2"))', any2int(ItemType::Service), queryValue("Item1"))); У меня ошибку выдает: Ошибка расширенного диапазона запроса: Синтаксическая ошибка рядом с 24. Может я что-то делаю не так? Цель запроса: отобрать основной договор и все подчиненные. X++: static void Job7(Args _args) { Query query = new Query(); QueryBuildDatasource qbds = query.addDataSource(tableNum(RContractTable)); QueryBuildRange qbr; QueryRun qr; RContractTable contractTable; ; qbr = qbds.addRange(fieldnum(RContractTable, RContractAccount)); qbr = qbds.addRange(fieldnum(RContractTable, ML_RContractParentAccount)); qbr.value(strFmt('((RContractAccount == %1) || (ML_RContractParentAccount == "%2"))', "Дог0001", "Дог0001")); qr = new QueryRun(query); while (qr.next()) { contractTable = qr.get(tableNum(RContractTable)); } } |
|
![]() |
#2 |
Участник
|
а вот так
X++: qbr.value(strFmt('((RContractAccount == "%1") || (ML_RContractParentAccount == "%2"))', "Дог0001", "Дог0001")); |
|
![]() |
#3 |
Участник
|
Цитата:
Возможно, проблема скрыта в этих строчках: qbr = qbds.addRange(fieldnum(RContractTable, RContractAccount)); qbr = qbds.addRange(fieldnum(RContractTable, ML_RContractParentAccount)); Но не пойму как по другому связать QueryBuildRange и QueryBuildDatasource. Последний раз редактировалось DAX13; 28.01.2014 в 18:56. |
|
![]() |
#4 |
Участник
|
|
|
|
За это сообщение автора поблагодарили: DAX13 (1). |
![]() |
#5 |
Участник
|
В первом случае у вас нет двойных кавычек, а должны быть
X++: '((RContractAccount == "%1")...'
__________________
// no comments |
|
|
За это сообщение автора поблагодарили: DAX13 (1). |
![]() |
#6 |
Участник
|
В дополнение, видел рекомендации на форуме и в статьях (да и в ссылках выше это проиллюстрировано), что комплексные критерии лучше создавать на основе полей, которые обычно наименнее задействованых при запросах к этой таблице из бизнес-логики. Например, DataAreaId, TableId, реже, RecId.
В одной из статей выше сказано: "The range is then added, using the DataAreaId field on each table. Any field can be used, but using an unusual one such as DataAreaId helps remind a casual reader of the code that it's not a normal range." Последний раз редактировалось Cardagant; 29.01.2014 в 15:49. |
|