18.09.2003, 16:52 | #1 |
Участник
|
Произвольный SQL-запрос
Подскажите возможно ли в Axapta создать Произвольный SQL-запрос
SELECT * FROM Table1 JOIN * FROM Table2 WHERE Table1.FieldA = Table2.FieldA AND ((Table2.FieldB >= Table1.FieldB_Start) AND (Table2.FieldB <= Table1.FieldB_End)) и передать его разультаты, например в FormDataSource. Заранее благодарен. |
|
18.09.2003, 18:27 | #2 |
Юзовские
|
Query q =new Query();
q.addDataSource(tablenum(Table1))юaddDataSource(tablenum(Table2)); ... element.quryRun().query(q); ит.д. |
|
18.09.2003, 18:54 | #3 |
Участник
|
Суть вотроса в том, как задать условия.
|
|
18.09.2003, 18:59 | #4 |
Участник
|
http://axapta.mazzy.ru/hints/search/
Спасибо Андрею Бобкову за классные замечания. |
|
19.09.2003, 10:07 | #5 |
Участник
|
Извиняюсь за настойчивость!
Но мне нужно осуществлять фильтрацию записей Joint Data Sourse не по конкретным значениям полей таблицы, а по значению поля связанной таблицы. ((Table2.FieldB >= Table1.FieldB_Start) AND (Table2.FieldB <= Table1.FieldB_End)) Возможно ли это? |
|
19.09.2003, 10:41 | #6 |
Участник
|
Можно:
PHP код:
З.Ы. Код исправил - строку с AddLink промумил. |
|
19.09.2003, 11:00 | #7 |
Moderator
|
Еще можно использовать QueryBuildDynalink: http://www.axforum.info/forums/showt...ht=addDynalink
|
|
19.09.2003, 12:42 | #8 |
Участник
|
Большое Спасибо Всем!!!
Все получилось ( воспользовался рекомендацией Джона ) |
|
02.10.2003, 18:11 | #9 |
Участник
|
Как можно добавить в расширенную фильтрацию через range поля типа Dimension?
Попытка добавить что-то типа PHP код:
|
|
02.10.2003, 23:11 | #10 |
Участник
|
Не проверил, но...
попробуйте ((Department == '')||(Perpose == '')) |
|
02.10.2003, 23:15 | #11 |
Участник
|
Да, опять забыл и опять накололся на этом вопросе!
см. http://axapta.mazzy.ru/hints/emptyqueryrange/ чтобы проверить на пустую строку из программы надо указывать обратные слэши. При вводе критериев в самой Аксапте слэши указывать не надо. |
|
03.10.2003, 12:44 | #12 |
Участник
|
Сергей, спасибо за интересную информацию о задании пустой строки в критериях запроса. Хотя я с этим уже сталкивался, но лишнее напоминание не повредит.
Однако в случае "расширенной фильтрации" через range правила несколько другие. Небольшая цитата из Best Practice (Advanced query range value expressions): "As the contents of the Query range value expressions should look like x++, you should be aware that you format the different data types correctly. Do not use strFmt or SysQuery::value/queryValue for this. In x++ you can use the global method date2StrXpp to format a date to the correct x++ format, and use for example int2str to convert an enumerated value to the suitable numeric format." Хотя про пустую строку здесь не сказано, но опытным путем проверено, что для обычных полей всё работает по-простому. Проблема возникает именно для полей типа аналитик (когда требуется указывать индекс массива), при этом не имеет значения с чем сравнивать. Пусть к примеру будет не пустая строка, а "004". p.s. Вариант с подстановкой SQL наименования поля (Dimension2_) тоже не проходит. |
|
03.10.2003, 23:02 | #13 |
Участник
|
Цитата:
Изначально опубликовано mazzy
((Department == '')||(Perpose == '')) Цитата:
Изначально опубликовано dn
... aware that you format the different data types correctly. Do not use strFmt or SysQuery::value/queryValue for this. Поскольку strfmt сначала использует региональные настройки из типа, а затем текущие региональные настройки виндов. А в условиях многоязычности и многолокальности... вовсе не факт, что критерий будет сформирован правильно. В целом согласен. но... ввиду того, что у нас локаль на всех одна, я бы на это не обращал особого внимания. Хотя за совет спасибо - дополню статью. Цитата:
Изначально опубликовано dn
Проблема возникает именно для полей типа аналитик (когда требуется указывать индекс массива), при этом не имеет значения с чем сравнивать. Пусть к примеру будет не пустая строка, а "004". Попробуйте заимпортировать форму. Посмотрите на критерий. Попробую завтра подумать/потестить. Спасибо за интересную задачку. |
|
05.10.2003, 21:47 | #14 |
Участник
|
результат сегодняшних тестирований:
1. у меня тоже не получилось задать фильтр на одну непервую аналитику. 2. однако сама Аксапта легко это делает. Достаточно зайти в бух.проводки и нажать кнопку фильтр. Значит что-то не так делается при программировании. Может это действительно баг. Помнится в 2.1 такая же ситуация была с аналитикой в отчете. Когда невозможно было выбрать не первый dimension в поле. в 2.5 это исправили. Надо будет еще подумать. |
|
06.10.2003, 10:48 | #15 |
Участник
|
Наверное, я не могу четко сформулировать проблему... Попробую ещё раз.
Есть два типа фильтрации через range: обычная и расширенная. (Заранее извиняюсь за вольный перевод). При расширенной фильтрации не имееет значения по какому полю накладывается range, а анализируется только его значение, которое должно быть обязательно заключено в круглые скобки. Как добавить вторую аналитику в запрос с помощью обычной фильтрации я знаю. PHP код:
|
|
06.10.2003, 13:33 | #16 |
Участник
|
я понял. Именно "расширенная" фильтрация и не получилась.
Простая работает - согласен. |
|
01.03.2004, 14:34 | #17 |
Участник
|
у меня пример уважаемого Джона не работает - второй addDataSource вышибает первый.
(Аксапта 2.5) |
|
29.06.2006, 08:24 | #18 |
Участник
|
Хотелось бы узнать как быть, если условие нужно добавить полям с типом даты.
Date2str(date), когда я пытаюсь поставить в Range, у меня вылетает с ошибкой. Попробовал так: qbr.value('((Table.ExpDate <= '+int2str(date2num(DateTo))+') && (Table.ExpDate >= '+int2str(date2num(FromDate))+'))'); Но в данном случае выбираются не те данные... выбираются данные примерно на год позже . Вопрос знатокам: что я неправильно делаю?
__________________
И почему никто меня не любит? Да, я надоедливый |
|
29.06.2006, 16:31 | #19 |
Axapta
|
Цитата:
Сообщение от Antant
Хотелось бы узнать как быть, если условие нужно добавить полям с типом даты.
PHP код:
|
|
29.06.2006, 21:25 | #20 |
Роман Долгополов (RDOL)
|
Цитата:
Сообщение от Antant
Хотелось бы узнать как быть, если условие нужно добавить полям с типом даты.
Date2str(date), когда я пытаюсь поставить в Range, у меня вылетает с ошибкой. Попробовал так: qbr.value('((Table.ExpDate <= '+int2str(date2num(DateTo))+') && (Table.ExpDate >= '+int2str(date2num(FromDate))+'))'); даты в коде х++ пишутся в виде дд\мм\гггг , например 01\12\2006, функция которая преобразовывает переменную типа дата к такой строке date2strxpp() в вашем конкретном случае диапазона дат достаточно qbr.value(queryrange(dateFrom, dateTo)), что то же самое что и SysQuery::range() из совета oip Последний раз редактировалось db; 29.06.2006 в 21:27. |
|