Обычно ProgressBar используют для отображения процесса скачивания или закачивания файлов, но существуют и другие способы его применения. Неужели людям не нужно отслеживать процесс выполнения иных задач?

Я применила ProgressBar на загрузку Террасофт, чтобы показать пользователю, что программа не зависла, а выполняет продолжительную работу.
Необходимо прописать в скрипте scr_Main в функции function wnd_MainOnPrepare(Window) пару строк:

var ProgressWindow = BeginProcessingProgress(Window, 'Загрузка системы', 'Выполняется загрузка системы...');
ProgressWindow.ForceBringToFront();
SetAttribute(ProgressWindow, 'NotifyObject', Window);
MoveProcessingProgress(Window, 10);
SetPromptForProcessingProgress(Window, 'Описание действия>', false);  
EndProcessingProgress(Window);

где строка

SetPromptForProcessingProgress(Window, 'Описание действия>', false)
прописывается перед каждым действием функции wnd_MainOnPrepare(Window).
В итоге пользователь видит действия системы при продолжительной загрузке.

Аналогичный код можно добавить на первоначальную загрузку разделов в скрипт scr_[Название раздела]Workspace в функцию wnd_[Название раздела]WorkspaceOnPrepare(Window) или в функцию Initialize(), передав в нее параметр Window.

Нравится

Поделиться

0 комментариев
Показать все комментарии

Добрый день!
Версия
Возникла такая проблема: При вызове EndProcessingProgress(Self, '', 0); система вылетает с ошибкой приложения и извинениями...Если ставить дебаггер, ошибки нет. В чем может быть дело? Заранее благодарен.
Версия CRM 3.2.0.11

Нравится

4 комментария

Это однозначно уличная магия, а какое название ошибки вылетает?
Проверьте подключен ли скрипт scr_Processings

Переделал скрипт на другое событие (amiAction) - пропала ошибка, scr_Processings подключен

"Ефанов Иван Александрович" написал:Переделал скрипт на другое событие (amiAction) - пропала ошибка

Иван, вопрос актуален? Если актуален, вложите скрипт для тестирования.

Пришлось несколько изменить логику и привязать прогресс бар на другое событие (был на DatasetBeforeOpen стал на изменение поля фильтрации раздела) и ошибка пропала. Конечно не ясно с чем она была связана, но проблемы нет и на том хорошо. Спасибо за участие!

Показать все комментарии

Добрый день!
Задача: Есть хранимая процедура tsp_MakeMeHappy которая формирует таблицу за 18 секунд, в клиенте нужно отобразить ProgressBar с отображением процесса (т.е палочки в ProgressBar должны бегать).
Для решения задачи предложен следующий код:

            var ProgressCaptionMessage = "Формирование таблицы для счастья";    
            var Caption = 'Формирование таблицы для счастья';
        var Prompt = '';
        var WithCancel = false;
        var ShowModal = false;

        var ProgressWindow = BeginProcessingProgress(Self, Caption, Prompt,WithCancel, ShowModal);
        ControlPaySectionWorkspace.ProgressWindow = ProgressWindow;
        SetAttribute(ProgressWindow, 'NotifyObject', Self);
                InternalSetCaptionForProcessingProgress(ProgressWindow, Self, ProgressCaptionMessage);

        var Parameters = CreateSPParameters();
        var SQLText = 'exec [dbo].[tsp_MakeMeHappy]';
        Connector.DBEngine.ExecuteCustomSQL(SQLText, Parameters);
       
                var     Complete = 100;
                MoveProcessingProgress(ProgressWindow, Complete, WithCancel);  
                EndProcessingProgress(ProgressWindow, WithCancel);     

Проблема в том, что на строчке Connector.DBEngine.ExecuteCustomSQL(SQLText, Parameters); мы уходим в SQL Server на 18 секунд, и никак не можем отобразить процесс работы в ProgressBar. Так как сколько будет выполняться процедура в общем случае не понятно, но хотелось бы отобразить процесс работы, именно в ProgressBar. Я понимаю что для отображения часиков (на курсоре) можно написать System.BeginProcessing(); ... System.EndProcessing(); но это будет не красиво. Просто ставить

        Complete = 50;
        MoveProcessingProgress(ProgressWindow, Complete, WithCancel);  

перед вызовом хранимой процедуры, тоже не лучшее решение. Получать параметры с ХП - не выход, так как мы их получим после отработки всей процедуры. Многопоточности, на сколько я знаю, в JScript'е нет.
Просьба поделиться опытом, как можно отобразить процесс работы хранимой процедуры

Нравится

2 комментария

АльфаКрыса, универсального решения нет, всегда будет кастомное - никто не скажет вам сколько времени необходимо sql серверу на вашу ХП. Самым простым и оптимальным решением будут "часики", сложным и притянутым "за уши" - шаги в процедуре покрыть записью в какую-то таблицу, а в конфигурации по таймеру мониторить ее и рисовать шаги в прогрессе, но о времени выполнения они скажут мало.

Александр, спасибо за Ваш ответ.

Показать все комментарии