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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 22.09.2005, 19:58   #1  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,691 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Изменение Query у некоторых пользователей
AXAPTA 2.5 SP3 трехзвенка

Класс на базе RunBaseBatch. Выполняется на стороне сервера. В методе New вручную строится Query примерно такого вида

PHP код:
select MIN(code), SUM(amount)
group by code
from Tab1
join MIN
(AccountNum), MIN(Dimension[1])
from custTable
where Tab1
.Code custTable.Code 
Затем пользователи настраивают его Range нужным образом. Все это работает нормально.

НО! У некоторых пользователей (т.е. при входе в AXAPTA под их логином) если пользователь изменил Range перед выполнением класса, то из результирующего Query пропадает клауза GROUP BY. Если Range вообще не задавать (перед этим очистив "объекты в использовании"), то GROUP BY на месте.

Что делал:

-) currentVersion - менял
-) выполнение на клиента переносил
-) класс переименовывал, удаляю старую копию из AOT
-) "сомнительного" пользователя удалял и создавал заново

Обошел глюк создав дополнительный group by custTable.Code. Первый GROUP BY по прежнему пропадает, но второй не дает "испортить" результат. Это не есть решение. Так, "заплатка".

Поэтому хотелось бы все-таки узнать в чем причина подобного глюка.

AXAPTA 2.5 SP3
Старый 22.09.2005, 20:24   #2  
kvan is offline
kvan
Moderator
Аватар для kvan
Дети Юза
 
775 / 49 (3) +
Регистрация: 07.08.2002
Адрес: Donetsk
Цитата:
В методе New вручную строится Query
Может приведете сам код метода?
Старый 22.09.2005, 20:31   #3  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
А зачем MIN(code)?
__________________
Axapta v.3.0 sp5 kr2
Старый 23.09.2005, 10:13   #4  
George Nordic is offline
George Nordic
Модератор
Аватар для George Nordic
Злыдни
 
4,479 / 1250 (50) ++++++++
Регистрация: 17.12.2003
Адрес: Moscow
Записей в блоге: 9
Владимир! Обрати внимание: когда пользователи меняют квери, у них есть 2 закладки: условия и сортировка. Возможно, они сами что-то в сортировке меняют или она сама сбрасывается?

С Уважением,
Георгий
Старый 23.09.2005, 11:01   #5  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,691 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
PHP код:
void new()
{
    
Query                query = new Query();
    
QueryBuildDataSource qbds;

    ;

    
qbds query.addDataSource(tablenum(RTG_PR_ManagementClientTable));
    
qbds.addSelectionField(fieldnum(RTG_PR_ManagementClientTableCode), SelectionField::MIN);
    
qbds.addSelectionField(fieldnum(RTG_PR_ManagementClientTableName), SelectionField::MIN);
    
qbds.addSelectionField(fieldnum(RTG_PR_ManagementClientTableCreditMax), SelectionField::MIN);
    
qbds.addSelectionField(fieldnum(RTG_PR_ManagementClientTableMaxPaymentDelay), SelectionField::MIN);
    
qbds.addSelectionField(fieldnum(RTG_PR_ManagementClientTableMaxPaymentDays), SelectionField::MIN);
    
qbds.addSelectionField(fieldnum(RTG_PR_ManagementClientTableWorkInNewConditions), SelectionField::MIN);
    
qbds.orderMode(OrderMode::GROUPBY);
    
qbds.addSortField(fieldnum(RTG_PR_ManagementClientTableCode));
    
qbds qbds.addDataSource(tablenum(CustTable));
    
qbds.relations(false);
    
qbds.clearLinks();
    
qbds.addLink(fieldnum(RTG_PR_ManagementClientTableCode), fieldnum(CustTableRTG_PR_ManagementClientCode));
    
qbds.addSelectionField(fieldnum(CustTableAccountNum), SelectionField::MIN);
    
qbds.addSelectionField(fieldid2ext(fieldnum(CustTableDimension), 1), SelectionField::MIN);
    
qbds.addSelectionField(fieldnum(CustTableRTG_SalesManagerGroupId), SelectionField::MIN);
    
qbds.addRange(fieldnum(CustTableAccountNum));
    
qbds.addRange(fieldid2ext(fieldnum(CustTableDimension), 1));
    
// RTG, 22.09.2005, МВБ -->
    
qbds.orderMode(OrderMode::GROUPBY);
    
qbds.addSortField(fieldnum(CustTableRTG_PR_ManagementClientCode));
    
// RTG, 22.09.2005, МВБ <--


    
queryRun = new QueryRun(query);

То, что выделено комментарием - это та самая "заплатка".

RTG_PR_ManagementClientTable - это таблица созданная уже в нашей копии AXAPTA. Не стандартный функционал.

MIN(code) - это просто перестраховка. На результат не должно влиять никак. Пробовал убирать MIN() - никаких изменений.

Я сам заходил под лигином пользователя и эффект был тот же. Т.е. даже не надо менять RANGE. Достаточно просто открыть SysQueryForm и ничего не меняя тут же нажать "Ok". Все. Group By - вылетает.

Получается, какие-то проблемы именно с SysQueryForm под логином некоторых пользователей.

Я уже делал инкрементную компиляцию RunBase и самой формы SysQueryForm - не помогает.

Проверяю, что же получилось в результате в метод main()

PHP код:
...
if 
myClass.prompt()
{
    
myClass.test_query()
    
//myClass.run()
}

void test_Query()
{
    ;
    
info(queryRun.query().DataSourceNo(1).toString());

Кроме того, проверял SQL профайлером, что реально получает сервер. Нет там GROUP BY и все тут.

Если бы это происходило у ВСЕХ пользователей, то было бы как-то понятно, что это где-то я ошибся. Но почему это происходит у некоторых?
Старый 23.09.2005, 11:13   #6  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
MIN(code) влияет на сам запрос на сервер - select MIN(code), code. Т.е. поле дополнительно. Ну да бог с ним.

Наверное придется смотреть, что формирует SysQuery при упаковке и распаковке запроса
__________________
Axapta v.3.0 sp5 kr2
Старый 23.09.2005, 11:45   #7  
raz is offline
raz
NavAx
Аватар для raz
NavAx Club
Лучший по профессии 2014
Лучший по профессии 2009
 
1,494 / 1065 (38) ++++++++
Регистрация: 22.07.2003
Адрес: МО
Цитата:
Если бы это происходило у ВСЕХ пользователей, то было бы как-то понятно, что это где-то я ошибся. Но почему это происходит у некоторых?
Рискну предположить что у вас 3-х уровневая конфигурация. Если я угадал, то проверьте - воспроизводиться данный эффект при очистке *.aoc файлов. http://forum.mazzy.ru/index.php?show...indpost&p=2522

ЗЫ. У нас наблюдались более интересные вещи, которые лечились удалением *.aoc файлов.
Старый 23.09.2005, 12:31   #8  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,691 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
В результате "раскопок" выяснилось следующее.

Пользователь использует группу, которой запрещен доступ к таблице RTG_PR_ManagementClientTable. Если в группе дать права на доступ к этой таблице, то Query строится нормально.

Но тогда возникает вопрос, а почему вообще запрос выполняется? Пусть и "искореженный", но тем не менее...

Попробовал при построении запроса использовать

query.allowCheck(false);

Не помогло

Да, удаление *.aoc эффекта не дает.
Старый 23.09.2005, 14:55   #9  
Atani is offline
Atani
Участник
 
77 / 15 (1) ++
Регистрация: 25.07.2003
Адрес: г. Королёв М.О.
Ещё в качестве идеи: не сбрасывается ли фильтр при проходе через механизм RLP, если он у вас настроен на эти таблицы и отрабатывает на запросе?..
Старый 23.09.2005, 14:57   #10  
Atani is offline
Atani
Участник
 
77 / 15 (1) ++
Регистрация: 25.07.2003
Адрес: г. Королёв М.О.
Если на этом Query у вас отрабатывает механизм RLP, имеет смысл посмотреть, что у него на входе, что на выходе
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Динамическое изменение query для отчета Peppi DAX: Программирование 1 25.11.2008 06:59
Изменение query запроса в локальных настройках пользователя? 3oppo DAX: Программирование 16 09.04.2008 11:15
Dynamics AX Geek: Using query() Blog bot DAX Blogs 0 28.10.2006 16:40
Как вызвать изменение Query в DS1 не вызывая метод executeQuery? Morpheus DAX: Программирование 5 17.10.2006 10:26
Динамическое изменение Query() на форме makos DAX: Программирование 22 05.07.2006 16:28

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

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

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