При разработке отчетов в 1С:Предприятии часто возникает задача сделать данные «живыми», чтобы они обновлялись автоматически через заданный интервал времени. Однако при реализации этой задачи важно не превратить работу пользователя в мучение, когда отчет самопроизвольно переформируется в момент работы с расшифровками или копирования ячеек. Рассмотрим, какие подходы существуют для решения этой задачи.
Прежде чем приступать к написанию кода, проанализируем, действительно ли нам нужен именно сложный отчет на базе Системы компоновки данных (СКД). Если задача сводится к простому мониторингу списка документов или остатков, возможно, стоит рассмотреть использование Динамического списка.
Динамический список — это штатное средство платформы, которое умеет обновляться автоматически без написания сложной логики. В свойствах динамического списка достаточно указать параметр ПериодАвтообновления, и платформа сама будет опрашивать базу данных. Это самое производительное решение, которое исключает «тормоза» интерфейса.
Однако, если ваш отчет содержит сложные группировки, ресурсы, диаграммы или специфическую логику СКД, динамический список не подойдет. В этом случае нам придется реализовывать механизм обновления вручную.
Рассмотрим подход, который часто применяется в типовых конфигурациях (например, в ОСВ). Вместо того чтобы принудительно переформировывать отчет прямо под руками пользователя, мы реализуем механизм оповещения.
ПодключитьОбработчикОжидания при открытии формы.Такой подход защищает пользователя от потери контекста (например, когда он выделил текст или настроил группировки). Пользователь сам решает, когда нажать кнопку Выполнить для получения свежих данных.
Рассмотрим структуру кода, который позволяет настроить таймер для уведомления пользователя:
// В модуле формы при создании
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ПодключитьОбработчикОжидания("ПроверитьАктуальностьДанных", 300); // 5 минут
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьАктуальностьДанных()
// Здесь мы проверяем, нужно ли обновлять отчет
// Можно вывести уведомление или сделать видимой кнопку обновления
Элементы.ГруппаСообщениеОбОбновлении.Видимость = Истина;
КонецПроцедуры
Если вы все же решили, что отчет должен обновляться принудительно, вы столкнетесь с проблемой потери расшифровок и настроек КомпоновщикаНастроек. Чтобы этого избежать, перед выполнением обновления необходимо:
Шаг 1: Сохранить текущие настройки пользователя во временную переменную.
ТекущиеНастройки = Отчет.КомпоновщикНастроек.ПолучитьНастройки();
Шаг 2: Выполнить формирование отчета в фоновом режиме или непосредственно.
Шаг 3: Применить сохраненные настройки обратно к компоненту Результат после завершения формирования.
При настройке автообновления всегда помните о нагрузке на сервер:
ФоновыеЗадания. Запуск отчета в фоновом режиме предотвратит зависание клиентской части интерфейса.СКД.Подводя итог, можно сказать, что идеальное решение — это сочетание Динамического списка для простых задач мониторинга и паттерна «уведомление пользователя» для сложных отчетов. Это обеспечит высокую отзывчивость системы и комфорт для пользователей, работающих с отчетом.