27.11.2003, 12:56 | #1 |
Участник
|
знатокам query
Не подскажете как с помощью query можно
на форме промоделировать выполнения следующего запроса: select custTrans group by accountnum where custTrans.Voucher like 'КП*' && (custTrans.SettleAmountCur != custTrans.AmountCur) exists join custTrans2 where custTrans2.AccountNum == custtrans.AccountNum && custTrans2.Invoice && (custTrans2.SettleAmountCur != custTrans2.AmountCur) && custTrans2.TransType == LedgerTransType::Sales; |
|
27.11.2003, 13:48 | #2 |
Участник
|
а можете простыми словами сказать что вы от нее хотите?
|
|
27.11.2003, 14:52 | #3 |
Шаман форума
|
Цитата:
Изначально опубликовано mazzy
а можете простыми словами сказать что вы от нее хотите? |
|
27.11.2003, 15:11 | #4 |
Участник
|
Какая разница ?
А вообще-то форма должна показывать коды клиентов у которых одновременно есть несопоставленные счета-фактуры и несопоставленные платежи клиентов (у нас VOUCHER начинается на КП) для последующего сопоставления. |
|
27.11.2003, 15:24 | #5 |
NavAx
|
В свое время данная задача была решена без изящного Query (идя хорошая), а ломовым методом = добавили поле "На сопоставление" (Да/Нет) у поставщиков и клиентов, а продолжение идеи тут http://www.axforum.info/forums/showt...3522#post13522
|
|
27.11.2003, 15:51 | #6 |
Administrator
|
А в чем проблема?
Делаете два FormDataSource. Один (фильтрующий) привязываете к другому (фильтруемому) с помощью ExistJoin. Накладываете на них соответствующие Range. К Query фильтруемого DataSource добавляете SortField AccountNum и выставляете OrderMode GroupBy. Или я что-то серьезное упустил?
__________________
Not registered yet? Register here! Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me |
|
27.11.2003, 15:56 | #7 |
Участник
|
Цитата:
Изначально опубликовано andreynikolai
Какая разница ? То что вы задумали и то, что написали в запросе может сильно отличаться. Цитата:
Изначально опубликовано andreynikolai
А вообще-то форма должна показывать коды клиентов у которых одновременно есть несопоставленные счета-фактуры и несопоставленные платежи клиентов (у нас VOUCHER начинается на КП) для последующего сопоставления. Надо смотреть в CustTransOpen. А вообще говоря, в Аксапте есть процедура автоматического сопоставления. Эта процедура должна выполняться периодически. Надо включить и настроить. |
|
27.11.2003, 20:10 | #8 |
Участник
|
Ну как же код то выглядит ???
|
|
28.11.2003, 14:46 | #9 |
Administrator
|
Ничего не понимаю. Что у вас затруднение-то вызывает? Два DataSource на форму закинуть сможете? Связать их ExistJoin'ом сможете?
Ну а дальше элементарно в init у DataSource наложите на них условия, о которых вы пишите. CustTrans PHP код:
PHP код:
__________________
Not registered yet? Register here! Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me |
|
28.11.2003, 16:09 | #10 |
Участник
|
Re: знатокам query
Погоди, Максим. Ты прав с технической стороны.
Чтобы сделать то, что andreynikolai сказал на человеческом языке, запрос вообще по другой таблице делать надо. Сгруппируйте по клиенту CustTransOpen. Вы получите список клиентов с открытыми проводками. Далее из этого списка надо выбрать тех, кто имеет проводки для сопоставления. Я бы чуть изменил условия задачи и показывал всех клиентов у которых число проводок больше 2. С практической точки зрения, этого вполне достаточно. Если условия задачи не менять, то надо показать клиентов у которых есть проводки с положительной и отрицательной суммой в custTransOpen. Далее возникает сложность как в одном запросе сделать max,min, если Аксапта не позволяет подставлять алиасы для полей. Но у нас есть два поля с суммами, а нам нужен только +-. поэтому select, по которому должен строится запрос должен выглядеть так Код: CusttransOpen cto; select minof(AmountCur), maxof(AmountMST) from cto group by AccountNum; В чем состоит мораль: 1. выразите на простом человеческом языке ваше желание. 2. посмотрите есть ли уже готовая функциональность для этого 3. поищите существующие таблицы 4. если нет прямого ответа, то может стоит чуть модифицировать ваше желание? Дополнительно: профилируйте запросы. Старайтесь не задавать SQL'ю работу по перебору проводок от начала времен. Тем более, в сложных join'ах. Query и форма для Аксапты 3.0 прилагаются в проекте. Обратите внимание, что query лучше не строить динамически, а задавать в АОТе. //// Интересно как php показал Group By... Попробуем так... |
|
28.11.2003, 16:16 | #11 |
Участник
|
Re: Re: знатокам query
Цитата:
Изначально опубликовано mazzy
Старайтесь не задавать SQL'ю работу по перебору проводок от начала времен. Тем более, в сложных join'ах. ...тем более без индексов |
|
28.11.2003, 18:06 | #12 |
Участник
|
Всем спасибо за ответы !
Проблема была в том что я не знал как в QueryBuildDataSource наложить условие по неравенству полей одной таблицы. Интересно сработает это условие для сравнения полей двух разных таблиц ? |
|
|
Похожие темы | ||||
Тема | Ответов | |||
знатокам Query | 4 | |||
Dynamics AX Geek: Using query() | 0 | |||
знатокам query | 8 | |||
Знатокам Query | 2 | |||
Вопрос знатокам QBE и Query в AXAPTA | 6 |
|