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

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

При выполнении длительных операций на стороне сервера 1С:Предприятие, особенно когда речь идет об обработке большого объема данных (например, 100 500 строк), возникает закономерный вопрос: как сделать процесс прозрачным для пользователя? Ожидание завершения операции в «слепом» режиме часто приводит к тому, что пользователь думает, что программа зависла. Рассмотрим современные и корректные способы решения этой задачи.

Использование механизма «Длительные операции» (БСП)

Самым правильным и надежным способом в типовых конфигурациях на платформе 1С:Предприятие 8.3 является использование библиотеки стандартных подсистем (БСП). Основная логика работы строится на разделении запуска операции и ожидания её завершения.

Рекомендуемый алгоритм действий:

  1. Выполнение процедуры переносится в фоновое задание с помощью метода ДлительныеОперации.ВыполнитьВФоне.
  2. Клиентская часть использует ПодключитьОбработчикОжидания для периодического опроса статуса задания.
  3. Через метод ДлительныеОперации.ПрочитатьПрогрессИСообщения клиент считывает текущий статус, который серверное задание записывает в ходе своей работы.

Преимущество этого метода заключается в том, что интерфейс программы остается отзывчивым, а платформа берет на себя управление жизненным циклом фонового процесса.

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

Если вы не используете БСП в чистом виде, вы можете организовать собственную систему оповещения через фоновые задания. Рассмотрим, как это реализовать по шагам:

  1. Запуск задачи: Запускаем фоновое задание с помощью метода ФоновыеЗадания.Выполнить. В качестве параметра передаем уникальный идентификатор или иные данные, необходимые для идентификации процесса.
  2. Запись прогресса: Внутри фонового задания, при обработке строк, периодически обновляем информацию о прогрессе (процент выполнения или статус) в специальный регистр сведений или в ХранилищеОбщихНастроек.
  3. Опрос на клиенте: На форме, в процедуре ПриОткрытии или при нажатии кнопки, подключаем обработчик ожидания, который будет обращаться к серверу и проверять данные в регистре.

Пример логики чтения прогресса на клиенте:


// На клиенте
Процедура ПроверитьСостояние()
    Результат = ПолучитьПрогрессНаСервере(ИдентификаторЗадания);
    Элементы.ИндикаторВыполнения.Значение = Результат.Процент;
    Если Результат.Завершено Тогда
        ОтключитьОбработчикОжидания("ПроверитьСостояние");
    КонецЕсли;
КонецПроцедуры

Важные замечания по оптимизации и архитектуре

При реализации механизмов отображения прогресса важно помнить о производительности:

Современные альтернативы

Помимо классических подходов с фоновыми заданиями, современные конфигурации 1С предлагают следующие варианты:

Система взаимодействия (СВ): Это наиболее прогрессивный метод. СВ позволяет отправлять уведомления пользователю прямо из серверного кода. Сервер «проталкивает» информацию в обсуждение, которое отображается у пользователя в виде всплывающего уведомления. Это избавляет от необходимости реализовывать логику циклического опроса (polling).

Использование системы задач: Если прогресс выполнения не требует отображения «колесика», а важен лишь факт изменения состояния (например, смена статуса документа), можно генерировать задачи пользователю. Это удобный способ, так как типовые формы 1С умеют отображать задачи и позволяют пользователю подтвердить ознакомление с изменением статуса.

Подводя итог: выбор метода зависит от сложности вашей задачи. Для простых операций достаточно периодического опроса фонового задания, для сложных интеграционных процессов — использования БСП и механизма ДлительныеОперации, а для оперативного оповещения пользователей — системы взаимодействия.

← На главную