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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 05.02.2009, 17:33   #1  
propeller is offline
propeller
Участник
Аватар для propeller
 
359 / 29 (1) +++
Регистрация: 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 вызывался по очереди для всех выделенных строк?
спасибо
Старый 05.02.2009, 17:36   #2  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Вам просто нужно не с источником работать, а с записями
Вы получаете текущую (в цикле) запись в переменную InventJournalTrans
В ней меняйте поле, и обновляйте запись
А после того, как цикл закончится, вызовите InventJournalTrans_ds.research() (если у вас есть параметр retainCurrentPosition, укажите true)
Старый 05.02.2009, 17:47   #3  
propeller is offline
propeller
Участник
Аватар для propeller
 
359 / 29 (1) +++
Регистрация: 25.07.2007
в том то и дело что мне не подходит этот вариант ( у меня на write на датасорсе много чего весит. и нужно чтобы этот метод вызвался .
Старый 05.02.2009, 18:02   #4  
npokypatop is offline
npokypatop
Злыдни
Сотрудники компании It Box
Злыдни
 
60 / 14 (1) ++
Регистрация: 28.09.2005
Адрес: Нюрнберг
Может, все то, что висит на write датасорса, оформить в отдельный метод и вызывать его?
__________________
Все может быть и быть все может, все может быть или не быть,
но быть того никак не может, чего совсем не может быть.
Старый 05.02.2009, 18:16   #5  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 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. Если только не попробовать быстренько отфильтровать выделенные записи (чтобы в гриде остались только они), пробежаться по ним, восстановить фильтрацию перед пробежкой и восстановить выделение... (не более, чем на уровне реплики мозгового штурма)
За это сообщение автора поблагодарили: propeller (1).
Старый 05.02.2009, 18:58   #6  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Ну, другой вариант - получать датасорс этой записи
Попробуйте так:
X++:
InventJournalTrans.dataSource().write();
ВР:
Логика НЕ должна быть написана на формах!!
Старый 06.02.2009, 10:32   #7  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
Цитата:
Сообщение от kashperuk Посмотреть сообщение
ВР:
Логика НЕ должна быть написана на формах!!
Абсолютно согласен! Лучше переделать на правильное. А то потом в дальнейшем проблемы будут наростать, и все больше изощрений придется придумывать.
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
Старый 06.02.2009, 14:11   #8  
online
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,438 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
К слову. Заметил однажды. Данный код:
X++:
record.dataSource().write();
в отличии от:
X++:
record_ds.write();
не выполняет метод write(), перекрытый на форме, он сразу передаёт управление базовому класу super().

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

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

Последний раз редактировалось S.Kuskov; 06.02.2009 в 14:30.
Старый 06.02.2009, 16:07   #9  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Хмм. У меня работает (АХ6)

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

    fds = InventJournalTrans.dataSource();
    fds.write();
Старый 06.02.2009, 17:33   #10  
online
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,438 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
X++:
FormDataSource fds;

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

Цитата:
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 таблицы то вызывается!
Старый 06.02.2009, 20:01   #11  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Цитата:
Сообщение от kashperuk Посмотреть сообщение
(АХ6)
А это какая???

P.S. Понятно какая: Roadmap Microsoft Dynamics AX 2009 ... AX 6
Старый 14.02.2009, 16:31   #12  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Цитата:
Сообщение от Gustav Посмотреть сообщение
А это какая???

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

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Вопрос по резервированию 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

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

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

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