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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 23.03.2007, 13:23   #21  
Tiruvileijadal' is offline
Tiruvileijadal'
Участник
Аватар для Tiruvileijadal'
 
92 / 10 (1) +
Регистрация: 15.03.2007
Адрес: Сургут
Нет, поняла, что без помощи умных людей не обойдусь. Причина в том, что на мне висит ТЗ и уже замечание делали, что так долго делаю. А как его быстро сделать, если ничего не знаешь!!!
Мне помощь вот какого рода нужна: создала в АОТ запрос. На форму визуализировать я его смогла. Создала метод initQuery, в нем написала
Query
Старый 23.03.2007, 13:27   #22  
Lucky13 is offline
Lucky13
Участник
1C
 
714 / 198 (8) ++++++
Регистрация: 21.10.2004
А чего сделать-то надо?
Старый 23.03.2007, 13:37   #23  
Tiruvileijadal' is offline
Tiruvileijadal'
Участник
Аватар для Tiruvileijadal'
 
92 / 10 (1) +
Регистрация: 15.03.2007
Адрес: Сургут
Поняла, что нужна помощь умных людей. Проблема в том, что на мне висит ТЗ, у которого срок: 7 марта. Сделали скидку на недоученность, но сдавать нужно, а я в кверах ни бум-бум. Подскажите как делать, а хелп я обязательно прочту, как только это ТЗ сдам
Создала метод initQuery в котором написано
X++:
Query             q;
;
q = new Query('VendTrans_ContractTable);
// и еще одна строчка, которую я к сожалению не помню, а посмотреть негде 
//(я  дома)
В метод QueryRun написала:
X++:
this.initQuery;
return QueryRun;
Опять же за достоверность не ручаюсь.
Итого: на диалоговой форме запрос выводится, в кнопку "Выбор" зайти могу, но введенные в запросе значения на диалоговой форме не показываются. И самый главный вопрос: что делать с этим дальше? Смысл запроса - фильтр для моей временной таблицы.
Временная таблица tempTable в которой есть поля AccountNum, TransDate, RContractNumber, ContractDate. Запрос состоит из таблицы VendTrans и к ней привязана RContractTable. Мне нужно отфильтровать свою tempTable по тем полям, которые я написала выше, а они как раз и вводятся в запросе.
Блин, по-моему завернула, но проще объяснить не могу.
Я понимаю, что наглею, просто помощь ОЧЕНЬ нужна. Если бы не подгоняли - я бы сама разобралась. И буду дальше сама разбираться
Старый 23.03.2007, 13:38   #24  
Tiruvileijadal' is offline
Tiruvileijadal'
Участник
Аватар для Tiruvileijadal'
 
92 / 10 (1) +
Регистрация: 15.03.2007
Адрес: Сургут
Red face
Упс, забыла в коде кавычку закрыть
Старый 23.03.2007, 13:39   #25  
Tiruvileijadal' is offline
Tiruvileijadal'
Участник
Аватар для Tiruvileijadal'
 
92 / 10 (1) +
Регистрация: 15.03.2007
Адрес: Сургут
А еще во время быстрого ответа нажала кнопку TAB, а потом пробел и отправила обрезанное сообщение... Черт, надо успокоиться
Старый 23.03.2007, 13:47   #26  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Очень хочется Вам помочь, хотя и очень запутанно написали.

Поэтому попробую хотя бы так:
см. класс Tutorial_RunbaseForm - в нем есть источник (Номенклатуры), по нему фильтруется, значения после кнопки выбор подтягиваются и т.д.

Собственно, сделайте по образу и подобию. (это совет и на будущие лета)
Старый 23.03.2007, 13:51   #27  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
+ объясню, какая сейчас ошибка у вас.

Вы ваш код initQuery() добавили в метод queryRun(), который вызывается каждый раз при обращении к запросу. И каждый раз вы его перестраиваете заново. То есть после выбора значений фильтров в форме (по кнопке Выбор) запрос опять перестраивается заново без учета выбранных фильтров.

Исправить это можно одним из двух способов:
1. перенести метод initQuery в метод initParmDefault, как это сделано в приведенном выше классе.
2. добавить проверку вида if (!queryRun) this.initQuery(); обеспечивая тем самым вызов генерации запроса только первый раз (когда запрос еще не сформирован)

первый вариант имхо предпочтительние. И при этом будет работать кнопка "Сброс" без доп. телодвижений
Старый 23.03.2007, 14:23   #28  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
Цитата:
Сообщение от Tiruvileijadal' Посмотреть сообщение
q= new Query('VendTrans_ContractTable);
Сразу же бросилось в глаза...Обращу ваше внимание, что надо делать так:

X++:
q = new Query(queryStr(VendTrans_ContractTable));
Тогда сразу же на этапе компиляции выполнится проверка, что запрос с таким названием есть. Думаю, что зачем это надо - понятно.
Старый 23.03.2007, 20:00   #29  
Tiruvileijadal' is offline
Tiruvileijadal'
Участник
Аватар для Tiruvileijadal'
 
92 / 10 (1) +
Регистрация: 15.03.2007
Адрес: Сургут
Ладно, подождем до понедельника, на работе проверю и потом отреагирую.
kashperuk, oip, за советы спасибо
Старый 26.03.2007, 07:18   #30  
Tiruvileijadal' is offline
Tiruvileijadal'
Участник
Аватар для Tiruvileijadal'
 
92 / 10 (1) +
Регистрация: 15.03.2007
Адрес: Сургут
не получается где сохраняется вид запроса? У меня на форму выходит старый запрос, который я писала кодом (а не в АОТ). Отличаются тем, что в запросе из АОТ у меня таблица "Договоры" вложена в "Проводки по поставщикам", а в старом они независимые.
Код для Query:
X++:
public void initParmDefault()
{
    this.initQuery();
    super();
}
X++:
void initQuery()
{
    Query                   q;
    ;
    q =  new Query(querystr(VendTrans_ContractTable));
    qr = new QueryRun(q);
}
X++:
public QueryRun queryRun()
{
    return qr;
}
X++:
public container pack()
{
    return [#CurrentVersion, #CurrentList, qr.pack()];
}
X++:
public boolean unpack(container _packedClass)
{
    Version     version = RunBase::getVersion(_packedClass);
    container   packedQuery;
    switch (version)
    {
        case #CurrentVersion :
            [version, #CurrentList, packedQuery] = _packedClass;
            if (sysQuery::isPackedOk(packedQuery))
              qr = new QueryRun(packedQuery);
            else
              this.initQuery();
            break;
        default:
            return false;
    }
    return true;
}
Вот где в этом коде указано, что использовать нужно старый запрос (который в природе уже не существует к тому же)?
Может где-нибудь в пак/анпак указывать? И что указывать? Когда открываю класс и захожу в "Выбор" мне в выборе запроса выводится "Ранее использованный запрос". Меняю на "Используемый запрос", но ничего не меняется

Последний раз редактировалось Tiruvileijadal'; 26.03.2007 в 07:23. Причина: ошибки в словах
Старый 26.03.2007, 07:56   #31  
Tiruvileijadal' is offline
Tiruvileijadal'
Участник
Аватар для Tiruvileijadal'
 
92 / 10 (1) +
Регистрация: 15.03.2007
Адрес: Сургут
Умные люди, объясните пожалуйста феномен: скопировала полностью свой класс в новый (но не дублированием, а созданием методов один за другим) и стал выводиться мой родной запрос!!! Вот это что за издевательство такое? Щас расплачусь, блин...
Старый 26.03.2007, 10:06   #32  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
а если старому CurrentVersion увеличить на единичку? может старый класс запаковал старый запрос?
Старый 26.03.2007, 10:08   #33  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Не переживайте, все работает очень даже корректно.

Объяснения:
В механизме работы RunBase* классов предусмотрен механизм сохранения пользователских выборов в диалоге перед отчетом. Все настройки сохраняются в конкретной версии (это у вас зашито в макросе CurrentVersion в classDeclaration).
То есть, если версия текущего исполняемого кода текущая, то подтягиваются настройки запроса и т.д. из таблицы SysLastValue.
Вы изменили метод initQuery(), который вызывается в случае, если запрос не существует. Но так как версию вы не изменяли, то он подтягивается из настроек, и соответственно, существует.

Существует 2 способа решения этого:
1. Увеличить на 1 значение CurrentValue в classDeclaration. Тогда в методе unpack проверка версии не пройдет, и вызовется ваш initQuery
2. Удалить пользовательские настройки этого класса для вашего пользователя из таблицы SysLastValue. (доступ есть из средств разработки - Использование данных)

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

Теперь думаю все должно стать понятно
Старый 26.03.2007, 11:02   #34  
Tiruvileijadal' is offline
Tiruvileijadal'
Участник
Аватар для Tiruvileijadal'
 
92 / 10 (1) +
Регистрация: 15.03.2007
Адрес: Сургут
Едем дальше. Есть метод, в котором сборная солянка:
X++:
public void getQueryData()
{
    VendTrans       vT;
    RContractTable  rCT;
    str                 a;
    ;
    qbds = qR.query().dataSourceNo(1);
    qbr = q.dataSourceNo(1).rangeField(fieldNum(VendTrans, AccountNum));
    qbr.value();
}
Как всегда компилятор начал ругаться, в данном случае на вторую (снизу) строку кода. Что-то типа "Query объект не инициализирован". А суть в том, что мне нужно вытащить значения range, введенные пользователем. Как?
Старый 26.03.2007, 11:05   #35  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Цитата:
Сообщение от Tiruvileijadal' Посмотреть сообщение
Едем дальше. Есть метод, в котором сборная солянка:
X++:
public void getQueryData()
{
    ;
    qbds = qR.query().dataSourceNo(1);
    qbr = qbds.rangeField(fieldNum(VendTrans, AccountNum));
    info(qbr.value());
}
Не знаю, что такое у вас q и где оно объявлено, но явно не здесь, и явно к нашему запросу отношения не имеет
Старый 26.03.2007, 11:51   #36  
Tiruvileijadal' is offline
Tiruvileijadal'
Участник
Аватар для Tiruvileijadal'
 
92 / 10 (1) +
Регистрация: 15.03.2007
Адрес: Сургут
X++:
class LedgVend_Schet66_67_Report extends RunBaseBatch
{
    sysQueryRun                     qr;
    Query                           q;
    QueryBuildDataSource            qbds;
...
вот откуда q. Но с этим я уже разобралась и написала по-другому. Но за ответ very big thanks!
УРА!! Все получилось.
Но есть еще такой вопрос: как сделать в запросе так, чтобы в выпадающем списке полей вложенной таблицы RContractTable выводились значения, соответствующие полю основной таблицы VendTrans (это когда на форме нажимаешь кнопку "Выбор" и там вводишь всякие значения)? И реально ли такое в АКСАПТА вообще в принципе? См. запрос на рисунке.
Миниатюры
Нажмите на изображение для увеличения
Название: query.jpg
Просмотров: 308
Размер:	66.7 Кб
ID:	2504  
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
вылетает аксапта \Classes\CCMenuButtonAuto\new Poleax DAX: Программирование 10 12.02.2009 18:24
Аксапта 4.0: при выборе пунктов по меню кнопок система вылетает superb DAX: Прочие вопросы 6 26.07.2007 22:18
Вылетает Аксапта AvrDen DAX: Программирование 3 12.04.2007 15:46
При добавлении связи между dataSource Аксапта вылетает vasiliy DAX: Программирование 2 07.05.2005 07:44
Аксапта вылетает при выполенении job Tays DAX: Программирование 14 02.12.2004 06:32

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

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

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