06.12.2004, 12:04 | #1 |
Moderator
|
Когда в коде встречается Table.COUNT или Table.COUNTAPPROX и когда при этом таблица Table содержит flow fields, Navision выдает пользователю (зачем-то) идиотское диалоговое окно "Подсчет записей в таблице Table. Нажмите Ctrl+BREAK..." (Counting records in the Table...)
Понятно, что при этом Navision формирует вычисляемые поля и загоняет их в индексные таблицы в базе. Непонятно только почему так долго. Простейший Код: Счетчик := 0; IF Table.FIND('-') THEN REPEAT Счетчик+=1; UNTIL Table.NEXT = 0; У меня не было времени заниматься экспериментами и смотреть какие селекты выдают эти конструкции на выходе, но ИМХО все-таки это просчет разработчиков. Вопрос в другом - как избавиться от диалогового окна подсчета? |
|
06.12.2004, 13:09 | #2 |
Moderator
|
Никак нельзя избавиться. Это не баг, это фича! ;-)
Похожие окошки типа "Суммирование записей", "Поиск записей" так же могут омрачать вашу жизнь. Причина этого - занятость сервера. Иногда от этого можно избавиться указание правильного ключа (SETCURRENTKEY) или увеличением размера кэша базы на сервере. Кстати, при выполнении COUNT и FIND вычисляемые поля не вычисляются, если на них не наложен фильтр, а фильтр на вычисляемое поле - это ужасно! |
|
06.12.2004, 13:17 | #3 |
Moderator
|
Какая же это фича, если отключить нельзя? :-)
Я говорю про случай с фильтром по flow fields. Мне непонятно, почему COUNT работает медленнее обычного перебора. |
|
06.12.2004, 13:36 | #4 |
Moderator
|
Все просто: flow fields неиндексируемые поля, да еще их надо вычислять. Вот и тормозит. А без окошка вы бы подумали, что навижин повис намертво.
|
|
06.12.2004, 14:37 | #5 |
Moderator
|
Ни в одной программе кроме Navision я не видел принудительного (в обход программиста) вывода на экран сообщений о выборке из базы.
Такой диалог я сам нарисовать могу. Имхо было бы гораздо логичнее. |
|
06.12.2004, 15:23 | #6 |
Moderator
|
Обратите внимание, это окошко выводится не всегда, а только при долговременных операциях. И во многих случаях это окошко говорит о проблеме работы с базой.
А самому нарисовать диалог..... Все зависит от уровня доступа к системным функциям, в данном случае он весьма ограничен. |
|
06.12.2004, 15:34 | #7 |
Moderator
|
При долговременных операциях по всем правилам проектирования интерфейсов рекомендуется рисовать прогресс-бар. Что я и делаю. И картина, когда некий диалог возникает в середине этог прогресса мне совершенно не нужна.
Да собственно проблем-то никаких. Я представляю что происходит с базой и почему так долго. Другое дело что влиять на это никак не могу. Даже триггер таймера в этот момент не срабатывает |
|