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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 31.01.2011, 13:11   #1  
yuriy_acti is offline
yuriy_acti
Участник
 
6 / 12 (1) ++
Регистрация: 29.06.2006
Запрос с начальным фильтром по-умолчанию
Привет, всем! Подскажите, какое свойство/метод управляет запуском запроса с параметром Выбрать запрос "Используемый запрос" (установленный в коде), а не "Ранее использованный запрос"? При повторном запуске скрипта, используется уже измененный фильтр, а необходимо всегда вызывать установленный по умолчанию

Например,
X++:
    VendTable vendTable;
    Query query1 = new Query();
    QueryBuildDataSource  qbds = query1.addDataSource(tablenum(VendTable));
    QueryBuildRange qbr = qbds.addRange(fieldnum(VendTable, AccountNum));
    QueryRun qr;
    ;
    qbds.addOrderByField(fieldnum(VendTable, AccountNum));
    qr = new QueryRun(query1);
    qr.query().dataSourceNo(1).addRange(fieldnum(VendTable, BankAccount)).value("*UA*");
    qr.query().dataSourceNo(1).addOrderByField(fieldnum(VendTable, BankAccount));
    if (qr.prompt())
    {
        while (qr.next())
        {
__________________
YURIY
Старый 31.01.2011, 13:26   #2  
samolalex is offline
samolalex
Участник
Аватар для samolalex
Самостоятельные клиенты AX
 
259 / 107 (4) +++++
Регистрация: 18.06.2010
Адрес: Москва
Судя по коду это метод fetch отчета, хотя могу ошибаться. Скорее всего, результаты последнего запроса сохраняются посредством методов pack() и unpack() либо в самом отчете (queryRun.pack()), либо в вызывающем классе, если таковой есть.
Можно либо не сохранять результаты запроса в этих методах, либо попробовать сделать так:
X++:
qbds.addOrderByField(fieldnum(VendTable, AccountNum));
    qr = new QueryRun(query1);
    qr.query().dataSourceNo(1).clearRanges();
    qr.query().dataSourceNo(1).addRange(fieldnum(VendTable, BankAccount)).value("*UA*");
    qr.query().dataSourceNo(1).addOrderByField(fieldnum(VendTable, BankAccount));
    if (qr.prompt())
    {
        while (qr.next())
        {
__________________
С уважением, Александр.
Старый 31.01.2011, 13:42   #3  
yuriy_acti is offline
yuriy_acti
Участник
 
6 / 12 (1) ++
Регистрация: 29.06.2006
Спасибо!
clearRanges() - пробовал, не работает, так как этот метод относится к конкретному ds. А указанное свойство относится к запросу в целом. Постараюсь покопатся в pack() и unpack(). Судя по всему именно их необходимо использовать
__________________
YURIY
Старый 31.01.2011, 13:50   #4  
Vals is offline
Vals
Аманд
Аватар для Vals
Компания АМАНД
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2009
 
1,765 / 507 (20) +++++++
Регистрация: 27.02.2002
Адрес: Pass partout, Москва
В DAX 4.0 была фича, когда форму или запрос заданным фильтром выбираешь в Избранное, то Избранное сохраняет этот запрос и открывает форму уже с запросом пользователя.

В AX2009 пытался повторить - не получилось, может я не то что-то делал.
Старый 31.01.2011, 14:04   #5  
Ivanhoe is offline
Ivanhoe
Участник
Аватар для Ivanhoe
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
4,143 / 2155 (80) +++++++++
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
Немного не так. Нужно создать ссылку в избранном, потом зайти в управление избранным, выбрать ссылку и для нее нажать кнопку выбора запроса (который нужно сохранить заранее).
__________________
Ivanhoe as is..
За это сообщение автора поблагодарили: mazzy (2), Vals (1), someOne (1).
Старый 31.01.2011, 14:59   #6  
samolalex is offline
samolalex
Участник
Аватар для samolalex
Самостоятельные клиенты AX
 
259 / 107 (4) +++++
Регистрация: 18.06.2010
Адрес: Москва
Цитата:
clearRanges() - пробовал, не работает, так как этот метод относится к конкретному ds. А указанное свойство относится к запросу в целом.
Есть еще вариант решения задачи - очистить все фильтры нижеприведенным образом, но этот способ, не очень "красивый", как мне кажется:
X++:
    for(i=1; i<=qr.query().dataSourceCount(); i++)
    {
        qr.query().dataSourceNo(i).clearRanges();
    }
__________________
С уважением, Александр.
Старый 01.02.2011, 09:47   #7  
yuriy_acti is offline
yuriy_acti
Участник
 
6 / 12 (1) ++
Регистрация: 29.06.2006
Всем спасибо!
Один из вариантов решения: используем SysQueryRun вместо QueryRun и qr.saveUserSetup(false).
__________________
YURIY
За это сообщение автора поблагодарили: Logger (2).
Старый 02.02.2011, 12:11   #8  
online
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,875 / 3123 (112) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от yuriy_acti Посмотреть сообщение
Всем спасибо!
Один из вариантов решения: используем SysQueryRun вместо QueryRun и qr.saveUserSetup(false).
Пожалуй, это самый правильный вариант.
Так как его иногда так кривит, что запрос получается совсем по другим табличкам. Так что clearRanges не всегда поможет.
Старый 17.12.2012, 12:24   #9  
avf is offline
avf
Участник
 
31 / 24 (1) +++
Регистрация: 28.06.2007
Цитата:
Сообщение от yuriy_acti Посмотреть сообщение
Подскажите, какое свойство/метод управляет запуском запроса с параметром Выбрать запрос "Используемый запрос" (установленный в коде), а не "Ранее использованный запрос"?
метод promptLoadLastUsedQuery класса SysQueryRun:
X++:
    sysQueryRun = new SysQueryRun(query);
    sysQueryRun.init();
    sysQueryRun.promptLoadLastUsedQuery(false); 
    if(sysQueryRun.prompt())
За это сообщение автора поблагодарили: Corkscrew (1).
Старый 17.12.2012, 12:34   #10  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от yuriy_acti Посмотреть сообщение
Привет, всем! Подскажите, какое свойство/метод управляет запуском запроса с параметром Выбрать запрос "Используемый запрос" (установленный в коде), а не "Ранее использованный запрос"? При повторном запуске скрипта, используется уже измененный фильтр, а необходимо всегда вызывать установленный по умолчанию
Не слушайте тех, кто предлагает корежить код и запрос.
Пожалуйста, не надо никаких "закатов солнца вручную"

в формах и отчетах, в потомках от runbasebatch
есть методы saveLast, getLast. Именно эти методы записывают текущий выполняемый запос и считывают в следующий раз записанное.

Чтобы метод getLast не вспоминал, достаточно переопределить метод allowSaveLast, чтобы он возвращал false в момент, когда вспоминать старое не нужно (например, пусть всегда возвращает false)
Миниатюры
Нажмите на изображение для увеличения
Название: 1.PNG
Просмотров: 346
Размер:	40.1 Кб
ID:	7986  
Старый 17.12.2012, 12:38   #11  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
опа... а теме то уж 2 года.
Теги
полезное

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Если в запросе у первой таблицы CacheLookup = None, то запрос идет без NOLOCK raz DAX: Программирование 1 04.02.2010 16:12
передача параметров в запрос while select tolstjak DAX: Программирование 13 15.02.2009 19:39
Как собрать запрос? moid DAX: Программирование 11 02.07.2007 12:07
Почему join запрос разбивается на подзапросы!? 3oppo DAX: Программирование 59 28.06.2007 11:52
Не работает запрос на нескольких компаниях Bega DAX: Программирование 3 16.09.2005 10:21

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 13:30.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.