Работа с диалогами
Одно из железных правил проектирования интерфейсов – пользователь не должен чувствовать себя покинутым. Он может нажать кнопку, подождать 5 секунд (максимум!), но если не видит реакцию системы – начинается паника. Для этих случаев в Navision есть диалоги, спец.окошки для вывода текущего состояния системы. В них можно выводить счетчики, проценты, прогресс-бары – все, что угодно.
Есть одно НО. Dialog.UPDATE работает очень медленно :-) Одна и та же функция с включенным и выключенным диалогом может отличаться по быстродействию в разы, особенно если нужно обрабатывать тысячи или десятки тысяч операций.
Есть ли золотая середина? Да, конечно :)
Для пользователя будет достаточным, если обновлять окошко диалога хотя бы раз в секунду. А мы сохраним при этом быстродействие:
intTotal := 1000000;
d.OPEN('@1@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\', intProgress);
timeProgress := TIME;
REPEAT
// Прогресс-бар
intCurrent += 1;
IF timeProgress < TIME - 1000 THEN BEGIN// Отрабатываем каждую секунду
timeProgress := TIME;
intProgress := ROUND(intCurrent / intTotal * 10000, 1);
d.UPDATE;
END;
// Еще какая-то обработка
UNTIL intCurrent = intTotal;
Кстати, переменную Dialog лучше объявлять локальной (если возможно). Иначе, при возникновении ошибки – а у кого их не бывает – диалог останется висеть на экране.

Автор: Андрей Стрельников
В области Navision - с 2003 года. Профессиональные интересы: NAV, MS SQL, .NET, BPMN, IT-менеджмент. Предметная область: логистика, финансы, склады, 3PL.
Количество статей, опубликованных автором: 86.
мдаааааааа