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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 26.10.2010, 17:57   #1  
Prophetic is offline
Prophetic
Участник
 
113 / 15 (1) ++
Регистрация: 08.12.2009
Как программно убрать Range
Здравия всем.
Столкнулся со следующей ситуацией: есть класс наследник RunBaseBatch.
В нем используется Query, созданный в AOT. В диалоге я хочу убрать возможность пользователем задавать Range, ибо делаю это программно. Но проблема в том, что пока я не очищу используемый запрос и ранее используемый запрос (нажав на кнопку "выбрать" и далее, кнопкой "очистить") в классе далее запрос не отрабатывает, и выводит ошибку о невозможности выбрать запись в одной из таблиц.
Как мне программно "обнулить" этот запрос?
Старый 26.10.2010, 18:30   #2  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Prophetic Посмотреть сообщение
Но проблема в том, что пока я не очищу используемый запрос и ранее используемый запрос (нажав на кнопку "выбрать" и далее, кнопкой "очистить") в классе далее запрос не отрабатывает, и выводит ошибку о невозможности выбрать запись в одной из таблиц.
Как мне программно "обнулить" этот запрос?
А зачем обнулять запрос?
Если речь идет именно об избыточном Range, то укажите ему пустую строку "".
Пустая строка эквивалентна отсутствию Range

Если речь идет о том, чтобы зафиксировать ваше условие в Range, то в свойстве Status программно задайте hidden или Locked.

пример в \Classes\CustInterestCreate\queryBuildUpdate
X++:
protected void queryBuildUpdate()
{
    QueryBuildRange rangeCanBeReversed;
    ;

    ...
    rangeCanBeReversed = queryRun.query().dataSourceTable(tablenum(CustSettlement)).addRange(fieldnum(CustSettlement, CanBeReversed));
    rangeCanBeReversed.value(queryValue(NoYes::Yes));
    rangeCanBeReversed.status(RangeStatus::Hidden);

    ...
}
__________________
полезное на axForum, github, vk, coub.
За это сообщение автора поблагодарили: Prophetic (1).
Старый 26.10.2010, 18:38   #3  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
Не очень понял вопроса, может невнимательно прочитал. showQueryValues = false не спасет?
За это сообщение автора поблагодарили: Prophetic (1).
Старый 27.10.2010, 10:21   #4  
Weez is offline
Weez
Участник
Axapta Retail User
 
250 / 84 (3) ++++
Регистрация: 18.01.2006
Адрес: Moscow city
У датасорса есть метод clearRanges, очищающий значения всех ranges.
Но в вашем случае мне кажется проблема в том, что у пользователей сохранились старые значения введенных параметров запроса, достаточно будет удалить их по всем пользователям в меню сервис-средства разработки-объекты приложения-использование данных.
__________________
Существует 10 типов людей: одни понимают двоичную систему, другие - нет.
За это сообщение автора поблагодарили: Prophetic (1).
Старый 10.11.2010, 12:10   #5  
Prophetic is offline
Prophetic
Участник
 
113 / 15 (1) ++
Регистрация: 08.12.2009
Они возвращаются...
Здравия, уважаемые.

Всем спасибо за ответы, однако, пришлось вернуться к старой проблеме. Дело в том, что я в классе поставил showQueryValues = true, в результате опять появились поля на форме для выбора значений и стала возникать ошибка. Повторяю эксперимент: удаляю критерии в диалоге (удаляю вообще строки в таблице критериев) , и ошибка не возникает. Ставлю showQueryValues = false, а затем возвращаю в true, критерии заново появляются с пустыми значениями и при работе с классом появляется та же проблема.

Приведу её:

Код:
Описание ошибки SQL: [Microsoft][ODBC SQL Server Driver][SQL Server]Не удалось привязать составной идентификатор "B.ITEMID".
Оператор SQL: SELECT A.ITEMID FROM INVENTTABLE A WHERE (A.DATAAREAID=?) AND EXISTS 
(SELECT 'x' FROM CUSTINVOICETRANS B,INVENTDIM C WHERE 
((B.DATAAREAID=?) AND (((B.INVOICEDATE>=?) AND (B.INVOICEDATE<=?)) AND 
(A.ITEMID=B.ITEMID))) AND ((C.DATAAREAID=?) AND ((((C.INVENTLOCATIONID=?) 
OR (C.INVENTLOCATIONID=?)) OR (C.INVENTLOCATIONID=?)) AND 
(B.INVENTDIMID=C.INVENTDIMID))) GROUP BY B.ITEMID,B.INVOICEDATE) GROUP 
BY A.ITEMID,B.ITEMID,B.INVOICEDATE ORDER BY A.ITEMID
Цитата:
Сообщение от mazzy Посмотреть сообщение
А зачем обнулять запрос?
Если речь идет именно об избыточном Range, то укажите ему пустую строку "".
Пустая строка эквивалентна отсутствию Range
Если речь идет о том, чтобы зафиксировать ваше условие в Range, то в свойстве Status программно задайте hidden или Locked.

Я так и сделал:
X++:
        qbrItem = qr.dataSourceTable(tablenum(InventTable)).addRange(fieldnum(InventTable,ItemId));
        qbrItem.value("");
        qbrItem.status(RangeStatus::Hidden);
//        qbrItem.status(RangeStatus::Locked);
Не помогло ни Hidden, ни Locked.

Что делать?
Старый 10.11.2010, 12:36   #6  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Prophetic Посмотреть сообщение
опять появились поля на форме для выбора значений и стала возникать ошибка.
Не удалось привязать составной идентификатор "B.ITEMID".
скорее всего, у вас изменилась таблица, а старый запрос сохранен в xLastValue.
Попробуйте очистить xLastValue и запустить снова.

(Если LastValue вам ни о чем не говорит, то зайдите в Параметры \ Использование данных \ Кнопка Сброс)
__________________
полезное на axForum, github, vk, coub.
За это сообщение автора поблагодарили: Prophetic (1).
Старый 10.11.2010, 13:50   #7  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,691 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Или увеличте номер версии. В ClassDeclaration для константы CurrentVersion увеличить ее значение.

При любой модификации, которая затрагивает данные сохраняемые/восстанавливаемые в кеше через методы pack/unpack требуется либо очищать кеш, либо увеличивать значение константы CurrentVersion
За это сообщение автора поблагодарили: mazzy (2), Prophetic (1).
Старый 10.11.2010, 14:29   #8  
Prophetic is offline
Prophetic
Участник
 
113 / 15 (1) ++
Регистрация: 08.12.2009
Цитата:
Сообщение от mazzy Посмотреть сообщение
скорее всего, у вас изменилась таблица, а старый запрос сохранен в xLastValue.
Попробуйте очистить xLastValue и запустить снова.

(Если LastValue вам ни о чем не говорит, то зайдите в Параметры \ Использование данных \ Кнопка Сброс)
xLastValue действительно ни о чём не говорит. Вопрос то остался: есть ли возможность программно очистить xLastValue и только для текущего запроса?
Старый 10.11.2010, 14:38   #9  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Prophetic Посмотреть сообщение
xLastValue действительно ни о чём не говорит. Вопрос то остался: есть ли возможность программно очистить xLastValue и только для текущего запроса?
нет, такая постановка вопроса заведет вас в тупик. не решайте вопрос в такой постановке.

делайте что Владимир Максимов говорит.
тогда не нужны костыли в виде "программно очистить"

а вообще читайте про паттерн pack/unpack и про работу с sysLastValue.
__________________
полезное на axForum, github, vk, coub.
Старый 10.11.2010, 14:53   #10  
Prophetic is offline
Prophetic
Участник
 
113 / 15 (1) ++
Регистрация: 08.12.2009
Цитата:
Сообщение от mazzy Посмотреть сообщение
нет, такая постановка вопроса заведет вас в тупик. не решайте вопрос в такой постановке.

делайте что Владимир Максимов говорит.
тогда не нужны костыли в виде "программно очистить"

а вообще читайте про паттерн pack/unpack и про работу с sysLastValue.
Всем спасибо за помощь, буду копать.
Старый 10.11.2010, 15:42   #11  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
Мне кажется, что никакие танцы с простыми способами решения проблемы не помогут.
Я не представляю, что нужно сделать с запросом, чтобы состав полей в GROUP BY и ORDER BY отличались, и чтобы там были поля из вложенного запроса по EXISTS. И вообще-то, зачем в EXISTS конструкция GROUP BY?

Prophetic, лучше расскажите, как Вы формируете и модифицируете свой query.
Старый 10.11.2010, 17:28   #12  
Prophetic is offline
Prophetic
Участник
 
113 / 15 (1) ++
Регистрация: 08.12.2009
Цитата:
Сообщение от Wamr Посмотреть сообщение
Мне кажется, что никакие танцы с простыми способами решения проблемы не помогут.
Я не представляю, что нужно сделать с запросом, чтобы состав полей в GROUP BY и ORDER BY отличались, и чтобы там были поля из вложенного запроса по EXISTS. И вообще-то, зачем в EXISTS конструкция GROUP BY?

Prophetic, лучше расскажите, как Вы формируете и модифицируете свой query.
Запрос был создан в AOT, и не мной. Я его только использую, добавляя Range.
Старый 10.11.2010, 19:22   #13  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
дык может поправить запрос?
Старый 11.11.2010, 09:53   #14  
Prophetic is offline
Prophetic
Участник
 
113 / 15 (1) ++
Регистрация: 08.12.2009
Цитата:
Сообщение от Wamr Посмотреть сообщение
дык может поправить запрос?
Запрос на картинке. Что-нибудь посоветуете?
К сожалению, проблема не исправилась с помощью удаления сохранённых значений, как советовал уважаемый Mazzy.
По-прежнему, запрос отрабатывает только если я вручную удаляю строки критериев.
Изображения
 
Старый 11.11.2010, 10:07   #15  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Prophetic Посмотреть сообщение
есть класс наследник RunBaseBatch.
В нем используется Query, созданный в AOT.
Цитата:
Сообщение от Prophetic Посмотреть сообщение
Запрос на картинке.
А зачем запрос, если исходная проблема в классе?
выкладывайте свой класс. лучше не картинкой, а нормальным проектом.
__________________
полезное на axForum, github, vk, coub.
Старый 11.11.2010, 12:10   #16  
Prophetic is offline
Prophetic
Участник
 
113 / 15 (1) ++
Регистрация: 08.12.2009
Цитата:
Сообщение от mazzy Посмотреть сообщение
А зачем запрос, если исходная проблема в классе?
выкладывайте свой класс. лучше не картинкой, а нормальным проектом.
Запрос не модифицируется никак, кроме добавления Range. Смысла выкладывать весь проект не вижу.

Использование:
X++:
while (itemQueryRun.next())
{
...
}
На первой строке, очевидно, ошибка и возникает.
Ещё раз проверил -- убиваю критерии (строки в таблице критериев), и все работает.
Старый 11.11.2010, 12:25   #17  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
интересно посмотреть свойства узлов CustInvoiceTrans & InventDim
и хотелось бы видеть все раскрытые узлы Sorting & Ranges
Старый 11.11.2010, 13:01   #18  
PavelX is offline
PavelX
MCTS
MCBMSS
 
46 / 97 (4) ++++
Регистрация: 08.09.2006
Адрес: Красноярск
Цитата:
Как мне программно "обнулить" этот запрос?
Если Вам надо полностью очистить запрос, то как вариант создайте в своем классе метод:
X++:
protected void initQuery()
{
    Query localQuery = new Query(querystr(InventTableCustTrans));
    ;
    // Здесь измените ренджи как Вам надо у этого localQuery

    queryRun = new QueryRun(localQuery);
}
И далее вызывайте этот метод в run() перед тем как строки выбирать.

Хотя это конечно не корректное решение проблемы. По хорошему надо разобраться почему появляется такая ошибка.
За это сообщение автора поблагодарили: Prophetic (1).
Старый 11.11.2010, 13:37   #19  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Prophetic Посмотреть сообщение
Запрос не модифицируется никак
Неправда.

Если вы используете runBaseBatch, то у вас работает паттерн pack/unpack (о котором вам говорили в самом начале, и о котором вы так и не прочитали, похоже).

pack/unpack вполне может модифицировать запрос.
вполне возможно, что вы работаете со старой версией запроса, а не с той, которая написана в коде.

Либо таки осознайте что вам советуют.
Либо таки выложите проект, чтобы для вас осознали другие.
Либо громко крикните, что Аксапта мастдайный отстой и оставайтесь с "неизвестной" ошибкой.
__________________
полезное на axForum, github, vk, coub.
Старый 11.11.2010, 13:38   #20  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от PavelX Посмотреть сообщение
Если Вам надо полностью очистить запрос, то как вариант создайте в своем классе метод:
Угу. Пошла хирургия при неизвестном диагнозе.
__________________
полезное на axForum, github, vk, coub.
За это сообщение автора поблагодарили: PavelX (1).
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
fatihdemirci: Axaptada forma kodla çoklu range eklemek Blog bot DAX Blogs 0 09.10.2010 09:25
jinx: Dynamics AX LookupForms &ndash; FindValue und Range auf gleichem Feld Blog bot DAX auf Deutsch 0 18.09.2009 03:13
axaptapedia: Packing date range values in queries Blog bot DAX Blogs 1 09.11.2007 13:10
Пропадает значение Range при экспорте проекта gl00mie DAX: Программирование 3 27.09.2007 00:22
Работа с Excel через COM и ошибка 0x800A03EC (Range.AutoFilter) gl00mie DAX: Программирование 15 30.03.2007 18:37

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

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

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