![]() |
#1 |
Участник
|
![]()
Всем добрый день , есть такой пример на форме 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 вызывался по очереди для всех выделенных строк? спасибо |
|
![]() |
#2 |
Участник
|
Вам просто нужно не с источником работать, а с записями
Вы получаете текущую (в цикле) запись в переменную InventJournalTrans В ней меняйте поле, и обновляйте запись А после того, как цикл закончится, вызовите InventJournalTrans_ds.research() (если у вас есть параметр retainCurrentPosition, укажите true) |
|
![]() |
#3 |
Участник
|
в том то и дело что мне не подходит этот вариант ( у меня на write на датасорсе много чего весит. и нужно чтобы этот метод вызвался .
|
|
![]() |
#4 |
Злыдни
|
Может, все то, что висит на write датасорса, оформить в отдельный метод и вызывать его?
__________________
Все может быть и быть все может, все может быть или не быть, но быть того никак не может, чего совсем не может быть. |
|
![]() |
#5 |
Moderator
|
Приходилось решать задачку в подобной не-БэстПрактисной постановке. Решением, конечно, не горжусь, но оно как-то работает и выручает. Сделал примерно так:
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.P.S. Если только не попробовать быстренько отфильтровать выделенные записи (чтобы в гриде остались только они), пробежаться по ним, восстановить фильтрацию перед пробежкой и восстановить выделение... ![]() |
|
|
За это сообщение автора поблагодарили: propeller (1). |
![]() |
#6 |
Участник
|
Ну, другой вариант - получать датасорс этой записи
Попробуйте так: X++: InventJournalTrans.dataSource().write(); Логика НЕ должна быть написана на формах!! |
|
![]() |
#7 |
Ищущий знания...
|
Абсолютно согласен! Лучше переделать на правильное. А то потом в дальнейшем проблемы будут наростать, и все больше изощрений придется придумывать.
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
![]() |
#8 |
Участник
|
К слову. Заметил однажды. Данный код:
X++: record.dataSource().write(); X++: record_ds.write(); Также, если перекрыт метод modified() поля источника данных, то при таком вызове X++: record_ds.object(fieldNum(Table, Field)).modified() Если логика, реализуемая методами write(), modified() и т.п., связана не с конкретной формой, а с данными хранящимися в таблице, то перекрывать стоит методы не формы а таблицы! Последний раз редактировалось S.Kuskov; 06.02.2009 в 14:30. |
|
![]() |
#9 |
Участник
|
Хмм. У меня работает (АХ6)
А если так попробовать? X++: FormDataSource fds; fds = InventJournalTrans.dataSource(); fds.write(); |
|
![]() |
#10 |
Участник
|
X++: FormDataSource fds; fds = InventJournalTrans.dataSource(); fds.write(); Цитата:
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. |
|
![]() |
#11 |
Moderator
|
|
|
![]() |
#12 |
Участник
|
|
|
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|