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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 01.04.2013, 11:16   #1  
user_ax is offline
user_ax
Участник
Аватар для user_ax
 
599 / 39 (3) +++
Регистрация: 07.10.2012
Адрес: ZP
Периодическая операция для изменения значений
Доброе утро, уважаемые разработчики. Есть вопрос по реализации конкретной задачи. Требуется создать форму с динамическим фильтром такого вида


Она будет вызываться при нажатии на menuitem.

Нужно отбирать записи из таблицы по неким критериям и по завершению выборки изменять значение конкретного поля на иное.

Мне подсказали копать в сторону класса RunBaseReport. Так ли это? Мне не нужно делать отчёт из этой формы, мне просто необходимо модифицировать поля по конкретным условиям.

Буду благодарен за любые ответы. С уважением.
Старый 01.04.2013, 11:20   #2  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
\Classes\Tutorial_RunbaseForm
оно?
Старый 01.04.2013, 11:24   #3  
dech is offline
dech
Участник
Аватар для dech
Самостоятельные клиенты AX
 
647 / 350 (13) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Записей в блоге: 3
Если отчет не требуется, достаточно создать наследник класса RunBase. Примеры можно найти в коде, в книжках MorphX IT, Шашкова & Еременко, а также на этом форуме, используя поиск.
__________________
// no comments
Старый 01.04.2013, 11:32   #4  
user_ax is offline
user_ax
Участник
Аватар для user_ax
 
599 / 39 (3) +++
Регистрация: 07.10.2012
Адрес: ZP
Цитата:
Сообщение от Sada Посмотреть сообщение
\Classes\Tutorial_RunbaseForm
оно?
Открыл, да, именно такую форму мне и необходимо сделать!

Спасибо за то, что подтолкнули в нужную сторону, буду изучать код

dech, вам тоже спасибо за то, что потратили время и ответили. Поиском пользовался, но по ключевому слову runbasereport и нужного не нашёл.

Пошёл разбираться
Старый 01.04.2013, 16:52   #5  
user_ax is offline
user_ax
Участник
Аватар для user_ax
 
599 / 39 (3) +++
Регистрация: 07.10.2012
Адрес: ZP
Вроде бы сделал, форма вызывается, НО, запрос мой не срабатывает, вернее он вообще не выводится на форму...
Я так понимаю, что в initQuery скорее всего дело, делал по примеру, дата оторбазилась, а вот выборка - нет...

Сейчас форма выглядит так



Group создался, но ничего нет там...

Код initQuery
X++:
void initQuery()
{
    Query query = new Query();
    QueryBuildDataSource qbds;
    QueryBuildRange  qbr;
    ;

   qbds = query.addDataSource(tablenum(VendSpListJour));
   qbds =  query.addDataSource(tablenum(PurchLine));
   qbr = qbds.addRange(fieldnum(VendSpListJour,EmplId));

    queryRun = new QueryRun(query);
}
Старый 01.04.2013, 17:17   #6  
Ace of Database is offline
Ace of Database
Участник
Аватар для Ace of Database
 
873 / 649 (23) +++++++
Регистрация: 14.10.2004
В классе, который вызывает вашу форму, перекройте метод showQueryValues()
X++:
public boolean showQueryValues()
{
    return true;
}
Старый 01.04.2013, 17:20   #7  
user_ax is offline
user_ax
Участник
Аватар для user_ax
 
599 / 39 (3) +++
Регистрация: 07.10.2012
Адрес: ZP
Цитата:
Сообщение от Ace of Database Посмотреть сообщение
В классе, который вызывает вашу форму, перекройте метод showQueryValues()
X++:
public boolean showQueryValues()
{
    return true;
}
Сделал, изначально даже пустого Group не было, перекрыл showQueryValues - появился Group, но пустой.
Старый 01.04.2013, 17:26   #8  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
X++:
public void initParmDefault()
{
    this.initQuery();

    super();
}
Старый 01.04.2013, 17:28   #9  
Ace of Database is offline
Ace of Database
Участник
Аватар для Ace of Database
 
873 / 649 (23) +++++++
Регистрация: 14.10.2004
скопируйте класс Tutorial_RunbaseForm в новый класс и туда перенесите ваш функционал И то же самое сделайте с формой. И для начала используйте простой Query, состоящий из одной таблицы. Желательно, чтобы на таблице было заполнено свойство PrimaryIndex.
Когда простой пример получится, постепенно усложняйте
Старый 01.04.2013, 17:47   #10  
user_ax is offline
user_ax
Участник
Аватар для user_ax
 
599 / 39 (3) +++
Регистрация: 07.10.2012
Адрес: ZP
Цитата:
Сообщение от Sada Посмотреть сообщение
X++:
public void initParmDefault()
{
    this.initQuery();

    super();
}
Это тоже сделано

Цитата:
Сообщение от Ace of Database Посмотреть сообщение
скопируйте класс Tutorial_RunbaseForm в новый класс и туда перенесите ваш функционал И то же самое сделайте с формой. И для начала используйте простой Query, состоящий из одной таблицы. Желательно, чтобы на таблице было заполнено свойство PrimaryIndex.
Когда простой пример получится, постепенно усложняйте
То есть форма, которая инициализируется в классе, тоже нужна? У меня просто только класс)))) Возможно поэтому ?


Простой Query в job-е работает замечательно, проверял))


Сейчас попробую форму сделать ещё тогда.

Последний раз редактировалось user_ax; 01.04.2013 в 17:50.
Старый 01.04.2013, 18:00   #11  
user_ax is offline
user_ax
Участник
Аватар для user_ax
 
599 / 39 (3) +++
Регистрация: 07.10.2012
Адрес: ZP
Проверил ещё раз джобик - если не комментировать
X++:
qbds =  query.addDataSource(tablenum(PurchLine));
тогда выдаёт инфолог с множеством пустых значений
А если заккоментировать - вообще ничего не происходит. Буду искать ошибку.
Старый 01.04.2013, 18:14   #12  
db is offline
db
Роман Долгополов (RDOL)
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
 
393 / 692 (24) +++++++
Регистрация: 01.04.2004
Адрес: Москва
Кнопка "Выбрать", как её добавить
Старый 01.04.2013, 18:59   #13  
Ace of Database is offline
Ace of Database
Участник
Аватар для Ace of Database
 
873 / 649 (23) +++++++
Регистрация: 14.10.2004
А у вас связи в АОТ между таблицами VendSpListJour и PurchLine прописаны?
Мне незнакома таблица VendSpListJour . В ней есть поле PurchId или InventTransId? Как она привязана к строке закупки?
Старый 02.04.2013, 10:39   #14  
Ace of Database is offline
Ace of Database
Участник
Аватар для Ace of Database
 
873 / 649 (23) +++++++
Регистрация: 14.10.2004
Свою форму создавать не обязательно.
А у вас в классе перекрыт метод queryRun? И не забудьте делать инкрементную компиляцию перед запуском после добавления новых методов.
X++:
queryrun queryrun()
{
    return queryrun;
}

Последний раз редактировалось Ace of Database; 02.04.2013 в 10:42.
Старый 02.04.2013, 10:44   #15  
Ace of Database is offline
Ace of Database
Участник
Аватар для Ace of Database
 
873 / 649 (23) +++++++
Регистрация: 14.10.2004
Еще есть вариант с упрощением использования сложного Query. Так как у вас больше одной таблицы в запросе, и между таблицами могут быть неоднозначные связи.
Создайте Query в узле АОТ Queries. В дизайнере добавьте источники данных, добавьте в узлы Range поля источников данных, чтобы пользователь сразу видел, что по этим полям можно задавать фильтры. Поля по, которым есть индексы, Аксапта сама вставляет в форму. Чтобы она этого не делала, надо явно добавить такое поле в Range запроса и свойство Status поставить в Hidden.
В методе initQuery напишите код:
X++:
void initQuery()
{
    Query query = new Query(queryStr(Query);
    ;

    queryRun = new QueryRun(query);
}
Вот такой сложный запрос нарисовал за несколько минут (см. картинку)
Название: Query.JPG
Просмотров: 1752

Размер: 30.4 Кб

Последний раз редактировалось Ace of Database; 02.04.2013 в 10:58.
Старый 02.04.2013, 12:41   #16  
user_ax is offline
user_ax
Участник
Аватар для user_ax
 
599 / 39 (3) +++
Регистрация: 07.10.2012
Адрес: ZP
Цитата:
Сообщение от Ace of Database Посмотреть сообщение
А у вас связи в АОТ между таблицами VendSpListJour и PurchLine прописаны?
Мне незнакома таблица VendSpListJour . В ней есть поле PurchId или InventTransId? Как она привязана к строке закупки?

Да, у меня стоит связь между VendSpListJour и PurchLine по PurchId.
Она и не будет вам знакома, я её сам создал для нужных нам целей.


QueryRun не перекрывал, такой код видел тоже в примере, сейчас попробую, возможно дело как раз-таки в нём.

Если добавление методе queryrun не поможет, буду делать тогда отдельный query, как вы посоветовали. Думаю сегодня закончу и отпишусь.

Спасибо вам, Ace of Database, большое за выделенное время.
Старый 02.04.2013, 12:44   #17  
Ace of Database is offline
Ace of Database
Участник
Аватар для Ace of Database
 
873 / 649 (23) +++++++
Регистрация: 14.10.2004
Цитата:
Сообщение от user_ax Посмотреть сообщение
QueryRun не перекрывал, такой код видел тоже в примере, сейчас попробую, возможно дело как раз-таки в нём.
100% дело в этом
Старый 02.04.2013, 12:48   #18  
user_ax is offline
user_ax
Участник
Аватар для user_ax
 
599 / 39 (3) +++
Регистрация: 07.10.2012
Адрес: ZP
Цитата:
Сообщение от Ace of Database Посмотреть сообщение
Свою форму создавать не обязательно.
А у вас в классе перекрыт метод queryRun? И не забудьте делать инкрементную компиляцию перед запуском после добавления новых методов.
X++:
queryrun queryrun()
{
    return queryrun;
}
Добавил этот метод и появилось поле, которое мне необходимо! Спасибо вам большое. На будущее учту.

Цитата:
Сообщение от Ace of Database Посмотреть сообщение
100% дело в этом
Да, вы оказались правы, спасибо, что подсказали верное решение.
Старый 02.04.2013, 13:16   #19  
user_ax is offline
user_ax
Участник
Аватар для user_ax
 
599 / 39 (3) +++
Регистрация: 07.10.2012
Адрес: ZP
Насколько я понял, чтобы добавить в Group рядом с кнопкой выбрать нужное мне поле для сортировки, нужно в initQeury добавить addRange по моему полю. Я это сделал, но всё равно, показывается то поле, которое стоит у таблицы индексом.

Похоже придётся создавать Query, как советовал Ace of Database и там уже манипулировать моими полями.
Старый 02.04.2013, 13:25   #20  
Ace of Database is offline
Ace of Database
Участник
Аватар для Ace of Database
 
873 / 649 (23) +++++++
Регистрация: 14.10.2004
Увеличьте значение макроса currentVersion - присвойте следующую версию. А то у вас отображается старая версия Query, сохраненная методом pack до того, как вы добавили Range.
И по тому полю, что стоит у табьлицы индексом, добавьте Range и сделайте его Hidden. Ну а вообще да, лучше создать Query в АОТ, чтобы наглядно можно было его редактировать.
Теги
runbasereport, диалог, динамическая форма, периодическая операция, программно

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Универсальный изменятель значений полей wojzeh DAX: Программирование 17 26.09.2013 17:47
Последовательная замена множества уникальных значений на другие без возникновения дубликатов gl00mie DAX: Программирование 23 24.11.2010 15:05
Периодическая операция Приемка. Ошибка в спецификации. Объясните RSJustInTime DAX: Функционал 6 02.02.2006 14:02
Сводное планирование - изменения&изменения мин. Alexm DAX: Прочие вопросы 1 05.04.2005 10:43
Русская локализация Axapta 3 ? SlavaK DAX: Администрирование 59 01.07.2003 22:38
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

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