Тестирую индикацию процесса выполнения фоновых заданий через ПолучитьСообщенияПользователю(), Состояние() и обработчик ожидания. В результате работы такого когда окошко, которое появляется при вызове функции Состояние() "мигает", что очень неприятно. Уменьшать интервал опроса сервера еще (в начале там была 1 секунда) не хочется. Есть какие-то варианты, как обойти "мигание"? Пока только пришел к мысли, что нужно сделать отдельную форму, со своим индикатором, на которой будет производиться опрос сервера. Кроме убирания мигания это также позволит пользователю работать с другими окнами, пока идет выполнение какой-то долговременной операции. Кто-то еще так делает? Поделитесь опытом.

```1c
    &НаКлиенте
    Перем УИД;

    &НаКлиенте
    Процедура Команда1(Команда)

    УИД = П();
    ПодключитьОбработчикОжидания("П2", 0.1, Истина);

    КонецПроцедуры

    &НаСервереБезКонтекста
    Функция П()

    ФЗ = ФоновыеЗадания.Выполнить("мФоновыеЗадания.Проц1");
    Возврат ФЗ.УникальныйИдентификатор;

    КонецФункции

    &НаСервереБезКонтекста
    Функция П1(УИД, Завершено)

    ФЗ = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(УИД);

    Если ФЗ = Неопределено Или
    ФЗ.Состояние = СостояниеФоновогоЗадания.Завершено Тогда
    Завершено = Истина;
    Возврат Неопределено;
    Иначе
    Завершено = Ложь;
    КонецЕсли;

    Возврат ФЗ.ПолучитьСообщенияПользователю(Истина);

    КонецФункции

    &НаКлиенте
    Процедура П2()

    Перем Завершено;

    Сообщения = П1(УИД, Завершено);

    Если Завершено Тогда
    ОтключитьОбработчикОжидания("П2");
    Возврат;
    КонецЕсли;

    Если Не Сообщения = Неопределено
    И Не Сообщения.Количество() = 0 Тогда
    Сообщение = Сообщения.Получить(Сообщения.ВГраница());
    Состояние("Превед", Число(Сообщение.Текст));
    КонецЕсли;

    ПодключитьОбработчикОжидания("П2", 0.5, Истина);

    КонецПроцедуры
```

Код фонового задания (в принципе, неважен)

```1c
    Процедура Проц1() Экспорт

    А = 0;
    Б = 0;
    ГСЧ = Новый ГенераторСлучайныхЧисел;
    Для ВремПер = 1 По 1000000 Цикл

    // Блок мат. операций для увеличения времени работы кода
    А = А + ГСЧ.СлучайноеЧисло(ВремПер);
    А = Log10(А);
    А = А / ГСЧ.СлучайноеЧисло(ВремПер);
    Б = ГСЧ.СлучайноеЧисло(ВремПер);
    А = А * Б + ГСЧ.СлучайноеЧисло();
    А = Log10(А);
    А = А * А;
    А = А + Б;
    А = Log10(А * Б);

    Если ВремПер % (Цел(1000000 / 100)) = 0 Тогда

    Сообщить(Цел(ВремПер / 1000000 * 100));

    КонецЕсли;

    КонецЦикла;

    КонецПроцедуры
```

P.S. Если кому-то в голову придет проверить, тестировать надо на клиент-серверной базе, т.к. в файловой фоновые задания не работают.
---
Предлагаю следующее решение: сделать форму с индикатором отдельно. Добавить в общие формы, добавить реквизит Индикатор, вывести поле соответствующего вида.

В вашу тестовую форму добавляем:

```1c
    &НаКлиенте
    Перем ФормаСост;
```

В процедуру Команда1 в конец:

```1c
    ФормаСост = ПолучитьФорму("ОбщаяФорма.СостояниеУпр");
    ФормаСост.Открыть();
```

В процедуру П2 после Состояние:

```1c
    ФормаСост.Индикатор = Число(Сообщение.Текст);
```

В итоге две формы с индикатором, нижняя моргает. Но теперь новая проблема, эта форма может прятаться. Отразить модально?
---
Предлагаю следующее решение: сделать форму с индикатором отдельно. Добавить в общие формы, добавить реквизит Индикатор, вывести поле соответствующего вида.

В вашу тестовую форму добавляем:

```1c
    &НаКлиенте
    Перем ФормаСост;
```

В процедуру Команда1 в конец:

```1c
    ФормаСост = ПолучитьФорму("ОбщаяФорма.СостояниеУпр");
    ФормаСост.Открыть();
```

В процедуру П2 после Состояние:

```1c
    ФормаСост.Индикатор = Число(Сообщение.Текст);
```

В итоге две формы с индикатором, нижняя моргает. Но теперь новая проблема, эта форма может прятаться. Отразить модально?
---
Кстати посмотрел реализацию http://infostart.ru/public/157706/, там то же моргает.
---
Сделал отдельную форму с индикатором. Открываю ее немодально. Фоновое задание по задумке еще возвращает отчет о проделанной работе, и эта форма в дополнение к функции индикации еще через ПоместитьВоВременноеХранилище() и Оповестить() оповещает о выполнении.