Часто в процессе разработки прикладных решений на платформе 1С возникает задача визуального информирования пользователя о том, что система выполняет длительную операцию. Когда форма списка документа открывается медленно из-за большого объема данных или сложных вычислений, стандартное поведение платформы может выглядеть как «зависание». Рассмотрим, как добавить анимированный индикатор (так называемого «котика» или стандартную анимацию БСП) для улучшения пользовательского опыта и визуального восприятия интерфейса.
Важно помнить, что клиентская часть 1С работает в однопоточном режиме. Если вы попытаетесь запустить тяжелый код прямо в процедуре ПриСозданииНаСервере или ПриОткрытии, интерфейс будет заблокирован до тех пор, пока сервер не закончит выполнение всех команд. В такой ситуации добавление картинки на форму не принесет результата, так как она просто не успеет прорисоваться.
Для корректной работы индикации длительной операции нам необходимо использовать асинхронные вызовы и фоновые задания (конвейер обработки задач). Именно так реализованы подобные задачи в типовых конфигурациях на базе Библиотеки Стандартных Подсистем (БСП).
В типовых конфигурациях (например, Бухгалтерия предприятия 3.0) используется специальный функционал ДлительныеОперации. Основной принцип заключается в том, что основной код переносится в фоновое задание, а на форме отображается элемент управления, который меняет свое состояние или видимость.
Декорация с видом Картинка. В качестве картинки выберите стандартный ресурс платформы или конфигурации, например, ДлительнаяОперация48 или ДлительнаяОперация200.Видимость = Ложь).ДлительныеОперации.
// Пример запуска длительной операции
ПараметрыВыполнения = ДлительныеОперации.ПараметрыОжидания(ЭтаФорма);
Результат = ДлительныеОперации.ВыполнитьВФоне(
"ИмяОбщегоМодуля.ИмяПроцедуры",
ПараметрыПроцедуры,
"УникальныйИдентификаторЗадания"
);
Если вы не хотите использовать полноценный механизм БСП, а задача сводится к простому отображению картинки, разберем более легкий путь. Вы можете управлять свойством Видимость вашей декорации с картинкой.
Рассмотрим пошаговый алгоритм:
Декорация (Картинка).ПриОткрытии, установите Элементы.ИмяВашейДекорации.Видимость = Истина.ПодключитьОбработчикОжидания, чтобы вызвать процедуру, которая выполнит основную работу и в конце скроет декорацию.
&НаКлиенте
Процедура ПриОткрытии()
Элементы.ДекорацияКотик.Видимость = Истина;
ПодключитьОбработчикОжидания("ВыполнитьДлительнуюОперацию", 0.1, Истина);
КонецПроцедуры
&НаКлиенте
Процедура ВыполнитьДлительнуюОперацию()
// Здесь код выполнения
Элементы.ДекорацияКотик.Видимость = Ложь;
КонецПроцедуры
Мы проанализировали ситуацию и хотим подчеркнуть: если форма списка требует анимации ожидания при открытии, это серьезный повод задуматься об оптимизации данных. Индикация — это лишь «косметический» ремонт. Чтобы форма открывалась быстро, следуйте этим правилам:
Помните, что лучший пользовательский интерфейс — это тот, который не заставляет пользователя ждать, а не тот, который показывает красивого «котика». Однако, если длительная операция неизбежна, использование декораций и асинхронных методов 1С сделает работу с программой комфортной и понятной.