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