23.06.2006, 08:33 | #1 |
Участник
|
Количество выделенных записей
Добрый день. Мне необходимо вывести на форме в виде текста количество выделенных записей на гриде в этой же форме. Подскажите пожалуйста как это можно сделать.
|
|
23.06.2006, 08:56 | #2 |
Участник
|
Привет!
Фрагмент кода примерно такой: PHP код:
__________________
С уважением, Андрей Беседин |
|
23.06.2006, 08:58 | #3 |
Moderator
|
Пример перебора выделенных записей:
PHP код:
На форме грид и кнопка. Выбираем на гриде несколько строк и жмем на кнопку. Единичка в GetFirst как раз и заставляет брать выделенные записи. Под свой случай думаю подгоните. |
|
|
За это сообщение автора поблагодарили: Hans (1). |
23.06.2006, 09:20 | #4 |
Участник
|
Дело в том, что мне нужно получить количество записей не по кнопке. Каждый раз при выборе очередной записи внизу формы должен изменяться текст. Пробовала перекрыть active(), leave() источника данных формы (в нем писала примерно такой код как был приведен выше), но форма начинает подвисать и не позволяет маркировать записи вообще.
|
|
23.06.2006, 09:50 | #5 |
Участник
|
Предлагаю другой вариант решения:
1. Заводишь временную таблицу (можно использовать tmpFrmVirtual) 2. На форму - чек-бокс с едит-методом. При установке галки - пишем во временную таблицу RecId записи и флаг NoYes == Yes (возможны варианты: ставим галку - запись заносим, убираем галку - запись удаляем). 3. Считаешь число записей во временной таблице и выводишь в интерфейс. 4. Всё.
__________________
С уважением, Андрей Беседин |
|
23.06.2006, 09:56 | #6 |
Участник
|
Я думала об этом. Просто надеялась, что есть стандартный метод какой-нибудь на источнике данных или форме. Если такого нет, то придется использовать временую таблицу. Спасибо за ответ.
|
|
23.06.2006, 10:31 | #7 |
Участник
|
Цитата:
Сообщение от Mila
Дело в том, что мне нужно получить количество записей не по кнопке. Каждый раз при выборе очередной записи внизу формы должен изменяться текст. Пробовала перекрыть active(), leave() источника данных формы (в нем писала примерно такой код как был приведен выше), но форма начинает подвисать и не позволяет маркировать записи вообще.
// Выводит итоговую сумму в форме - только по выделенным записям display AmountCur totalSettleAmountCurPaymentJour() { VendInvoice4PaymJour_RU inv4PaymJour; AmountCur totalAmountCur; Query query; QueryRun queryRun; ; query = new Query(Invoice4PaymJour_ds.queryRun().query() ? Invoice4PaymJour_ds.queryRun().query() : Invoice4PaymJour_ds.query()); queryRun = new QueryRun(query); while(queryRun.next()) { inv4PaymJour = queryRun.get(tablenum(VendInvoice4PaymJour_RU)); totalAmountCur += this.SettleAmountCurPaymentJour(inv4PaymJour); } return totalAmountCur; } PS - точнее - выводит только отфильтрованные записи - можно сократить постановку задачи до такого допущения - как именно выделенные посчитать - вопрос.. Последний раз редактировалось MironovI; 23.06.2006 в 10:42. |
|
23.06.2006, 10:37 | #8 |
Участник
|
Цитата:
Сообщение от Mila
Просто надеялась, что есть стандартный метод какой-нибудь на источнике данных или форме.
1. любой метод на форме исполняется на клиенте, а не на сервере! 2. Обратите внимание, что теоретически источник данных получает не все поля, а только те, которые отображаются на экране. 3. И наконец, быстродействие. Посмотрите как считаются итоги в заказе/закупке. Посмотрите как много сделано для того, чтобы : 3.1. НЕ выполнять расчет итогов при каждой перерисовке заказов/закупок 3.2. выполнять расчет итогов на сервере приложений, а не на клиенте. Разберитесь со стандартными итогами. И только после этого принимайте решение - хотите ли вы отображать итоги на этой же форме. В аксапте итоги по гриду в той же форме, что и грид, показываются только в одном месте - в журналах ГК. |
|
23.06.2006, 10:39 | #9 |
Участник
|
Цитата:
Сообщение от MironovI
попробуйте сделать копию активного query и использовать ее
Только используйте ее на серверной стороне, а не на клиенте. И ни в коем случае не вставляйте эту конструкцию в display-метод |
|
23.06.2006, 10:50 | #10 |
Участник
|
Цитата:
Сообщение от mazzy
Тоже подход.
Только используйте ее на серверной стороне, а не на клиенте. И ни в коем случае не вставляйте эту конструкцию в display-метод |
|
23.06.2006, 10:54 | #11 |
Участник
|
Цитата:
Сообщение от MironovI
а вызов - в ExecuteQuery основного датасорса.
Попробуйте представить возможные ситуации. Еще может быть незаписанный record... Еще может быть измененный другим пользователем record... А еще может быть измененная другим приложением запись на уровне СУБД... Вы никогда не задумывались о том, что журналы ГК - единственное место, где видны итоги по строчкам, а также единственное место, где запрещен повторный вход в журнал?... |
|
23.06.2006, 11:06 | #12 |
Участник
|
Это конечно справедливо - тут надо отталкиваться от рамок разумного -сколько человек пользуются конкретной областью данных одновременно, и т.д.. - поскольку замечу что quey НЕ записанный record все равно не заметит (!). На удалнение из формы записи точно надо забиваться - если это не запрос конечно..
Последний раз редактировалось MironovI; 23.06.2006 в 11:11. |
|
23.06.2006, 11:08 | #13 |
Участник
|
не спорю.
я и говорю "Попробуйте представить возможные ситуации." - что должно показываться в итогах, а что не должно. |
|
|
|