Почему отчет СКД автоматически переформировывается через определенные промежутки времени

Программист 1С v8.3 (Управляемые формы) 1С:ERP Управление предприятием Управленческий учет
← На главную

Ситуация, когда открытый отчет СКД в системе 1С:Предприятие (особенно в тяжелых конфигурациях уровня ERP или КА) начинает самостоятельно обновляться без участия пользователя, может вызвать замешательство. Это не только создает лишнюю нагрузку на сервер, но и мешает работе, сбрасывая текущее состояние фокуса или прокрутки. В данной статье мы подробно разберем, по каким причинам это происходит, и проанализируем технические аспекты работы платформы 8.3.21 и механизмов СКД.

Анализ настройки расписания для внешних отчетов

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

Разберем по шагам, как проверить наличие расписания:

  1. Перейдем в раздел НСИ и администрирование — Печатные формы, отчеты и обработки.
  2. Откроем список Дополнительные отчеты и обработки.
  3. Найдем в списке наш отчет и откроем его карточку.
  4. В табличной части Команды обратим внимание на колонку Расписание.

Важно понимать: если для команды настроено расписание, система будет запускать фоновое задание. Даже если отчет просто открыт на экране, выполнение регламентного задания под тем же пользователем или обновление кэша данных этим заданием может инициировать обновление формы в активном сеансе, если в коде формы предусмотрены соответствующие оповещения.

Использование свойства Требуемое время актуальности данных

Система компоновки данных (СКД) обладает встроенным механизмом управления кэшированием. Рассмотрим параметр ТребуемоеВремяАктуальностиДанных. Этот параметр определяет, насколько "свежими" должны быть данные в отчете.

Проанализируем ситуацию: если в настройках компоновки или программно задано время актуальности (например, 3600 секунд), то по истечении этого часа при любом взаимодействии с формой или даже при срабатывании внутренних системных событий (например, обновление динамического списка в соседнем окне) платформа может решить, что данные устарели, и инициировать автоматическое переформирование.

Проверить это можно в схеме компоновки данных на вкладке Настройки — Другие настройки. Посмотрите значение параметра Время актуальности данных. Если там стоит 0 или пусто, система использует настройки по умолчанию, которые могут зависеть от версии платформы.

Особенности платформы 8.3.21 и управление сеансами

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

Рассмотрим сценарий: сеанс пользователя при отсутствии активности может переходить в режим экономии ресурсов. Через 1 час (стандартный таймаут для многих настроек веб-серверов и кластера 1С) соединение может быть кратковременно разорвано или переведено в фоновый режим. При возобновлении активности или при попытке системы "разбудить" сеанс происходит восстановление контекста. Если форма отчета была открыта, платформа может принудительно вызвать метод Сформировать(), чтобы гарантировать отображение актуальных данных в восстановленном контексте.

Проверка программного кода и обработчиков ожидания

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

Пример кода, который может скрываться в модуле формы:


&НаКлиенте
Процедура ПриОткрытии(Отказ)
    // Обновлять отчет раз в час (3600 секунд)
    ПодключитьОбработчикОжидания("ОбновитьОтчетАвтоматически", 3600);
КонецПроцедуры

&НаКлиенте
Процедура ОбновитьОтчетАвтоматически()
    СформироватьОтчетНаСервере();
КонецПроцедуры

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

Взаимодействие с динамическими списками

Выясним еще одну неочевидную причину: наличие на форме отчета других элементов, имеющих свойство ПериодАвтообновления. Если в управляемую форму отчета добавлен динамический список (например, для отображения связанных документов или логов), и у него настроено автообновление, то каждые N секунд (или минут) список посылает запрос на сервер.

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

Влияние веб-клиента и настроек прокси-серверов

Если работа с 1С ведется через браузер, следует проанализировать настройки IIS или Nginx. Многие системные администраторы устанавливают keepalive_timeout или proxy_read_timeout равным 3600 секундам (1 час). По истечении этого времени прокси-сервер обрывает соединение. Веб-клиент 1С пытается переподключиться, и в процессе восстановления сессии страница может быть фактически перезагружена. Если в настройках отчета стоит флаг Формировать при открытии, отчет запустится заново автоматически.

Рекомендации по устранению проблемы

Чтобы исключить нежелательное поведение, выполним следующие действия:

  1. Проверим параметры актуальности данных в СКД. Установим их в значение, исключающее автоматическое обновление, если это не требуется бизнес-процессом.
  2. Изучим карточку внешнего отчета в справочнике Дополнительные отчеты и обработки. Отключим все расписания для команд формирования.
  3. Проведем аудит кода на наличие обработчиков ожидания.
  4. Проверим расширения конфигурации. Используйте "Конфигуратор" для поиска переопределений метода ПриОткрытии или ПриСозданииНаСервере для данного отчета.
  5. Обновим платформу до актуальных релизов (если используется 8.3.21.900, стоит рассмотреть переход на более стабильные сборки 8.3.22 или выше), так как в ранних версиях 8.3.21 наблюдались ошибки с произвольным сбросом кэша форм.

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

← На главную