![]() |
#1 |
Участник
|
Периодическая операция для изменения значений
Доброе утро, уважаемые разработчики. Есть вопрос по реализации конкретной задачи. Требуется создать форму с динамическим фильтром такого вида
![]() Она будет вызываться при нажатии на menuitem. Нужно отбирать записи из таблицы по неким критериям и по завершению выборки изменять значение конкретного поля на иное. Мне подсказали копать в сторону класса RunBaseReport. Так ли это? Мне не нужно делать отчёт из этой формы, мне просто необходимо модифицировать поля по конкретным условиям. Буду благодарен за любые ответы. С уважением. |
|
![]() |
#2 |
Программатор
|
\Classes\Tutorial_RunbaseForm
оно? |
|
![]() |
#3 |
Участник
|
Если отчет не требуется, достаточно создать наследник класса RunBase. Примеры можно найти в коде, в книжках MorphX IT, Шашкова & Еременко, а также на этом форуме, используя поиск.
__________________
// no comments |
|
![]() |
#4 |
Участник
|
Открыл, да, именно такую форму мне и необходимо сделать!
Спасибо за то, что подтолкнули в нужную сторону, буду изучать код ![]() dech, вам тоже спасибо за то, что потратили время и ответили. Поиском пользовался, но по ключевому слову runbasereport и нужного не нашёл. Пошёл разбираться ![]() |
|
![]() |
#5 |
Участник
|
Вроде бы сделал, форма вызывается, НО, запрос мой не срабатывает, вернее он вообще не выводится на форму...
Я так понимаю, что в 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); } |
|
![]() |
#6 |
Участник
|
В классе, который вызывает вашу форму, перекройте метод showQueryValues()
X++: public boolean showQueryValues() { return true; } |
|
![]() |
#7 |
Участник
|
|
|
![]() |
#8 |
Программатор
|
X++: public void initParmDefault() { this.initQuery(); super(); } |
|
![]() |
#9 |
Участник
|
скопируйте класс Tutorial_RunbaseForm в новый класс и туда перенесите ваш функционал
![]() Когда простой пример получится, постепенно усложняйте |
|
![]() |
#10 |
Участник
|
Это тоже сделано
![]() Цитата:
Сообщение от Ace of Database
![]() скопируйте класс Tutorial_RunbaseForm в новый класс и туда перенесите ваш функционал
![]() Когда простой пример получится, постепенно усложняйте Простой Query в job-е работает замечательно, проверял)) Сейчас попробую форму сделать ещё тогда. Последний раз редактировалось user_ax; 01.04.2013 в 17:50. |
|
![]() |
#11 |
Участник
|
Проверил ещё раз джобик - если не комментировать
X++: qbds = query.addDataSource(tablenum(PurchLine)); А если заккоментировать - вообще ничего не происходит. Буду искать ошибку. |
|
![]() |
#12 |
Роман Долгополов (RDOL)
|
|
|
![]() |
#13 |
Участник
|
А у вас связи в АОТ между таблицами VendSpListJour и PurchLine прописаны?
Мне незнакома таблица VendSpListJour . В ней есть поле PurchId или InventTransId? Как она привязана к строке закупки? |
|
![]() |
#14 |
Участник
|
Свою форму создавать не обязательно.
А у вас в классе перекрыт метод queryRun? И не забудьте делать инкрементную компиляцию перед запуском после добавления новых методов. X++: queryrun queryrun()
{
return queryrun;
} Последний раз редактировалось Ace of Database; 02.04.2013 в 10:42. |
|
![]() |
#15 |
Участник
|
Еще есть вариант с упрощением использования сложного Query. Так как у вас больше одной таблицы в запросе, и между таблицами могут быть неоднозначные связи.
Создайте Query в узле АОТ Queries. В дизайнере добавьте источники данных, добавьте в узлы Range поля источников данных, чтобы пользователь сразу видел, что по этим полям можно задавать фильтры. Поля по, которым есть индексы, Аксапта сама вставляет в форму. Чтобы она этого не делала, надо явно добавить такое поле в Range запроса и свойство Status поставить в Hidden. В методе initQuery напишите код: X++: void initQuery() { Query query = new Query(queryStr(Query); ; queryRun = new QueryRun(query); } Последний раз редактировалось Ace of Database; 02.04.2013 в 10:58. |
|
![]() |
#16 |
Участник
|
Цитата:
Да, у меня стоит связь между VendSpListJour и PurchLine по PurchId. Она и не будет вам знакома, я её сам создал для нужных нам целей. QueryRun не перекрывал, такой код видел тоже в примере, сейчас попробую, возможно дело как раз-таки в нём. Если добавление методе queryrun не поможет, буду делать тогда отдельный query, как вы посоветовали. Думаю сегодня закончу и отпишусь. Спасибо вам, Ace of Database, большое за выделенное время. |
|
![]() |
#17 |
Участник
|
|
|
![]() |
#18 |
Участник
|
Цитата:
![]() Да, вы оказались правы, спасибо, что подсказали верное решение. |
|
![]() |
#19 |
Участник
|
Насколько я понял, чтобы добавить в Group рядом с кнопкой выбрать нужное мне поле для сортировки, нужно в initQeury добавить addRange по моему полю. Я это сделал, но всё равно, показывается то поле, которое стоит у таблицы индексом.
Похоже придётся создавать Query, как советовал Ace of Database и там уже манипулировать моими полями. |
|
![]() |
#20 |
Участник
|
Увеличьте значение макроса currentVersion - присвойте следующую версию. А то у вас отображается старая версия Query, сохраненная методом pack до того, как вы добавили Range.
И по тому полю, что стоит у табьлицы индексом, добавьте Range и сделайте его Hidden. Ну а вообще да, лучше создать Query в АОТ, чтобы наглядно можно было его редактировать. |
|
Теги |
runbasereport, диалог, динамическая форма, периодическая операция, программно |
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|