AXForum  
Go Back   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Forgotten Your Password?
Register Forum Rules FAQ Members List Today's Posts Search Mark Forums Read

 
 
Thread Tools Search this Thread Display Modes
Old 05.02.2009, 17:33   #1  
propeller is offline
propeller
Участник
propeller's Avatar
 
359 / 29 (1) +++
Join Date: 25.07.2007
Angry Вопрос по InventJournalTrans_ds.getNext()
Всем добрый день , есть такой пример на форме InventJournalCount на кнопке:
for (InventJournalTrans = InventJournalTrans_ds.getFirst(true) ? InventJournalTrans_ds.getFirst(true) : InventJournalTrans_ds.cursor(); InventJournalTrans; InventJournalTrans = InventJournalTrans_ds.getNext())
{


InventJournalTrans.Counted = _MDCount
InventJournalTrans_ds.write();
}

InventJournalTrans_ds.write() - Вызвается только для активной строки, то есть та которую я первую выделил в гриде.
можно ли как то сделать, чтобы write вызывался по очереди для всех выделенных строк?
спасибо
Old 05.02.2009, 17:36   #2  
kashperuk is offline
kashperuk
Участник
kashperuk's Avatar
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Join Date: 30.05.2004
Location: Atlanta, GA, USA
Вам просто нужно не с источником работать, а с записями
Вы получаете текущую (в цикле) запись в переменную InventJournalTrans
В ней меняйте поле, и обновляйте запись
А после того, как цикл закончится, вызовите InventJournalTrans_ds.research() (если у вас есть параметр retainCurrentPosition, укажите true)
Old 05.02.2009, 17:47   #3  
propeller is offline
propeller
Участник
propeller's Avatar
 
359 / 29 (1) +++
Join Date: 25.07.2007
в том то и дело что мне не подходит этот вариант ( у меня на write на датасорсе много чего весит. и нужно чтобы этот метод вызвался .
Old 05.02.2009, 18:02   #4  
npokypatop is offline
npokypatop
Злыдни
Сотрудники компании It Box
Злыдни
 
60 / 14 (1) ++
Join Date: 28.09.2005
Location: Нюрнберг
Может, все то, что висит на write датасорса, оформить в отдельный метод и вызывать его?
__________________
Все может быть и быть все может, все может быть или не быть,
но быть того никак не может, чего совсем не может быть.
Old 05.02.2009, 18:16   #5  
Gustav is offline
Gustav
Moderator
Gustav's Avatar
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Join Date: 24.01.2006
Location: Санкт-Петербург
Blog Entries: 19
Приходилось решать задачку в подобной не-БэстПрактисной постановке. Решением, конечно, не горжусь, но оно как-то работает и выручает. Сделал примерно так:
X++:
FormDataSource  formDataSource;
Common          common;
int             i;
 .............
// неявный цикл по строкам грида (явный - по датасорсу)
i = 0;
for ( common = formDataSource.getFirst() ? formDataSource.getFirst() : formDataSource.cursor();
      common ;
      common = formDataSource.getNext() )
{
    if (i==0)
        formDataSource.first();
    else
        formDataSource.next();

    // bla-bla-bla

    formDataSource.write();

    formDataSource.reread();
    formDataSource.refresh();

    i++;
}
P.S. Упс! Про выделенные речь? Для них не сработает по понятным причинам
P.P.S. Если только не попробовать быстренько отфильтровать выделенные записи (чтобы в гриде остались только они), пробежаться по ним, восстановить фильтрацию перед пробежкой и восстановить выделение... (не более, чем на уровне реплики мозгового штурма)
This post has been rated by: propeller (1).
Old 05.02.2009, 18:58   #6  
kashperuk is offline
kashperuk
Участник
kashperuk's Avatar
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Join Date: 30.05.2004
Location: Atlanta, GA, USA
Ну, другой вариант - получать датасорс этой записи
Попробуйте так:
X++:
InventJournalTrans.dataSource().write();
ВР:
Логика НЕ должна быть написана на формах!!
Old 06.02.2009, 10:32   #7  
lev is offline
lev
Ищущий знания...
lev's Avatar
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Join Date: 18.01.2005
Location: Москва
Quote:
Originally Posted by kashperuk View Post
ВР:
Логика НЕ должна быть написана на формах!!
Абсолютно согласен! Лучше переделать на правильное. А то потом в дальнейшем проблемы будут наростать, и все больше изощрений придется придумывать.
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
Old 06.02.2009, 14:11   #8  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,448 / 1792 (66) ++++++++
Join Date: 28.04.2007
Location: Калуга
К слову. Заметил однажды. Данный код:
X++:
record.dataSource().write();
в отличии от:
X++:
record_ds.write();
не выполняет метод write(), перекрытый на форме, он сразу передаёт управление базовому класу super().

Также, если перекрыт метод modified() поля источника данных, то при таком вызове
X++:
record_ds.object(fieldNum(Table, Field)).modified()
код в методе на форме не отработает.

Если логика, реализуемая методами write(), modified() и т.п., связана не с конкретной формой, а с данными хранящимися в таблице, то перекрывать стоит методы не формы а таблицы!

Last edited by S.Kuskov; 06.02.2009 at 14:30.
Old 06.02.2009, 16:07   #9  
kashperuk is offline
kashperuk
Участник
kashperuk's Avatar
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Join Date: 30.05.2004
Location: Atlanta, GA, USA
Хмм. У меня работает (АХ6)

А если так попробовать?
X++:
    FormDataSource fds;

    fds = InventJournalTrans.dataSource();
    fds.write();
Old 06.02.2009, 17:33   #10  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,448 / 1792 (66) ++++++++
Join Date: 28.04.2007
Location: Калуга
X++:
FormDataSource fds;

fds = InventJournalTrans.dataSource();
fds.write();
так работает (AX4)

Quote:
FormObjectSet class.
The base class for the FormDataSource Class. FormObjectSet provides basic functionality for working with the data source(s) on a form

FormObjectSet.write()
This method has no functionality in the FormObjectSet class. It is overridden by the FormDataSource.write method, which manages the database write operation.
Интересно как. С одной стороны "This method has no functionality in the FormObjectSet class", но с другой write таблицы то вызывается!
Old 06.02.2009, 20:01   #11  
Gustav is offline
Gustav
Moderator
Gustav's Avatar
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Join Date: 24.01.2006
Location: Санкт-Петербург
Blog Entries: 19
Quote:
Originally Posted by kashperuk View Post
(АХ6)
А это какая???

P.S. Понятно какая: Roadmap Microsoft Dynamics AX 2009 ... AX 6
Old 14.02.2009, 16:31   #12  
kashperuk is offline
kashperuk
Участник
kashperuk's Avatar
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Join Date: 30.05.2004
Location: Atlanta, GA, USA
Quote:
Originally Posted by Gustav View Post
А это какая???

P.S. Понятно какая: Roadmap Microsoft Dynamics AX 2009 ... AX 6
Только сейчас увидел сообщение твое.
Да - это именно она
 

Similar Threads
Thread Thread Starter Forum Replies Last Post
Вопрос по резервированию Spiker DAX: Программирование 9 28.01.2010 09:19
Вопрос по Проектам PSA DAX: Функционал 35 19.01.2007 22:26
Вопрос: учет затрат по закупкам в модуле Проекты Keks DAX: Функционал 5 13.07.2006 10:15
расчеты с персоналом. НДФЛ. вопрос чайника shumelka DAX: Функционал 2 25.03.2004 11:36
Вопрос к пользователю при сохранении данных в таблице Anais DAX: Программирование 1 23.03.2004 19:46
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump

Рейтинг@Mail.ru
All times are GMT +3. The time now is 15:40.
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Contacts E-mail, Advertising.