При выполнении длительных операций на стороне сервера 1С:Предприятие, особенно когда речь идет об обработке большого объема данных (например, 100 500 строк), возникает закономерный вопрос: как сделать процесс прозрачным для пользователя? Ожидание завершения операции в «слепом» режиме часто приводит к тому, что пользователь думает, что программа зависла. Рассмотрим современные и корректные способы решения этой задачи.
Самым правильным и надежным способом в типовых конфигурациях на платформе 1С:Предприятие 8.3 является использование библиотеки стандартных подсистем (БСП). Основная логика работы строится на разделении запуска операции и ожидания её завершения.
Рекомендуемый алгоритм действий:
ДлительныеОперации.ВыполнитьВФоне.ПодключитьОбработчикОжидания для периодического опроса статуса задания.ДлительныеОперации.ПрочитатьПрогрессИСообщения клиент считывает текущий статус, который серверное задание записывает в ходе своей работы.Преимущество этого метода заключается в том, что интерфейс программы остается отзывчивым, а платформа берет на себя управление жизненным циклом фонового процесса.
Если вы не используете БСП в чистом виде, вы можете организовать собственную систему оповещения через фоновые задания. Рассмотрим, как это реализовать по шагам:
ФоновыеЗадания.Выполнить. В качестве параметра передаем уникальный идентификатор или иные данные, необходимые для идентификации процесса.ХранилищеОбщихНастроек.ПриОткрытии или при нажатии кнопки, подключаем обработчик ожидания, который будет обращаться к серверу и проверять данные в регистре.Пример логики чтения прогресса на клиенте:
// На клиенте
Процедура ПроверитьСостояние()
Результат = ПолучитьПрогрессНаСервере(ИдентификаторЗадания);
Элементы.ИндикаторВыполнения.Значение = Результат.Процент;
Если Результат.Завершено Тогда
ОтключитьОбработчикОжидания("ПроверитьСостояние");
КонецЕсли;
КонецПроцедуры
При реализации механизмов отображения прогресса важно помнить о производительности:
Задание.ИнформацияОбОшибке. Если фоновое задание аварийно завершилось, клиент должен получить уведомление об ошибке, а не ждать вечного обновления индикатора.Помимо классических подходов с фоновыми заданиями, современные конфигурации 1С предлагают следующие варианты:
Система взаимодействия (СВ): Это наиболее прогрессивный метод. СВ позволяет отправлять уведомления пользователю прямо из серверного кода. Сервер «проталкивает» информацию в обсуждение, которое отображается у пользователя в виде всплывающего уведомления. Это избавляет от необходимости реализовывать логику циклического опроса (polling).
Использование системы задач: Если прогресс выполнения не требует отображения «колесика», а важен лишь факт изменения состояния (например, смена статуса документа), можно генерировать задачи пользователю. Это удобный способ, так как типовые формы 1С умеют отображать задачи и позволяют пользователю подтвердить ознакомление с изменением статуса.
Подводя итог: выбор метода зависит от сложности вашей задачи. Для простых операций достаточно периодического опроса фонового задания, для сложных интеграционных процессов — использования БСП и механизма ДлительныеОперации, а для оперативного оповещения пользователей — системы взаимодействия.