AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 27.11.2003, 12:56   #1  
andreynikolai is offline
andreynikolai
Участник
 
133 / 10 (1) +
Регистрация: 11.04.2002
знатокам 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  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
а можете простыми словами сказать что вы от нее хотите?
Старый 27.11.2003, 14:52   #3  
komar is offline
komar
Шаман форума
Аватар для komar
Ex AND Project
 
5,571 / 600 (32) +++++++
Регистрация: 24.05.2002
Цитата:
Изначально опубликовано mazzy
а можете простыми словами сказать что вы от нее хотите?
Старый 27.11.2003, 15:11   #4  
andreynikolai is offline
andreynikolai
Участник
 
133 / 10 (1) +
Регистрация: 11.04.2002
Какая разница ?

А вообще-то форма должна показывать коды клиентов у которых одновременно
есть несопоставленные счета-фактуры и несопоставленные платежи
клиентов (у нас VOUCHER начинается на КП) для последующего сопоставления.
Старый 27.11.2003, 15:24   #5  
raz is offline
raz
NavAx
Аватар для raz
NavAx Club
Лучший по профессии 2014
Лучший по профессии 2009
 
1,494 / 1065 (38) ++++++++
Регистрация: 22.07.2003
Адрес: МО
В свое время данная задача была решена без изящного Query (идя хорошая), а ломовым методом = добавили поле "На сопоставление" (Да/Нет) у поставщиков и клиентов, а продолжение идеи тут http://www.axforum.info/forums/showt...3522#post13522
Старый 27.11.2003, 15:51   #6  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
А в чем проблема?

Делаете два 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  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Изначально опубликовано andreynikolai
Какая разница ?
Большая.
То что вы задумали и то, что написали в запросе может сильно отличаться.

Цитата:
Изначально опубликовано andreynikolai
А вообще-то форма должна показывать коды клиентов у которых одновременно
есть несопоставленные счета-фактуры и несопоставленные платежи
клиентов (у нас VOUCHER начинается на КП) для последующего сопоставления.
Тогда вы неправильные таблицы смотрите.
Надо смотреть в CustTransOpen.


А вообще говоря, в Аксапте есть процедура автоматического сопоставления. Эта процедура должна выполняться периодически. Надо включить и настроить.
Старый 27.11.2003, 20:10   #8  
andreynikolai is offline
andreynikolai
Участник
 
133 / 10 (1) +
Регистрация: 11.04.2002
Ну как же код то выглядит ???
Старый 28.11.2003, 14:46   #9  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
Ничего не понимаю. Что у вас затруднение-то вызывает? Два DataSource на форму закинуть сможете? Связать их ExistJoin'ом сможете?

Ну а дальше элементарно в init у DataSource наложите на них условия, о которых вы пишите.

CustTrans
PHP код:
public void init()
{
    
QueryBuildDataSource    qbDS;

    
super();

    
qbDS this.query().dataSourceTable(this.table());
    
qbDS.orderMode(OrderMode::GroupBy);
    
qbDS.addSortField(fieldNum(CustTransAccountNum));
    
qbDS.addRange(fieldnum(CustTransAmountCur))
        .
value(strfmt("(%1 != %2)",
               
fieldstr(CustTransAmountCur),
               
fieldstr(CustTransSettleAmountCur)));
    
qbDS.addRange(fieldnum(CustTransVoucher))
        .
value("КП*");

CustTrans2
PHP код:
public void init()
{
    
QueryBuildDataSource    qbDS;

    
super();

    
qbDS this.query().dataSourceTable(this.table());
    
qbDS.addRange(fieldnum(CustTransAmountCur))
        .
value(strfmt("(%1 != %2)",
               
fieldstr(CustTransAmountCur),
               
fieldstr(CustTransSettleAmountCur)));
    
qbDS.addRange(fieldnum(CustTransInvoice))
        .
value("!\"\"");
    
qbDS.addRange(fieldnum(CustTransTransType))
        .
value(strfmt("%1"LedgerTransType::Sales));

__________________
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  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Re: знатокам query
Погоди, Максим. Ты прав с технической стороны.

Чтобы сделать то, что andreynikolai сказал на человеческом языке, запрос вообще по другой таблице делать надо.

Сгруппируйте по клиенту CustTransOpen.
Вы получите список клиентов с открытыми проводками.
Далее из этого списка надо выбрать тех, кто имеет проводки для сопоставления.

Я бы чуть изменил условия задачи и показывал всех клиентов у которых число проводок больше 2. С практической точки зрения, этого вполне достаточно.

Если условия задачи не менять, то надо показать клиентов у которых есть проводки с положительной и отрицательной суммой в custTransOpen.

Далее возникает сложность как в одном запросе сделать max,min, если Аксапта не позволяет подставлять алиасы для полей. Но у нас есть два поля с суммами, а нам нужен только +-.

поэтому select, по которому должен строится запрос должен выглядеть так
Код:
CusttransOpen cto;
select minof(AmountCur), maxof(AmountMST) from cto
    group by AccountNum;
Далее, возникает проблема с тем, что в Аксапте нет Having и нельзя одним запросом отобрать те строки в которых сумма и положительная и отрицательная. Но можно это выделить цветом в форме.

В чем состоит мораль:
1. выразите на простом человеческом языке ваше желание.
2. посмотрите есть ли уже готовая функциональность для этого
3. поищите существующие таблицы
4. если нет прямого ответа, то может стоит чуть модифицировать ваше желание?

Дополнительно: профилируйте запросы. Старайтесь не задавать SQL'ю работу по перебору проводок от начала времен. Тем более, в сложных join'ах.

Query и форма для Аксапты 3.0 прилагаются в проекте.
Обратите внимание, что query лучше не строить динамически, а задавать в АОТе.


//// Интересно как php показал Group By... Попробуем так...
Вложения
Тип файла: xpo mazaxforum.xpo (45.4 Кб, 627 просмотров)
Старый 28.11.2003, 16:16   #11  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Re: Re: знатокам query
Цитата:
Изначально опубликовано mazzy
Старайтесь не задавать SQL'ю работу по перебору проводок от начала времен. Тем более, в сложных join'ах.
Добавлю еще.
...тем более без индексов
Старый 28.11.2003, 18:06   #12  
andreynikolai is offline
andreynikolai
Участник
 
133 / 10 (1) +
Регистрация: 11.04.2002
Всем спасибо за ответы !
Проблема была в том что я не знал как в QueryBuildDataSource
наложить условие по неравенству полей одной таблицы.
Интересно сработает это условие для сравнения полей двух разных таблиц ?
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
знатокам Query Nikolaich DAX: Программирование 4 02.05.2007 13:22
Dynamics AX Geek: Using query() Blog bot DAX Blogs 0 28.10.2006 16:40
знатокам query Nikolaich DAX: Программирование 8 16.06.2006 18:18
Знатокам Query Ser DAX: Программирование 2 16.09.2003 09:16
Вопрос знатокам QBE и Query в AXAPTA Maxim Gorbunov DAX: Программирование 6 27.12.2002 13:19

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 13:07.