Как реализовать анимацию ожидания при открытии формы документа в 1С?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Часто в процессе разработки прикладных решений на платформе 1С возникает задача визуального информирования пользователя о том, что система выполняет длительную операцию. Когда форма списка документа открывается медленно из-за большого объема данных или сложных вычислений, стандартное поведение платформы может выглядеть как «зависание». Рассмотрим, как добавить анимированный индикатор (так называемого «котика» или стандартную анимацию БСП) для улучшения пользовательского опыта и визуального восприятия интерфейса.

Понимание механизмов работы платформы

Важно помнить, что клиентская часть 1С работает в однопоточном режиме. Если вы попытаетесь запустить тяжелый код прямо в процедуре ПриСозданииНаСервере или ПриОткрытии, интерфейс будет заблокирован до тех пор, пока сервер не закончит выполнение всех команд. В такой ситуации добавление картинки на форму не принесет результата, так как она просто не успеет прорисоваться.

Для корректной работы индикации длительной операции нам необходимо использовать асинхронные вызовы и фоновые задания (конвейер обработки задач). Именно так реализованы подобные задачи в типовых конфигурациях на базе Библиотеки Стандартных Подсистем (БСП).

Реализация через механизм длительных операций

В типовых конфигурациях (например, Бухгалтерия предприятия 3.0) используется специальный функционал ДлительныеОперации. Основной принцип заключается в том, что основной код переносится в фоновое задание, а на форме отображается элемент управления, который меняет свое состояние или видимость.

  1. Подготовка декорации на форме: Добавьте на форму элемент типа Декорация с видом Картинка. В качестве картинки выберите стандартный ресурс платформы или конфигурации, например, ДлительнаяОперация48 или ДлительнаяОперация200.
  2. Управление видимостью: Сделайте элемент изначально невидимым (свойство Видимость = Ложь).
  3. Асинхронный запуск: Вместо прямого вызова процедур используйте функции общего модуля ДлительныеОперации.

// Пример запуска длительной операции
ПараметрыВыполнения = ДлительныеОперации.ПараметрыОжидания(ЭтаФорма);
Результат = ДлительныеОперации.ВыполнитьВФоне(
    "ИмяОбщегоМодуля.ИмяПроцедуры",
    ПараметрыПроцедуры,
    "УникальныйИдентификаторЗадания"
);

Использование декорации с картинкой для индикации

Если вы не хотите использовать полноценный механизм БСП, а задача сводится к простому отображению картинки, разберем более легкий путь. Вы можете управлять свойством Видимость вашей декорации с картинкой.

Рассмотрим пошаговый алгоритм:


&НаКлиенте
Процедура ПриОткрытии()
    Элементы.ДекорацияКотик.Видимость = Истина;
    ПодключитьОбработчикОжидания("ВыполнитьДлительнуюОперацию", 0.1, Истина);
КонецПроцедуры

&НаКлиенте
Процедура ВыполнитьДлительнуюОперацию()
    // Здесь код выполнения
    Элементы.ДекорацияКотик.Видимость = Ложь;
КонецПроцедуры

Рекомендации по оптимизации

Мы проанализировали ситуацию и хотим подчеркнуть: если форма списка требует анимации ожидания при открытии, это серьезный повод задуматься об оптимизации данных. Индикация — это лишь «косметический» ремонт. Чтобы форма открывалась быстро, следуйте этим правилам:

Помните, что лучший пользовательский интерфейс — это тот, который не заставляет пользователя ждать, а не тот, который показывает красивого «котика». Однако, если длительная операция неизбежна, использование декораций и асинхронных методов сделает работу с программой комфортной и понятной.

← На главную