|
|
#4 |
|
Участник
|
Цитата:
В принципе, общая идея, заключающаяся в том, что нужно наложить еще один Range по этому полю - правильная. Проблема только в том, что этот Range должен подкючаться по "И", а если уже есть Range по этому же полю, скажем, настроенный пользователем, то подключение произойдет по "ИЛИ" Именно для данного конкретного случая можно сделать "хитрый трюк". Дело в том, что определение того факта, что Range добавляется по уже существующему полю выполняется по Id поля. При этом, как правило, используется FieldId. Однако Axapta может идентифицировать поле как по FieldId, так и по ExtendedFieldId. Т.е. идентифицировать поле, как первый элемент массива. Естесственно, что FieldId и ExtendedFieldId - это разные значения. Как следствие, построитель запросов интепретирует их как разные Range и выполняет объединение по "И". Получается, примерно следующее X++: static void Job_Test(QueryRun queryRun) { Query queryFind; QueryRun queryRunFind; QueryBuildDataSource qbds; QueryBuildRange qbr; ; queryFind = new Query(queryRun.query().pack()); qbds = queryFind.dataSourceTable(tablenum(CustTable)); // Вот этот трюк qbr = qbds.findRange(fieldnum(CustTable, accountNum)); if (qbr) { // Если Range уже есть, то создаю новый Range по ExdendendFieldId qbr = qbds.addRange(fieldId2ext(fieldnum(CustTable, accountNum),1)); } qbr.value('КлиентАБВ'); queryRunFind = new QueryRun(queryFind); if (queryRunFind.next()) { info("Есть такая запись"); } } Естесственно, этот трюк работает только для полей, которые массивами не являются. Для полей-массивов можно сделать подобное только для первого элемента массива. |
|
|
|
| За это сообщение автора поблагодарили: coolibin (1), S.Kuskov (1), propeller (1). | |
| Теги |
| query, как правильно |
|
|
Похожие темы
|
||||
| Тема | Ответов | |||
| Очередной вопрос про Query | 45 | |||
| Вопрос по query? | 1 | |||
| Вопрос по query и join | 2 | |||
| Вопрос по запросу (query) | 2 | |||
| Вопрос знатокам QBE и Query в AXAPTA | 6 | |||
|